fastlane 2.211.0 → 2.212.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/README.md +96 -96
  3. data/deliver/lib/deliver/app_screenshot.rb +1 -0
  4. data/deliver/lib/deliver/runner.rb +2 -6
  5. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +19 -2
  6. data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +1 -1
  7. data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/xcodes.rb +17 -2
  9. data/fastlane/lib/fastlane/fast_file.rb +18 -5
  10. data/fastlane/lib/fastlane/features.rb +3 -0
  11. data/fastlane/lib/fastlane/version.rb +1 -1
  12. data/fastlane/swift/Actions.swift +1 -1
  13. data/fastlane/swift/Appfile.swift +1 -1
  14. data/fastlane/swift/ArgumentProcessor.swift +1 -1
  15. data/fastlane/swift/Atomic.swift +1 -1
  16. data/fastlane/swift/ControlCommand.swift +1 -1
  17. data/fastlane/swift/Deliverfile.swift +2 -2
  18. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  19. data/fastlane/swift/Fastlane.swift +29 -5
  20. data/fastlane/swift/Gymfile.swift +2 -2
  21. data/fastlane/swift/GymfileProtocol.swift +6 -2
  22. data/fastlane/swift/LaneFileProtocol.swift +1 -1
  23. data/fastlane/swift/MainProcess.swift +1 -1
  24. data/fastlane/swift/Matchfile.swift +2 -2
  25. data/fastlane/swift/MatchfileProtocol.swift +3 -3
  26. data/fastlane/swift/OptionalConfigValue.swift +1 -1
  27. data/fastlane/swift/Plugins.swift +1 -1
  28. data/fastlane/swift/Precheckfile.swift +2 -2
  29. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  30. data/fastlane/swift/RubyCommand.swift +1 -1
  31. data/fastlane/swift/RubyCommandable.swift +1 -1
  32. data/fastlane/swift/Runner.swift +1 -1
  33. data/fastlane/swift/RunnerArgument.swift +1 -1
  34. data/fastlane/swift/Scanfile.swift +2 -2
  35. data/fastlane/swift/ScanfileProtocol.swift +6 -2
  36. data/fastlane/swift/Screengrabfile.swift +2 -2
  37. data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
  38. data/fastlane/swift/Snapshotfile.swift +2 -2
  39. data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
  40. data/fastlane/swift/SocketClient.swift +1 -1
  41. data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
  42. data/fastlane/swift/SocketResponse.swift +1 -1
  43. data/fastlane/swift/formatting/Brewfile.lock.json +26 -18
  44. data/fastlane/swift/main.swift +1 -1
  45. data/fastlane_core/lib/fastlane_core/.project.rb.swp +0 -0
  46. data/fastlane_core/lib/fastlane_core/cert_checker.rb +9 -2
  47. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +4 -2
  48. data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
  49. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  50. data/gym/lib/gym/options.rb +7 -0
  51. data/match/lib/match/importer.rb +4 -0
  52. data/match/lib/match/module.rb +1 -1
  53. data/scan/lib/scan/options.rb +5 -0
  54. data/scan/lib/scan/test_command_generator.rb +6 -1
  55. data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +5 -0
  56. data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +17 -0
  57. data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +9 -0
  58. data/spaceship/lib/spaceship/connect_api/models/build_bundle_file_sizes.rb +34 -0
  59. data/spaceship/lib/spaceship/connect_api/models/device.rb +44 -4
  60. data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +19 -0
  61. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  62. data/spaceship/lib/spaceship/connect_api.rb +1 -0
  63. data/spaceship/lib/spaceship/errors.rb +34 -0
  64. metadata +25 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9109ddee20194fc927133f3885a6a460d09ea8ccf81d865822c1c7c028b428c2
4
- data.tar.gz: 5f6fe9b0094d3fb6582e88c44ac8e4e2a0830d2f5f556628744e67f26b307f17
3
+ metadata.gz: e057e50e5d579d53addcca0e59b39eb3eb48ddb90339e12943ab0512a040496c
4
+ data.tar.gz: 7786048e835509e7db2e4ba5c4859ecd24fcfc9a4637a52da7ec84a568bf31a2
5
5
  SHA512:
