fastlane 2.211.0 → 2.212.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +96 -96
- data/deliver/lib/deliver/app_screenshot.rb +1 -0
- data/deliver/lib/deliver/runner.rb +2 -6
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +19 -2
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcodes.rb +17 -2
- data/fastlane/lib/fastlane/fast_file.rb +18 -5
- data/fastlane/lib/fastlane/features.rb +3 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Actions.swift +1 -1
- data/fastlane/swift/Appfile.swift +1 -1
- data/fastlane/swift/ArgumentProcessor.swift +1 -1
- data/fastlane/swift/Atomic.swift +1 -1
- data/fastlane/swift/ControlCommand.swift +1 -1
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +29 -5
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +6 -2
- data/fastlane/swift/LaneFileProtocol.swift +1 -1
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +3 -3
- data/fastlane/swift/OptionalConfigValue.swift +1 -1
- data/fastlane/swift/Plugins.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/RubyCommandable.swift +1 -1
- data/fastlane/swift/Runner.swift +1 -1
- data/fastlane/swift/RunnerArgument.swift +1 -1
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +6 -2
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/SocketClient.swift +1 -1
- data/fastlane/swift/SocketClientDelegateProtocol.swift +1 -1
- data/fastlane/swift/SocketResponse.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +26 -18
- data/fastlane/swift/main.swift +1 -1
- data/fastlane_core/lib/fastlane_core/.project.rb.swp +0 -0
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +9 -2
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +4 -2
- data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
- data/gym/lib/gym/generators/build_command_generator.rb +1 -0
- data/gym/lib/gym/options.rb +7 -0
- data/match/lib/match/importer.rb +4 -0
- data/match/lib/match/module.rb +1 -1
- data/scan/lib/scan/options.rb +5 -0
- data/scan/lib/scan/test_command_generator.rb +6 -1
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +17 -0
- data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/models/build_bundle_file_sizes.rb +34 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +44 -4
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +19 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/spaceship/lib/spaceship/errors.rb +34 -0
- metadata +25 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e057e50e5d579d53addcca0e59b39eb3eb48ddb90339e12943ab0512a040496c
|
4
|
+
data.tar.gz: 7786048e835509e7db2e4ba5c4859ecd24fcfc9a4637a52da7ec84a568bf31a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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='
|
39
|
-
<a href='https://github.com/
|
40
|
-
<img src='https://github.com/
|
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'
|
42
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
43
43
|
</td>
|
44
|
-
<td id='
|
45
|
-
<a href='https://github.com/
|
46
|
-
<img src='https://github.com/
|
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/
|
48
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
49
49
|
</td>
|
50
|
-
<td id='
|
51
|
-
<a href='https://github.com/
|
52
|
-
<img src='https://github.com/
|
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/
|
54
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
55
55
|
</td>
|
56
|
-
<td id='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
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/
|
60
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
61
61
|
</td>
|
62
|
-
<td id='
|
63
|
-
<a href='https://github.com/
|
64
|
-
<img src='https://github.com/
|
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/
|
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='
|
77
|
-
<a href='https://github.com/
|
78
|
-
<img src='https://github.com/
|
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/
|
80
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
81
81
|
</td>
|
82
|
-
<td id='
|
83
|
-
<a href='https://github.com/
|
84
|
-
<img src='https://github.com/
|
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/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
87
87
|
</td>
|
88
|
-
<td id='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
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/
|
92
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
93
93
|
</td>
|
94
|
-
<td id='
|
95
|
-
<a href='https://github.com/
|
96
|
-
<img src='https://github.com/
|
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'>
|
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='
|
103
|
-
<a href='https://github.com/
|
104
|
-
<img src='https://github.com/
|
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/
|
106
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
107
107
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
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/
|
112
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
113
113
|
</td>
|
114
|
-
<td id='
|
115
|
-
<a href='https://github.com/
|
116
|
-
<img src='https://github.com/
|
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/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
119
119
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
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'
|
124
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
125
125
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
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/
|
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='
|
141
|
-
<a href='https://github.com/
|
142
|
-
<img src='https://github.com/
|
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/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
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/
|
156
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
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/
|
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='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
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/
|
176
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
183
177
|
</td>
|
184
|
-
<td id='
|
185
|
-
<a href='https://github.com/
|
186
|
-
<img src='https://github.com/
|
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/
|
182
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
189
183
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
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/
|
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='
|
199
|
-
<a href='https://github.com/
|
200
|
-
<img src='https://github.com/
|
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/
|
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
|
248
|
+
# Polling until there is no longer an in-progress version
|
249
249
|
loop do
|
250
|
-
|
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:
|
@@ -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
|
-
|
40
|
-
|
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
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
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')
|
data/fastlane/swift/Atomic.swift
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
// Deliverfile.swift
|
2
|
-
// Copyright (c)
|
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.
|
20
|
+
// Generated with fastlane 2.212.0
|
@@ -1,5 +1,5 @@
|
|
1
1
|
// DeliverfileProtocol.swift
|
2
|
-
// Copyright (c)
|
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.
|
267
|
+
// FastlaneRunnerAPIVersion [0.9.113]
|