fastlane 2.216.0 → 2.217.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 +7 -0
- data/deliver/lib/deliver/runner.rb +2 -1
- data/deliver/lib/deliver/upload_metadata.rb +58 -13
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +6 -2
- data/fastlane/lib/fastlane/actions/git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/install_on_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +17 -2
- data/fastlane/lib/fastlane/actions/slather.rb +17 -4
- data/fastlane/lib/fastlane/helper/git_helper.rb +3 -0
- data/fastlane/lib/fastlane/lane.rb +9 -1
- data/fastlane/lib/fastlane/runner.rb +1 -1
- 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 +22 -6
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.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 +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +18 -28
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +1 -1
- data/fastlane_core/lib/fastlane_core/project.rb +4 -0
- data/fastlane_core/lib/fastlane_core/queue_worker.rb +1 -1
- data/gym/lib/gym/module.rb +13 -2
- data/gym/lib/gym/options.rb +1 -1
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/runner.rb +11 -5
- data/match/lib/match/storage/git_storage.rb +9 -1
- data/precheck/lib/precheck/rules/unreachable_urls_rule.rb +1 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +13 -9
- data/snapshot/lib/snapshot/reports_generator.rb +48 -7
- data/spaceship/lib/spaceship/connect_api/api_client.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +4 -4
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/models/device.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +3 -2
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +14 -8
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +0 -3
- data/supply/lib/supply/uploader.rb +28 -13
- data/trainer/lib/trainer/xcresult.rb +1 -1
- metadata +25 -28
- data/fastlane/lib/fastlane/.features.rb.swp +0 -0
- data/fastlane_core/lib/fastlane_core/.env.rb.swp +0 -0
- data/supply/lib/supply/.client.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e01e5f95c0f041f81a6d2865261a7bf02a4edc77c8e3e7d0d42fdccc93a9eab3
|
4
|
+
data.tar.gz: 2f9e98e9d81c4035378505cbf6e3d18cffd680ed3d3c6d8bab31b3be8e7f9a70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e43d45ef9b768b1eba630e1148a9f31f7b356a63977fea8fa45262c0d18a0e952c36e7208654f2b11dcfcb207a2a753b2b7e5820d9a9b209f87954f8048414b
|
7
|
+
data.tar.gz: 2177260881cd3aab9d3b7b5542cfc526a4140eb5707108ea346146a2e2da19b3edf627d8013aa7b71b07df5df0a9571d5d0af474dd611f0871cf9339cc6addf9
|
data/README.md
CHANGED
@@ -35,67 +35,67 @@ 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='jimmy-dee'>
|
39
|
+
<a href='https://github.com/jdee'>
|
40
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
41
41
|
</a>
|
42
|
-
<h4 align='center'
|
42
|
+
<h4 align='center'>Jimmy Dee</h4>
|
43
43
|
</td>
|
44
|
-
<td id='
|
45
|
-
<a href='https://github.com/
|
46
|
-
<img src='https://github.com/
|
44
|
+
<td id='andrew-mcburney'>
|
45
|
+
<a href='https://github.com/armcburney'>
|
46
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
47
47
|
</a>
|
48
|
-
<h4 align='center'
|
48
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
49
49
|
</td>
|
50
|
-
<td id='
|
51
|
-
<a href='https://github.com/
|
52
|
-
<img src='https://github.com/
|
50
|
+
<td id='joshua-liebowitz'>
|
51
|
+
<a href='https://github.com/taquitos'>
|
52
|
+
<img src='https://github.com/taquitos.png' width='140px;'>
|
53
53
|
</a>
|
54
|
-
<h4 align='center'><a href='https://twitter.com/
|
54
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
55
55
|
</td>
|
56
|
-
<td id='
|
57
|
-
<a href='https://github.com/
|
58
|
-
<img src='https://github.com/
|
56
|
+
<td id='max-ott'>
|
57
|
+
<a href='https://github.com/max-ott'>
|
58
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
59
59
|
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/
|
60
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
61
61
|
</td>
|
62
|
-
<td id='
|
63
|
-
<a href='https://github.com/
|
64
|
-
<img src='https://github.com/
|
62
|
+
<td id='jan-piotrowski'>
|
63
|
+
<a href='https://github.com/janpio'>
|
64
|
+
<img src='https://github.com/janpio.png' width='140px;'>
|
65
65
|
</a>
|
66
|
-
<h4 align='center'><a href='https://twitter.com/
|
66
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</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='olivier-halligon'>
|
71
|
+
<a href='https://github.com/AliSoftware'>
|
72
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
73
73
|
</a>
|
74
|
-
<h4 align='center'><a href='https://twitter.com/
|
74
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
75
75
|
</td>
|
76
|
-
<td id='
|
77
|
-
<a href='https://github.com/
|
78
|
-
<img src='https://github.com/
|
76
|
+
<td id='josh-holtz'>
|
77
|
+
<a href='https://github.com/joshdholtz'>
|
78
|
+
<img src='https://github.com/joshdholtz.png' width='140px;'>
|
79
79
|
</a>
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
80
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
81
81
|
</td>
|
82
|
-
<td id='
|
83
|
-
<a href='https://github.com/
|
84
|
-
<img src='https://github.com/
|
82
|
+
<td id='aaron-brager'>
|
83
|
+
<a href='https://github.com/getaaron'>
|
84
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
85
85
|
</a>
|
86
|
-
<h4 align='center'><a href='https://twitter.com/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
87
87
|
</td>
|
88
|
-
<td id='
|
89
|
-
<a href='https://github.com/
|
90
|
-
<img src='https://github.com/
|
88
|
+
<td id='roger-oba'>
|
89
|
+
<a href='https://github.com/rogerluan'>
|
90
|
+
<img src='https://github.com/rogerluan.png' width='140px;'>
|
91
91
|
</a>
|
92
|
-
<h4 align='center'><a href='https://twitter.com/
|
92
|
+
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
93
93
|
</td>
|
94
|
-
<td id='
|
95
|
-
<a href='https://github.com/
|
96
|
-
<img src='https://github.com/
|
94
|
+
<td id='matthew-ellis'>
|
95
|
+
<a href='https://github.com/matthewellis'>
|
96
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
97
97
|
</a>
|
98
|
-
<h4 align='center'><a href='https://twitter.com/
|
98
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
99
99
|
</td>
|
100
100
|
</tr>
|
101
101
|
<tr>
|
@@ -105,61 +105,61 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
105
105
|
</a>
|
106
106
|
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
107
107
|
</td>
|
108
|
-
<td id='
|
109
|
-
<a href='https://github.com/
|
110
|
-
<img src='https://github.com/
|
108
|
+
<td id='maksym-grebenets'>
|
109
|
+
<a href='https://github.com/mgrebenets'>
|
110
|
+
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
111
111
|
</a>
|
112
|
-
<h4 align='center'><a href='https://twitter.com/
|
112
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
113
113
|
</td>
|
114
|
-
<td id='
|
115
|
-
<a href='https://github.com/
|
116
|
-
<img src='https://github.com/
|
114
|
+
<td id='danielle-tomlinson'>
|
115
|
+
<a href='https://github.com/endocrimes'>
|
116
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
117
117
|
</a>
|
118
|
-
<h4 align='center'><a href='https://twitter.com/
|
118
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
119
119
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
120
|
+
<td id='kohki-miki'>
|
121
|
+
<a href='https://github.com/giginet'>
|
122
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
123
123
|
</a>
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
124
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
125
125
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
126
|
+
<td id='manu-wallner'>
|
127
|
+
<a href='https://github.com/milch'>
|
128
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
129
129
|
</a>
|
130
|
-
<h4 align='center'><a href='https://twitter.com/
|
130
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</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='jorge-revuelta-h'>
|
135
|
+
<a href='https://github.com/minuscorp'>
|
136
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
137
137
|
</a>
|
138
|
-
<h4 align='center'><a href='https://twitter.com/
|
138
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
139
139
|
</td>
|
140
|
-
<td id='
|
141
|
-
<a href='https://github.com/
|
142
|
-
<img src='https://github.com/
|
140
|
+
<td id='łukasz-grabowski'>
|
141
|
+
<a href='https://github.com/lucgrabowski'>
|
142
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
143
143
|
</a>
|
144
|
-
<h4 align='center'
|
144
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
145
145
|
</td>
|
146
|
-
<td id='
|
147
|
-
<a href='https://github.com/
|
148
|
-
<img src='https://github.com/
|
146
|
+
<td id='fumiya-nakamura'>
|
147
|
+
<a href='https://github.com/nafu'>
|
148
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
149
149
|
</a>
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
151
151
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
152
|
+
<td id='stefan-natchev'>
|
153
|
+
<a href='https://github.com/snatchev'>
|
154
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
155
155
|
</a>
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
156
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
157
157
|
</td>
|
158
|
-
<td id='
|
159
|
-
<a href='https://github.com/
|
160
|
-
<img src='https://github.com/
|
158
|
+
<td id='luka-mirosevic'>
|
159
|
+
<a href='https://github.com/lmirosevic'>
|
160
|
+
<img src='https://github.com/lmirosevic.png' width='140px;'>
|
161
161
|
</a>
|
162
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
163
163
|
</td>
|
164
164
|
</tr>
|
165
165
|
<tr>
|
@@ -169,37 +169,37 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
169
169
|
</a>
|
170
170
|
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
171
171
|
</td>
|
172
|
-
<td id='
|
173
|
-
<a href='https://github.com/
|
174
|
-
<img src='https://github.com/
|
172
|
+
<td id='jérôme-lacoste'>
|
173
|
+
<a href='https://github.com/lacostej'>
|
174
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
175
175
|
</a>
|
176
|
-
<h4 align='center'><a href='https://twitter.com/
|
176
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
177
177
|
</td>
|
178
|
-
<td id='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
178
|
+
<td id='daniel-jankowski'>
|
179
|
+
<a href='https://github.com/mollyIV'>
|
180
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
181
181
|
</a>
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
182
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
183
183
|
</td>
|
184
|
-
<td id='
|
185
|
-
<a href='https://github.com/
|
186
|
-
<img src='https://github.com/
|
184
|
+
<td id='felix-krause'>
|
185
|
+
<a href='https://github.com/KrauseFx'>
|
186
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
187
187
|
</a>
|
188
|
-
<h4 align='center'><a href='https://twitter.com/
|
188
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
189
189
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
190
|
+
<td id='helmut-januschka'>
|
191
|
+
<a href='https://github.com/hjanuschka'>
|
192
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
193
193
|
</a>
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
194
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</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='iulian-onofrei'>
|
199
|
+
<a href='https://github.com/revolter'>
|
200
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
201
201
|
</a>
|
202
|
-
<h4 align='center'>
|
202
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
203
203
|
</td>
|
204
204
|
</table>
|
205
205
|
|
@@ -69,6 +69,8 @@ module Deliver
|
|
69
69
|
IOS_APPLE_WATCH_SERIES4 = "iOS-Apple-Watch-Series4"
|
70
70
|
# Apple Watch Series 7
|
71
71
|
IOS_APPLE_WATCH_SERIES7 = "iOS-Apple-Watch-Series7"
|
72
|
+
# Apple Watch Ultra
|
73
|
+
IOS_APPLE_WATCH_ULTRA = "iOS-Apple-Watch-Ultra"
|
72
74
|
|
73
75
|
# Apple TV
|
74
76
|
APPLE_TV = "Apple-TV"
|
@@ -128,6 +130,7 @@ module Deliver
|
|
128
130
|
ScreenSize::IOS_APPLE_WATCH => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_3,
|
129
131
|
ScreenSize::IOS_APPLE_WATCH_SERIES4 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_4,
|
130
132
|
ScreenSize::IOS_APPLE_WATCH_SERIES7 => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_SERIES_7,
|
133
|
+
ScreenSize::IOS_APPLE_WATCH_ULTRA => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_WATCH_ULTRA,
|
131
134
|
ScreenSize::APPLE_TV => Spaceship::ConnectAPI::AppScreenshotSet::DisplayType::APP_APPLE_TV
|
132
135
|
}
|
133
136
|
return matching[self.screen_size]
|
@@ -165,6 +168,7 @@ module Deliver
|
|
165
168
|
ScreenSize::IOS_APPLE_WATCH => "Watch",
|
166
169
|
ScreenSize::IOS_APPLE_WATCH_SERIES4 => "Watch Series4",
|
167
170
|
ScreenSize::IOS_APPLE_WATCH_SERIES7 => "Watch Series7",
|
171
|
+
ScreenSize::IOS_APPLE_WATCH_ULTRA => "Watch Ultra",
|
168
172
|
ScreenSize::APPLE_TV => "Apple TV"
|
169
173
|
}
|
170
174
|
return matching[self.screen_size]
|
@@ -340,6 +344,9 @@ module Deliver
|
|
340
344
|
ScreenSize::IOS_APPLE_WATCH_SERIES7 => [
|
341
345
|
[396, 484]
|
342
346
|
],
|
347
|
+
ScreenSize::IOS_APPLE_WATCH_ULTRA => [
|
348
|
+
[410, 502]
|
349
|
+
],
|
343
350
|
ScreenSize::APPLE_TV => [
|
344
351
|
[1920, 1080],
|
345
352
|
[3840, 2160]
|
@@ -231,7 +231,8 @@ module Deliver
|
|
231
231
|
|
232
232
|
unless result
|
233
233
|
transporter_errors = transporter.displayable_errors
|
234
|
-
|
234
|
+
file_type = platform == "osx" ? "pkg" : "ipa"
|
235
|
+
UI.user_error!("Error uploading #{file_type} file: \n #{transporter_errors}")
|
235
236
|
end
|
236
237
|
end
|
237
238
|
|
@@ -89,7 +89,8 @@ module Deliver
|
|
89
89
|
enabled_languages = detect_languages(options)
|
90
90
|
|
91
91
|
app_store_version_localizations = verify_available_version_languages!(options, app, enabled_languages) unless options[:edit_live]
|
92
|
-
|
92
|
+
app_info = fetch_edit_app_info(app)
|
93
|
+
app_info_localizations = verify_available_info_languages!(options, app, app_info, enabled_languages) unless options[:edit_live] || !updating_localized_app_info?(options, app, app_info)
|
93
94
|
|
94
95
|
if options[:edit_live]
|
95
96
|
# not all values are editable when using live_version
|
@@ -211,18 +212,19 @@ module Deliver
|
|
211
212
|
store_version_worker.start
|
212
213
|
|
213
214
|
# Update app info localizations
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
215
|
+
if app_info_localizations
|
216
|
+
app_info_worker = FastlaneCore::QueueWorker.new do |app_info_localization|
|
217
|
+
attributes = localized_info_attributes_by_locale[app_info_localization.locale]
|
218
|
+
if attributes
|
219
|
+
UI.message("Uploading metadata to App Store Connect for localized info '#{app_info_localization.locale}'")
|
220
|
+
app_info_localization.update(attributes: attributes)
|
221
|
+
end
|
219
222
|
end
|
223
|
+
app_info_worker.batch_enqueue(app_info_localizations)
|
224
|
+
app_info_worker.start
|
220
225
|
end
|
221
|
-
app_info_worker.batch_enqueue(app_info_localizations)
|
222
|
-
app_info_worker.start
|
223
226
|
|
224
227
|
# Update categories
|
225
|
-
app_info = fetch_edit_app_info(app)
|
226
228
|
if app_info
|
227
229
|
category_id_map = {}
|
228
230
|
|
@@ -437,6 +439,12 @@ module Deliver
|
|
437
439
|
end
|
438
440
|
end
|
439
441
|
|
442
|
+
def fetch_live_app_info(app, wait_time: 10)
|
443
|
+
retry_if_nil("Cannot find live app info", wait_time: wait_time) do
|
444
|
+
app.fetch_live_app_info
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
440
448
|
def retry_if_nil(message, tries: 5, wait_time: 10)
|
441
449
|
loop do
|
442
450
|
tries -= 1
|
@@ -451,12 +459,49 @@ module Deliver
|
|
451
459
|
end
|
452
460
|
end
|
453
461
|
|
454
|
-
#
|
455
|
-
def
|
456
|
-
app_info
|
462
|
+
# Checking if the metadata to update includes localised App Info
|
463
|
+
def updating_localized_app_info?(options, app, app_info)
|
464
|
+
app_info ||= fetch_live_app_info(app)
|
465
|
+
unless app_info
|
466
|
+
UI.important("Can't find edit or live App info. Skipping upload.")
|
467
|
+
return false
|
468
|
+
end
|
469
|
+
localizations = app_info.get_app_info_localizations
|
470
|
+
|
471
|
+
LOCALISED_APP_VALUES.keys.each do |key|
|
472
|
+
current = options[key]
|
473
|
+
next unless current
|
474
|
+
|
475
|
+
unless current.kind_of?(Hash)
|
476
|
+
UI.error("Error with provided '#{key}'. Must be a hash, the key being the language.")
|
477
|
+
next
|
478
|
+
end
|
479
|
+
|
480
|
+
current.each do |language, value|
|
481
|
+
strip_value = value.to_s.strip
|
482
|
+
next if strip_value.empty?
|
483
|
+
|
484
|
+
app_info_locale = localizations.find { |l| l.locale == language }
|
485
|
+
next if app_info_locale.nil?
|
457
486
|
|
487
|
+
begin
|
488
|
+
current_value = app_info_locale.public_send(key.to_sym)
|
489
|
+
rescue NoMethodError
|
490
|
+
next
|
491
|
+
end
|
492
|
+
|
493
|
+
return true if current_value != strip_value
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
UI.message('No changes to localized App Info detected. Skipping upload.')
|
498
|
+
return false
|
499
|
+
end
|
500
|
+
|
501
|
+
# Finding languages to enable
|
502
|
+
def verify_available_info_languages!(options, app, app_info, languages)
|
458
503
|
unless app_info
|
459
|
-
UI.user_error!("Cannot update languages - could not find an editable
|
504
|
+
UI.user_error!("Cannot update languages - could not find an editable 'App Info'. Verify that your app is in one of the editable states in App Store Connect")
|
460
505
|
return
|
461
506
|
end
|
462
507
|
|
@@ -441,7 +441,7 @@ fastlane deliver submit_build --build_number 830 --submission_information "{\"ex
|
|
441
441
|
|
442
442
|
### App Privacy Details
|
443
443
|
|
444
|
-
Starting on December 8, 2020, Apple announced that developers are required to provide app privacy details that will help users understand an app's privacy
|
444
|
+
Starting on December 8, 2020, Apple announced that developers are required to provide app privacy details that will help users understand an app's privacy practices. _deliver_ does not allow for updating of this information but this can be done with the _upload_app_privacy_details_to_app_store_ action. More information on [Uploading App Privacy Details](https://docs.fastlane.tools/uploading-app-privacy-details)
|
445
445
|
|
446
446
|
# Credentials
|
447
447
|
|
@@ -179,6 +179,12 @@ This can be done using the `--track_promote_to` parameter. The `--track_promote_
|
|
179
179
|
Before performing a new APK upload you may want to check existing track version codes or release names, or you may simply want to provide an informational lane that displays the currently promoted version codes or release name for the production track. You can use the `google_play_track_version_codes` action to retrieve existing version codes for a package and track. You can use the `google_play_track_release_names` action to retrieve existing release names for a package and track.
|
180
180
|
For more information, see the `fastlane action google_play_track_version_codes` and `fastlane action google_play_track_release_names` help output.
|
181
181
|
|
182
|
+
## Parallel uploads
|
183
|
+
|
184
|
+
By default _supply_ will spawn 10 threads to upload the metadata concurrently (_images, screenshots, texts_). If you want to change this, set either `DELIVER_NUMBER_OF_THREADS` or `FL_NUMBER_OF_THREADS` environment variable to any value between 1 and 10.
|
185
|
+
|
186
|
+
If you want _supply_ to upload with more than 10 threads in parallel then you need to **additionally** set `FL_MAX_NUMBER_OF_THREADS` environment variable to the max number of parallel upload threads you wish to have (**Warning ⚠️** use this at your own risk!).
|
187
|
+
|
182
188
|
## Migration from AndroidPublisherV2 to AndroidPublisherV3 in _fastlane_ 2.135.0
|
183
189
|
|
184
190
|
### New Options
|
@@ -200,5 +206,3 @@ For more information, see the `fastlane action google_play_track_version_codes`
|
|
200
206
|
- Google Play will automatically remove releases that are superseded now
|
201
207
|
- `:deactivate_on_promote`
|
202
208
|
- Google Play will automatically deactivate a release from its previous track on promote
|
203
|
-
|
204
|
-
:
|
@@ -16,7 +16,7 @@ module Fastlane
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.details
|
19
|
-
"If no branch could be found, this action will return an empty string. This is a wrapper for the internal action Actions.git_branch"
|
19
|
+
"If no branch could be found, this action will return an empty string. If `FL_GIT_BRANCH_DONT_USE_ENV_VARS` is `true`, it'll ignore CI ENV vars. This is a wrapper for the internal action Actions.git_branch"
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.available_options
|
@@ -68,7 +68,7 @@ module Fastlane
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def self.details
|
71
|
-
"Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `
|
71
|
+
"Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `brew install ios-deploy`"
|
72
72
|
end
|
73
73
|
|
74
74
|
def self.is_supported?(platform)
|
@@ -139,6 +139,7 @@ module Fastlane
|
|
139
139
|
FastlaneCore::ConfigItem.new(key: :password,
|
140
140
|
env_name: "FL_NEXUS_PASSWORD",
|
141
141
|
description: "Nexus password",
|
142
|
+
sensitive: true,
|
142
143
|
optional: false),
|
143
144
|
FastlaneCore::ConfigItem.new(key: :ssl_verify,
|
144
145
|
env_name: "FL_NEXUS_SSL_VERIFY",
|
@@ -85,9 +85,9 @@ module Fastlane
|
|
85
85
|
notarization_info = JSON.parse(submit_response)
|
86
86
|
|
87
87
|
# Staple
|
88
|
+
submission_id = notarization_info["id"]
|
88
89
|
case notarization_info['status']
|
89
90
|
when 'Accepted'
|
90
|
-
submission_id = notarization_info["id"]
|
91
91
|
UI.success("Successfully uploaded package to notarization service with request identifier #{submission_id}")
|
92
92
|
|
93
93
|
if skip_stapling
|
@@ -100,7 +100,22 @@ module Fastlane
|
|
100
100
|
UI.success("Successfully notarized and stapled package")
|
101
101
|
end
|
102
102
|
when 'Invalid'
|
103
|
-
|
103
|
+
if submission_id && print_log
|
104
|
+
log_request_parts = [
|
105
|
+
"xcrun notarytool log #{submission_id}"
|
106
|
+
] + auth_parts
|
107
|
+
log_request_command = log_request_parts.join(' ')
|
108
|
+
log_request_response = Actions.sh(
|
109
|
+
log_request_command,
|
110
|
+
log: verbose,
|
111
|
+
error_callback: lambda { |msg|
|
112
|
+
UI.error("Error requesting the notarization log: #{msg}")
|
113
|
+
}
|
114
|
+
)
|
115
|
+
UI.user_error!("Could not notarize package with message '#{log_request_response}'")
|
116
|
+
else
|
117
|
+
UI.user_error!("Could not notarize package. To see the error, please set 'print_log' to true.")
|
118
|
+
end
|
104
119
|
else
|
105
120
|
UI.crash!("Could not notarize package with status '#{notarization_info['status']}'")
|
106
121
|
end
|
@@ -35,7 +35,8 @@ module Fastlane
|
|
35
35
|
binary_basename: '--binary-basename',
|
36
36
|
arch: '--arch',
|
37
37
|
source_files: '--source-files',
|
38
|
-
decimals: '--decimals'
|
38
|
+
decimals: '--decimals',
|
39
|
+
ymlfile: '--ymlfile'
|
39
40
|
}.freeze
|
40
41
|
|
41
42
|
def self.run(params)
|
@@ -51,8 +52,8 @@ module Fastlane
|
|
51
52
|
sh(command)
|
52
53
|
end
|
53
54
|
|
54
|
-
def self.has_config_file
|
55
|
-
File.file?('.slather.yml')
|
55
|
+
def self.has_config_file?(params)
|
56
|
+
params[:ymlfile] ? File.file?(params[:ymlfile]) : File.file?('.slather.yml')
|
56
57
|
end
|
57
58
|
|
58
59
|
def self.slather_version
|
@@ -64,12 +65,20 @@ module Fastlane
|
|
64
65
|
Gem::Version.new('2.4.1') <= Gem::Version.new(slather_version)
|
65
66
|
end
|
66
67
|
|
68
|
+
def self.ymlfile_available?
|
69
|
+
Gem::Version.new('2.8.0') <= Gem::Version.new(slather_version)
|
70
|
+
end
|
71
|
+
|
67
72
|
def self.validate_params!(params)
|
68
73
|
if params[:configuration]
|
69
74
|
UI.user_error!('configuration option is available since version 2.4.1') unless configuration_available?
|
70
75
|
end
|
71
76
|
|
72
|
-
if params[:
|
77
|
+
if params[:ymlfile]
|
78
|
+
UI.user_error!('ymlfile option is available since version 2.8.0') unless ymlfile_available?
|
79
|
+
end
|
80
|
+
|
81
|
+
if params[:proj] || has_config_file?(params)
|
73
82
|
true
|
74
83
|
else
|
75
84
|
UI.user_error!("You have to provide a project with `:proj` or use a .slather.yml")
|
@@ -285,6 +294,10 @@ module Fastlane
|
|
285
294
|
description: "The amount of decimals to use for % coverage reporting",
|
286
295
|
skip_type_validation: true, # allow Integer, String
|
287
296
|
default_value: false,
|
297
|
+
optional: true),
|
298
|
+
FastlaneCore::ConfigItem.new(key: :ymlfile,
|
299
|
+
env_name: "FL_SLATHER_YMLFILE",
|
300
|
+
description: "Relative path to a file used in place of '.slather.yml'",
|
288
301
|
optional: true)
|
289
302
|
]
|
290
303
|
end
|
@@ -121,7 +121,10 @@ module Fastlane
|
|
121
121
|
|
122
122
|
# Returns the current git branch, or "HEAD" if it's not checked out to any branch
|
123
123
|
# Can be replaced using the environment variable `GIT_BRANCH`
|
124
|
+
# unless `FL_GIT_BRANCH_DONT_USE_ENV_VARS` is `true`
|
124
125
|
def self.git_branch
|
126
|
+
return self.git_branch_name_using_HEAD if FastlaneCore::Env.truthy?('FL_GIT_BRANCH_DONT_USE_ENV_VARS')
|
127
|
+
|
125
128
|
env_name = SharedValues::GIT_BRANCH_ENV_VARS.find { |env_var| FastlaneCore::Env.truthy?(env_var) }
|
126
129
|
ENV.fetch(env_name.to_s) do
|
127
130
|
self.git_branch_name_using_HEAD
|
@@ -24,11 +24,19 @@ module Fastlane
|
|
24
24
|
self.platform = platform
|
25
25
|
self.name = name
|
26
26
|
self.description = description
|
27
|
-
|
27
|
+
# We want to support _both_ lanes expecting a `Hash` (like `lane :foo do |options|`), and lanes expecting
|
28
|
+
# keyword parameters (like `lane :foo do |param1:, param2:, param3: 'default value'|`)
|
29
|
+
block_expects_keywords = !block.nil? && block.parameters.any? { |type, _| [:key, :keyreq].include?(type) }
|
30
|
+
# Conversion of the `Hash` parameters (passed by `Lane#call`) into keywords has to be explicit in Ruby 3
|
31
|
+
# https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
|
32
|
+
self.block = block_expects_keywords ? proc { |options| block.call(**options) } : block
|
28
33
|
self.is_private = is_private
|
29
34
|
end
|
30
35
|
|
31
36
|
# Execute this lane
|
37
|
+
#
|
38
|
+
# @param [Hash] parameters The Hash of parameters to pass to the lane
|
39
|
+
#
|
32
40
|
def call(parameters)
|
33
41
|
block.call(parameters || {})
|
34
42
|
end
|
@@ -15,7 +15,7 @@ module Fastlane
|
|
15
15
|
|
16
16
|
# This will take care of executing **one** lane. That's when the user triggers a lane from the CLI for example
|
17
17
|
# This method is **not** executed when switching a lane
|
18
|
-
# @param
|
18
|
+
# @param lane The name of the lane to execute
|
19
19
|
# @param platform The name of the platform to execute
|
20
20
|
# @param parameters [Hash] The parameters passed from the command line to the lane
|
21
21
|
def execute(lane, platform = nil, parameters = nil)
|