6
- metadata.gz: '08db10e18729135ecebec8ac1735e9ab79a4e878b1ab249b4011c086072c945f0024f4d95a241335bb8807da7a1402c98f70183f0cd45c2985d87c5de6188d03'
7
- data.tar.gz: 20c188c9ad9a9b270d64f0dbb8011861f79a2932e7665df511401be49e0d6f8ecb03cbfb8c5ce81274e239930084c535fc2735fc3997d185545ef4460aa12d99
6
+ metadata.gz: 45f7948df9f9a60123c09dedfc1159e84dc149b8b17be90494c02dbe55b531bedc3546d450861b63d32feedcc06de8774a1bab9db2050afcd0cc2038df268114
7
+ data.tar.gz: 5acca0504847bb90327fc16ee1ea2842713ae0bfcbe3b92c8d813da352af5c6e5c37805f09ee25bfd1543e7ea17722751ac5b9e75fb1f1ca569e5e759ccdc407
data/README.md CHANGED
@@ -35,35 +35,35 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
35
35
  <!-- This table is regenerated and resorted on each release -->
36
36
  <table id='team'>
37
37
  <tr>
38
- <td id='łukasz-grabowski'>
39
- <a href='https://github.com/lucgrabowski'>
40
- <img src='https://github.com/lucgrabowski.png' width='140px;'>
38
+ <td id='manish-rathi'>
39
+ <a href='https://github.com/crazymanish'>
40
+ <img src='https://github.com/crazymanish.png' width='140px;'>
41
41
  </a>
42
- <h4 align='center'>Łukasz Grabowski</h4>
42
+ <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
43
43
  </td>
44
- <td id='luka-mirosevic'>
45
- <a href='https://github.com/lmirosevic'>
46
- <img src='https://github.com/lmirosevic.png' width='140px;'>
44
+ <td id='maksym-grebenets'>
45
+ <a href='https://github.com/mgrebenets'>
46
+ <img src='https://github.com/mgrebenets.png' width='140px;'>
47
47
  </a>
48
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
48
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
49
49
  </td>
50
- <td id='satoshi-namai'>
51
- <a href='https://github.com/ainame'>
52
- <img src='https://github.com/ainame.png' width='140px;'>
50
+ <td id='helmut-januschka'>
51
+ <a href='https://github.com/hjanuschka'>
52
+ <img src='https://github.com/hjanuschka.png' width='140px;'>
53
53
  </a>
54
- <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
54
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
55
55
  </td>
56
- <td id='olivier-halligon'>
57
- <a href='https://github.com/AliSoftware'>
58
- <img src='https://github.com/AliSoftware.png' width='140px;'>
56
+ <td id='jan-piotrowski'>
57
+ <a href='https://github.com/janpio'>
58
+ <img src='https://github.com/janpio.png' width='140px;'>
59
59
  </a>
60
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
60
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
61
61
  </td>
62
- <td id='daniel-jankowski'>
63
- <a href='https://github.com/mollyIV'>
64
- <img src='https://github.com/mollyIV.png' width='140px;'>
62
+ <td id='iulian-onofrei'>
63
+ <a href='https://github.com/revolter'>
64
+ <img src='https://github.com/revolter.png' width='140px;'>
65
65
  </a>
66
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
66
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
67
67
  </td>
68
68
  </tr>
69
69
  <tr>
@@ -73,133 +73,133 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
73
73
  </a>
74
74
  <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
75
75
  </td>
76
- <td id='stefan-natchev'>
77
- <a href='https://github.com/snatchev'>
78
- <img src='https://github.com/snatchev.png' width='140px;'>
76
+ <td id='max-ott'>
77
+ <a href='https://github.com/max-ott'>
78
+ <img src='https://github.com/max-ott.png' width='140px;'>
79
79
  </a>
80
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
80
+ <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
81
81
  </td>
