fastlane 2.194.0 → 2.198.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 +90 -90
- data/cert/lib/cert/runner.rb +5 -2
- data/deliver/lib/assets/ScreenshotsHelp +29 -6
- data/deliver/lib/deliver/app_screenshot.rb +4 -4
- data/deliver/lib/deliver/runner.rb +1 -1
- data/deliver/lib/deliver/upload_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +12 -6
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +47 -30
- data/fastlane/lib/fastlane/actions/get_push_certificate.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +6 -2
- data/fastlane/lib/fastlane/actions/gradle.rb +15 -2
- data/fastlane/lib/fastlane/actions/last_git_commit.rb +1 -1
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +29 -11
- data/fastlane/lib/fastlane/actions/prompt.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_github_release.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +77 -82
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +9 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Runner.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +3 -3
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/formatting/Brewfile.lock.json +27 -22
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +31 -7
- data/frameit/lib/frameit/editor.rb +16 -18
- data/frameit/lib/frameit/trim_box.rb +6 -0
- data/match/lib/match/generator.rb +2 -1
- data/match/lib/match/nuke.rb +79 -1
- data/match/lib/match/options.rb +10 -0
- data/match/lib/match/runner.rb +94 -10
- data/match/lib/match/spaceship_ensure.rb +1 -0
- data/pem/lib/pem/manager.rb +31 -7
- data/pem/lib/pem/options.rb +10 -1
- data/pilot/lib/pilot/build_manager.rb +1 -1
- data/scan/lib/scan/runner.rb +1 -1
- data/screengrab/lib/screengrab/options.rb +2 -2
- data/sigh/lib/assets/resign.sh +8 -5
- data/sigh/lib/sigh/options.rb +5 -0
- data/sigh/lib/sigh/runner.rb +2 -2
- data/snapshot/lib/snapshot/options.rb +1 -1
- data/snapshot/lib/snapshot/reports_generator.rb +8 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +7 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -2
- data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +3 -0
- data/{fastlane/lib/fastlane/actions/.notarize.rb.swp → spaceship/lib/spaceship/connect_api/testflight/.testflight.rb.swp} +0 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +1 -1
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/supply/lib/supply/client.rb +3 -3
- data/supply/lib/supply/uploader.rb +1 -1
- metadata +38 -35
- data/fastlane/lib/fastlane/actions/crashlytics.rb +0 -207
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +0 -157
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34ffaaedeedaf54aea167114b6be61500026da48a419856dbf15de2453425e90
|
4
|
+
data.tar.gz: 7ab613d2b2c4d94cdc1a49b092af2e15c6f9beb99edbdfa714a2f851704f46cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0ce3c761e4d9015ec19618bfe8cb0bf797a740ddbfbeed841b01f7c8a0100491b45308c62caf877f20360d969bf13605dfefed2d37a9b236ec029c8ffc3e107
|
7
|
+
data.tar.gz: c567ba5dfc3fbff8f6eec14e0616d8b0c886f3f55873f6d762944bf088537b6cc78c2e2e2bb600af711d5adb19e68cfd46baf074ac32ac201234b1773163095d
|
data/README.md
CHANGED
@@ -35,43 +35,43 @@ 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='satoshi-namai'>
|
39
|
+
<a href='https://github.com/ainame'>
|
40
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
41
41
|
</a>
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
42
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
43
43
|
</td>
|
44
|
-
<td id='
|
45
|
-
<a href='https://github.com/
|
46
|
-
<img src='https://github.com/
|
44
|
+
<td id='luka-mirosevic'>
|
45
|
+
<a href='https://github.com/lmirosevic'>
|
46
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
47
47
|
</a>
|
48
|
-
<h4 align='center'><a href='https://twitter.com/
|
48
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
49
49
|
</td>
|
50
|
-
<td id='
|
51
|
-
<a href='https://github.com/
|
52
|
-
<img src='https://github.com/
|
50
|
+
<td id='felix-krause'>
|
51
|
+
<a href='https://github.com/KrauseFx'>
|
52
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
53
53
|
</a>
|
54
|
-
<h4 align='center'><a href='https://twitter.com/
|
54
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
55
55
|
</td>
|
56
|
-
<td id='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
56
|
+
<td id='joshua-liebowitz'>
|
57
|
+
<a href='https://github.com/taquitos'>
|
58
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
59
59
|
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
60
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
61
61
|
</td>
|
62
|
-
<td id='
|
63
|
-
<a href='https://github.com/
|
64
|
-
<img src='https://github.com/
|
62
|
+
<td id='stefan-natchev'>
|
63
|
+
<a href='https://github.com/snatchev'>
|
64
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
65
65
|
</a>
|
66
|
-
<h4 align='center'>
|
66
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
67
67
|
</td>
|
68
68
|
</tr>
|
69
69
|
<tr>
|
70
|
-
<td id='
|
71
|
-
<a href='https://github.com/
|
72
|
-
<img src='https://github.com/
|
70
|
+
<td id='daniel-jankowski'>
|
71
|
+
<a href='https://github.com/mollyIV'>
|
72
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
73
73
|
</a>
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
74
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
75
75
|
</td>
|
76
76
|
<td id='andrew-mcburney'>
|
77
77
|
<a href='https://github.com/armcburney'>
|
@@ -79,63 +79,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
79
79
|
</a>
|
80
80
|
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
81
81
|
</td>
|
82
|
-
<td id='
|
83
|
-
<a href='https://github.com/
|
84
|
-
<img src='https://github.com/
|
82
|
+
<td id='matthew-ellis'>
|
83
|
+
<a href='https://github.com/matthewellis'>
|
84
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
85
85
|
</a>
|
86
|
-
<h4 align='center'><a href='https://twitter.com/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
87
87
|
</td>
|
88
|
-
<td id='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
88
|
+
<td id='manish-rathi'>
|
89
|
+
<a href='https://github.com/crazymanish'>
|
90
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
91
91
|
</a>
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
92
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
93
93
|
</td>
|
94
|
-
<td id='
|
95
|
-
<a href='https://github.com/
|
96
|
-
<img src='https://github.com/
|
94
|
+
<td id='max-ott'>
|
95
|
+
<a href='https://github.com/max-ott'>
|
96
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
97
97
|
</a>
|
98
|
-
<h4 align='center'><a href='https://twitter.com/
|
98
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</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='olivier-halligon'>
|
103
|
+
<a href='https://github.com/AliSoftware'>
|
104
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
105
105
|
</a>
|
106
|
-
<h4 align='center'><a href='https://twitter.com/
|
106
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
107
107
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
108
|
+
<td id='aaron-brager'>
|
109
|
+
<a href='https://github.com/getaaron'>
|
110
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
111
111
|
</a>
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
112
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
113
113
|
</td>
|
114
|
-
<td id='
|
115
|
-
<a href='https://github.com/
|
116
|
-
<img src='https://github.com/
|
114
|
+
<td id='manu-wallner'>
|
115
|
+
<a href='https://github.com/milch'>
|
116
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
117
117
|
</a>
|
118
|
-
<h4 align='center'><a href='https://twitter.com/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
119
119
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
120
|
+
<td id='fumiya-nakamura'>
|
121
|
+
<a href='https://github.com/nafu'>
|
122
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
123
123
|
</a>
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
124
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
125
125
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
126
|
+
<td id='jorge-revuelta-h'>
|
127
|
+
<a href='https://github.com/minuscorp'>
|
128
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
129
129
|
</a>
|
130
|
-
<h4 align='center'><a href='https://twitter.com/
|
130
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
131
131
|
</td>
|
132
132
|
</tr>
|
133
133
|
<tr>
|
134
|
-
<td id='
|
135
|
-
<a href='https://github.com/
|
136
|
-
<img src='https://github.com/
|
134
|
+
<td id='kohki-miki'>
|
135
|
+
<a href='https://github.com/giginet'>
|
136
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
137
137
|
</a>
|
138
|
-
<h4 align='center'><a href='https://twitter.com/
|
138
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
139
139
|
</td>
|
140
140
|
<td id='danielle-tomlinson'>
|
141
141
|
<a href='https://github.com/endocrimes'>
|
@@ -143,37 +143,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
143
143
|
</a>
|
144
144
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
145
145
|
</td>
|
146
|
-
<td id='
|
147
|
-
<a href='https://github.com/
|
148
|
-
<img src='https://github.com/
|
146
|
+
<td id='helmut-januschka'>
|
147
|
+
<a href='https://github.com/hjanuschka'>
|
148
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
149
149
|
</a>
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
152
|
+
<td id='jimmy-dee'>
|
153
|
+
<a href='https://github.com/jdee'>
|
154
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
155
155
|
</a>
|
156
|
-
<h4 align='center'
|
156
|
+
<h4 align='center'>Jimmy Dee</h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
158
|
+
<td id='iulian-onofrei'>
|
159
|
+
<a href='https://github.com/revolter'>
|
160
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
161
161
|
</a>
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
163
163
|
</td>
|
164
164
|
</tr>
|
165
165
|
<tr>
|
166
|
-
<td id='
|
167
|
-
<a href='https://github.com/
|
168
|
-
<img src='https://github.com/
|
169
|
-
</a>
|
170
|
-
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
171
|
-
</td>
|
172
|
-
<td id='satoshi-namai'>
|
173
|
-
<a href='https://github.com/ainame'>
|
174
|
-
<img src='https://github.com/ainame.png' width='140px;'>
|
166
|
+
<td id='josh-holtz'>
|
167
|
+
<a href='https://github.com/joshdholtz'>
|
168
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
175
169
|
</a>
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
170
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
177
171
|
</td>
|
178
172
|
<td id='jérôme-lacoste'>
|
179
173
|
<a href='https://github.com/lacostej'>
|
@@ -181,17 +175,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
181
175
|
</a>
|
182
176
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
183
177
|
</td>
|
184
|
-
<td id='
|
185
|
-
<a href='https://github.com/
|
186
|
-
<img src='https://github.com/
|
178
|
+
<td id='maksym-grebenets'>
|
179
|
+
<a href='https://github.com/mgrebenets'>
|
180
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
187
181
|
</a>
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
182
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
189
183
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
184
|
+
<td id='roger-oba'>
|
185
|
+
<a href='https://github.com/rogerluan'>
|
186
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
193
187
|
</a>
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
188
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
189
|
+
</td>
|
190
|
+
<td id='jan-piotrowski'>
|
191
|
+
<a href='https://github.com/janpio'>
|
192
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
193
|
+
</a>
|
194
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
195
195
|
</td>
|
196
196
|
</tr>
|
197
197
|
</table>
|
data/cert/lib/cert/runner.rb
CHANGED
@@ -154,8 +154,11 @@ module Cert
|
|
154
154
|
when :developer_id_kext
|
155
155
|
return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_KEXT
|
156
156
|
when :developer_id_installer
|
157
|
-
|
158
|
-
|
157
|
+
if !Spaceship::ConnectAPI.token.nil?
|
158
|
+
raise "As of 2021-11-09, the App Store Connect API does not allow accessing DEVELOPER_ID_INSTALLER with the API Key. Please file an issue on GitHub if this has changed and needs to be updated"
|
159
|
+
else
|
160
|
+
return Spaceship::ConnectAPI::Certificate::CertificateType::DEVELOPER_ID_INSTALLER
|
161
|
+
end
|
159
162
|
else
|
160
163
|
UI.user_error("Unaccepted value for :type - #{Cert.config[:type]}")
|
161
164
|
end
|
@@ -1,7 +1,30 @@
|
|
1
|
-
|
2
|
-
The device type will automatically be recognized using the image resolution. Apple TV screenshots
|
3
|
-
should be stored in a subdirectory named appleTV with language folders inside of it. iMessage
|
4
|
-
screenshots, like Apple TV screenshots, should also be stored in a subdirectory named iMessage
|
5
|
-
with language folders inside of it.
|
1
|
+
## Screenshots Naming Rules
|
6
2
|
|
7
|
-
|
3
|
+
Put all screenshots you want to use inside the folder of its language (e.g. `en-US`).
|
4
|
+
The device type will automatically be recognized using the image resolution.
|
5
|
+
|
6
|
+
The screenshots can be named whatever you want, but keep in mind they are sorted
|
7
|
+
alphabetically, in a human-friendly way. See https://github.com/fastlane/fastlane/pull/18200 for more details.
|
8
|
+
|
9
|
+
### Exceptions
|
10
|
+
|
11
|
+
#### iPad Pro (3rd Gen) 12.9"
|
12
|
+
|
13
|
+
Since iPad Pro (3rd Gen) 12.9" and iPad Pro (2nd Gen) 12.9" have the same image
|
14
|
+
resolution, screenshots of the iPad Pro (3rd gen) 12.9" must contain either the
|
15
|
+
string `iPad Pro (12.9-inch) (3rd generation)`, `IPAD_PRO_3GEN_129`, or `ipadPro129`
|
16
|
+
(App Store Connect's internal naming of the display family for the 3rd generation iPad Pro)
|
17
|
+
in its filename to be assigned the correct display family and to be uploaded to
|
18
|
+
the correct screenshot slot in your app's metadata.
|
19
|
+
|
20
|
+
### Other Platforms
|
21
|
+
|
22
|
+
#### Apple TV
|
23
|
+
|
24
|
+
Apple TV screenshots should be stored in a subdirectory named `appleTV` with language
|
25
|
+
folders inside of it.
|
26
|
+
|
27
|
+
#### iMessage
|
28
|
+
|
29
|
+
iMessage screenshots, like the Apple TV ones, should also be stored in a subdirectory
|
30
|
+
named `iMessage`, with language folders inside of it.
|
@@ -322,10 +322,10 @@ module Deliver
|
|
322
322
|
|
323
323
|
def self.resolve_ipadpro_conflict_if_needed(screen_size, filename)
|
324
324
|
is_3rd_gen = [
|
325
|
-
"iPad Pro (12.9-inch) (3rd generation)", #
|
326
|
-
"iPad Pro (12.9-inch) (4th generation)", #
|
327
|
-
"
|
328
|
-
"
|
325
|
+
"iPad Pro (12.9-inch) (3rd generation)", # Default simulator has this name
|
326
|
+
"iPad Pro (12.9-inch) (4th generation)", # Default simulator has this name
|
327
|
+
"IPAD_PRO_3GEN_129", # Screenshots downloaded from App Store Connect has this name
|
328
|
+
"ipadPro129" # Legacy: screenshots downloaded from iTunes Connect used to have this name
|
329
329
|
].any? { |key| filename.include?(key) }
|
330
330
|
if is_3rd_gen
|
331
331
|
if screen_size == ScreenSize::IOS_IPAD_PRO
|
@@ -186,7 +186,7 @@ module Deliver
|
|
186
186
|
end
|
187
187
|
|
188
188
|
transporter = transporter_for_selected_team
|
189
|
-
result = transporter.upload(package_path: package_path)
|
189
|
+
result = transporter.upload(package_path: package_path, asset_path: upload_ipa || upload_pkg)
|
190
190
|
|
191
191
|
unless result
|
192
192
|
transporter_errors = transporter.displayable_errors
|
@@ -157,7 +157,7 @@ module Deliver
|
|
157
157
|
|
158
158
|
UI.verbose('Uploading jobs are completed')
|
159
159
|
|
160
|
-
Helper.show_loading_indicator("Waiting for all the screenshots processed...")
|
160
|
+
Helper.show_loading_indicator("Waiting for all the screenshots to finish being processed...")
|
161
161
|
states = wait_for_complete(iterator)
|
162
162
|
Helper.hide_loading_indicator
|
163
163
|
retry_upload_screenshots_if_needed(iterator, states, total_number_of_screenshots, tries, localizations, screenshots_per_language)
|
@@ -9,9 +9,18 @@ module Fastlane
|
|
9
9
|
|
10
10
|
class AppStoreBuildNumberAction < Action
|
11
11
|
def self.run(params)
|
12
|
+
build_v, build_nr = get_build_version_and_number(params)
|
13
|
+
|
14
|
+
Actions.lane_context[SharedValues::LATEST_BUILD_NUMBER] = build_nr
|
15
|
+
Actions.lane_context[SharedValues::LATEST_VERSION] = build_v
|
16
|
+
|
17
|
+
return build_nr
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.get_build_version_and_number(params)
|
12
21
|
require 'spaceship'
|
13
22
|
|
14
|
-
result =
|
23
|
+
result = get_build_info(params)
|
15
24
|
build_nr = result.build_nr
|
16
25
|
|
17
26
|
# Convert build_nr to int (for legacy use) if no "." in string
|
@@ -19,13 +28,10 @@ module Fastlane
|
|
19
28
|
build_nr = build_nr.to_i
|
20
29
|
end
|
21
30
|
|
22
|
-
|
23
|
-
Actions.lane_context[SharedValues::LATEST_VERSION] = result.build_v
|
24
|
-
|
25
|
-
return build_nr
|
31
|
+
return result.build_v, build_nr
|
26
32
|
end
|
27
33
|
|
28
|
-
def self.
|
34
|
+
def self.get_build_info(params)
|
29
35
|
# Prompts select team if multiple teams and none specified
|
30
36
|
if (api_token = Spaceship::ConnectAPI::Token.from(hash: params[:api_key], filepath: params[:api_key_path]))
|
31
37
|
UI.message("Creating authorization token for App Store Connect API")
|
@@ -694,7 +694,7 @@ In this case, default values for keywords, urls, name and release notes are used
|
|
694
694
|
|
695
695
|
[Starting March 20, 2019 Apple's App Store](https://developer.apple.com/news/?id=03202019a) requires 12.9-inch iPad Pro (3rd generation) screenshots additionally to the iPad Pro 2nd generation [screenshots](https://help.apple.com/app-store-connect/#/devd274dd925). As fastlane historically uses the screenshot dimensions to determine the "display family" of a screenshot, this poses a problem as both use the same dimensions and are recognized as the same device family.
|
696
696
|
|
697
|
-
To solve this a screenshot of a 12.9-inch iPad Pro (3rd generation) must contain either the string `iPad Pro (12.9-inch) (3rd generation)` or `ipadPro129` (Apple's internal naming of the display family for the 3rd generation iPad Pro) in its filename to be assigned the correct display family and to be uploaded to the correct screenshot slot in your app's metadata.
|
697
|
+
To solve this a screenshot of a 12.9-inch iPad Pro (3rd generation) must contain either the string `iPad Pro (12.9-inch) (3rd generation)`, `IPAD_PRO_3GEN_129`, or `ipadPro129` (Apple's internal naming of the display family for the 3rd generation iPad Pro) in its filename to be assigned the correct display family and to be uploaded to the correct screenshot slot in your app's metadata.
|
698
698
|
|
699
699
|
## Automatically create screenshots
|
700
700
|
|
@@ -12,11 +12,18 @@ module Fastlane
|
|
12
12
|
require 'net/http'
|
13
13
|
require 'date'
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
Spaceship::ConnectAPI.
|
19
|
-
|
15
|
+
if (api_token = Spaceship::ConnectAPI::Token.from(hash: params[:api_key], filepath: params[:api_key_path]))
|
16
|
+
UI.message("Creating authorization token for App Store Connect API")
|
17
|
+
Spaceship::ConnectAPI.token = api_token
|
18
|
+
elsif !Spaceship::ConnectAPI.token.nil?
|
19
|
+
UI.message("Using existing authorization token for App Store Connect API")
|
20
|
+
else
|
21
|
+
# Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
|
22
|
+
# Prompts select team if multiple teams and none specified
|
23
|
+
UI.message("Login to App Store Connect (#{params[:username]})")
|
24
|
+
Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true)
|
25
|
+
UI.message("Login successful")
|
26
|
+
end
|
20
27
|
|
21
28
|
# Get App
|
22
29
|
app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
|
@@ -68,7 +75,7 @@ module Fastlane
|
|
68
75
|
|
69
76
|
filter = { app: app.id }
|
70
77
|
filter["preReleaseVersion.platform"] = platform
|
71
|
-
build_resps = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion").all_pages
|
78
|
+
build_resps = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion,buildBundles").all_pages
|
72
79
|
builds = build_resps.flat_map(&:to_models)
|
73
80
|
|
74
81
|
builds.each do |build|
|
@@ -107,31 +114,24 @@ module Fastlane
|
|
107
114
|
end
|
108
115
|
|
109
116
|
UI.verbose("Build_version: #{asc_build_number} matches #{build_number}, grabbing dsym_url") if build_number
|
110
|
-
|
117
|
+
|
118
|
+
build.build_bundles&.each do |build_bundle|
|
119
|
+
download_dsym(build_bundle: build_bundle, build: build, app: app, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
|
120
|
+
end
|
111
121
|
end
|
112
122
|
end
|
113
123
|
|
114
|
-
def self.
|
124
|
+
def self.download_dsym(build_bundle: nil, build: nil, app: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
|
115
125
|
start = Time.now
|
116
126
|
download_url = nil
|
117
127
|
|
118
128
|
loop do
|
119
|
-
|
120
|
-
resp = Spaceship::Tunes.client.build_details(app_id: app.id, train: train, build_number: build_number, platform: platform)
|
121
|
-
|
122
|
-
resp['apple_id'] = app.id
|
123
|
-
build_details = Spaceship::Tunes::BuildDetails.factory(resp)
|
124
|
-
|
125
|
-
download_url = build_details.dsym_url
|
126
|
-
UI.verbose("dsym_url: #{download_url}")
|
127
|
-
rescue Spaceship::TunesClient::ITunesConnectError => ex
|
128
|
-
UI.error("Error accessing dSYM file for build\n\n#{build}\n\nException: #{ex}")
|
129
|
-
end
|
129
|
+
download_url = build_bundle.dsym_url
|
130
130
|
|
131
131
|
unless download_url
|
132
132
|
if !wait_for_dsym_processing || (Time.now - start) > wait_timeout
|
133
133
|
# In some cases, AppStoreConnect does not process the dSYMs, thus no error should be thrown.
|
134
|
-
UI.message("Could not find any dSYM for #{
|
134
|
+
UI.message("Could not find any dSYM for #{build.version} (#{build.app_version})")
|
135
135
|
else
|
136
136
|
UI.message("Waiting for dSYM file to appear...")
|
137
137
|
sleep(30)
|
@@ -143,10 +143,10 @@ module Fastlane
|
|
143
143
|
end
|
144
144
|
|
145
145
|
if download_url
|
146
|
-
self.download(download_url,
|
147
|
-
return if
|
146
|
+
self.download(download_url, build, app, output_directory)
|
147
|
+
return if build.version
|
148
148
|
else
|
149
|
-
UI.message("No dSYM URL for #{
|
149
|
+
UI.message("No dSYM URL for #{build.version} (#{build.app_version})")
|
150
150
|
end
|
151
151
|
end
|
152
152
|
# rubocop:enable Metrics/PerceivedComplexity
|
@@ -154,7 +154,7 @@ module Fastlane
|
|
154
154
|
def self.get_latest_build!(app_id: nil, platform: nil)
|
155
155
|
filter = { app: app_id }
|
156
156
|
filter["preReleaseVersion.platform"] = platform
|
157
|
-
latest_build = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion").first
|
157
|
+
latest_build = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion,buildBundles").first
|
158
158
|
|
159
159
|
if latest_build.nil?
|
160
160
|
UI.user_error!("Could not find any build for platform #{platform}") if platform
|
@@ -164,18 +164,18 @@ module Fastlane
|
|
164
164
|
return latest_build
|
165
165
|
end
|
166
166
|
|
167
|
-
def self.download(download_url,
|
167
|
+
def self.download(download_url, build, app, output_directory)
|
168
168
|
result = self.download_file(download_url)
|
169
|
-
path = write_dsym(result, bundle_id,
|
170
|
-
UI.success("🔑 Successfully downloaded dSYM file for #{
|
169
|
+
path = write_dsym(result, app.bundle_id, build.app_version, build.version, output_directory)
|
170
|
+
UI.success("🔑 Successfully downloaded dSYM file for #{build.app_version} - #{build.version} to '#{path}'")
|
171
171
|
|
172
172
|
Actions.lane_context[SharedValues::DSYM_PATHS] ||= []
|
173
173
|
Actions.lane_context[SharedValues::DSYM_PATHS] << File.expand_path(path)
|
174
174
|
|
175
|
-
unless uploaded_date.nil?
|
176
|
-
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] ||= uploaded_date
|
175
|
+
unless build.uploaded_date.nil?
|
176
|
+
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] ||= build.uploaded_date
|
177
177
|
current_latest = Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]
|
178
|
-
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] = [current_latest, uploaded_date].max
|
178
|
+
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] = [current_latest, build.uploaded_date].max
|
179
179
|
UI.verbose("Most recent build uploaded_date #{Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]}")
|
180
180
|
end
|
181
181
|
end
|
@@ -234,6 +234,23 @@ module Fastlane
|
|
234
234
|
user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
235
235
|
|
236
236
|
[
|
237
|
+
FastlaneCore::ConfigItem.new(key: :api_key_path,
|
238
|
+
env_names: ["DOWNLOAD_DSYMS_API_KEY_PATH", "APP_STORE_CONNECT_API_KEY_PATH"],
|
239
|
+
description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
|
240
|
+
optional: true,
|
241
|
+
conflicting_options: [:api_key],
|
242
|
+
verify_block: proc do |value|
|
243
|
+
UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
|
244
|
+
end),
|
245
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
246
|
+
env_names: ["DOWNLOAD_DSYMS_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
247
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
|
248
|
+
type: Hash,
|
249
|
+
default_value: Fastlane::Actions.lane_context[Fastlane::Actions::SharedValues::APP_STORE_CONNECT_API_KEY],
|
250
|
+
default_value_dynamic: true,
|
251
|
+
optional: true,
|
252
|
+
sensitive: true,
|
253
|
+
conflicting_options: [:api_key_path]),
|
237
254
|
FastlaneCore::ConfigItem.new(key: :username,
|
238
255
|
short_option: "-u",
|
239
256
|
env_name: "DOWNLOAD_DSYMS_USERNAME",
|
@@ -109,8 +109,10 @@ module Fastlane
|
|
109
109
|
options = plist_files.keys
|
110
110
|
selected = UI.select("What build configuration would you like to use?", options)
|
111
111
|
plist_file = plist_files[selected]
|
112
|
-
|
112
|
+
elsif plist_files_count > 0
|
113
113
|
plist_file = plist_files.values.first
|
114
|
+
else
|
115
|
+
return nil
|
114
116
|
end
|
115
117
|
|
116
118
|
# $(SRCROOT) is the path of where the XcodeProject is
|
@@ -131,6 +133,8 @@ module Fastlane
|
|
131
133
|
end
|
132
134
|
|
133
135
|
def self.get_version_number_from_plist!(plist_file)
|
136
|
+
return '$(MARKETING_VERSION)' if plist_file.nil?
|
137
|
+
|
134
138
|
plist = Xcodeproj::Plist.read_from_path(plist_file)
|
135
139
|
UI.user_error!("Unable to read plist: #{plist_file}") unless plist
|
136
140
|
|
@@ -146,7 +150,7 @@ module Fastlane
|
|
146
150
|
end
|
147
151
|
|
148
152
|
def self.details
|
149
|
-
"This action will return the current version number set on your project."
|
153
|
+
"This action will return the current version number set on your project. It first looks in the plist and then for '$(MARKETING_VERSION)' in the build settings."
|
150
154
|
end
|
151
155
|
|
152
156
|
def self.available_options
|
@@ -258,8 +258,21 @@ module Fastlane
|
|
258
258
|
# ...
|
259
259
|
|
260
260
|
properties: {
|
261
|
-
"
|
262
|
-
"
|
261
|
+
"exampleNumber" => 100,
|
262
|
+
"exampleString" => "1.0.0",
|
263
|
+
# ...
|
264
|
+
}
|
265
|
+
)
|
266
|
+
```
|
267
|
+
|
268
|
+
You can use this to change the version code and name of your app:
|
269
|
+
```ruby
|
270
|
+
gradle(
|
271
|
+
# ...
|
272
|
+
|
273
|
+
properties: {
|
274
|
+
"android.injected.version.code" => 100,
|
275
|
+
"android.injected.version.name" => "1.0.0",
|
263
276
|
# ...
|
264
277
|
}
|
265
278
|
)
|
@@ -32,7 +32,7 @@ module Fastlane
|
|
32
32
|
def self.example_code
|
33
33
|
[
|
34
34
|
'commit = last_git_commit
|
35
|
-
|
35
|
+
pilot(changelog: commit[:message]) # message of commit
|
36
36
|
author = commit[:author] # author of the commit
|
37
37
|
author_email = commit[:author_email] # email of the author of the commit
|
38
38
|
hash = commit[:commit_hash] # long sha of commit
|