fastlane 2.178.0 → 2.179.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +93 -80
  4. data/cert/lib/cert/options.rb +1 -0
  5. data/cert/lib/cert/runner.rb +4 -0
  6. data/deliver/lib/deliver/download_screenshots.rb +1 -2
  7. data/deliver/lib/deliver/options.rb +1 -0
  8. data/deliver/lib/deliver/runner.rb +4 -0
  9. data/deliver/lib/deliver/setup.rb +0 -1
  10. data/deliver/lib/deliver/upload_metadata.rb +2 -1
  11. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +5 -0
  12. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +2 -2
  13. data/fastlane/lib/fastlane/actions/build_app.rb +4 -0
  14. data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +4 -0
  15. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
  16. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +4 -0
  17. data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
  18. data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
  19. data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
  20. data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
  21. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -0
  22. data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
  23. data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
  24. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -2
  25. data/fastlane/lib/fastlane/helper/git_helper.rb +11 -7
  26. data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
  27. data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
  28. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -2
  29. data/fastlane/lib/fastlane/swift_fastlane_function.rb +4 -0
  30. data/fastlane/lib/fastlane/version.rb +1 -1
  31. data/fastlane/swift/Deliverfile.swift +1 -1
  32. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  33. data/fastlane/swift/Fastlane.swift +441 -294
  34. data/fastlane/swift/Gymfile.swift +1 -1
  35. data/fastlane/swift/GymfileProtocol.swift +1 -1
  36. data/fastlane/swift/Matchfile.swift +1 -1
  37. data/fastlane/swift/MatchfileProtocol.swift +1 -1
  38. data/fastlane/swift/Precheckfile.swift +1 -1
  39. data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
  40. data/fastlane/swift/Scanfile.swift +1 -1
  41. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  42. data/fastlane/swift/Screengrabfile.swift +1 -1
  43. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  44. data/fastlane/swift/Snapshotfile.swift +1 -1
  45. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  46. data/fastlane/swift/formatting/Brewfile.lock.json +11 -11
  47. data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -3
  48. data/fastlane_core/lib/fastlane_core/helper.rb +24 -1
  49. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  50. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +13 -8
  51. data/gym/lib/gym/runner.rb +11 -4
  52. data/match/lib/match/change_password.rb +3 -3
  53. data/match/lib/match/encryption/interface.rb +1 -1
  54. data/match/lib/match/encryption/openssl.rb +2 -2
  55. data/match/lib/match/module.rb +1 -0
  56. data/pilot/lib/pilot/manager.rb +4 -0
  57. data/pilot/lib/pilot/options.rb +1 -0
  58. data/precheck/lib/precheck/options.rb +1 -0
  59. data/precheck/lib/precheck/runner.rb +4 -0
  60. data/screengrab/lib/screengrab/android_environment.rb +6 -4
  61. data/screengrab/lib/screengrab/runner.rb +1 -1
  62. data/sigh/lib/sigh/options.rb +1 -0
  63. data/sigh/lib/sigh/runner.rb +4 -0
  64. metadata +19 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d8f29ce571c194cdd4205a68d2c3499decca2d3d2fd397105e24e327f1b401a
4
- data.tar.gz: 225123cb025970e86271c379fed40d6af294adbd5f50ae6047c96311682116e9
3
+ metadata.gz: 37bd22615ab9e8e6eaa0861b231896cfa234eb207772352f26d727f7735c34c5
4
+ data.tar.gz: bc34b9e91a9b80abc345780db060f494a9012c15df9292336ff428234228aad7
5
5
  SHA512:
6
- metadata.gz: 2cf3f576b4433b77b6a86edc9cf92fb615e38e2aaaf0090e247f4df3bcdd9233f177cc2ecc26bffa564cf970812a14e14c3e2376f03b41986237708b74c72a21
7
- data.tar.gz: efe5b450ad7177392e05457915f54a54fc5afcd9c500c87c4a8f9bcaeaa1fbbb7f3fbf7ed2024dfec508afe3b25c272f5280fe6619bec205fbbd821bec24fa0e
6
+ metadata.gz: 5dfdc64c102b6ae9d723ba7bc9cdbcf1bcb517c620475c8bf1f3eded3d1ccfc47705b85eea80f6112e946b339344550b51a4f3ed1d6c571e1974625931c53336
7
+ data.tar.gz: d53a201dcc0da9a8f4eb0fb88b629be149ea3cebde1225c59072a236d9e6ec705b69aeccf4bd3d0c55abc5b457e1557ab7169779b20d8bbf86299cb7605d0abb
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2020 The Fastlane Authors
3
+ Copyright (c) 2015-2021 The Fastlane Authors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -7,6 +7,7 @@
7
7
  [![Twitter: @FastlaneTools](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
8
8
  [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/fastlane/blob/master/LICENSE)
9
9
  [![Gem](https://img.shields.io/gem/v/fastlane.svg?style=flat)](https://rubygems.org/gems/fastlane)
10
+ [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/fastlane.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/fastlane)
10
11
  [![Build Status](https://img.shields.io/circleci/project/github/fastlane/fastlane/master.svg)](https://circleci.com/gh/fastlane/fastlane)
11
12
  [![PRs welcome!](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/fastlane/fastlane/blob/master/CONTRIBUTING.md)
12
13
 
@@ -34,49 +35,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
35
  <!-- This table is regenerated and resorted on each release -->
35
36
  <table id='team'>
36
37
  <tr>
37
- <td id='kohki-miki'>
38
- <a href='https://github.com/giginet'>
39
- <img src='https://github.com/giginet.png?size=140'>
40
- </a>
41
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
42
- </td>
43
38
  <td id='joshua-liebowitz'>
44
39
  <a href='https://github.com/taquitos'>
45
40
  <img src='https://github.com/taquitos.png?size=140'>
46
41
  </a>
47
42
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
48
43
  </td>
49
- <td id='jimmy-dee'>
50
- <a href='https://github.com/jdee'>
51
- <img src='https://github.com/jdee.png?size=140'>
52
- </a>
53
- <h4 align='center'>Jimmy Dee</h4>
54
- </td>
55
- <td id='jan-piotrowski'>
56
- <a href='https://github.com/janpio'>
57
- <img src='https://github.com/janpio.png?size=140'>
58
- </a>
59
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
60
- </td>
61
- <td id='jérôme-lacoste'>
62
- <a href='https://github.com/lacostej'>
63
- <img src='https://github.com/lacostej.png?size=140'>
44
+ <td id='manu-wallner'>
45
+ <a href='https://github.com/milch'>
46
+ <img src='https://github.com/milch.png?size=140'>
64
47
  </a>
65
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
66
49
  </td>
67
- </tr>
68
- <tr>
69
50
  <td id='josh-holtz'>
70
51
  <a href='https://github.com/joshdholtz'>
71
52
  <img src='https://github.com/joshdholtz.png?size=140'>
72
53
  </a>
73
54
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
74
55
  </td>
75
- <td id='danielle-tomlinson'>
76
- <a href='https://github.com/endocrimes'>
77
- <img src='https://github.com/endocrimes.png?size=140'>
56
+ <td id='stefan-natchev'>
57
+ <a href='https://github.com/snatchev'>
58
+ <img src='https://github.com/snatchev.png?size=140'>
78
59
  </a>
79
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
61
+ </td>
62
+ <td id='satoshi-namai'>
63
+ <a href='https://github.com/ainame'>
64
+ <img src='https://github.com/ainame.png?size=140'>
65
+ </a>
66
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td id='jérôme-lacoste'>
71
+ <a href='https://github.com/lacostej'>
72
+ <img src='https://github.com/lacostej.png?size=140'>
73
+ </a>
74
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
80
75
  </td>
81
76
  <td id='matthew-ellis'>
82
77
  <a href='https://github.com/matthewellis'>
@@ -84,31 +79,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
84
79
  </a>
85
80
  <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
86
81
  </td>
87
- <td id='max-ott'>
88
- <a href='https://github.com/max-ott'>
89
- <img src='https://github.com/max-ott.png?size=140'>
82
+ <td id='aaron-brager'>
83
+ <a href='https://github.com/getaaron'>
84
+ <img src='https://github.com/getaaron.png?size=140'>
90
85
  </a>
91
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
92
87
  </td>
93
- <td id='manu-wallner'>
94
- <a href='https://github.com/milch'>
95
- <img src='https://github.com/milch.png?size=140'>
88
+ <td id='iulian-onofrei'>
89
+ <a href='https://github.com/revolter'>
90
+ <img src='https://github.com/revolter.png?size=140'>
96
91
  </a>
97
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
93
+ </td>
94
+ <td id='jimmy-dee'>
95
+ <a href='https://github.com/jdee'>
96
+ <img src='https://github.com/jdee.png?size=140'>
97
+ </a>
98
+ <h4 align='center'>Jimmy Dee</h4>
98
99
  </td>
99
100
  </tr>
100
101
  <tr>
101
- <td id='luka-mirosevic'>
102
- <a href='https://github.com/lmirosevic'>
103
- <img src='https://github.com/lmirosevic.png?size=140'>
102
+ <td id='jan-piotrowski'>
103
+ <a href='https://github.com/janpio'>
104
+ <img src='https://github.com/janpio.png?size=140'>
104
105
  </a>
105
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
106
107
  </td>
107
- <td id='stefan-natchev'>
108
- <a href='https://github.com/snatchev'>
109
- <img src='https://github.com/snatchev.png?size=140'>
108
+ <td id='helmut-januschka'>
109
+ <a href='https://github.com/hjanuschka'>
110
+ <img src='https://github.com/hjanuschka.png?size=140'>
110
111
  </a>
111
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
112
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
112
113
  </td>
113
114
  <td id='maksym-grebenets'>
114
115
  <a href='https://github.com/mgrebenets'>
@@ -116,43 +117,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
116
117
  </a>
117
118
  <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
118
119
  </td>
119
- <td id='felix-krause'>
120
- <a href='https://github.com/KrauseFx'>
121
- <img src='https://github.com/KrauseFx.png?size=140'>
120
+ <td id='danielle-tomlinson'>
121
+ <a href='https://github.com/endocrimes'>
122
+ <img src='https://github.com/endocrimes.png?size=140'>
122
123
  </a>
123
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
124
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
124
125
  </td>
125
- <td id='helmut-januschka'>
126
- <a href='https://github.com/hjanuschka'>
127
- <img src='https://github.com/hjanuschka.png?size=140'>
126
+ <td id='fumiya-nakamura'>
127
+ <a href='https://github.com/nafu'>
128
+ <img src='https://github.com/nafu.png?size=140'>
128
129
  </a>
129
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
130
131
  </td>
131
132
  </tr>
132
133
  <tr>
133
- <td id='aaron-brager'>
134
- <a href='https://github.com/getaaron'>
135
- <img src='https://github.com/getaaron.png?size=140'>
134
+ <td id='jorge-revuelta-h'>
135
+ <a href='https://github.com/minuscorp'>
136
+ <img src='https://github.com/minuscorp.png?size=140'>
136
137
  </a>
137
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
138
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
138
139
  </td>
139
- <td id='andrew-mcburney'>
140
- <a href='https://github.com/armcburney'>
141
- <img src='https://github.com/armcburney.png?size=140'>
140
+ <td id='felix-krause'>
141
+ <a href='https://github.com/KrauseFx'>
142
+ <img src='https://github.com/KrauseFx.png?size=140'>
142
143
  </a>
143
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
144
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
144
145
  </td>
145
- <td id='iulian-onofrei'>
146
- <a href='https://github.com/revolter'>
147
- <img src='https://github.com/revolter.png?size=140'>
146
+ <td id='roger-oba'>
147
+ <a href='https://github.com/rogerluan'>
148
+ <img src='https://github.com/rogerluan.png?size=140'>
148
149
  </a>
149
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
150
151
  </td>
151
- <td id='jorge-revuelta-h'>
152
- <a href='https://github.com/minuscorp'>
153
- <img src='https://github.com/minuscorp.png?size=140'>
152
+ <td id='daniel-jankowski'>
153
+ <a href='https://github.com/mollyIV'>
154
+ <img src='https://github.com/mollyIV.png?size=140'>
154
155
  </a>
155
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
156
157
  </td>
157
158
  <td id='olivier-halligon'>
158
159
  <a href='https://github.com/AliSoftware'>
@@ -162,17 +163,29 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
162
163
  </td>
163
164
  </tr>
164
165
  <tr>
165
- <td id='daniel-jankowski'>
166
- <a href='https://github.com/mollyIV'>
167
- <img src='https://github.com/mollyIV.png?size=140'>
166
+ <td id='kohki-miki'>
167
+ <a href='https://github.com/giginet'>
168
+ <img src='https://github.com/giginet.png?size=140'>
168
169
  </a>
169
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
170
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
170
171
  </td>
171
- <td id='fumiya-nakamura'>
172
- <a href='https://github.com/nafu'>
173
- <img src='https://github.com/nafu.png?size=140'>
172
+ <td id='max-ott'>
173
+ <a href='https://github.com/max-ott'>
174
+ <img src='https://github.com/max-ott.png?size=140'>
174
175
  </a>
175
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
177
+ </td>
178
+ <td id='luka-mirosevic'>
179
+ <a href='https://github.com/lmirosevic'>
180
+ <img src='https://github.com/lmirosevic.png?size=140'>
181
+ </a>
182
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
183
+ </td>
184
+ <td id='andrew-mcburney'>
185
+ <a href='https://github.com/armcburney'>
186
+ <img src='https://github.com/armcburney.png?size=140'>
187
+ </a>
188
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
176
189
  </td>
177
190
  </table>
178
191
 
@@ -187,12 +200,12 @@ Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more information on how to help
187
200
  Help us keep _fastlane_ open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
188
201
 
189
202
  ## Metrics
190
-
191
- _fastlane_ tracks a few key metrics to understand how developers are using the tool and to help us know what areas need improvement. No personal/sensitive information is ever collected. Metrics that are collected include:
192
-
203
+
204
+ _fastlane_ tracks a few key metrics to understand how developers are using the tool and to help us know what areas need improvement. No personal/sensitive information is ever collected. Metrics that are collected include:
205
+
193
206
  * The number of _fastlane_ runs
194
207
  * A salted hash of the app identifier or package name, which helps us anonymously identify unique usage of _fastlane_
195
-
208
+
196
209
  You can easily opt-out of metrics collection by adding `opt_out_usage` at the top of your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. [Check out the metrics code on GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/analytics)
197
210
 
198
211
  ## License
@@ -58,6 +58,7 @@ module Cert
58
58
  short_option: "-u",
59
59
  env_name: "CERT_USERNAME",
60
60
  description: "Your Apple ID Username",
61
+ optional: true,
61
62
  default_value: user,
62
63
  default_value_dynamic: true),
63
64
  FastlaneCore::ConfigItem.new(key: :team_id,
@@ -24,6 +24,10 @@ module Cert
24
24
  UI.message("Creating authorization token for App Store Connect API")
25
25
  Spaceship::ConnectAPI.token = api_token
26
26
  else
27
+ # Username is now optional since addition of App Store Connect API Key
28
+ # Force asking for username to prompt user if not already set
29
+ Cert.config.fetch(:username, force_ask: true)
30
+
27
31
  UI.message("Starting login with user '#{Cert.config[:username]}'")
28
32
  Spaceship::ConnectAPI.login(Cert.config[:username], nil, use_portal: true, use_tunes: false)
29
33
  UI.message("Successfully logged in")
@@ -1,6 +1,5 @@
1
1
  require_relative 'module'
2
2
  require 'spaceship'
3
- require 'open-uri'
4
3
 
5
4
  module Deliver
6
5
  class DownloadScreenshots
@@ -68,7 +67,7 @@ module Deliver
68
67
  end
69
68
 
70
69
  path = File.join(containing_folder, file_name)
71
- File.binwrite(path, open(url).read)
70
+ File.binwrite(path, FastlaneCore::Helper.open_uri(url).read)
72
71
  end
73
72
  end
74
73
  end
@@ -32,6 +32,7 @@ module Deliver
32
32
  short_option: "-u",
33
33
  env_name: "DELIVER_USERNAME",
34
34
  description: "Your Apple ID Username",
35
+ optional: true,
35
36
  default_value: user,
36
37
  default_value_dynamic: true),
37
38
  FastlaneCore::ConfigItem.new(key: :app_identifier,
@@ -30,6 +30,10 @@ module Deliver
30
30
  UI.message("Creating authorization token for App Store Connect API")
31
31
  Spaceship::ConnectAPI.token = api_token
32
32
  else
33
+ # Username is now optional since addition of App Store Connect API Key
34
+ # Force asking for username to prompt user if not already set
35
+ options.fetch(:username, force_ask: true)
36
+
33
37
  # Team selection passed though FASTLANE_TEAM_ID and FASTLANE_TEAM_NAME environment variables
34
38
  # Prompts select team if multiple teams and none specified
35
39
  UI.message("Login to App Store Connect (#{options[:username]})")
@@ -1,4 +1,3 @@
1
- require 'open-uri'
2
1
  require 'spaceship/tunes/tunes'
3
2
 
4
3
  require_relative 'module'
@@ -592,8 +592,9 @@ module Deliver
592
592
  end
593
593
 
594
594
  def set_review_information(version, options)
595
- return unless options[:app_review_information]
596
595
  info = options[:app_review_information]
596
+ return if info.nil? || info.empty?
597
+
597
598
  info = info.collect { |k, v| [k.to_sym, v] }.to_h
598
599
  UI.user_error!("`app_review_information` must be a hash", show_github_issues: true) unless info.kind_of?(Hash)
599
600
 
@@ -32,6 +32,10 @@ module Fastlane
32
32
  UI.message("Using App Store Connect API token...")
33
33
  Spaceship::ConnectAPI.token = token
34
34
  else
35
+ # Username is now optional since addition of App Store Connect API Key
36
+ # Force asking for username to prompt user if not already set
37
+ params.fetch(:username, force_ask: true)
38
+
35
39
  UI.message("Login to App Store Connect (#{params[:username]})")
36
40
  Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true, tunes_team_id: params[:team_id], team_name: params[:team_name])
37
41
  UI.message("Login successful")
@@ -147,6 +151,7 @@ module Fastlane
147
151
  short_option: "-u",
148
152
  env_name: "ITUNESCONNECT_USER",
149
153
  description: "Your Apple ID Username",
154
+ optional: true,
150
155
  default_value: user,
151
156
  default_value_dynamic: true),
152
157
  FastlaneCore::ConfigItem.new(key: :team_id,
@@ -29,7 +29,7 @@ module Fastlane
29
29
  key = {
30
30
  key_id: key_id,
31
31
  issuer_id: issuer_id,
32
- key: key_content || File.binread(key_filepath),
32
+ key: key_content || File.binread(File.expand_path(key_filepath)),
33
33
  is_key_content_base64: is_key_content_base64,
34
34
  duration: duration,
35
35
  in_house: in_house
@@ -58,7 +58,7 @@ module Fastlane
58
58
  optional: true,
59
59
  conflicting_options: [:key_content],
60
60
  verify_block: proc do |value|
61
- UI.user_error!("Couldn't find key p8 file at path '#{value}'") unless File.exist?(value)
61
+ UI.user_error!("Couldn't find key p8 file at path '#{value}'") unless File.exist?(File.expand_path(value))
62
62
  end),
63
63
  FastlaneCore::ConfigItem.new(key: :key_content,
64
64
  env_name: "APP_STORE_CONNECT_API_KEY_KEY",
@@ -120,6 +120,10 @@ module Fastlane
120
120
  "The absolute path to the generated ipa file"
121
121
  end
122
122
 
123
+ def self.return_type
124
+ :string
125
+ end
126
+
123
127
  def self.author
124
128
  "KrauseFx"
125
129
  end
@@ -28,6 +28,10 @@ module Fastlane
28
28
  return "true if precheck passes, else, false"
29
29
  end
30
30
 
31
+ def self.return_type
32
+ :bool
33
+ end
34
+
31
35
  def self.authors
32
36
  ["taquitos"]
33
37
  end
@@ -138,7 +138,7 @@ Inside of a given locale directory is a folder called `images`. Here you can sup
138
138
  - `promoGraphic`
139
139
  - `tvBanner`
140
140
 
141
- You can also supply screenshots by creating directories within the `images` directory with the following names, containing PNGs or JPEGs (image names are irrelevant):
141
+ You can also supply screenshots by creating directories within the `images` directory with the following names, containing PNGs or JPEGs:
142
142
 
143
143
  - `phoneScreenshots/`
144
144
  - `sevenInchScreenshots/` (7-inch tablets)
@@ -146,6 +146,7 @@ You can also supply screenshots by creating directories within the `images` dire
146
146
  - `tvScreenshots/`
147
147
  - `wearScreenshots/`
148
148
 
149
+ You may name images anything you like, but screenshots will appear in the Play Store in alphanumerical filename order.
149
150
  Note that these will replace the current images and screenshots on the play store listing, not add to them.
150
151
 
151
152
  ## Changelogs (What's new)
@@ -68,6 +68,10 @@ module Fastlane
68
68
  "The UUID of the profile sigh just fetched/generated"
69
69
  end
70
70
 
71
+ def self.return_type
72
+ :string
73
+ end
74
+
71
75
  def self.details
72
76
  "**Note**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning."
73
77
  end
@@ -8,14 +8,15 @@ module Fastlane
8
8
  require 'shellwords'
9
9
 
10
10
  def self.run(params)
11
- folder = params[:xcodeproj] ? File.join(params[:xcodeproj], '..') : '.'
11
+ xcodeproj_path_or_dir = params[:xcodeproj] || '.'
12
+ xcodeproj_dir = File.extname(xcodeproj_path_or_dir) == ".xcodeproj" ? File.dirname(xcodeproj_path_or_dir) : xcodeproj_path_or_dir
12
13
  target_name = params[:target]
13
14
  configuration = params[:configuration]
14
15
 
15
16
  # Get version_number
16
- project = get_project!(folder)
17
+ project = get_project!(xcodeproj_path_or_dir)
17
18
  target = get_target!(project, target_name)
18
- plist_file = get_plist!(folder, target, configuration)
19
+ plist_file = get_plist!(xcodeproj_dir, target, configuration)
19
20
  version_number = get_version_number_from_plist!(plist_file)
20
21
 
21
22
  # Get from build settings (or project settings) if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
@@ -39,13 +40,18 @@ module Fastlane
39
40
  return version_number
40
41
  end
41
42
 
42
- def self.get_project!(folder)
43
+ def self.get_project!(xcodeproj_path_or_dir)
43
44
  require 'xcodeproj'
44
- project_path = Dir.glob("#{folder}/*.xcodeproj").first
45
- if project_path
45
+ if File.extname(xcodeproj_path_or_dir) == ".xcodeproj"
46
+ project_path = xcodeproj_path_or_dir
47
+ else
48
+ project_path = Dir.glob("#{xcodeproj_path_or_dir}/*.xcodeproj").first
49
+ end
50
+
51
+ if project_path && File.exist?(project_path)
46
52
  return Xcodeproj::Project.open(project_path)
47
53
  else
48
- UI.user_error!("Unable to find Xcode project in folder: #{folder}")
54
+ UI.user_error!("Unable to find Xcode project at #{project_path || xcodeproj_path_or_dir}")
49
55
  end
50
56
  end
51
57
 
@@ -147,11 +153,12 @@ module Fastlane
147
153
  [
148
154
  FastlaneCore::ConfigItem.new(key: :xcodeproj,
149
155
  env_name: "FL_VERSION_NUMBER_PROJECT",
150
- description: "Path to the main Xcode project to read version number from, optional. By default will use the first Xcode project found within the project root directory",
156
+ description: "Path to the Xcode project to read version number from, or its containing directory, optional. If ommitted, or if a directory is passed instead, it will use the first Xcode project found within the given directory, or the project root directory if none is passed",
151
157
  optional: true,
152
158
  verify_block: proc do |value|
153
- UI.user_error!("Please pass the path to the project, not the workspace") if value.end_with?(".xcworkspace")
154
- UI.user_error!("Could not find Xcode project at path '#{File.expand_path(value)}'") if !File.exist?(value) && !Helper.test?
159
+ UI.user_error!("Please pass the path to the project or its containing directory, not the workspace path") if value.end_with?(".xcworkspace")
160
+ UI.user_error!("Could not find file or directory at path '#{File.expand_path(value)}'") unless File.exist?(value)
161
+ UI.user_error!("Could not find Xcode project in directory at path '#{File.expand_path(value)}'") if File.extname(value) != ".xcodeproj" && Dir.glob("#{value}/*.xcodeproj").empty?
155
162
  end),
156
163
  FastlaneCore::ConfigItem.new(key: :target,
157
164
  env_name: "FL_VERSION_NUMBER_TARGET",