82
- <td id='felix-krause'>
83
- <a href='https://github.com/KrauseFx'>
84
- <img src='https://github.com/KrauseFx.png' width='140px;'>
82
+ <td id='fumiya-nakamura'>
83
+ <a href='https://github.com/nafu'>
84
+ <img src='https://github.com/nafu.png' width='140px;'>
85
85
  </a>
86
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
86
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
87
87
  </td>
88
- <td id='danielle-tomlinson'>
89
- <a href='https://github.com/endocrimes'>
90
- <img src='https://github.com/endocrimes.png' width='140px;'>
88
+ <td id='andrew-mcburney'>
89
+ <a href='https://github.com/armcburney'>
90
+ <img src='https://github.com/armcburney.png' width='140px;'>
91
91
  </a>
92
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
92
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
93
93
  </td>
94
- <td id='jimmy-dee'>
95
- <a href='https://github.com/jdee'>
96
- <img src='https://github.com/jdee.png' width='140px;'>
94
+ <td id='felix-krause'>
95
+ <a href='https://github.com/KrauseFx'>
96
+ <img src='https://github.com/KrauseFx.png' width='140px;'>
97
97
  </a>
98
- <h4 align='center'>Jimmy Dee</h4>
98
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
99
99
  </td>
100
100
  </tr>
101
101
  <tr>
102
- <td id='matthew-ellis'>
103
- <a href='https://github.com/matthewellis'>
104
- <img src='https://github.com/matthewellis.png' width='140px;'>
102
+ <td id='daniel-jankowski'>
103
+ <a href='https://github.com/mollyIV'>
104
+ <img src='https://github.com/mollyIV.png' width='140px;'>
105
105
  </a>
106
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
106
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
107
107
  </td>
108
- <td id='jérôme-lacoste'>
109
- <a href='https://github.com/lacostej'>
110
- <img src='https://github.com/lacostej.png' width='140px;'>
108
+ <td id='stefan-natchev'>
109
+ <a href='https://github.com/snatchev'>
110
+ <img src='https://github.com/snatchev.png' width='140px;'>
111
111
  </a>
112
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
112
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
113
113
  </td>
114
- <td id='andrew-mcburney'>
115
- <a href='https://github.com/armcburney'>
116
- <img src='https://github.com/armcburney.png' width='140px;'>
114
+ <td id='roger-oba'>
115
+ <a href='https://github.com/rogerluan'>
116
+ <img src='https://github.com/rogerluan.png' width='140px;'>
117
117
  </a>
118
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
118
+ <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
119
119
  </td>
120
- <td id='manu-wallner'>
121
- <a href='https://github.com/milch'>
122
- <img src='https://github.com/milch.png' width='140px;'>
120
+ <td id='łukasz-grabowski'>
121
+ <a href='https://github.com/lucgrabowski'>
122
+ <img src='https://github.com/lucgrabowski.png' width='140px;'>
123
123
  </a>
124
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
124
+ <h4 align='center'>Łukasz Grabowski</h4>
125
125
  </td>
126
- <td id='max-ott'>
127
- <a href='https://github.com/max-ott'>
128
- <img src='https://github.com/max-ott.png' width='140px;'>
126
+ <td id='josh-holtz'>
127
+ <a href='https://github.com/joshdholtz'>
128
+ <img src='https://github.com/joshdholtz.png' width='140px;'>
129
129
  </a>
130
- <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
130
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
131
131
  </td>
132
132
  </tr>
133
133
  <tr>
134
+ <td id='jimmy-dee'>
135
+ <a href='https://github.com/jdee'>
136
+ <img src='https://github.com/jdee.png' width='140px;'>
137
+ </a>
138
+ <h4 align='center'>Jimmy Dee</h4>
139
+ </td>
134
140
  <td id='jorge-revuelta-h'>
135
141
  <a href='https://github.com/minuscorp'>
136
142
  <img src='https://github.com/minuscorp.png' width='140px;'>
137
143
  </a>
138
144
  <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
139
145
  </td>
