fastlane 2.156.1 → 2.157.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +82 -82
- data/deliver/lib/deliver.rb +1 -0
- data/deliver/lib/deliver/app_screenshot_iterator.rb +26 -29
- data/deliver/lib/deliver/detect_values.rb +4 -1
- data/deliver/lib/deliver/languages.rb +7 -0
- data/deliver/lib/deliver/loader.rb +4 -5
- data/deliver/lib/deliver/runner.rb +8 -5
- data/deliver/lib/deliver/upload_screenshots.rb +34 -17
- data/fastlane/lib/fastlane/actions/{.git_commit.rb.swp → .ensure_git_status_clean.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +12 -8
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +120 -0
- data/fastlane/lib/fastlane/actions/commit_version_bump.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +17 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +89 -68
- data/fastlane/lib/fastlane/actions/set_changelog.rb +3 -2
- data/fastlane/lib/fastlane/actions/sonar.rb +5 -0
- data/fastlane/lib/fastlane/actions/spaceship_stats.rb +73 -0
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +4 -0
- 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 +78 -18
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- 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 +1 -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_core/lib/fastlane_core/command_executor.rb +1 -0
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +71 -42
- data/gym/lib/gym/error_handler.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +5 -5
- data/{fastlane/lib/fastlane/.erb_template_helper.rb.swp → pilot/lib/pilot/.manager.rb.swp} +0 -0
- data/pilot/lib/pilot/build_manager.rb +15 -4
- data/pilot/lib/pilot/manager.rb +15 -5
- data/pilot/lib/pilot/options.rb +16 -0
- data/produce/lib/produce/itunes_connect.rb +3 -2
- data/screengrab/lib/screengrab/runner.rb +29 -10
- data/sigh/lib/assets/resign.sh +9 -6
- data/sigh/lib/sigh/runner.rb +5 -4
- data/spaceship/lib/spaceship.rb +4 -0
- data/spaceship/lib/spaceship/client.rb +3 -0
- data/spaceship/lib/spaceship/connect_api.rb +1 -15
- data/spaceship/lib/spaceship/{.DS_Store → connect_api/.DS_Store} +0 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +270 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +155 -210
- data/spaceship/lib/spaceship/connect_api/file_uploader.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +5 -5
- data/spaceship/lib/spaceship/connect_api/models/app_price_point.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +7 -1
- data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +75 -64
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +98 -0
- data/spaceship/lib/spaceship/connect_api/testflight/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +288 -277
- data/spaceship/lib/spaceship/connect_api/token.rb +46 -5
- data/spaceship/lib/spaceship/connect_api/token_refresh_middleware.rb +24 -0
- data/spaceship/lib/spaceship/connect_api/tunes/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +725 -706
- data/spaceship/lib/spaceship/connect_api/users/client.rb +8 -17
- data/spaceship/lib/spaceship/connect_api/users/users.rb +28 -17
- data/spaceship/lib/spaceship/stats_middleware.rb +65 -0
- metadata +33 -22
- data/spaceship/lib/spaceship/connect_api/.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: 724ffba6ca23aa124bf2c5493e9bb4eda084ce2361eb9c1ee2db3eb04c3a25cc
|
|
4
|
+
data.tar.gz: 51d3469c018497d533e66922626264fe6b561b71ec30351a1c578e500ed2b7fa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e4f3bd7df2c383ae03f2550a9a7847e2913d3d6a048ad7efa14e4bf145156da2590b5c75c12eb303d14e6aaa838be7cadf8f6986b76d3121c2fdaacd7a0c2104
|
|
7
|
+
data.tar.gz: '0853ba7ad4d7725e0c1ab9f89e733e1ec361dee2abdbc835aace640216d7d0f3796afafd8e852f8b5a2d8cdae9d5347c064946c3eccfd9242065455602558796'
|
data/README.md
CHANGED
|
@@ -34,29 +34,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
34
34
|
<!-- This table is regenerated and resorted on each release -->
|
|
35
35
|
<table id='team'>
|
|
36
36
|
<tr>
|
|
37
|
+
<td id='matthew-ellis'>
|
|
38
|
+
<a href='https://github.com/matthewellis'>
|
|
39
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
|
40
|
+
</a>
|
|
41
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
42
|
+
</td>
|
|
37
43
|
<td id='jorge-revuelta-h'>
|
|
38
44
|
<a href='https://github.com/minuscorp'>
|
|
39
45
|
<img src='https://github.com/minuscorp.png?size=140'>
|
|
40
46
|
</a>
|
|
41
47
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
42
48
|
</td>
|
|
43
|
-
<td id='
|
|
44
|
-
<a href='https://github.com/
|
|
45
|
-
<img src='https://github.com/
|
|
49
|
+
<td id='jan-piotrowski'>
|
|
50
|
+
<a href='https://github.com/janpio'>
|
|
51
|
+
<img src='https://github.com/janpio.png?size=140'>
|
|
46
52
|
</a>
|
|
47
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
53
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
48
54
|
</td>
|
|
49
|
-
<td id='
|
|
50
|
-
<a href='https://github.com/
|
|
51
|
-
<img src='https://github.com/
|
|
55
|
+
<td id='jérôme-lacoste'>
|
|
56
|
+
<a href='https://github.com/lacostej'>
|
|
57
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
|
52
58
|
</a>
|
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
59
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
54
60
|
</td>
|
|
55
|
-
<td id='
|
|
56
|
-
<a href='https://github.com/
|
|
57
|
-
<img src='https://github.com/
|
|
61
|
+
<td id='olivier-halligon'>
|
|
62
|
+
<a href='https://github.com/AliSoftware'>
|
|
63
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
|
58
64
|
</a>
|
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
65
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
66
|
+
</td>
|
|
67
|
+
</tr>
|
|
68
|
+
<tr>
|
|
69
|
+
<td id='aaron-brager'>
|
|
70
|
+
<a href='https://github.com/getaaron'>
|
|
71
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
|
72
|
+
</a>
|
|
73
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
60
74
|
</td>
|
|
61
75
|
<td id='fumiya-nakamura'>
|
|
62
76
|
<a href='https://github.com/nafu'>
|
|
@@ -64,6 +78,24 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
64
78
|
</a>
|
|
65
79
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
66
80
|
</td>
|
|
81
|
+
<td id='joshua-liebowitz'>
|
|
82
|
+
<a href='https://github.com/taquitos'>
|
|
83
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
|
84
|
+
</a>
|
|
85
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
86
|
+
</td>
|
|
87
|
+
<td id='helmut-januschka'>
|
|
88
|
+
<a href='https://github.com/hjanuschka'>
|
|
89
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
90
|
+
</a>
|
|
91
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
92
|
+
</td>
|
|
93
|
+
<td id='luka-mirosevic'>
|
|
94
|
+
<a href='https://github.com/lmirosevic'>
|
|
95
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
|
96
|
+
</a>
|
|
97
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
98
|
+
</td>
|
|
67
99
|
</tr>
|
|
68
100
|
<tr>
|
|
69
101
|
<td id='max-ott'>
|
|
@@ -72,69 +104,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
72
104
|
</a>
|
|
73
105
|
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
74
106
|
</td>
|
|
75
|
-
<td id='
|
|
76
|
-
<a href='https://github.com/
|
|
77
|
-
<img src='https://github.com/
|
|
78
|
-
</a>
|
|
79
|
-
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
80
|
-
</td>
|
|
81
|
-
<td id='jérôme-lacoste'>
|
|
82
|
-
<a href='https://github.com/lacostej'>
|
|
83
|
-
<img src='https://github.com/lacostej.png?size=140'>
|
|
84
|
-
</a>
|
|
85
|
-
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
86
|
-
</td>
|
|
87
|
-
<td id='joshua-liebowitz'>
|
|
88
|
-
<a href='https://github.com/taquitos'>
|
|
89
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
|
107
|
+
<td id='josh-holtz'>
|
|
108
|
+
<a href='https://github.com/joshdholtz'>
|
|
109
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
|
90
110
|
</a>
|
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
111
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
92
112
|
</td>
|
|
93
|
-
<td id='
|
|
94
|
-
<a href='https://github.com/
|
|
95
|
-
<img src='https://github.com/
|
|
113
|
+
<td id='maksym-grebenets'>
|
|
114
|
+
<a href='https://github.com/mgrebenets'>
|
|
115
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
|
96
116
|
</a>
|
|
97
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
117
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
98
118
|
</td>
|
|
99
|
-
</tr>
|
|
100
|
-
<tr>
|
|
101
119
|
<td id='jimmy-dee'>
|
|
102
120
|
<a href='https://github.com/jdee'>
|
|
103
121
|
<img src='https://github.com/jdee.png?size=140'>
|
|
104
122
|
</a>
|
|
105
123
|
<h4 align='center'>Jimmy Dee</h4>
|
|
106
124
|
</td>
|
|
107
|
-
<td id='
|
|
108
|
-
<a href='https://github.com/
|
|
109
|
-
<img src='https://github.com/
|
|
110
|
-
</a>
|
|
111
|
-
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
112
|
-
</td>
|
|
113
|
-
<td id='kohki-miki'>
|
|
114
|
-
<a href='https://github.com/giginet'>
|
|
115
|
-
<img src='https://github.com/giginet.png?size=140'>
|
|
125
|
+
<td id='manu-wallner'>
|
|
126
|
+
<a href='https://github.com/milch'>
|
|
127
|
+
<img src='https://github.com/milch.png?size=140'>
|
|
116
128
|
</a>
|
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
129
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
118
130
|
</td>
|
|
119
|
-
|
|
120
|
-
<
|
|
121
|
-
<
|
|
131
|
+
</tr>
|
|
132
|
+
<tr>
|
|
133
|
+
<td id='felix-krause'>
|
|
134
|
+
<a href='https://github.com/KrauseFx'>
|
|
135
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
|
122
136
|
</a>
|
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
137
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
124
138
|
</td>
|
|
125
|
-
<td id='
|
|
126
|
-
<a href='https://github.com/
|
|
127
|
-
<img src='https://github.com/
|
|
139
|
+
<td id='danielle-tomlinson'>
|
|
140
|
+
<a href='https://github.com/endocrimes'>
|
|
141
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
|
128
142
|
</a>
|
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
143
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
130
144
|
</td>
|
|
131
|
-
|
|
132
|
-
<
|
|
133
|
-
<
|
|
134
|
-
<a href='https://github.com/hjanuschka'>
|
|
135
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
145
|
+
<td id='iulian-onofrei'>
|
|
146
|
+
<a href='https://github.com/revolter'>
|
|
147
|
+
<img src='https://github.com/revolter.png?size=140'>
|
|
136
148
|
</a>
|
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
149
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
138
150
|
</td>
|
|
139
151
|
<td id='daniel-jankowski'>
|
|
140
152
|
<a href='https://github.com/mollyIV'>
|
|
@@ -142,37 +154,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
142
154
|
</a>
|
|
143
155
|
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
144
156
|
</td>
|
|
145
|
-
<td id='
|
|
146
|
-
<a href='https://github.com/
|
|
147
|
-
<img src='https://github.com/
|
|
148
|
-
</a>
|
|
149
|
-
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
150
|
-
</td>
|
|
151
|
-
<td id='aaron-brager'>
|
|
152
|
-
<a href='https://github.com/getaaron'>
|
|
153
|
-
<img src='https://github.com/getaaron.png?size=140'>
|
|
154
|
-
</a>
|
|
155
|
-
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
156
|
-
</td>
|
|
157
|
-
<td id='matthew-ellis'>
|
|
158
|
-
<a href='https://github.com/matthewellis'>
|
|
159
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
|
157
|
+
<td id='stefan-natchev'>
|
|
158
|
+
<a href='https://github.com/snatchev'>
|
|
159
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
|
160
160
|
</a>
|
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
161
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
162
162
|
</td>
|
|
163
163
|
</tr>
|
|
164
164
|
<tr>
|
|
165
|
-
<td id='
|
|
166
|
-
<a href='https://github.com/
|
|
167
|
-
<img src='https://github.com/
|
|
165
|
+
<td id='andrew-mcburney'>
|
|
166
|
+
<a href='https://github.com/armcburney'>
|
|
167
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
|
168
168
|
</a>
|
|
169
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
169
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
170
170
|
</td>
|
|
171
|
-
<td id='
|
|
172
|
-
<a href='https://github.com/
|
|
173
|
-
<img src='https://github.com/
|
|
171
|
+
<td id='kohki-miki'>
|
|
172
|
+
<a href='https://github.com/giginet'>
|
|
173
|
+
<img src='https://github.com/giginet.png?size=140'>
|
|
174
174
|
</a>
|
|
175
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
175
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
176
176
|
</td>
|
|
177
177
|
</table>
|
|
178
178
|
|
data/deliver/lib/deliver.rb
CHANGED
|
@@ -13,14 +13,14 @@ module Deliver
|
|
|
13
13
|
# @yield [localization, app_screenshot_set]
|
|
14
14
|
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
|
15
15
|
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
|
16
|
-
def each_app_screenshot_set(&block)
|
|
17
|
-
return enum_for(__method__) unless block_given?
|
|
16
|
+
def each_app_screenshot_set(localizations = @localizations, &block)
|
|
17
|
+
return enum_for(__method__, localizations) unless block_given?
|
|
18
18
|
|
|
19
19
|
# Collect app_screenshot_sets from localizations in parallel but
|
|
20
20
|
# limit the number of threads working at a time with using `lazy` and `force` controls
|
|
21
21
|
# to not attack App Store Connect
|
|
22
|
-
results =
|
|
23
|
-
|
|
22
|
+
results = localizations.each_slice(NUMBER_OF_THREADS).lazy.map do |localizations_grouped|
|
|
23
|
+
localizations_grouped.map do |localization|
|
|
24
24
|
Thread.new do
|
|
25
25
|
[localization, localization.get_app_screenshot_sets]
|
|
26
26
|
end
|
|
@@ -63,35 +63,32 @@ module Deliver
|
|
|
63
63
|
def each_local_screenshot(screenshots_per_language, &block)
|
|
64
64
|
return enum_for(__method__, screenshots_per_language) unless block_given?
|
|
65
65
|
|
|
66
|
-
#
|
|
67
|
-
|
|
68
|
-
screenshots_per_language.map do |language, screenshots_for_language|
|
|
69
|
-
localization = @localizations.find { |l| l.locale == language }
|
|
70
|
-
[localization, screenshots_for_language]
|
|
71
|
-
end.reject do |localization, _|
|
|
72
|
-
localization.nil?
|
|
73
|
-
end.each do |localization, screenshots_for_language|
|
|
74
|
-
iterate_over_screenshots_per_language(localization, screenshots_for_language, &block)
|
|
75
|
-
end
|
|
76
|
-
end
|
|
66
|
+
# filter unnecessary localizations
|
|
67
|
+
supported_localizations = @localizations.reject { |l| screenshots_per_language[l.locale].nil? }
|
|
77
68
|
|
|
78
|
-
|
|
69
|
+
# build a hash that can access app_screenshot_set corresponding to given locale and display_type
|
|
70
|
+
# via parallelized each_app_screenshot_set to gain performance
|
|
71
|
+
app_screenshot_set_per_locale_and_display_type = each_app_screenshot_set(supported_localizations)
|
|
72
|
+
.each_with_object({}) do |(localization, app_screenshot_set), hash|
|
|
73
|
+
hash[localization.locale] ||= {}
|
|
74
|
+
hash[localization.locale][app_screenshot_set.screenshot_display_type] = app_screenshot_set
|
|
75
|
+
end
|
|
79
76
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
77
|
+
# iterate over screenshots per localization
|
|
78
|
+
screenshots_per_language.each do |language, screenshots_for_language|
|
|
79
|
+
localization = supported_localizations.find { |l| l.locale == language }
|
|
80
|
+
screenshots_per_display_type = screenshots_for_language.reject { |screenshot| screenshot.device_type.nil? }.group_by(&:device_type)
|
|
83
81
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
iterate_over_screenshots_per_display_type(localization, app_screenshot_set, screenshots, &block)
|
|
89
|
-
end
|
|
90
|
-
end
|
|
82
|
+
screenshots_per_display_type.each do |display_type, screenshots|
|
|
83
|
+
# create AppScreenshotSet for given display_type if it doesn't exsit
|
|
84
|
+
app_screenshot_set = (app_screenshot_set_per_locale_and_display_type[language] || {})[display_type]
|
|
85
|
+
app_screenshot_set ||= localization.create_app_screenshot_set(attributes: { screenshotDisplayType: display_type })
|
|
91
86
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
# iterate over screenshots per display size with index
|
|
88
|
+
screenshots.each.with_index do |screenshot, index|
|
|
89
|
+
yield(localization, app_screenshot_set, screenshot, index)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
95
92
|
end
|
|
96
93
|
end
|
|
97
94
|
end
|
|
@@ -5,6 +5,7 @@ require 'spaceship/tunes/tunes'
|
|
|
5
5
|
require 'spaceship/tunes/application'
|
|
6
6
|
|
|
7
7
|
require_relative 'module'
|
|
8
|
+
require_relative 'languages'
|
|
8
9
|
|
|
9
10
|
module Deliver
|
|
10
11
|
class DetectValues
|
|
@@ -88,7 +89,9 @@ module Deliver
|
|
|
88
89
|
languages = options[:languages]
|
|
89
90
|
return unless languages
|
|
90
91
|
|
|
91
|
-
|
|
92
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
|
93
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
|
94
|
+
all_languages = Deliver::Languages::ALL_LANGUAGES
|
|
92
95
|
diff = languages - all_languages
|
|
93
96
|
|
|
94
97
|
unless diff.empty?
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module Deliver
|
|
2
|
+
module Languages
|
|
3
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
|
4
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
|
5
|
+
ALL_LANGUAGES = ["ar-SA", "ca", "cs", "da", "de-DE", "el", "en-AU", "en-CA", "en-GB", "en-US", "es-ES", "es-MX", "fi", "fr-CA", "fr-FR", "he", "hi", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl-NL", "no", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", "sv", "th", "tr", "uk", "vi", "zh-Hans", "zh-Hant"]
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -3,6 +3,7 @@ require 'spaceship/tunes/tunes'
|
|
|
3
3
|
|
|
4
4
|
require_relative 'module'
|
|
5
5
|
require_relative 'upload_metadata'
|
|
6
|
+
require_relative 'languages'
|
|
6
7
|
|
|
7
8
|
module Deliver
|
|
8
9
|
module Loader
|
|
@@ -24,11 +25,9 @@ module Deliver
|
|
|
24
25
|
def self.language_folders(root, ignore_validation)
|
|
25
26
|
folders = Dir.glob(File.join(root, '*'))
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
available_languages = Spaceship::Tunes.client.available_languages.sort
|
|
31
|
-
end
|
|
28
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
|
29
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
|
30
|
+
available_languages = Deliver::Languages::ALL_LANGUAGES
|
|
32
31
|
|
|
33
32
|
allowed_directory_names_with_case = (available_languages + SPECIAL_DIR_NAMES)
|
|
34
33
|
allowed_directory_names = allowed_directory_names_with_case.map(&:downcase).freeze
|
|
@@ -26,9 +26,10 @@ module Deliver
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def login
|
|
29
|
+
# Team selection passed though FASTLANE_TEAM_ID and FASTLANE_TEAM_NAME environment variables
|
|
30
|
+
# Prompts select team if multiple teams and none specified
|
|
29
31
|
UI.message("Login to App Store Connect (#{options[:username]})")
|
|
30
|
-
Spaceship::
|
|
31
|
-
Spaceship::Tunes.select_team
|
|
32
|
+
Spaceship::ConnectAPI.login(options[:username], nil, use_portal: false, use_tunes: true)
|
|
32
33
|
UI.message("Login successful")
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -177,17 +178,19 @@ module Deliver
|
|
|
177
178
|
# If there are multiple teams, infer the provider from the selected team name.
|
|
178
179
|
# If there are fewer than two teams, don't infer the provider.
|
|
179
180
|
def transporter_for_selected_team
|
|
181
|
+
tunes_client = Spaceship::ConnectAPI.client.tunes_client
|
|
182
|
+
|
|
180
183
|
generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider])
|
|
181
|
-
return generic_transporter unless options[:itc_provider].nil? &&
|
|
184
|
+
return generic_transporter unless options[:itc_provider].nil? && tunes_client.teams.count > 1
|
|
182
185
|
|
|
183
186
|
begin
|
|
184
|
-
team =
|
|
187
|
+
team = tunes_client.teams.find { |t| t['contentProvider']['contentProviderId'].to_s == tunes_client.team_id }
|
|
185
188
|
name = team['contentProvider']['name']
|
|
186
189
|
provider_id = generic_transporter.provider_ids[name]
|
|
187
190
|
UI.verbose("Inferred provider id #{provider_id} for team #{name}.")
|
|
188
191
|
return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id)
|
|
189
192
|
rescue => ex
|
|
190
|
-
UI.verbose("Couldn't infer a provider short name for team with id #{
|
|
193
|
+
UI.verbose("Couldn't infer a provider short name for team with id #{tunes_client.team_id} automatically: #{ex}. Proceeding without provider short name.")
|
|
191
194
|
return generic_transporter
|
|
192
195
|
end
|
|
193
196
|
end
|
|
@@ -179,21 +179,40 @@ module Deliver
|
|
|
179
179
|
# Verify all screenshots states on App Store Connect are okay
|
|
180
180
|
def retry_upload_screenshots_if_needed(iterator, states, number_of_screenshots, tries, localizations, screenshots_per_language)
|
|
181
181
|
is_failure = states.fetch("FAILED", 0) > 0
|
|
182
|
-
is_missing_screenshot =
|
|
182
|
+
is_missing_screenshot = !screenshots_per_language.empty? && !verify_local_screenshots_are_uploaded(iterator, screenshots_per_language)
|
|
183
|
+
return unless is_failure || is_missing_screenshot
|
|
183
184
|
|
|
184
|
-
if
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
UI.user_error!("Failed verification of all screenshots uploaded... #{incomplete_screenshot_count} incomplete screenshot(s) still exist")
|
|
188
|
-
else
|
|
189
|
-
UI.error("Failed to upload all screenshots... Tries remaining: #{tries}")
|
|
190
|
-
# Delete bad entries before retry
|
|
191
|
-
iterator.each_app_screenshot do |_, _, app_screenshot|
|
|
192
|
-
app_screenshot.delete! unless app_screenshot.complete?
|
|
193
|
-
end
|
|
194
|
-
upload_screenshots(localizations, screenshots_per_language, tries: tries)
|
|
185
|
+
if tries.zero?
|
|
186
|
+
iterator.each_app_screenshot.select { |_, _, app_screenshot| app_screenshot.error? }.each do |localization, _, app_screenshot|
|
|
187
|
+
UI.error("#{app_screenshot.file_name} for #{localization.locale} has error(s) - #{app_screenshot.error_messages.join(', ')}")
|
|
195
188
|
end
|
|
189
|
+
incomplete_screenshot_count = states.reject { |k, v| k == 'COMPLETE' }.reduce(0) { |sum, (k, v)| sum + v }
|
|
190
|
+
UI.user_error!("Failed verification of all screenshots uploaded... #{incomplete_screenshot_count} incomplete screenshot(s) still exist")
|
|
191
|
+
else
|
|
192
|
+
UI.error("Failed to upload all screenshots... Tries remaining: #{tries}")
|
|
193
|
+
# Delete bad entries before retry
|
|
194
|
+
iterator.each_app_screenshot do |_, _, app_screenshot|
|
|
195
|
+
app_screenshot.delete! unless app_screenshot.complete?
|
|
196
|
+
end
|
|
197
|
+
upload_screenshots(localizations, screenshots_per_language, tries: tries)
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# Return `true` if all the local screenshots are uploaded to App Store Connect
|
|
202
|
+
def verify_local_screenshots_are_uploaded(iterator, screenshots_per_language)
|
|
203
|
+
# Check if local screenshots' checksum exist on App Store Connect
|
|
204
|
+
checksum_to_app_screenshot = iterator.each_app_screenshot.map { |_, _, app_screenshot| [app_screenshot.source_file_checksum, app_screenshot] }.to_h
|
|
205
|
+
|
|
206
|
+
missing_local_screenshots = iterator.each_local_screenshot(screenshots_per_language).select do |_, _, local_screenshot, index|
|
|
207
|
+
checksum = UploadScreenshots.calculate_checksum(local_screenshot.path)
|
|
208
|
+
checksum_to_app_screenshot[checksum].nil? && index < 10 # if index is more than 10, it's skipped
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
missing_local_screenshots.each do |_, _, screenshot, _|
|
|
212
|
+
UI.error("#{screenshot.path} is missing on App Store Connect.")
|
|
196
213
|
end
|
|
214
|
+
|
|
215
|
+
missing_local_screenshots.empty?
|
|
197
216
|
end
|
|
198
217
|
|
|
199
218
|
def sort_screenshots(localizations)
|
|
@@ -285,11 +304,9 @@ module Deliver
|
|
|
285
304
|
|
|
286
305
|
# helper method so Spaceship::Tunes.client.available_languages is easier to test
|
|
287
306
|
def self.available_languages
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
Spaceship::Tunes.client.available_languages
|
|
292
|
-
end
|
|
307
|
+
# 2020-08-24 - Available locales are not available as an endpoint in App Store Connect
|
|
308
|
+
# Update with Spaceship::Tunes.client.available_languages.sort (as long as endpoint is avilable)
|
|
309
|
+
Deliver::Languages::ALL_LANGUAGES
|
|
293
310
|
end
|
|
294
311
|
|
|
295
312
|
# helper method to mock this step in tests
|