fastlane 2.159.0 → 2.160.0
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/options.rb +17 -1
- data/deliver/lib/deliver/runner.rb +36 -8
- data/deliver/lib/deliver/upload_metadata.rb +31 -5
- data/deliver/lib/deliver/upload_price_tier.rb +7 -2
- data/fastlane/lib/fastlane/actions/clean_build_artifacts.rb +1 -0
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +1 -0
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +30 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +10 -2
- data/fastlane/swift/Fastlane.swift +53 -20
- 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 +9 -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/frameit/lib/frameit/editor.rb +1 -0
- data/pilot/lib/pilot/options.rb +2 -2
- data/precheck/lib/precheck/options.rb +16 -0
- data/precheck/lib/precheck/runner.rb +20 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +17 -9
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +3 -5
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +3 -5
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +11 -6
- metadata +16 -18
- data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.app_store_version.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: 1397a58b9e5db2690af6f035c6b0599471135fca731aa8ca32d9332e92aa0f4d
|
|
4
|
+
data.tar.gz: 28074ccdc0e5948e4d2882d45207229fae454f5712d8a3448e7306bba339a81f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0cd4759b7d14605eba44cc49c2ba83989b4b2435ecc0b02d9ce7a162c10c67202504eec4ea4e4cd255f866b929419ee6f670828e6992b34a4845789a870daaea
|
|
7
|
+
data.tar.gz: 9c1e740b44e8022f87ef2009caaad53bc2ea4c6eb00abe80477c8945bac056e0b6de7c88d90a8e1b85a4ad27ce62fd417b1529e4e1c97c52d321a0f269192cba
|
data/README.md
CHANGED
|
@@ -34,23 +34,17 @@ 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/joshdholtz'>Josh Holtz</a></h4>
|
|
42
|
-
</td>
|
|
43
|
-
<td id='jan-piotrowski'>
|
|
44
|
-
<a href='https://github.com/janpio'>
|
|
45
|
-
<img src='https://github.com/janpio.png?size=140'>
|
|
37
|
+
<td id='fumiya-nakamura'>
|
|
38
|
+
<a href='https://github.com/nafu'>
|
|
39
|
+
<img src='https://github.com/nafu.png?size=140'>
|
|
46
40
|
</a>
|
|
47
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
41
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
48
42
|
</td>
|
|
49
|
-
<td id='
|
|
50
|
-
<a href='https://github.com/
|
|
51
|
-
<img src='https://github.com/
|
|
43
|
+
<td id='stefan-natchev'>
|
|
44
|
+
<a href='https://github.com/snatchev'>
|
|
45
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
|
52
46
|
</a>
|
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
47
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
54
48
|
</td>
|
|
55
49
|
<td id='andrew-mcburney'>
|
|
56
50
|
<a href='https://github.com/armcburney'>
|
|
@@ -58,51 +52,57 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
58
52
|
</a>
|
|
59
53
|
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
60
54
|
</td>
|
|
61
|
-
<td id='
|
|
62
|
-
<a href='https://github.com/
|
|
63
|
-
<img src='https://github.com/
|
|
55
|
+
<td id='aaron-brager'>
|
|
56
|
+
<a href='https://github.com/getaaron'>
|
|
57
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
|
64
58
|
</a>
|
|
65
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
59
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
60
|
+
</td>
|
|
61
|
+
<td id='jimmy-dee'>
|
|
62
|
+
<a href='https://github.com/jdee'>
|
|
63
|
+
<img src='https://github.com/jdee.png?size=140'>
|
|
64
|
+
</a>
|
|
65
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
66
66
|
</td>
|
|
67
67
|
</tr>
|
|
68
68
|
<tr>
|
|
69
|
-
<td id='
|
|
70
|
-
<a href='https://github.com/
|
|
71
|
-
<img src='https://github.com/
|
|
69
|
+
<td id='maksym-grebenets'>
|
|
70
|
+
<a href='https://github.com/mgrebenets'>
|
|
71
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
|
72
72
|
</a>
|
|
73
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
73
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
74
74
|
</td>
|
|
75
|
-
<td id='
|
|
76
|
-
<a href='https://github.com/
|
|
77
|
-
<img src='https://github.com/
|
|
75
|
+
<td id='felix-krause'>
|
|
76
|
+
<a href='https://github.com/KrauseFx'>
|
|
77
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
|
78
78
|
</a>
|
|
79
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
79
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
80
80
|
</td>
|
|
81
|
-
<td id='
|
|
82
|
-
<a href='https://github.com/
|
|
83
|
-
<img src='https://github.com/
|
|
81
|
+
<td id='max-ott'>
|
|
82
|
+
<a href='https://github.com/max-ott'>
|
|
83
|
+
<img src='https://github.com/max-ott.png?size=140'>
|
|
84
84
|
</a>
|
|
85
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
85
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
|
86
86
|
</td>
|
|
87
|
-
<td id='
|
|
88
|
-
<a href='https://github.com/
|
|
89
|
-
<img src='https://github.com/
|
|
87
|
+
<td id='jorge-revuelta-h'>
|
|
88
|
+
<a href='https://github.com/minuscorp'>
|
|
89
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
|
90
90
|
</a>
|
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
91
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
92
92
|
</td>
|
|
93
|
-
<td id='
|
|
94
|
-
<a href='https://github.com/
|
|
95
|
-
<img src='https://github.com/
|
|
93
|
+
<td id='kohki-miki'>
|
|
94
|
+
<a href='https://github.com/giginet'>
|
|
95
|
+
<img src='https://github.com/giginet.png?size=140'>
|
|
96
96
|
</a>
|
|
97
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
97
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
98
98
|
</td>
|
|
99
99
|
</tr>
|
|
100
100
|
<tr>
|
|
101
|
-
<td id='
|
|
102
|
-
<a href='https://github.com/
|
|
103
|
-
<img src='https://github.com/
|
|
101
|
+
<td id='joshua-liebowitz'>
|
|
102
|
+
<a href='https://github.com/taquitos'>
|
|
103
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
|
104
104
|
</a>
|
|
105
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
105
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
106
106
|
</td>
|
|
107
107
|
<td id='olivier-halligon'>
|
|
108
108
|
<a href='https://github.com/AliSoftware'>
|
|
@@ -110,43 +110,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
110
110
|
</a>
|
|
111
111
|
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
112
112
|
</td>
|
|
113
|
-
<td id='
|
|
114
|
-
<a href='https://github.com/
|
|
115
|
-
<img src='https://github.com/
|
|
113
|
+
<td id='daniel-jankowski'>
|
|
114
|
+
<a href='https://github.com/mollyIV'>
|
|
115
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
|
116
116
|
</a>
|
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
117
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
|
118
118
|
</td>
|
|
119
|
-
<td id='
|
|
120
|
-
<a href='https://github.com/
|
|
121
|
-
<img src='https://github.com/
|
|
119
|
+
<td id='jan-piotrowski'>
|
|
120
|
+
<a href='https://github.com/janpio'>
|
|
121
|
+
<img src='https://github.com/janpio.png?size=140'>
|
|
122
122
|
</a>
|
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
123
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
124
124
|
</td>
|
|
125
|
-
<td id='
|
|
126
|
-
<a href='https://github.com/
|
|
127
|
-
<img src='https://github.com/
|
|
125
|
+
<td id='luka-mirosevic'>
|
|
126
|
+
<a href='https://github.com/lmirosevic'>
|
|
127
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
|
128
128
|
</a>
|
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
129
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
130
130
|
</td>
|
|
131
131
|
</tr>
|
|
132
132
|
<tr>
|
|
133
|
-
<td id='
|
|
134
|
-
<a href='https://github.com/
|
|
135
|
-
<img src='https://github.com/
|
|
133
|
+
<td id='josh-holtz'>
|
|
134
|
+
<a href='https://github.com/joshdholtz'>
|
|
135
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
|
136
136
|
</a>
|
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
137
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
138
138
|
</td>
|
|
139
|
-
<td id='
|
|
140
|
-
<a href='https://github.com/
|
|
141
|
-
<img src='https://github.com/
|
|
139
|
+
<td id='helmut-januschka'>
|
|
140
|
+
<a href='https://github.com/hjanuschka'>
|
|
141
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
142
142
|
</a>
|
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
143
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
144
144
|
</td>
|
|
145
|
-
<td id='
|
|
146
|
-
<a href='https://github.com/
|
|
147
|
-
<img src='https://github.com/
|
|
145
|
+
<td id='matthew-ellis'>
|
|
146
|
+
<a href='https://github.com/matthewellis'>
|
|
147
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
|
148
148
|
</a>
|
|
149
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
149
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
150
150
|
</td>
|
|
151
151
|
<td id='danielle-tomlinson'>
|
|
152
152
|
<a href='https://github.com/endocrimes'>
|
|
@@ -154,25 +154,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
154
154
|
</a>
|
|
155
155
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
156
156
|
</td>
|
|
157
|
-
<td id='
|
|
158
|
-
<a href='https://github.com/
|
|
159
|
-
<img src='https://github.com/
|
|
157
|
+
<td id='iulian-onofrei'>
|
|
158
|
+
<a href='https://github.com/revolter'>
|
|
159
|
+
<img src='https://github.com/revolter.png?size=140'>
|
|
160
160
|
</a>
|
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
161
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</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='manu-wallner'>
|
|
166
|
+
<a href='https://github.com/milch'>
|
|
167
|
+
<img src='https://github.com/milch.png?size=140'>
|
|
168
168
|
</a>
|
|
169
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
169
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
170
170
|
</td>
|
|
171
|
-
<td id='
|
|
172
|
-
<a href='https://github.com/
|
|
173
|
-
<img src='https://github.com/
|
|
171
|
+
<td id='jérôme-lacoste'>
|
|
172
|
+
<a href='https://github.com/lacostej'>
|
|
173
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
|
174
174
|
</a>
|
|
175
|
-
<h4 align='center'>
|
|
175
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
176
176
|
</td>
|
|
177
177
|
</table>
|
|
178
178
|
|
|
@@ -12,6 +12,22 @@ module Deliver
|
|
|
12
12
|
user ||= ENV["DELIVER_USER"]
|
|
13
13
|
|
|
14
14
|
[
|
|
15
|
+
FastlaneCore::ConfigItem.new(key: :api_key_path,
|
|
16
|
+
env_name: "DELIVER_API_KEY_PATH",
|
|
17
|
+
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)",
|
|
18
|
+
optional: true,
|
|
19
|
+
conflicting_options: [:username],
|
|
20
|
+
verify_block: proc do |value|
|
|
21
|
+
UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
|
|
22
|
+
end),
|
|
23
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
|
24
|
+
env_name: "DELIVER_API_KEY",
|
|
25
|
+
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)",
|
|
26
|
+
type: Hash,
|
|
27
|
+
optional: true,
|
|
28
|
+
sensitive: true,
|
|
29
|
+
conflicting_options: [:api_key_path, :username]),
|
|
30
|
+
|
|
15
31
|
FastlaneCore::ConfigItem.new(key: :username,
|
|
16
32
|
short_option: "-u",
|
|
17
33
|
env_name: "DELIVER_USERNAME",
|
|
@@ -129,7 +145,7 @@ module Deliver
|
|
|
129
145
|
default_value: false),
|
|
130
146
|
FastlaneCore::ConfigItem.new(key: :skip_app_version_update,
|
|
131
147
|
env_name: "DELIVER_SKIP_APP_VERSION_UPDATE",
|
|
132
|
-
description: "Don
|
|
148
|
+
description: "Don’t create or update the app version that is being prepared for submission",
|
|
133
149
|
is_string: false,
|
|
134
150
|
default_value: false),
|
|
135
151
|
|
|
@@ -26,11 +26,22 @@ module Deliver
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def login
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
if api_token
|
|
30
|
+
UI.message("Creating authorization token for App Store Connect API")
|
|
31
|
+
Spaceship::ConnectAPI.token = api_token
|
|
32
|
+
else
|
|
33
|
+
# Team selection passed though FASTLANE_TEAM_ID and FASTLANE_TEAM_NAME environment variables
|
|
34
|
+
# Prompts select team if multiple teams and none specified
|
|
35
|
+
UI.message("Login to App Store Connect (#{options[:username]})")
|
|
36
|
+
Spaceship::ConnectAPI.login(options[:username], nil, use_portal: false, use_tunes: true)
|
|
37
|
+
UI.message("Login successful")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def api_token
|
|
42
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(options[:api_key]) if options[:api_key]
|
|
43
|
+
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(options[:api_key_path]) if options[:api_key_path]
|
|
44
|
+
return @api_token
|
|
34
45
|
end
|
|
35
46
|
|
|
36
47
|
def run
|
|
@@ -67,11 +78,21 @@ module Deliver
|
|
|
67
78
|
precheck_options = {
|
|
68
79
|
default_rule_level: options[:precheck_default_rule_level],
|
|
69
80
|
include_in_app_purchases: options[:precheck_include_in_app_purchases],
|
|
70
|
-
app_identifier: options[:app_identifier]
|
|
71
|
-
username: options[:username],
|
|
72
|
-
platform: options[:platform]
|
|
81
|
+
app_identifier: options[:app_identifier]
|
|
73
82
|
}
|
|
74
83
|
|
|
84
|
+
if options[:api_key] || options[:api_key_path]
|
|
85
|
+
if options[:precheck_include_in_app_purchases]
|
|
86
|
+
UI.user_error!("Precheck cannot check In-app purchases with the App Store Connect API Key (yet). Exclude In-app purchases from precheck or use Apple ID login")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
precheck_options[:api_key] = options[:api_key]
|
|
90
|
+
precheck_options[:api_key_path] = options[:api_key_path]
|
|
91
|
+
else
|
|
92
|
+
precheck_options[:username] = options[:username]
|
|
93
|
+
precheck_options[:platform] = options[:platform]
|
|
94
|
+
end
|
|
95
|
+
|
|
75
96
|
precheck_config = FastlaneCore::Configuration.create(Precheck::Options.available_options, precheck_options)
|
|
76
97
|
Precheck.config = precheck_config
|
|
77
98
|
|
|
@@ -175,10 +196,17 @@ module Deliver
|
|
|
175
196
|
|
|
176
197
|
private
|
|
177
198
|
|
|
199
|
+
# If App Store Connect API token, use token.
|
|
178
200
|
# If itc_provider was explicitly specified, use it.
|
|
179
201
|
# If there are multiple teams, infer the provider from the selected team name.
|
|
180
202
|
# If there are fewer than two teams, don't infer the provider.
|
|
181
203
|
def transporter_for_selected_team
|
|
204
|
+
# Use JWT auth
|
|
205
|
+
unless api_token.nil?
|
|
206
|
+
api_token.refresh! if api_token.expired?
|
|
207
|
+
return FastlaneCore::ItunesTransporter.new(nil, nil, false, nil, api_token.text)
|
|
208
|
+
end
|
|
209
|
+
|
|
182
210
|
tunes_client = Spaceship::ConnectAPI.client.tunes_client
|
|
183
211
|
|
|
184
212
|
generic_transporter = FastlaneCore::ItunesTransporter.new(options[:username], nil, false, options[:itc_provider])
|
|
@@ -96,7 +96,7 @@ module Deliver
|
|
|
96
96
|
|
|
97
97
|
if v.nil?
|
|
98
98
|
UI.message("Couldn't find live version, editing the current version on App Store Connect instead")
|
|
99
|
-
version = app
|
|
99
|
+
version = fetch_edit_app_store_version(app, platform)
|
|
100
100
|
# we don't want to update the localised_options and non_localised_options
|
|
101
101
|
# as we also check for `options[:edit_live]` at other areas in the code
|
|
102
102
|
# by not touching those 2 variables, deliver is more consistent with what the option says
|
|
@@ -105,7 +105,7 @@ module Deliver
|
|
|
105
105
|
UI.message("Found live version")
|
|
106
106
|
end
|
|
107
107
|
else
|
|
108
|
-
version = app
|
|
108
|
+
version = fetch_edit_app_store_version(app, platform)
|
|
109
109
|
localised_options = (LOCALISED_VERSION_VALUES.keys + LOCALISED_APP_VALUES.keys)
|
|
110
110
|
non_localised_options = NON_LOCALISED_VERSION_VALUES.keys
|
|
111
111
|
end
|
|
@@ -206,7 +206,7 @@ module Deliver
|
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
# Update categories
|
|
209
|
-
app_info = app
|
|
209
|
+
app_info = fetch_edit_app_info(app)
|
|
210
210
|
if app_info
|
|
211
211
|
category_id_map = {}
|
|
212
212
|
|
|
@@ -414,9 +414,35 @@ module Deliver
|
|
|
414
414
|
.uniq
|
|
415
415
|
end
|
|
416
416
|
|
|
417
|
+
def fetch_edit_app_store_version(app, platform, wait_time: 10)
|
|
418
|
+
retry_if_nil("Cannot find edit app store version", wait_time: wait_time) do
|
|
419
|
+
app.get_edit_app_store_version(platform: platform)
|
|
420
|
+
end
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def fetch_edit_app_info(app, wait_time: 10)
|
|
424
|
+
retry_if_nil("Cannot find edit app info", wait_time: wait_time) do
|
|
425
|
+
app.fetch_edit_app_info
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
def retry_if_nil(message, tries: 5, wait_time: 10)
|
|
430
|
+
loop do
|
|
431
|
+
tries -= 1
|
|
432
|
+
|
|
433
|
+
value = yield
|
|
434
|
+
return value if value
|
|
435
|
+
|
|
436
|
+
UI.message("#{message}... Retrying after #{wait_time} seconds (remaining: #{tries})")
|
|
437
|
+
sleep(wait_time)
|
|
438
|
+
|
|
439
|
+
return nil if tries.zero?
|
|
440
|
+
end
|
|
441
|
+
end
|
|
442
|
+
|
|
417
443
|
# Finding languages to enable
|
|
418
444
|
def verify_available_info_languages!(options, app, languages)
|
|
419
|
-
app_info = app
|
|
445
|
+
app_info = fetch_edit_app_info(app)
|
|
420
446
|
|
|
421
447
|
unless app_info
|
|
422
448
|
UI.user_error!("Cannot update languages - could not find an editable info")
|
|
@@ -451,7 +477,7 @@ module Deliver
|
|
|
451
477
|
# Finding languages to enable
|
|
452
478
|
def verify_available_version_languages!(options, app, languages)
|
|
453
479
|
platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
|
|
454
|
-
version = app
|
|
480
|
+
version = fetch_edit_app_store_version(app, platform)
|
|
455
481
|
|
|
456
482
|
unless version
|
|
457
483
|
UI.user_error!("Cannot update languages - could not find an editable version for '#{platform}'")
|
|
@@ -14,9 +14,14 @@ module Deliver
|
|
|
14
14
|
attributes = {}
|
|
15
15
|
territory_ids = []
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
# As of 2020-09-14:
|
|
18
|
+
# Official App Store Connect does not have an endpoint to get app prices for an app
|
|
19
|
+
# Need to get prices from the app's relationships
|
|
20
|
+
# Prices from app's relationship doess not have price tier so need to fetch app price with price tier relationship
|
|
21
|
+
app_prices = app.prices
|
|
18
22
|
if app_prices.first
|
|
19
|
-
|
|
23
|
+
app_price = Spaceship::ConnectAPI.get_app_price(app_price_id: app_prices.first.id, includes: "priceTier").first
|
|
24
|
+
old_price = app_price.price_tier.id
|
|
20
25
|
else
|
|
21
26
|
UI.message("App has no prices yet... Enabling all countries in App Store Connect")
|
|
22
27
|
territory_ids = Spaceship::ConnectAPI::Territory.all.map(&:id)
|
|
@@ -23,6 +23,7 @@ module Fastlane
|
|
|
23
23
|
|
|
24
24
|
Actions.lane_context[Actions::SharedValues::SIGH_PROFILE_PATHS] = nil
|
|
25
25
|
Actions.lane_context[Actions::SharedValues::DSYM_PATHS] = nil
|
|
26
|
+
Actions.lane_context[Actions::SharedValues::DSYM_LATEST_UPLOADED_DATE] = nil
|
|
26
27
|
|
|
27
28
|
UI.success('Cleaned up build artifacts 🐙')
|
|
28
29
|
end
|
|
@@ -164,6 +164,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
|
|
|
164
164
|
| `color` | The font color for the text. Specify a hex/html color code. | `#000000` (black) |
|
|
165
165
|
| `font` | The font family for the text. Specify the (relative) path to the font file (e.g. an OpenType Font). | The default `imagemagick` font, which is system dependent. |
|
|
166
166
|
| `font_size` | The font size for the text specified in points. If not specified or `0`, font will be scaled automatically to fit the available space. _frameit_ still shrinks the text, if it would not fit. | NA |
|
|
167
|
+
| `font_weight` | The [font weight for the text](https://imagemagick.org/script/command-line-options.php#weight). Specify an integer value (e.g. 900). | NA |
|
|
167
168
|
| `text` | The text that should be used for the `keyword` or `title`. <p> Note: If you want to use localised text, use [`.strings` files](#strings-files). | NA |
|
|
168
169
|
|
|
169
170
|
### Example
|
|
@@ -2,6 +2,7 @@ module Fastlane
|
|
|
2
2
|
module Actions
|
|
3
3
|
module SharedValues
|
|
4
4
|
DSYM_PATHS = :DSYM_PATHS
|
|
5
|
+
DSYM_LATEST_UPLOADED_DATE = :DSYM_LATEST_UPLOADED_DATE
|
|
5
6
|
end
|
|
6
7
|
class DownloadDsymsAction < Action
|
|
7
8
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
@@ -9,6 +10,7 @@ module Fastlane
|
|
|
9
10
|
require 'openssl'
|
|
10
11
|
require 'spaceship'
|
|
11
12
|
require 'net/http'
|
|
13
|
+
require 'date'
|
|
12
14
|
|
|
13
15
|
# Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
|
|
14
16
|
# Prompts select team if multiple teams and none specified
|
|
@@ -30,6 +32,7 @@ module Fastlane
|
|
|
30
32
|
wait_for_dsym_processing = params[:wait_for_dsym_processing]
|
|
31
33
|
wait_timeout = params[:wait_timeout]
|
|
32
34
|
min_version = Gem::Version.new(params[:min_version]) if params[:min_version]
|
|
35
|
+
after_uploaded_date = DateTime.parse(params[:after_uploaded_date]) unless params[:after_uploaded_date].nil?
|
|
33
36
|
|
|
34
37
|
platform = Spaceship::ConnectAPI::Platform.map(itc_platform)
|
|
35
38
|
|
|
@@ -81,6 +84,7 @@ module Fastlane
|
|
|
81
84
|
builds.each do |build|
|
|
82
85
|
asc_app_version = build.app_version
|
|
83
86
|
asc_build_number = build.version
|
|
87
|
+
uploaded_date = DateTime.parse(build.uploaded_date)
|
|
84
88
|
|
|
85
89
|
message = []
|
|
86
90
|
message << "Found train (version): #{asc_app_version}"
|
|
@@ -97,6 +101,11 @@ module Fastlane
|
|
|
97
101
|
next
|
|
98
102
|
end
|
|
99
103
|
|
|
104
|
+
if after_uploaded_date && after_uploaded_date >= uploaded_date
|
|
105
|
+
UI.verbose("Upload date #{after_uploaded_date} not reached: #{uploaded_date}")
|
|
106
|
+
next
|
|
107
|
+
end
|
|
108
|
+
|
|
100
109
|
message = []
|
|
101
110
|
message << "Found build version: #{asc_build_number}"
|
|
102
111
|
message << ", comparing to supplied build_number: #{build_number}" if build_number
|
|
@@ -108,11 +117,11 @@ module Fastlane
|
|
|
108
117
|
end
|
|
109
118
|
|
|
110
119
|
UI.verbose("Build_version: #{asc_build_number} matches #{build_number}, grabbing dsym_url") if build_number
|
|
111
|
-
get_details_and_download_dsym(app: app, train: asc_app_version, build_number: asc_build_number, platform: itc_platform, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
|
|
120
|
+
get_details_and_download_dsym(app: app, train: asc_app_version, build_number: asc_build_number, uploaded_date: uploaded_date, platform: itc_platform, wait_for_dsym_processing: wait_for_dsym_processing, wait_timeout: wait_timeout, output_directory: output_directory)
|
|
112
121
|
end
|
|
113
122
|
end
|
|
114
123
|
|
|
115
|
-
def self.get_details_and_download_dsym(app: nil, train: nil, build_number: nil, platform: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
|
|
124
|
+
def self.get_details_and_download_dsym(app: nil, train: nil, build_number: nil, uploaded_date: nil, platform: nil, wait_for_dsym_processing: nil, wait_timeout: nil, output_directory: nil)
|
|
116
125
|
start = Time.now
|
|
117
126
|
download_url = nil
|
|
118
127
|
|
|
@@ -144,7 +153,7 @@ module Fastlane
|
|
|
144
153
|
end
|
|
145
154
|
|
|
146
155
|
if download_url
|
|
147
|
-
self.download(download_url, app.bundle_id, train, build_number, output_directory)
|
|
156
|
+
self.download(download_url, app.bundle_id, train, build_number, uploaded_date, output_directory)
|
|
148
157
|
return if build_number
|
|
149
158
|
else
|
|
150
159
|
UI.message("No dSYM URL for #{build_number} (#{train})")
|
|
@@ -165,13 +174,20 @@ module Fastlane
|
|
|
165
174
|
return latest_build
|
|
166
175
|
end
|
|
167
176
|
|
|
168
|
-
def self.download(download_url, bundle_id, train_number, build_version, output_directory)
|
|
177
|
+
def self.download(download_url, bundle_id, train_number, build_version, uploaded_date, output_directory)
|
|
169
178
|
result = self.download_file(download_url)
|
|
170
179
|
path = write_dsym(result, bundle_id, train_number, build_version, output_directory)
|
|
171
180
|
UI.success("🔑 Successfully downloaded dSYM file for #{train_number} - #{build_version} to '#{path}'")
|
|
172
181
|
|
|
173
182
|
Actions.lane_context[SharedValues::DSYM_PATHS] ||= []
|
|
174
183
|
Actions.lane_context[SharedValues::DSYM_PATHS] << File.expand_path(path)
|
|
184
|
+
|
|
185
|
+
unless uploaded_date.nil?
|
|
186
|
+
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] ||= uploaded_date
|
|
187
|
+
current_latest = Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]
|
|
188
|
+
Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE] = [current_latest, uploaded_date].max
|
|
189
|
+
UI.verbose("Most recent build uploaded_date #{Actions.lane_context[SharedValues::DSYM_LATEST_UPLOADED_DATE]}")
|
|
190
|
+
end
|
|
175
191
|
end
|
|
176
192
|
|
|
177
193
|
def self.write_dsym(data, bundle_id, train_number, build_number, output_directory)
|
|
@@ -286,6 +302,12 @@ module Fastlane
|
|
|
286
302
|
env_name: "DOWNLOAD_DSYMS_MIN_VERSION",
|
|
287
303
|
description: "The minimum app version for dSYMs you wish to download",
|
|
288
304
|
optional: true),
|
|
305
|
+
FastlaneCore::ConfigItem.new(key: :after_uploaded_date,
|
|
306
|
+
short_option: "-d",
|
|
307
|
+
env_name: "DOWNLOAD_DSYMS_AFTER_UPLOADED_DATE",
|
|
308
|
+
description: "The uploaded date after which you wish to download dSYMs",
|
|
309
|
+
optional: true,
|
|
310
|
+
is_string: true),
|
|
289
311
|
FastlaneCore::ConfigItem.new(key: :output_directory,
|
|
290
312
|
short_option: "-s",
|
|
291
313
|
env_name: "DOWNLOAD_DSYMS_OUTPUT_DIRECTORY",
|
|
@@ -310,7 +332,8 @@ module Fastlane
|
|
|
310
332
|
|
|
311
333
|
def self.output
|
|
312
334
|
[
|
|
313
|
-
['DSYM_PATHS', 'An array to all the zipped dSYM files']
|
|
335
|
+
['DSYM_PATHS', 'An array to all the zipped dSYM files'],
|
|
336
|
+
['DSYM_LATEST_UPLOADED_DATE', 'Date of the most recent uploaded time of successfully downloaded dSYM files']
|
|
314
337
|
]
|
|
315
338
|
end
|
|
316
339
|
|
|
@@ -332,7 +355,8 @@ module Fastlane
|
|
|
332
355
|
'download_dsyms(version: "1.0.0", build_number: "345")',
|
|
333
356
|
'download_dsyms(version: "1.0.1", build_number: 42)',
|
|
334
357
|
'download_dsyms(version: "live")',
|
|
335
|
-
'download_dsyms(min_version: "1.2.3")'
|
|
358
|
+
'download_dsyms(min_version: "1.2.3")',
|
|
359
|
+
'download_dsyms(after_uploaded_date: "2020-09-11T19:00:00+01:00")'
|
|
336
360
|
]
|
|
337
361
|
end
|
|
338
362
|
|