140
- <td id='manish-rathi'>
141
- <a href='https://github.com/crazymanish'>
142
- <img src='https://github.com/crazymanish.png' width='140px;'>
143
- </a>
144
- <h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
145
- </td>
146
- <td id='joshua-liebowitz'>
147
- <a href='https://github.com/taquitos'>
148
- <img src='https://github.com/taquitos.png' width='140px;'>
146
+ <td id='matthew-ellis'>
147
+ <a href='https://github.com/matthewellis'>
148
+ <img src='https://github.com/matthewellis.png' width='140px;'>
149
149
  </a>
150
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
150
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
151
151
  </td>
152
- <td id='iulian-onofrei'>
153
- <a href='https://github.com/revolter'>
154
- <img src='https://github.com/revolter.png' width='140px;'>
152
+ <td id='jérôme-lacoste'>
153
+ <a href='https://github.com/lacostej'>
154
+ <img src='https://github.com/lacostej.png' width='140px;'>
155
155
  </a>
156
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
156
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
157
157
  </td>
158
- <td id='maksym-grebenets'>
159
- <a href='https://github.com/mgrebenets'>
160
- <img src='https://github.com/mgrebenets.png' width='140px;'>
158
+ <td id='satoshi-namai'>
159
+ <a href='https://github.com/ainame'>
160
+ <img src='https://github.com/ainame.png' width='140px;'>
161
161
  </a>
162
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
162
+ <h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
163
163
  </td>
164
164
  </tr>
165
165
  <tr>
166
- <td id='roger-oba'>
167
- <a href='https://github.com/rogerluan'>
168
- <img src='https://github.com/rogerluan.png' width='140px;'>
169
- </a>
170
- <h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
171
- </td>
172
166
  <td id='aaron-brager'>
173
167
  <a href='https://github.com/getaaron'>
174
168
  <img src='https://github.com/getaaron.png' width='140px;'>
175
169
  </a>
176
170
  <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
177
171
  </td>
178
- <td id='josh-holtz'>
179
- <a href='https://github.com/joshdholtz'>
180
- <img src='https://github.com/joshdholtz.png' width='140px;'>
172
+ <td id='danielle-tomlinson'>
173
+ <a href='https://github.com/endocrimes'>
174
+ <img src='https://github.com/endocrimes.png' width='140px;'>
181
175
  </a>
182
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
176
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
183
177
  </td>
184
- <td id='fumiya-nakamura'>
185
- <a href='https://github.com/nafu'>
186
- <img src='https://github.com/nafu.png' width='140px;'>
178
+ <td id='olivier-halligon'>
179
+ <a href='https://github.com/AliSoftware'>
180
+ <img src='https://github.com/AliSoftware.png' width='140px;'>
187
181
  </a>
188
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
182
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
189
183
  </td>
190
- <td id='jan-piotrowski'>
191
- <a href='https://github.com/janpio'>
192
- <img src='https://github.com/janpio.png' width='140px;'>
184
+ <td id='joshua-liebowitz'>
185
+ <a href='https://github.com/taquitos'>
186
+ <img src='https://github.com/taquitos.png' width='140px;'>
193
187
  </a>
194
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
188
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
189
+ </td>
190
+ <td id='luka-mirosevic'>
191
+ <a href='https://github.com/lmirosevic'>
192
+ <img src='https://github.com/lmirosevic.png' width='140px;'>
193
+ </a>
194
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
195
195
  </td>
196
196
  </tr>
197
197
  <tr>
198
- <td id='helmut-januschka'>
199
- <a href='https://github.com/hjanuschka'>
200
- <img src='https://github.com/hjanuschka.png' width='140px;'>
198
+ <td id='manu-wallner'>
199
+ <a href='https://github.com/milch'>
200
+ <img src='https://github.com/milch.png' width='140px;'>
201
201
  </a>
202
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
202
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
203
203
  </td>
204
204
  </table>
205
205
 
@@ -349,6 +349,7 @@ module Deliver
349
349
  "iPad Pro (12.9-inch) (3rd generation)", # Default simulator has this name
350
350
  "iPad Pro (12.9-inch) (4th generation)", # Default simulator has this name
