fastlane 2.211.0 → 2.212.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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]
|