fastlane 2.193.1 → 2.197.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 +88 -88
- data/cert/lib/cert/options.rb +1 -1
- data/deliver/lib/assets/ScreenshotsHelp +29 -6
- data/deliver/lib/deliver/app_screenshot.rb +4 -4
- data/deliver/lib/deliver/options.rb +1 -1
- data/deliver/lib/deliver/upload_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -7
- 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/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 +3 -4
- data/fastlane/lib/fastlane/actions/notarize.rb +27 -18
- data/fastlane/lib/fastlane/actions/prompt.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +6 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +86 -99
- 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 +10 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- 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 +16 -16
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +1 -1
- 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/options.rb +11 -1
- data/match/lib/match/runner.rb +94 -10
- data/pem/lib/pem/manager.rb +2 -1
- data/pem/lib/pem/options.rb +1 -1
- data/pilot/lib/pilot/options.rb +1 -1
- data/precheck/lib/precheck/options.rb +1 -1
- data/screengrab/lib/screengrab/options.rb +2 -2
- data/sigh/lib/assets/resign.sh +9 -6
- data/sigh/lib/sigh/options.rb +6 -1
- 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 +9 -1
- data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
- 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/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 +10 -7
- metadata +39 -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: 471eff584bf9045c8387208af74f22d6556be211f98a16272b726d7354d7a12e
|
4
|
+
data.tar.gz: 66f352f900ba8669eb12a16d83f31b28372173207ef2c077312a029548429efd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4fc178fa1af1418d7967d29085def077bd3887d3922c4d1308781930ced91ed858d2b3b0032ae2b9116316c32ebba6ae3ee25fd4e4380a336a4e3c8874852fd
|
7
|
+
data.tar.gz: 354898d403d3829ecbf42627d8b6fe549a78374aa2412c568a53e2dd66b84f8a220e5a480f5e0b7d92c6e89d844b53de9b25cba961d1b9b4976291061e08673e
|
data/README.md
CHANGED
@@ -35,17 +35,23 @@ 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='josh-holtz'>
|
39
|
+
<a href='https://github.com/joshdholtz'>
|
40
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
41
41
|
</a>
|
42
|
-
<h4 align='center'><a href='https://twitter.com/
|
42
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
43
43
|
</td>
|
44
|
-
<td id='
|
45
|
-
<a href='https://github.com/
|
46
|
-
<img src='https://github.com/
|
44
|
+
<td id='fumiya-nakamura'>
|
45
|
+
<a href='https://github.com/nafu'>
|
46
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
47
47
|
</a>
|
48
|
-
<h4 align='center'><a href='https://twitter.com/
|
48
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
49
|
+
</td>
|
50
|
+
<td id='danielle-tomlinson'>
|
51
|
+
<a href='https://github.com/endocrimes'>
|
52
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
53
|
+
</a>
|
54
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
49
55
|
</td>
|
50
56
|
<td id='maksym-grebenets'>
|
51
57
|
<a href='https://github.com/mgrebenets'>
|
@@ -53,43 +59,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
53
59
|
</a>
|
54
60
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
55
61
|
</td>
|
56
|
-
<td id='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
59
|
-
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
61
|
-
</td>
|
62
|
-
<td id='luka-mirosevic'>
|
63
|
-
<a href='https://github.com/lmirosevic'>
|
64
|
-
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
62
|
+
<td id='satoshi-namai'>
|
63
|
+
<a href='https://github.com/ainame'>
|
64
|
+
<img src='https://github.com/ainame.png' width='140px;'>
|
65
65
|
</a>
|
66
|
-
<h4 align='center'><a href='https://twitter.com/
|
66
|
+
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</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='roger-oba'>
|
71
|
+
<a href='https://github.com/rogerluan'>
|
72
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
73
73
|
</a>
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
74
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
75
75
|
</td>
|
76
|
-
<td id='
|
77
|
-
<a href='https://github.com/
|
78
|
-
<img src='https://github.com/
|
76
|
+
<td id='matthew-ellis'>
|
77
|
+
<a href='https://github.com/matthewellis'>
|
78
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
79
79
|
</a>
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
80
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
81
81
|
</td>
|
82
|
-
<td id='
|
83
|
-
<a href='https://github.com/
|
84
|
-
<img src='https://github.com/
|
82
|
+
<td id='olivier-halligon'>
|
83
|
+
<a href='https://github.com/AliSoftware'>
|
84
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
85
85
|
</a>
|
86
|
-
<h4 align='center'><a href='https://twitter.com/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
87
87
|
</td>
|
88
|
-
<td id='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
88
|
+
<td id='helmut-januschka'>
|
89
|
+
<a href='https://github.com/hjanuschka'>
|
90
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
91
91
|
</a>
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
92
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
93
93
|
</td>
|
94
94
|
<td id='daniel-jankowski'>
|
95
95
|
<a href='https://github.com/mollyIV'>
|
@@ -99,17 +99,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
99
99
|
</td>
|
100
100
|
</tr>
|
101
101
|
<tr>
|
102
|
-
<td id='
|
103
|
-
<a href='https://github.com/
|
104
|
-
<img src='https://github.com/
|
105
|
-
</a>
|
106
|
-
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
107
|
-
</td>
|
108
|
-
<td id='matthew-ellis'>
|
109
|
-
<a href='https://github.com/matthewellis'>
|
110
|
-
<img src='https://github.com/matthewellis.png' width='140px;'>
|
102
|
+
<td id='jan-piotrowski'>
|
103
|
+
<a href='https://github.com/janpio'>
|
104
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
111
105
|
</a>
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
106
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
113
107
|
</td>
|
114
108
|
<td id='jorge-revuelta-h'>
|
115
109
|
<a href='https://github.com/minuscorp'>
|
@@ -117,25 +111,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
117
111
|
</a>
|
118
112
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
119
113
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
114
|
+
<td id='kohki-miki'>
|
115
|
+
<a href='https://github.com/giginet'>
|
116
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
123
117
|
</a>
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
125
119
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
120
|
+
<td id='aaron-brager'>
|
121
|
+
<a href='https://github.com/getaaron'>
|
122
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
129
123
|
</a>
|
130
|
-
<h4 align='center'>
|
124
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
125
|
+
</td>
|
126
|
+
<td id='luka-mirosevic'>
|
127
|
+
<a href='https://github.com/lmirosevic'>
|
128
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
129
|
+
</a>
|
130
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</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='felix-krause'>
|
135
|
+
<a href='https://github.com/KrauseFx'>
|
136
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
137
137
|
</a>
|
138
|
-
<h4 align='center'><a href='https://twitter.com/
|
138
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
139
139
|
</td>
|
140
140
|
<td id='jérôme-lacoste'>
|
141
141
|
<a href='https://github.com/lacostej'>
|
@@ -143,55 +143,55 @@ 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/lacostej'>Jérôme Lacoste</a></h4>
|
145
145
|
</td>
|
146
|
-
<td id='
|
147
|
-
<a href='https://github.com/
|
148
|
-
<img src='https://github.com/
|
146
|
+
<td id='jimmy-dee'>
|
147
|
+
<a href='https://github.com/jdee'>
|
148
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
149
149
|
</a>
|
150
|
-
<h4 align='center'
|
150
|
+
<h4 align='center'>Jimmy Dee</h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
152
|
+
<td id='manish-rathi'>
|
153
|
+
<a href='https://github.com/crazymanish'>
|
154
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
155
155
|
</a>
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
156
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
158
|
+
<td id='joshua-liebowitz'>
|
159
|
+
<a href='https://github.com/taquitos'>
|
160
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
161
161
|
</a>
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</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/
|
166
|
+
<td id='andrew-mcburney'>
|
167
|
+
<a href='https://github.com/armcburney'>
|
168
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
169
169
|
</a>
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
170
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
171
171
|
</td>
|
172
|
-
<td id='
|
173
|
-
<a href='https://github.com/
|
174
|
-
<img src='https://github.com/
|
172
|
+
<td id='max-ott'>
|
173
|
+
<a href='https://github.com/max-ott'>
|
174
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
175
175
|
</a>
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
176
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
177
177
|
</td>
|
178
|
-
<td id='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
178
|
+
<td id='stefan-natchev'>
|
179
|
+
<a href='https://github.com/snatchev'>
|
180
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
181
181
|
</a>
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
182
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
183
183
|
</td>
|
184
|
-
<td id='
|
185
|
-
<a href='https://github.com/
|
186
|
-
<img src='https://github.com/
|
184
|
+
<td id='iulian-onofrei'>
|
185
|
+
<a href='https://github.com/revolter'>
|
186
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
187
187
|
</a>
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
188
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
189
189
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
190
|
+
<td id='manu-wallner'>
|
191
|
+
<a href='https://github.com/milch'>
|
192
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
193
193
|
</a>
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
194
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
195
195
|
</td>
|
196
196
|
</tr>
|
197
197
|
</table>
|
data/cert/lib/cert/options.rb
CHANGED
@@ -47,7 +47,7 @@ module Cert
|
|
47
47
|
end),
|
48
48
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
49
49
|
env_names: ["CERT_API_KEY", "DELIVER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
50
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
50
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
51
51
|
type: Hash,
|
52
52
|
optional: true,
|
53
53
|
sensitive: true,
|
@@ -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
|
@@ -22,7 +22,7 @@ module Deliver
|
|
22
22
|
end),
|
23
23
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
24
24
|
env_names: ["DELIVER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
25
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
25
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
26
26
|
type: Hash,
|
27
27
|
optional: true,
|
28
28
|
sensitive: true,
|
@@ -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")
|
@@ -125,7 +131,7 @@ module Fastlane
|
|
125
131
|
end),
|
126
132
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
127
133
|
env_names: ["APPSTORE_BUILD_NUMBER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
128
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
134
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
129
135
|
type: Hash,
|
130
136
|
default_value: Fastlane::Actions.lane_context[Fastlane::Actions::SharedValues::APP_STORE_CONNECT_API_KEY],
|
131
137
|
default_value_dynamic: true,
|
@@ -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",
|
@@ -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
|
@@ -9,9 +9,8 @@ module Fastlane
|
|
9
9
|
|
10
10
|
class LatestTestflightBuildNumberAction < Action
|
11
11
|
def self.run(params)
|
12
|
-
AppStoreBuildNumberAction.
|
13
|
-
|
14
|
-
build_v = Actions.lane_context[SharedValues::LATEST_VERSION]
|
12
|
+
build_v, build_nr = AppStoreBuildNumberAction.get_build_version_and_number(params)
|
13
|
+
|
15
14
|
Actions.lane_context[SharedValues::LATEST_TESTFLIGHT_BUILD_NUMBER] = build_nr
|
16
15
|
Actions.lane_context[SharedValues::LATEST_TESTFLIGHT_VERSION] = build_v
|
17
16
|
return build_nr
|
@@ -47,7 +46,7 @@ module Fastlane
|
|
47
46
|
end),
|
48
47
|
FastlaneCore::ConfigItem.new(key: :api_key,
|
49
48
|
env_names: ["APPSTORE_BUILD_NUMBER_API_KEY", "APP_STORE_CONNECT_API_KEY"],
|
50
|
-
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#
|
49
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
|
51
50
|
type: Hash,
|
52
51
|
optional: true,
|
53
52
|
sensitive: true,
|