351
351
  "iPad Pro (12.9-inch) (5th generation)", # Default simulator has this name
352
+ "iPad Pro (12.9-inch) (6th generation)", # Default simulator has this name
352
353
  "IPAD_PRO_3GEN_129", # Screenshots downloaded from App Store Connect has this name
353
354
  "ipadPro129" # Legacy: screenshots downloaded from iTunes Connect used to have this name
354
355
  ].any? { |key| filename.include?(key) }
@@ -245,13 +245,9 @@ module Deliver
245
245
  UI.message("Review submission cancellation has been requested")
246
246
 
247
247
  # An app version won't get removed from review instantly
248
- # Polling until app version has a state of DEVELOPER_REJECT
248
+ # Polling until there is no longer an in-progress version
249
249
  loop do
250
- version = app.get_edit_app_store_version(platform: platform)
251
- if version.app_store_state == Spaceship::ConnectAPI::AppStoreVersion::AppStoreState::DEVELOPER_REJECTED
252
- break
253
- end
254
-
250
+ break if app.get_in_progress_review_submission(platform: platform).nil?
255
251
  UI.message("Waiting for cancellation to take effect...")
256
252
  sleep(15)
257
253
  end
@@ -25,6 +25,7 @@ gem install fastlane
25
25
  ```
26
26
 
27
27
  ##### Gradle dependency
28
+
28
29
  ```java
29
30
  androidTestImplementation 'tools.fastlane:screengrab:x.x.x'
30
31
  ```
@@ -60,17 +61,23 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
60
61
  ##### Configuring your <a href="#ui-tests">UI Tests</a> for Screenshots
61
62
 
62
63
  1. Add `LocaleTestRule` to your tests class to handle automatic switching of locales.
64
+
63
65
  If you're using Java use:
66
+
64
67
  ```java
65
68
  @ClassRule
66
69
  public static final LocaleTestRule localeTestRule = new LocaleTestRule();
67
70
  ```
71
+
68
72
  If you're using Kotlin use:
73
+
69
74
  ```kotlin
70
75
  @Rule @JvmField
71
76
  val localeTestRule = LocaleTestRule()
72
77
  ```
78
+
73
79
  The `@JvmField` annotation is important. It won't work like this:
80
+
74
81
  ```kotlin
