fastlane 2.155.3 → 2.157.2
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 +78 -78
- data/deliver/lib/deliver.rb +1 -0
- data/deliver/lib/deliver/app_screenshot_iterator.rb +95 -0
- 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/queue_worker.rb +64 -0
- data/deliver/lib/deliver/runner.rb +7 -5
- data/deliver/lib/deliver/upload_screenshots.rb +143 -128
- 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/set_changelog.rb +2 -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 +67 -7
- 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/fastlane_core/lib/fastlane_core/project.rb +1 -0
- data/gym/lib/gym/error_handler.rb +1 -1
- data/gym/lib/gym/generators/build_command_generator.rb +0 -1
- data/pilot/lib/pilot/build_manager.rb +18 -4
- data/pilot/lib/pilot/manager.rb +16 -5
- data/pilot/lib/pilot/options.rb +16 -0
- data/produce/lib/produce/itunes_connect.rb +2 -2
- data/scan/lib/scan/test_command_generator.rb +3 -1
- data/screengrab/lib/screengrab/runner.rb +36 -17
- data/sigh/lib/sigh/runner.rb +4 -4
- data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
- data/spaceship/lib/spaceship.rb +4 -0
- data/spaceship/lib/spaceship/client.rb +2 -0
- data/spaceship/lib/spaceship/connect_api.rb +0 -15
- data/spaceship/lib/spaceship/connect_api/api_client.rb +270 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +144 -213
- 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 +717 -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 +26 -23
- data/match/lib/match/.options.rb.swp +0 -0
- data/match/lib/match/.runner.rb.swp +0 -0
- data/sigh/lib/sigh/.options.rb.swp +0 -0
- data/sigh/lib/sigh/.runner.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.profile.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/.provisioning.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: 465b4bc1e3551c467e870d317ff7a226dd9f5ecac4c6c27dc23505d2d2e53ee7
|
4
|
+
data.tar.gz: 2cdde87ff47e244e29d6970da46e72bca189224686fe92f19f6203a731b77030
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1bc24ba94758c5195c6485c270cf2e143f4ecc1eebec467be9f4e3c5aae625020ac58f380888f67553fa1c13f5d921e0328bc3e0b2c0b15a28d3a6253563cf4
|
7
|
+
data.tar.gz: 12398261e87004b0877024398f825f4533af281bf5685de0a1a111fdc91588abc02aa5eb23011777b1c78c0aca31939652d8d8bc18bbeb93b0aacc3a8fce8a49
|
data/README.md
CHANGED
@@ -34,62 +34,30 @@ 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='
|
38
|
-
<a href='https://github.com/
|
39
|
-
<img src='https://github.com/
|
40
|
-
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
42
|
-
</td>
|
43
|
-
<td id='matthew-ellis'>
|
44
|
-
<a href='https://github.com/matthewellis'>
|
45
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
46
|
-
</a>
|
47
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
48
|
-
</td>
|
49
|
-
<td id='jorge-revuelta-h'>
|
50
|
-
<a href='https://github.com/minuscorp'>
|
51
|
-
<img src='https://github.com/minuscorp.png?size=140'>
|
37
|
+
<td id='olivier-halligon'>
|
38
|
+
<a href='https://github.com/AliSoftware'>
|
39
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
52
40
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
54
42
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
43
|
+
<td id='aaron-brager'>
|
44
|
+
<a href='https://github.com/getaaron'>
|
45
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
58
46
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
47
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
60
48
|
</td>
|
61
|
-
<td id='
|
62
|
-
<a href='https://github.com/
|
63
|
-
<img src='https://github.com/
|
49
|
+
<td id='josh-holtz'>
|
50
|
+
<a href='https://github.com/joshdholtz'>
|
51
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
64
52
|
</a>
|
65
|
-
<h4 align='center'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
66
54
|
</td>
|
67
|
-
</tr>
|
68
|
-
<tr>
|
69
55
|
<td id='joshua-liebowitz'>
|
70
56
|
<a href='https://github.com/taquitos'>
|
71
57
|
<img src='https://github.com/taquitos.png?size=140'>
|
72
58
|
</a>
|
73
59
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
74
60
|
</td>
|
75
|
-
<td id='daniel-jankowski'>
|
76
|
-
<a href='https://github.com/mollyIV'>
|
77
|
-
<img src='https://github.com/mollyIV.png?size=140'>
|
78
|
-
</a>
|
79
|
-
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
80
|
-
</td>
|
81
|
-
<td id='iulian-onofrei'>
|
82
|
-
<a href='https://github.com/revolter'>
|
83
|
-
<img src='https://github.com/revolter.png?size=140'>
|
84
|
-
</a>
|
85
|
-
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
86
|
-
</td>
|
87
|
-
<td id='max-ott'>
|
88
|
-
<a href='https://github.com/max-ott'>
|
89
|
-
<img src='https://github.com/max-ott.png?size=140'>
|
90
|
-
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
92
|
-
</td>
|
93
61
|
<td id='jérôme-lacoste'>
|
94
62
|
<a href='https://github.com/lacostej'>
|
95
63
|
<img src='https://github.com/lacostej.png?size=140'>
|
@@ -104,37 +72,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
104
72
|
</a>
|
105
73
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
106
74
|
</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/Sujan'>Jan Piotrowski</a></h4>
|
112
|
-
</td>
|
113
|
-
<td id='luka-mirosevic'>
|
114
|
-
<a href='https://github.com/lmirosevic'>
|
115
|
-
<img src='https://github.com/lmirosevic.png?size=140'>
|
116
|
-
</a>
|
117
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
118
|
-
</td>
|
119
|
-
<td id='aaron-brager'>
|
120
|
-
<a href='https://github.com/getaaron'>
|
121
|
-
<img src='https://github.com/getaaron.png?size=140'>
|
75
|
+
<td id='matthew-ellis'>
|
76
|
+
<a href='https://github.com/matthewellis'>
|
77
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
122
78
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
124
80
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
81
|
+
<td id='danielle-tomlinson'>
|
82
|
+
<a href='https://github.com/endocrimes'>
|
83
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
128
84
|
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
85
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
130
86
|
</td>
|
131
|
-
|
132
|
-
<
|
133
|
-
<
|
134
|
-
<a href='https://github.com/joshdholtz'>
|
135
|
-
<img src='https://github.com/joshdholtz.png?size=140'>
|
87
|
+
<td id='jorge-revuelta-h'>
|
88
|
+
<a href='https://github.com/minuscorp'>
|
89
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
136
90
|
</a>
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
91
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
138
92
|
</td>
|
139
93
|
<td id='helmut-januschka'>
|
140
94
|
<a href='https://github.com/hjanuschka'>
|
@@ -142,38 +96,84 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
142
96
|
</a>
|
143
97
|
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
144
98
|
</td>
|
99
|
+
</tr>
|
100
|
+
<tr>
|
101
|
+
<td id='felix-krause'>
|
102
|
+
<a href='https://github.com/KrauseFx'>
|
103
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
104
|
+
</a>
|
105
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
106
|
+
</td>
|
145
107
|
<td id='andrew-mcburney'>
|
146
108
|
<a href='https://github.com/armcburney'>
|
147
109
|
<img src='https://github.com/armcburney.png?size=140'>
|
148
110
|
</a>
|
149
111
|
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
150
112
|
</td>
|
151
|
-
<td id='olivier-halligon'>
|
152
|
-
<a href='https://github.com/AliSoftware'>
|
153
|
-
<img src='https://github.com/AliSoftware.png?size=140'>
|
154
|
-
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
156
|
-
</td>
|
157
113
|
<td id='jimmy-dee'>
|
158
114
|
<a href='https://github.com/jdee'>
|
159
115
|
<img src='https://github.com/jdee.png?size=140'>
|
160
116
|
</a>
|
161
117
|
<h4 align='center'>Jimmy Dee</h4>
|
162
118
|
</td>
|
163
|
-
</tr>
|
164
|
-
<tr>
|
165
119
|
<td id='maksym-grebenets'>
|
166
120
|
<a href='https://github.com/mgrebenets'>
|
167
121
|
<img src='https://github.com/mgrebenets.png?size=140'>
|
168
122
|
</a>
|
169
123
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
170
124
|
</td>
|
125
|
+
<td id='max-ott'>
|
126
|
+
<a href='https://github.com/max-ott'>
|
127
|
+
<img src='https://github.com/max-ott.png?size=140'>
|
128
|
+
</a>
|
129
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
130
|
+
</td>
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td id='daniel-jankowski'>
|
134
|
+
<a href='https://github.com/mollyIV'>
|
135
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
136
|
+
</a>
|
137
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
138
|
+
</td>
|
139
|
+
<td id='jan-piotrowski'>
|
140
|
+
<a href='https://github.com/janpio'>
|
141
|
+
<img src='https://github.com/janpio.png?size=140'>
|
142
|
+
</a>
|
143
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
144
|
+
</td>
|
171
145
|
<td id='manu-wallner'>
|
172
146
|
<a href='https://github.com/milch'>
|
173
147
|
<img src='https://github.com/milch.png?size=140'>
|
174
148
|
</a>
|
175
149
|
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
176
150
|
</td>
|
151
|
+
<td id='iulian-onofrei'>
|
152
|
+
<a href='https://github.com/revolter'>
|
153
|
+
<img src='https://github.com/revolter.png?size=140'>
|
154
|
+
</a>
|
155
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
156
|
+
</td>
|
157
|
+
<td id='kohki-miki'>
|
158
|
+
<a href='https://github.com/giginet'>
|
159
|
+
<img src='https://github.com/giginet.png?size=140'>
|
160
|
+
</a>
|
161
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
162
|
+
</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<td id='luka-mirosevic'>
|
166
|
+
<a href='https://github.com/lmirosevic'>
|
167
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
168
|
+
</a>
|
169
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
170
|
+
</td>
|
171
|
+
<td id='stefan-natchev'>
|
172
|
+
<a href='https://github.com/snatchev'>
|
173
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
174
|
+
</a>
|
175
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
176
|
+
</td>
|
177
177
|
</table>
|
178
178
|
|
179
179
|
Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
|
data/deliver/lib/deliver.rb
CHANGED
@@ -0,0 +1,95 @@
|
|
1
|
+
module Deliver
|
2
|
+
# This is a convinient class that enumerates app store connect's screenshots in various degrees.
|
3
|
+
class AppScreenshotIterator
|
4
|
+
NUMBER_OF_THREADS = Helper.test? ? 1 : [ENV.fetch("DELIVER_NUMBER_OF_THREADS", 10).to_i, 10].min
|
5
|
+
|
6
|
+
# @param localizations [Array<Spaceship::ConnectAPI::AppStoreVersionLocalization>]
|
7
|
+
def initialize(localizations)
|
8
|
+
@localizations = localizations
|
9
|
+
end
|
10
|
+
|
11
|
+
# Iterate app_screenshot_set over localizations
|
12
|
+
#
|
13
|
+
# @yield [localization, app_screenshot_set]
|
14
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
15
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
16
|
+
def each_app_screenshot_set(localizations = @localizations, &block)
|
17
|
+
return enum_for(__method__, localizations) unless block_given?
|
18
|
+
|
19
|
+
# Collect app_screenshot_sets from localizations in parallel but
|
20
|
+
# limit the number of threads working at a time with using `lazy` and `force` controls
|
21
|
+
# to not attack App Store Connect
|
22
|
+
results = localizations.each_slice(NUMBER_OF_THREADS).lazy.map do |localizations_grouped|
|
23
|
+
localizations_grouped.map do |localization|
|
24
|
+
Thread.new do
|
25
|
+
[localization, localization.get_app_screenshot_sets]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end.flat_map do |threads|
|
29
|
+
threads.map { |t| t.join.value }
|
30
|
+
end.force
|
31
|
+
|
32
|
+
results.each do |localization, app_screenshot_sets|
|
33
|
+
app_screenshot_sets.each do |app_screenshot_set|
|
34
|
+
yield(localization, app_screenshot_set)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Iterate app_screenshot over localizations and app_screenshot_sets
|
40
|
+
#
|
41
|
+
# @yield [localization, app_screenshot_set, app_screenshot]
|
42
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
43
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
44
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshot] app_screenshot
|
45
|
+
def each_app_screenshot(&block)
|
46
|
+
return enum_for(__method__) unless block_given?
|
47
|
+
|
48
|
+
each_app_screenshot_set do |localization, app_screenshot_set|
|
49
|
+
app_screenshot_set.app_screenshots.each do |app_screenshot|
|
50
|
+
yield(localization, app_screenshot_set, app_screenshot)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Iterate given local app_screenshot over localizations and app_screenshot_sets with index within each app_screenshot_set
|
56
|
+
#
|
57
|
+
# @param screenshots_per_language [Hash<String, Array<Deliver::AppScreenshot>]
|
58
|
+
# @yield [localization, app_screenshot_set, app_screenshot, index]
|
59
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreVersionLocalization] localization
|
60
|
+
# @yieldparam [optional, Spaceship::ConnectAPI::AppStoreScreenshotSet] app_screenshot_set
|
61
|
+
# @yieldparam [optional, Deliver::AppScreenshot] screenshot
|
62
|
+
# @yieldparam [optional, Integer] index a number reperesents which position the screenshot will be
|
63
|
+
def each_local_screenshot(screenshots_per_language, &block)
|
64
|
+
return enum_for(__method__, screenshots_per_language) unless block_given?
|
65
|
+
|
66
|
+
# filter unnecessary localizations
|
67
|
+
supported_localizations = @localizations.reject { |l| screenshots_per_language[l.locale].nil? }
|
68
|
+
|
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
|
76
|
+
|
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)
|
81
|
+
|
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 })
|
86
|
+
|
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
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
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
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
module Deliver
|
4
|
+
# This dispatches jobs to worker threads and make it work in parallel.
|
5
|
+
# It's suitable for I/O bounds works and not for CPU bounds works.
|
6
|
+
# Use this when you have all the items that you'll process in advance.
|
7
|
+
# Simply enqueue them to this and call `QueueWorker#start`.
|
8
|
+
class QueueWorker
|
9
|
+
# @param concurrency (Numeric) - A number of threads to be created
|
10
|
+
# @param block (Proc) - A task you want to execute with enqueued items
|
11
|
+
def initialize(concurrency, &block)
|
12
|
+
@concurrency = concurrency
|
13
|
+
@block = block
|
14
|
+
@queue = Queue.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param job (Object) - An arbitary object that keeps parameters
|
18
|
+
def enqueue(job)
|
19
|
+
@queue.push(job)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Call this after you enqueuned all the jobs you want to process
|
23
|
+
# This method blocks current thread until all the enqueued jobs are processed
|
24
|
+
def start
|
25
|
+
threads = []
|
26
|
+
@concurrency.times do
|
27
|
+
threads << Thread.new do
|
28
|
+
while running? && !empty?
|
29
|
+
job = @queue.pop
|
30
|
+
@block.call(job) if job
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
wait_for_complete
|
36
|
+
threads.each(&:join)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def running?
|
42
|
+
!@queue.closed?
|
43
|
+
end
|
44
|
+
|
45
|
+
def empty?
|
46
|
+
@queue.empty?
|
47
|
+
end
|
48
|
+
|
49
|
+
def wait_for_complete
|
50
|
+
wait_thread = Thread.new do
|
51
|
+
loop do
|
52
|
+
if @queue.empty?
|
53
|
+
@queue.close
|
54
|
+
break
|
55
|
+
end
|
56
|
+
|
57
|
+
sleep(1)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
wait_thread.join
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -27,8 +27,8 @@ module Deliver
|
|
27
27
|
|
28
28
|
def login
|
29
29
|
UI.message("Login to App Store Connect (#{options[:username]})")
|
30
|
-
Spaceship::
|
31
|
-
Spaceship::
|
30
|
+
Spaceship::ConnectAPI.login(options[:username], nil, use_portal: false, use_tunes: true)
|
31
|
+
Spaceship::ConnectAPI.select_team
|
32
32
|
UI.message("Login successful")
|
33
33
|
end
|
34
34
|
|
@@ -177,17 +177,19 @@ module Deliver
|
|
177
177
|
# If there are multiple teams, infer the provider from the selected team name.
|
178
178
|
# If there are fewer than two teams, don't infer the provider.
|
179
179
|
def transporter_for_selected_team
|
180
|
+
tunes_client = Spaceship::ConnectAPI.client.tunes_client
|
181
|
+
|
180
182
|
generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider])
|
181
|
-
return generic_transporter unless options[:itc_provider].nil? &&
|
183
|
+
return generic_transporter unless options[:itc_provider].nil? && tunes_client.teams.count > 1
|
182
184
|
|
183
185
|
begin
|
184
|
-
team =
|
186
|
+
team = tunes_client.teams.find { |t| t['contentProvider']['contentProviderId'].to_s == tunes_client.team_id }
|
185
187
|
name = team['contentProvider']['name']
|
186
188
|
provider_id = generic_transporter.provider_ids[name]
|
187
189
|
UI.verbose("Inferred provider id #{provider_id} for team #{name}.")
|
188
190
|
return FastlaneCore::ItunesTransporter.new(options[:username], nil, false, provider_id)
|
189
191
|
rescue => ex
|
190
|
-
UI.verbose("Couldn't infer a provider short name for team with id #{
|
192
|
+
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
193
|
return generic_transporter
|
192
194
|
end
|
193
195
|
end
|