75
82
  companion object {
76
83
  @get:ClassRule
@@ -84,6 +91,7 @@ Ensure that the following permissions exist in your **src/debug/AndroidManifest.
84
91
  - Then, before running `fastlane screengrab` you'll need a debug and test apk
85
92
  - You can create your APKs manually with `./gradlew assembleDebug assembleAndroidTest`
86
93
  - You can also create a lane and use `build_android_app`:
94
+
87
95
  ```ruby
88
96
  desc "Build debug and test APK for screenshots"
89
97
  lane :build_and_screengrab do
@@ -163,7 +171,9 @@ fastlane action screengrab
163
171
  Check out [Testing UI for a Single App](http://developer.android.com/training/testing/ui-testing/espresso-testing.html) for an introduction to using Espresso for UI testing.
164
172
 
165
173
  ##### Example UI Test Class (Using JUnit4)
174
+
166
175
  Java:
176
+
167
177
  ```java
168
178
  @RunWith(JUnit4.class)
169
179
  public class JUnit4StyleTests {
@@ -182,9 +192,10 @@ public class JUnit4StyleTests {
182
192
  Screengrab.screenshot("after_button_click");
183
193
  }
184
194
  }
185
-
186
195
  ```
196
+
187
197
  Kotlin:
198
+
188
199
  ```kotlin
189
200
  @RunWith(JUnit4.class)
190
201
  class JUnit4StyleTests {
@@ -203,7 +214,6 @@ class JUnit4StyleTests {
203
214
  Screengrab.screenshot("after_button_click")
204
215
  }
205
216
  }
206
-
207
217
  ```
208
218
 
209
219
  There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
@@ -224,6 +234,7 @@ Note: the clean status bar feature is only supported on devices with *API level
224
234
 
225
235
  You can enable and disable the clean status bar at any moment during your tests.
226
236
  In most cases you probably want to do this in the @BeforeClass and @AfterClass methods.
237
+
227
238
  ```java
228
239
  @BeforeClass
229
240
  public static void beforeAll() {
@@ -238,6 +249,7 @@ public static void afterAll() {
238
249
 
239
250
  Have a look at the methods of the `CleanStatusBar` class to customize the status bar even more.
240
251
  You could for example show the Bluetooth icon and the LTE text.
252
+
241
253
  ```java
242
254
  new CleanStatusBar()
243
255
  .setBluetoothState(BluetoothState.DISCONNECTED)
@@ -283,6 +295,7 @@ if (extras != null) {
283
295
  For some apps, it is helpful to know when _screengrab_ is running so that you can display specific data for your screenshots. For iOS fastlane users, this is much like "FASTLANE_SNAPSHOT". In order to do this, you'll need to have at least two product flavors of your app.
284
296
 
285
297
  Add two product flavors to the app-level build.gradle file:
298
+
286
299
  ```
287
300
  android {
288
301
  ...
@@ -300,6 +313,7 @@ android {
300
313
  ```
301
314
 
302
315
  Check for the existence of that flavor (i.e screengrab) in your app code as follows in order to use mock data or customize data for screenshots:
316
+
303
317
  ```
304
318
  if (BuildConfig.FLAVOR == "screengrab") {
305
319
  System.out.println("screengrab is running!");
@@ -307,14 +321,17 @@ if (BuildConfig.FLAVOR == "screengrab") {
307
321
  ```
308
322
 
309
323
  When running _screengrab_, do the following to build the flavor you want as well as the test apk. Note that you use "assembleFlavor_name" where Flavor_name is the flavor name, capitalized (i.e. Screengrab).
324
+
310
325
  ```
311
326
  ./gradlew assembleScreengrab assembleAndroidTest
312
327
  ```
313
328
 
314
329
  Run _screengrab_:
330
+
315
331
  ```
316
332
  fastlane screengrab
317
333
  ```
334
+
318
335
  _screengrab_ will ask you to select the debug and test apps (which you can then add to your Screengrabfile to skip this step later).
319
336
 
320
337
  The debug apk should be somewhere like this:
@@ -29,7 +29,7 @@ module Fastlane
29
29
  command << "--analyze" if params[:analyze]
30
30
 
31
31
  result = Actions.sh(command.join(' '))
32
- UI.success("Pod lib lint Successfully ⬆️ ")
32
+ UI.success("Pod lib lint successful ⬆️ ")
33
33
  return result
34
34
  end
35
35
 
@@ -19,7 +19,7 @@ module Fastlane
19
19
  UI.user_error!("Could not find path to project config '#{project_file_path}'. Pass the path to your project (not workspace)!") unless File.exist?(project_file_path)
20
20
 
21
21
  # download certificate
22
- unless File.exist?(params[:certificate])
22
+ unless File.exist?(params[:certificate]) && File.size(params[:certificate]) > 0
23
23
  UI.message("Downloading root certificate from (#{ROOT_CERTIFICATE_URL}) to path '#{params[:certificate]}'")
24
24
  File.open(params[:certificate], "w:ASCII-8BIT") do |file|
25
25
  file.write(FastlaneCore::Helper.open_uri(ROOT_CERTIFICATE_URL, "rb").read)
@@ -36,8 +36,23 @@ module Fastlane
36
36
  command << binary
37
37
  command << "installed"
38
38
  command << "'#{version}'"
39
- # Prints something like /Applications/Xcode-14.app
40
- xcode_path = Actions.sh(command.join(" ")).strip
39
+
40
+ # `installed <version>` will either return the path to the given
41
+ # version or fail because the version can't be found.
42
+ #
43
+ # Store the path if we get one, fail the action otherwise.
44
+ xcode_path = Actions.sh(command.join(" ")) do |status, result, sh_command|
45
+ formatted_result = result.chomp
46
+
47
+ unless status.success?
48
+ UI.user_error!("Command `#{sh_command}` failed with status #{status.exitstatus} and message: #{formatted_result}")
49
+ end
50
+
51
+ formatted_result
52
+ end
53
+
54
+ # If the command succeeded, `xcode_path` will be something like:
55
+ # /Applications/Xcode-14.app
41
56
  xcode_developer_path = File.join(xcode_path, "/Contents/Developer")
42
57
 
43
58
  UI.message("Setting Xcode version '#{version}' at '#{xcode_path}' for all build steps")
@@ -338,11 +338,24 @@ module Fastlane
338
338
  UI.user_error!("No tag found matching #{version.inspect}") if checkout_param.nil?
339
339
  end
340
340
 
341
- if is_eligible_for_caching && version.nil?
342
- # Update the repo if it's eligible for caching but the version isn't specified
343
- UI.message("Fetching remote git branches and updating git repo...")
344
- Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
345
- Actions.sh("cd #{clone_folder.shellescape} && git fetch --all --quiet && git checkout #{checkout_param.shellescape} #{checkout_path} && git reset --hard && git rebase")
341
+ if is_eligible_for_caching
342
+ if version.nil?
343
+ # Update the repo if it's eligible for caching but the version isn't specified
344
+ UI.message("Fetching remote git branches and updating git repo...")
345
+ Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
346
+ Actions.sh("cd #{clone_folder.shellescape} && git fetch --all --quiet && git checkout #{checkout_param.shellescape} #{checkout_path} && git reset --hard && git rebase")
347
+ end
348
+ else
349
+ begin
350
+ # https://stackoverflow.com/a/1593574/865175
351
+ current_tag = Actions.sh("cd #{clone_folder.shellescape} && git describe --exact-match --tags HEAD").strip
352
+ rescue
353
+ current_tag = nil
354
+ end
355
+
356
+ if current_tag != version
357
+ Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
358
+ end
346
359
  end
347
360
  else
348
361
  Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
@@ -5,3 +5,6 @@
5
5
 
6
6
  FastlaneCore::Feature.register(env_var: 'FASTLANE_ENABLE_BETA_DELIVER_SYNC_SCREENSHOTS',
7
7
  description: 'Use a newly implemented screenshots synchronization logic')
8
+
9
+ FastlaneCore::Feature.register(env_var: 'FASTLANE_WWDR_USE_HTTP1_AND_RETRIES',
10
+ description: 'Adds --http1.1 and --retry 3 --retry-all-errors to the curl command to download WWDR certificates')
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.211.0'.freeze
2
+ VERSION = '2.212.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '1.12.1'.freeze
@@ -1,5 +1,5 @@
1
1
  // Actions.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  // This autogenerated file will be overwritten or replaced when running "fastlane generate_swift"
5
5
  //
@@ -1,5 +1,5 @@
1
1
  // Appfile.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  var appIdentifier: String { return "" } // The bundle identifier of your app
5
5
  var appleID: String { return "" } // Your Apple Developer Portal username
@@ -1,5 +1,5 @@
1
1
  // ArgumentProcessor.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Atomic.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  import Foundation
5
5
 
@@ -1,5 +1,5 @@
1
1
  // ControlCommand.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  //
5
5
  // ** NOTE **
@@ -1,5 +1,5 @@
1
1
  // Deliverfile.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  // This class is automatically included in FastlaneRunner during build
5
5
 
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.211.0
20
+ // Generated with fastlane 2.212.0
@@ -1,5 +1,5 @@
1
1
  // DeliverfileProtocol.swift
2
- // Copyright (c) 2022 FastlaneTools
2
+ // Copyright (c) 2023 FastlaneTools
3
3
 
4
4
  public protocol DeliverfileProtocol: AnyObject {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
@@ -264,4 +264,4 @@ public extension DeliverfileProtocol {
264
264
 
265
265
  // Please don't remove the lines below
266
266
  // They are used to detect outdated files
267
- // FastlaneRunnerAPIVersion [0.9.112]
267
+ // FastlaneRunnerAPIVersion [0.9.113]