fastlane 2.100.1 → 2.101.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 +72 -72
- data/fastlane/lib/assets/Actions.md.erb +3 -3
- data/fastlane/lib/fastlane/actions/carthage.rb +6 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +3 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +5 -1
- data/fastlane/lib/fastlane/actions/ipa.rb +1 -1
- data/fastlane/lib/fastlane/actions/last_git_commit.rb +3 -1
- data/fastlane/lib/fastlane/helper/git_helper.rb +1 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +14 -8
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/project.rb +5 -2
- data/fastlane_core/lib/fastlane_core/update_checker/.update_checker.rb.swp +0 -0
- data/snapshot/lib/assets/SnapshotHelper.swift +2 -6
- data/spaceship/lib/spaceship/tunes/app_analytics.rb +24 -20
- data/spaceship/lib/spaceship/tunes/iap.rb +19 -21
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +11 -46
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +62 -2
- data/supply/lib/supply/client.rb +3 -3
- data/supply/lib/supply/options.rb +7 -1
- data/supply/lib/supply/uploader.rb +14 -12
- metadata +17 -17
- data/fastlane/lib/fastlane/actions/.cocoapods.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5dc1ec9ad0287877519c1ea7f976c029d6cc882
|
4
|
+
data.tar.gz: c6002cd59d0839916197ecc0382b885fef595b1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32b04046625f52571c7ba9aa0d5c34fc828b4d56e0ec082a75963e18d6647bc96a86b924002cc8792834997b1723bc2ee1c74e59653110745e734846091139ee
|
7
|
+
data.tar.gz: 2813acea85ccfa712c39ba58856fdd319bb22bcea5e70b5f7d70dd9d4497260206657fe46004f03b064582e2112c1a40ca210aadc95bda4a2d1d946cde6d6bc2
|
data/README.md
CHANGED
@@ -32,17 +32,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
32
32
|
|
33
33
|
<table id='team'>
|
34
34
|
<tr>
|
35
|
-
<td id='
|
36
|
-
<a href='https://github.com/
|
37
|
-
<img src='https://github.com/
|
38
|
-
</a>
|
39
|
-
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
40
|
-
</td>
|
41
|
-
<td id='kohki-miki'>
|
42
|
-
<a href='https://github.com/giginet'>
|
43
|
-
<img src='https://github.com/giginet.png?size=140'>
|
35
|
+
<td id='fumiya-nakamura'>
|
36
|
+
<a href='https://github.com/nafu'>
|
37
|
+
<img src='https://github.com/nafu.png?size=140'>
|
44
38
|
</a>
|
45
|
-
<h4 align='center'><a href='https://twitter.com/
|
39
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
46
40
|
</td>
|
47
41
|
<td id='jan-piotrowski'>
|
48
42
|
<a href='https://github.com/janpio'>
|
@@ -50,43 +44,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
50
44
|
</a>
|
51
45
|
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
52
46
|
</td>
|
53
|
-
<td id='joshua-liebowitz'>
|
54
|
-
<a href='https://github.com/taquitos'>
|
55
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
56
|
-
</a>
|
57
|
-
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
58
|
-
</td>
|
59
|
-
<td id='stefan-natchev'>
|
60
|
-
<a href='https://github.com/snatchev'>
|
61
|
-
<img src='https://github.com/snatchev.png?size=140'>
|
62
|
-
</a>
|
63
|
-
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
64
|
-
</td>
|
65
|
-
</tr>
|
66
|
-
<tr>
|
67
47
|
<td id='iulian-onofrei'>
|
68
48
|
<a href='https://github.com/revolter'>
|
69
49
|
<img src='https://github.com/revolter.png?size=140'>
|
70
50
|
</a>
|
71
51
|
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
72
52
|
</td>
|
73
|
-
<td id='
|
74
|
-
<a href='https://github.com/
|
75
|
-
<img src='https://github.com/
|
76
|
-
</a>
|
77
|
-
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
78
|
-
</td>
|
79
|
-
<td id='matthew-ellis'>
|
80
|
-
<a href='https://github.com/matthewellis'>
|
81
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
82
|
-
</a>
|
83
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
84
|
-
</td>
|
85
|
-
<td id='luka-mirosevic'>
|
86
|
-
<a href='https://github.com/lmirosevic'>
|
87
|
-
<img src='https://github.com/lmirosevic.png?size=140'>
|
53
|
+
<td id='andrew-mcburney'>
|
54
|
+
<a href='https://github.com/AndrewMcBurney'>
|
55
|
+
<img src='https://github.com/AndrewMcBurney.png?size=140'>
|
88
56
|
</a>
|
89
|
-
<h4 align='center'><a href='https://twitter.com/
|
57
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
90
58
|
</td>
|
91
59
|
<td id='jérôme-lacoste'>
|
92
60
|
<a href='https://github.com/lacostej'>
|
@@ -96,23 +64,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
96
64
|
</td>
|
97
65
|
</tr>
|
98
66
|
<tr>
|
99
|
-
<td id='
|
100
|
-
<a href='https://github.com/
|
101
|
-
<img src='https://github.com/
|
67
|
+
<td id='maksym-grebenets'>
|
68
|
+
<a href='https://github.com/mgrebenets'>
|
69
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
102
70
|
</a>
|
103
|
-
<h4 align='center'><a href='https://twitter.com/
|
71
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
104
72
|
</td>
|
105
|
-
<td id='
|
106
|
-
<a href='https://github.com/
|
107
|
-
<img src='https://github.com/
|
73
|
+
<td id='matthew-ellis'>
|
74
|
+
<a href='https://github.com/matthewellis'>
|
75
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
108
76
|
</a>
|
109
|
-
<h4 align='center'><a href='https://twitter.com/
|
77
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
110
78
|
</td>
|
111
|
-
<td id='
|
112
|
-
<a href='https://github.com/
|
113
|
-
<img src='https://github.com/
|
79
|
+
<td id='jimmy-dee'>
|
80
|
+
<a href='https://github.com/jdee'>
|
81
|
+
<img src='https://github.com/jdee.png?size=140'>
|
114
82
|
</a>
|
115
|
-
<h4 align='center'
|
83
|
+
<h4 align='center'>Jimmy Dee</h4>
|
116
84
|
</td>
|
117
85
|
<td id='felix-krause'>
|
118
86
|
<a href='https://github.com/KrauseFx'>
|
@@ -120,25 +88,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
120
88
|
</a>
|
121
89
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
122
90
|
</td>
|
123
|
-
<td id='
|
124
|
-
<a href='https://github.com/
|
125
|
-
<img src='https://github.com/
|
91
|
+
<td id='helmut-januschka'>
|
92
|
+
<a href='https://github.com/hjanuschka'>
|
93
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
126
94
|
</a>
|
127
|
-
<h4 align='center'>
|
95
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
128
96
|
</td>
|
129
97
|
</tr>
|
130
98
|
<tr>
|
131
|
-
<td id='
|
132
|
-
<a href='https://github.com/
|
133
|
-
<img src='https://github.com/
|
99
|
+
<td id='stefan-natchev'>
|
100
|
+
<a href='https://github.com/snatchev'>
|
101
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
134
102
|
</a>
|
135
|
-
<h4 align='center'><a href='https://twitter.com/
|
103
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
136
104
|
</td>
|
137
|
-
<td id='
|
138
|
-
<a href='https://github.com/
|
139
|
-
<img src='https://github.com/
|
105
|
+
<td id='luka-mirosevic'>
|
106
|
+
<a href='https://github.com/lmirosevic'>
|
107
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
140
108
|
</a>
|
141
|
-
<h4 align='center'><a href='https://twitter.com/
|
109
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
142
110
|
</td>
|
143
111
|
<td id='josh-holtz'>
|
144
112
|
<a href='https://github.com/joshdholtz'>
|
@@ -146,17 +114,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
146
114
|
</a>
|
147
115
|
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
148
116
|
</td>
|
149
|
-
<td id='
|
150
|
-
<a href='https://github.com/
|
151
|
-
<img src='https://github.com/
|
117
|
+
<td id='kohki-miki'>
|
118
|
+
<a href='https://github.com/giginet'>
|
119
|
+
<img src='https://github.com/giginet.png?size=140'>
|
152
120
|
</a>
|
153
|
-
<h4 align='center'><a href='https://twitter.com/
|
121
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
154
122
|
</td>
|
155
|
-
<td id='
|
156
|
-
<a href='https://github.com/
|
157
|
-
<img src='https://github.com/
|
123
|
+
<td id='manu-wallner'>
|
124
|
+
<a href='https://github.com/milch'>
|
125
|
+
<img src='https://github.com/milch.png?size=140'>
|
158
126
|
</a>
|
159
|
-
<h4 align='center'><a href='https://twitter.com/
|
127
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
128
|
+
</td>
|
129
|
+
</tr>
|
130
|
+
<tr>
|
131
|
+
<td id='aaron-brager'>
|
132
|
+
<a href='https://github.com/getaaron'>
|
133
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
134
|
+
</a>
|
135
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
136
|
+
</td>
|
137
|
+
<td id='jorge-revuelta-h'>
|
138
|
+
<a href='https://github.com/minuscorp'>
|
139
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
140
|
+
</a>
|
141
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
142
|
+
</td>
|
143
|
+
<td id='danielle-tomlinson'>
|
144
|
+
<a href='https://github.com/DanToml'>
|
145
|
+
<img src='https://github.com/DanToml.png?size=140'>
|
146
|
+
</a>
|
147
|
+
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
148
|
+
</td>
|
149
|
+
<td id='joshua-liebowitz'>
|
150
|
+
<a href='https://github.com/taquitos'>
|
151
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
152
|
+
</a>
|
153
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
154
|
+
</td>
|
155
|
+
<td id='olivier-halligon'>
|
156
|
+
<a href='https://github.com/AliSoftware'>
|
157
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
158
|
+
</a>
|
159
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
160
160
|
</td>
|
161
161
|
</tr>
|
162
162
|
</table>
|
@@ -22,12 +22,12 @@ You can import another `Fastfile` by using the `import` action. This is useful i
|
|
22
22
|
import './path/to/other/Fastfile'
|
23
23
|
```
|
24
24
|
|
25
|
-
For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.tools/plugins/available-plugins) page.
|
25
|
+
For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.tools/plugins/available-plugins/) page.
|
26
26
|
|
27
27
|
<%- @categories.each do |category, actions| -%>
|
28
28
|
- [<%= category %>](#<%= category.gsub(" ", "-").downcase %>)
|
29
29
|
<%- end -%>
|
30
|
-
- [Plugins](https://docs.fastlane.tools/plugins/available-plugins)
|
30
|
+
- [Plugins](https://docs.fastlane.tools/plugins/available-plugins/)
|
31
31
|
|
32
32
|
<%- @categories.each do |category, actions| %>
|
33
33
|
# <%= category %>
|
@@ -35,7 +35,7 @@ For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.
|
|
35
35
|
Action | Description
|
36
36
|
---|---
|
37
37
|
<%- actions.sort.to_h.each do |_number_of_launches, action| -%>
|
38
|
-
<%- link = "/actions/#{action.action_name}" -%>
|
38
|
+
<%- link = "/actions/#{action.action_name}/" -%>
|
39
39
|
<a href="<%= link %>"><%= action.action_name %></a> | <%= action.description %>
|
40
40
|
<%- end %><%# End of actions.sort... %>
|
41
41
|
|
@@ -5,7 +5,7 @@ module Fastlane
|
|
5
5
|
def self.run(params)
|
6
6
|
validate(params)
|
7
7
|
|
8
|
-
cmd = [
|
8
|
+
cmd = [params[:executable]]
|
9
9
|
command_name = params[:command]
|
10
10
|
cmd << command_name
|
11
11
|
|
@@ -167,7 +167,11 @@ module Fastlane
|
|
167
167
|
FastlaneCore::ConfigItem.new(key: :log_path,
|
168
168
|
env_name: "FL_CARTHAGE_LOG_PATH",
|
169
169
|
description: "Path to the xcode build output",
|
170
|
-
optional: true)
|
170
|
+
optional: true),
|
171
|
+
FastlaneCore::ConfigItem.new(key: :executable,
|
172
|
+
env_name: "FL_CARTHAGE_EXECUTABLE",
|
173
|
+
description: "Path to the `carthage` executable on your machine",
|
174
|
+
default_value: 'carthage')
|
171
175
|
]
|
172
176
|
end
|
173
177
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
<hr />
|
8
8
|
<h4 align="center">
|
9
|
-
Check out the new <a href="https://docs.fastlane.tools/getting-started/ios/screenshots">fastlane documentation</a> on how to generate screenshots
|
9
|
+
Check out the new <a href="https://docs.fastlane.tools/getting-started/ios/screenshots/">fastlane documentation</a> on how to generate screenshots
|
10
10
|
</h4>
|
11
11
|
<hr />
|
12
12
|
|
@@ -27,7 +27,7 @@ To automate iOS Provisioning profiles you can use [_match_](https://docs.fastlan
|
|
27
27
|
<h5 align="center"><code>pem</code> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
28
28
|
|
29
29
|
# Features
|
30
|
-
Well, it's actually just one: Generate the
|
30
|
+
Well, it's actually just one: Generate the _pem_ file for your server.
|
31
31
|
|
32
32
|
Check out this gif:
|
33
33
|
|
@@ -48,7 +48,7 @@ This does the following:
|
|
48
48
|
- Downloads the certificate
|
49
49
|
- Generates a new ```.pem``` file in the current working directory, which you can upload to your server
|
50
50
|
|
51
|
-
Note that
|
51
|
+
Note that _pem_ will never revoke your existing certificates. _pem_ can't download any of your existing push certificates, as the private key is only available on the machine it was created on.
|
52
52
|
|
53
53
|
If you already have a push certificate enabled, which is active for at least 30 more days, _pem_ will not create a new certificate. If you still want to create one, use the `force`:
|
54
54
|
|
@@ -125,4 +125,4 @@ Run `fastlane action pem` to get a list of available environment variables.
|
|
125
125
|
_pem_ uses [_spaceship_](https://spaceship.airforce) to communicate with the Apple Developer Portal to request a new push certificate for you.
|
126
126
|
|
127
127
|
## How is my password stored?
|
128
|
-
|
128
|
+
_pem_ uses the [password manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager) from _fastlane_. Take a look the [CredentialsManager README](https://github.com/fastlane/fastlane/tree/master/credentials_manager) for more information.
|
@@ -173,7 +173,11 @@ fastlane pilot export
|
|
173
173
|
|
174
174
|
### Import testers
|
175
175
|
|
176
|
-
Add external testers from a CSV file.
|
176
|
+
Add external testers from a CSV file. Create a file (ex: `testers.csv`) and fill it with the following format:
|
177
|
+
|
178
|
+
```no-highlight
|
179
|
+
John,Appleseed,appleseed_john@mac.com,group-1;group-2
|
180
|
+
```
|
177
181
|
|
178
182
|
```no-highlight
|
179
183
|
fastlane pilot import
|
@@ -232,7 +232,7 @@ module Fastlane
|
|
232
232
|
"You are using legacy `shenzhen` to build your app, which will be removed soon!",
|
233
233
|
"It is recommended to upgrade to _gym_.",
|
234
234
|
"To do so, just replace `ipa(...)` with `gym(...)` in your Fastfile.",
|
235
|
-
"To make code signing work, follow [https://docs.fastlane.tools/codesigning/xcode-project](https://docs.fastlane.tools/codesigning/xcode-project)."
|
235
|
+
"To make code signing work, follow [https://docs.fastlane.tools/codesigning/xcode-project/](https://docs.fastlane.tools/codesigning/xcode-project/)."
|
236
236
|
].join("\n")
|
237
237
|
end
|
238
238
|
end
|
@@ -14,7 +14,7 @@ module Fastlane
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.return_value
|
17
|
-
"Returns the following dict: {commit_hash: \"commit hash\", abbreviated_commit_hash: \"abbreviated commit hash\" author: \"Author\", message: \"commit message\"}"
|
17
|
+
"Returns the following dict: {commit_hash: \"commit hash\", abbreviated_commit_hash: \"abbreviated commit hash\" author: \"Author\", author_email: \"author email\", message: \"commit message\"}"
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.return_type
|
@@ -34,6 +34,7 @@ module Fastlane
|
|
34
34
|
'commit = last_git_commit
|
35
35
|
crashlytics(notes: commit[:message]) # message of commit
|
36
36
|
author = commit[:author] # author of the commit
|
37
|
+
author_email = commit[:author_email] # email of the author of the commit
|
37
38
|
hash = commit[:commit_hash] # long sha of commit
|
38
39
|
short_hash = commit[:abbreviated_commit_hash] # short sha of commit'
|
39
40
|
]
|
@@ -47,6 +48,7 @@ module Fastlane
|
|
47
48
|
{
|
48
49
|
message: "message",
|
49
50
|
author: "author",
|
51
|
+
author_email: "author_email",
|
50
52
|
commit_hash: "commit_hash",
|
51
53
|
abbreviated_commit_hash: "short_hash"
|
52
54
|
}
|
@@ -42,6 +42,7 @@ module Fastlane
|
|
42
42
|
|
43
43
|
{
|
44
44
|
author: last_git_commit_formatted_with('%an'),
|
45
|
+
author_email: last_git_commit_formatted_with('%ae'),
|
45
46
|
message: last_git_commit_formatted_with('%B'),
|
46
47
|
commit_hash: last_git_commit_formatted_with('%H'),
|
47
48
|
abbreviated_commit_hash: last_git_commit_formatted_with('%h')
|
@@ -848,7 +848,8 @@ func carthage(command: String = "bootstrap",
|
|
848
848
|
toolchain: String? = nil,
|
849
849
|
projectDirectory: String? = nil,
|
850
850
|
newResolver: Bool? = nil,
|
851
|
-
logPath: String? = nil
|
851
|
+
logPath: String? = nil,
|
852
|
+
executable: String = "carthage") {
|
852
853
|
let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
|
853
854
|
RubyCommand.Argument(name: "dependencies", value: dependencies),
|
854
855
|
RubyCommand.Argument(name: "use_ssh", value: useSsh),
|
@@ -866,7 +867,8 @@ func carthage(command: String = "bootstrap",
|
|
866
867
|
RubyCommand.Argument(name: "toolchain", value: toolchain),
|
867
868
|
RubyCommand.Argument(name: "project_directory", value: projectDirectory),
|
868
869
|
RubyCommand.Argument(name: "new_resolver", value: newResolver),
|
869
|
-
RubyCommand.Argument(name: "log_path", value: logPath)
|
870
|
+
RubyCommand.Argument(name: "log_path", value: logPath),
|
871
|
+
RubyCommand.Argument(name: "executable", value: executable)])
|
870
872
|
_ = runner.executeCommand(command)
|
871
873
|
}
|
872
874
|
func cert(development: Bool = false,
|
@@ -3270,7 +3272,8 @@ func supply(packageName: String,
|
|
3270
3272
|
mapping: String? = nil,
|
3271
3273
|
mappingPaths: [String]? = nil,
|
3272
3274
|
rootUrl: String? = nil,
|
3273
|
-
checkSupersededTracks: Bool = false
|
3275
|
+
checkSupersededTracks: Bool = false,
|
3276
|
+
timeout: Int = 300) {
|
3274
3277
|
let command = RubyCommand(commandID: "", methodName: "supply", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
|
3275
3278
|
RubyCommand.Argument(name: "track", value: track),
|
3276
3279
|
RubyCommand.Argument(name: "rollout", value: rollout),
|
@@ -3292,7 +3295,8 @@ func supply(packageName: String,
|
|
3292
3295
|
RubyCommand.Argument(name: "mapping", value: mapping),
|
3293
3296
|
RubyCommand.Argument(name: "mapping_paths", value: mappingPaths),
|
3294
3297
|
RubyCommand.Argument(name: "root_url", value: rootUrl),
|
3295
|
-
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks)
|
3298
|
+
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
|
3299
|
+
RubyCommand.Argument(name: "timeout", value: timeout)])
|
3296
3300
|
_ = runner.executeCommand(command)
|
3297
3301
|
}
|
3298
3302
|
func swiftlint(mode: String = "lint",
|
@@ -3758,7 +3762,8 @@ func uploadToPlayStore(packageName: String,
|
|
3758
3762
|
mapping: String? = nil,
|
3759
3763
|
mappingPaths: [String]? = nil,
|
3760
3764
|
rootUrl: String? = nil,
|
3761
|
-
checkSupersededTracks: Bool = false
|
3765
|
+
checkSupersededTracks: Bool = false,
|
3766
|
+
timeout: Int = 300) {
|
3762
3767
|
let command = RubyCommand(commandID: "", methodName: "upload_to_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
|
3763
3768
|
RubyCommand.Argument(name: "track", value: track),
|
3764
3769
|
RubyCommand.Argument(name: "rollout", value: rollout),
|
@@ -3780,7 +3785,8 @@ func uploadToPlayStore(packageName: String,
|
|
3780
3785
|
RubyCommand.Argument(name: "mapping", value: mapping),
|
3781
3786
|
RubyCommand.Argument(name: "mapping_paths", value: mappingPaths),
|
3782
3787
|
RubyCommand.Argument(name: "root_url", value: rootUrl),
|
3783
|
-
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks)
|
3788
|
+
RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
|
3789
|
+
RubyCommand.Argument(name: "timeout", value: timeout)])
|
3784
3790
|
_ = runner.executeCommand(command)
|
3785
3791
|
}
|
3786
3792
|
func uploadToTestflight(username: String,
|
@@ -3957,7 +3963,7 @@ func xcov(workspace: String? = nil,
|
|
3957
3963
|
coverallsServiceJobId: String? = nil,
|
3958
3964
|
coverallsRepoToken: String? = nil,
|
3959
3965
|
xcconfig: String? = nil,
|
3960
|
-
ideFoundationPath: String = "/Applications/Xcode
|
3966
|
+
ideFoundationPath: String = "/Applications/Xcode.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
3961
3967
|
legacySupport: Bool = false) {
|
3962
3968
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
3963
3969
|
RubyCommand.Argument(name: "project", value: project),
|
@@ -4063,4 +4069,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
|
|
4063
4069
|
let snapshotfile: Snapshotfile = Snapshotfile()
|
4064
4070
|
// Please don't remove the lines below
|
4065
4071
|
// They are used to detect outdated files
|
4066
|
-
// FastlaneRunnerAPIVersion [0.9.
|
4072
|
+
// FastlaneRunnerAPIVersion [0.9.25]
|
@@ -456,10 +456,13 @@ module FastlaneCore
|
|
456
456
|
@_project_paths = workspace_data.scan(/\"group:(.*)\"/).collect do |current_match|
|
457
457
|
# It's a relative path from the workspace file
|
458
458
|
File.join(File.expand_path("..", path), current_match.first)
|
459
|
-
end.
|
459
|
+
end.select do |current_match|
|
460
|
+
# Xcode workspaces can contain loose files now, so let's filter non-xcodeproj files.
|
461
|
+
current_match.end_with?(".xcodeproj")
|
462
|
+
end.reject do |current_match|
|
460
463
|
# We're not interested in a `Pods` project, as it doesn't contain any relevant
|
461
464
|
# information about code signing
|
462
|
-
|
465
|
+
current_match.end_with?("Pods/Pods.xcodeproj")
|
463
466
|
end
|
464
467
|
|
465
468
|
return @_project_paths
|
@@ -160,11 +160,7 @@ open class Snapshot: NSObject {
|
|
160
160
|
return
|
161
161
|
}
|
162
162
|
|
163
|
-
|
164
|
-
print("Couldn't find an element window in XCUIApplication with a non-empty frame.")
|
165
|
-
return
|
166
|
-
}
|
167
|
-
|
163
|
+
let window = app.windows.firstMatch
|
168
164
|
let screenshot = window.screenshot()
|
169
165
|
guard let simulator = ProcessInfo().environment["SIMULATOR_DEVICE_NAME"], let screenshotsDir = screenshotsDirectory else { return }
|
170
166
|
let path = screenshotsDir.appendingPathComponent("\(simulator)-\(name).png")
|
@@ -277,4 +273,4 @@ private extension CGFloat {
|
|
277
273
|
|
278
274
|
// Please don't remove the lines below
|
279
275
|
// They are used to detect outdated configuration files
|
280
|
-
// SnapshotHelperVersion [1.
|
276
|
+
// SnapshotHelperVersion [1.12]
|
@@ -72,44 +72,48 @@ module Spaceship
|
|
72
72
|
app_crashes_interval(start_t, end_t)
|
73
73
|
end
|
74
74
|
|
75
|
-
def
|
76
|
-
client.time_series_analytics([apple_id], [
|
75
|
+
def app_measure_interval(start_t, end_t, measure, view_by = nil)
|
76
|
+
client.time_series_analytics([apple_id], [measure], start_t, end_t, "DAY", view_by)
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
80
|
-
client.time_series_analytics([apple_id], ['
|
79
|
+
def app_units_interval(start_t, end_t, view_by = nil)
|
80
|
+
client.time_series_analytics([apple_id], ['units'], start_t, end_t, "DAY", view_by)
|
81
81
|
end
|
82
82
|
|
83
|
-
def
|
84
|
-
client.time_series_analytics([apple_id], ['
|
83
|
+
def app_views_interval(start_t, end_t, view_by = nil)
|
84
|
+
client.time_series_analytics([apple_id], ['pageViewCount'], start_t, end_t, "DAY", view_by)
|
85
85
|
end
|
86
86
|
|
87
|
-
def
|
88
|
-
client.time_series_analytics([apple_id], ['
|
87
|
+
def app_in_app_purchases_interval(start_t, end_t, view_by = nil)
|
88
|
+
client.time_series_analytics([apple_id], ['iap'], start_t, end_t, "DAY", view_by)
|
89
89
|
end
|
90
90
|
|
91
|
-
def
|
92
|
-
client.time_series_analytics([apple_id], ['
|
91
|
+
def app_sales_interval(start_t, end_t, view_by = nil)
|
92
|
+
client.time_series_analytics([apple_id], ['sales'], start_t, end_t, "DAY", view_by)
|
93
93
|
end
|
94
94
|
|
95
|
-
def
|
96
|
-
client.time_series_analytics([apple_id], ['
|
95
|
+
def app_paying_users_interval(start_t, end_t, view_by = nil)
|
96
|
+
client.time_series_analytics([apple_id], ['payingUsers'], start_t, end_t, "DAY", view_by)
|
97
97
|
end
|
98
98
|
|
99
|
-
def
|
100
|
-
client.time_series_analytics([apple_id], ['
|
99
|
+
def app_installs_interval(start_t, end_t, view_by = nil)
|
100
|
+
client.time_series_analytics([apple_id], ['installs'], start_t, end_t, "DAY", view_by)
|
101
101
|
end
|
102
102
|
|
103
|
-
def
|
104
|
-
client.time_series_analytics([apple_id], ['
|
103
|
+
def app_sessions_interval(start_t, end_t, view_by = nil)
|
104
|
+
client.time_series_analytics([apple_id], ['sessions'], start_t, end_t, "DAY", view_by)
|
105
105
|
end
|
106
106
|
|
107
|
-
def
|
108
|
-
client.time_series_analytics([apple_id], ['
|
107
|
+
def app_active_devices_interval(start_t, end_t, view_by = nil)
|
108
|
+
client.time_series_analytics([apple_id], ['activeDevices'], start_t, end_t, "DAY", view_by)
|
109
109
|
end
|
110
110
|
|
111
|
-
def
|
112
|
-
client.time_series_analytics([apple_id], ['
|
111
|
+
def app_active_last_30_days_interval(start_t, end_t, view_by = nil)
|
112
|
+
client.time_series_analytics([apple_id], ['rollingActiveDevices'], start_t, end_t, "DAY", view_by)
|
113
|
+
end
|
114
|
+
|
115
|
+
def app_crashes_interval(start_t, end_t, view_by = nil)
|
116
|
+
client.time_series_analytics([apple_id], ['crashes'], start_t, end_t, "DAY", view_by)
|
113
117
|
end
|
114
118
|
|
115
119
|
def time_last_7_days
|
@@ -52,6 +52,14 @@ module Spaceship
|
|
52
52
|
# @param family_id (String) Only used on RECURRING purchases, assigns the In-App-Purchase to a specific familie
|
53
53
|
# @param subscription_free_trial (String) Free Trial duration (1w,1m,3m....)
|
54
54
|
# @param subscription_duration (String) 1w,1m.....
|
55
|
+
# @param subscription_price_target (Hash) Only used on RECURRING purchases, used to set the
|
56
|
+
# price of all the countries to be roughly the same as the price calculated from the price
|
57
|
+
# tier and currency given as input.
|
58
|
+
# @example:
|
59
|
+
# {
|
60
|
+
# currency: "EUR",
|
61
|
+
# tier: 2
|
62
|
+
# }
|
55
63
|
def create!(type: "consumable",
|
56
64
|
versions: nil,
|
57
65
|
reference_name: nil,
|
@@ -62,8 +70,8 @@ module Spaceship
|
|
62
70
|
pricing_intervals: nil,
|
63
71
|
family_id: nil,
|
64
72
|
subscription_free_trial: nil,
|
65
|
-
subscription_duration: nil
|
66
|
-
|
73
|
+
subscription_duration: nil,
|
74
|
+
subscription_price_target: nil)
|
67
75
|
client.create_iap!(app_id: self.application.apple_id,
|
68
76
|
type: type,
|
69
77
|
versions: versions,
|
@@ -78,30 +86,20 @@ module Spaceship
|
|
78
86
|
subscription_free_trial: subscription_free_trial)
|
79
87
|
|
80
88
|
# Update pricing for a recurring subscription.
|
81
|
-
if type == Spaceship::Tunes::IAPType::RECURRING &&
|
89
|
+
if type == Spaceship::Tunes::IAPType::RECURRING &&
|
90
|
+
(pricing_intervals || subscription_price_target)
|
82
91
|
# There are cases where the product that was just created is not immediately found,
|
83
92
|
# and in order to update its pricing the purchase_id is needed. Therefore polling is done
|
84
|
-
# for 4 times until it is found. If it's not found after
|
93
|
+
# for 4 times until it is found. If it's not found after 6 tries, a PotentialServerError
|
85
94
|
# exception is raised.
|
86
|
-
product = find_product_with_retries(product_id,
|
87
|
-
|
95
|
+
product = find_product_with_retries(product_id, 6)
|
96
|
+
raw_pricing_intervals =
|
97
|
+
client.transform_to_raw_pricing_intervals(application.apple_id,
|
98
|
+
product.purchase_id, pricing_intervals,
|
99
|
+
subscription_price_target)
|
88
100
|
client.update_recurring_iap_pricing!(app_id: self.application.apple_id,
|
89
101
|
purchase_id: product.purchase_id,
|
90
|
-
pricing_intervals:
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def transform_pricing_intervals(pricing_intervals)
|
95
|
-
pricing_intervals.map do |interval|
|
96
|
-
{
|
97
|
-
"value" => {
|
98
|
-
"tierStem" => interval[:tier],
|
99
|
-
"priceTierEffectiveDate" => interval[:begin_date],
|
100
|
-
"priceTierEndDate" => interval[:end_date],
|
101
|
-
"country" => interval[:country] || "WW",
|
102
|
-
"grandfathered" => interval[:grandfathered]
|
103
|
-
}
|
104
|
-
}
|
102
|
+
pricing_intervals: raw_pricing_intervals)
|
105
103
|
end
|
106
104
|
end
|
107
105
|
|
@@ -104,20 +104,10 @@ module Spaceship
|
|
104
104
|
|
105
105
|
# transforms user-set intervals to iTC ones
|
106
106
|
def pricing_intervals=(value = [])
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
"tierStem" => current_interval[:tier],
|
112
|
-
"priceTierEndDate" => current_interval[:end_date],
|
113
|
-
"priceTierEffectiveDate" => current_interval[:begin_date],
|
114
|
-
"grandfathered" => current_interval[:grandfathered],
|
115
|
-
"country" => current_interval[:country]
|
116
|
-
}
|
117
|
-
}
|
118
|
-
end
|
119
|
-
raw_data.set(["pricingIntervals"], new_intervals)
|
120
|
-
@raw_pricing_data["subscriptions"] = new_intervals if @raw_pricing_data
|
107
|
+
raw_pricing_intervals =
|
108
|
+
client.transform_to_raw_pricing_intervals(application.apple_id, self.purchase_id, value)
|
109
|
+
raw_data.set(["pricingIntervals"], raw_pricing_intervals)
|
110
|
+
@raw_pricing_data["subscriptions"] = raw_pricing_intervals if @raw_pricing_data
|
121
111
|
end
|
122
112
|
|
123
113
|
# @return (Array) pricing intervals
|
@@ -131,7 +121,7 @@ module Spaceship
|
|
131
121
|
# }
|
132
122
|
# ]
|
133
123
|
def pricing_intervals
|
134
|
-
@pricing_intervals ||= (raw_data["pricingIntervals"] || []).map do |interval|
|
124
|
+
@pricing_intervals ||= (raw_data["pricingIntervals"] || @raw_pricing_data["subscriptions"] || []).map do |interval|
|
135
125
|
{
|
136
126
|
tier: interval["value"]["tierStem"].to_i,
|
137
127
|
begin_date: interval["value"]["priceTierEffectiveDate"],
|
@@ -175,37 +165,12 @@ module Spaceship
|
|
175
165
|
raw_data.set(["versions"], [{ reviewNotes: { value: @review_notes }, contentHosting: raw_data['versions'].first['contentHosting'], "details" => { "value" => versions_array }, id: raw_data["versions"].first["id"], reviewScreenshot: { "value" => review_screenshot } }])
|
176
166
|
|
177
167
|
# transform pricingDetails
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
"priceTierEndDate" => interval[:end_date],
|
185
|
-
"country" => interval[:country] || "WW",
|
186
|
-
"grandfathered" => interval[:grandfathered]
|
187
|
-
}
|
188
|
-
}
|
189
|
-
end
|
190
|
-
|
191
|
-
if subscription_price_target
|
192
|
-
intervals_array = []
|
193
|
-
pricing_calculator = client.iap_subscription_pricing_target(app_id: application.apple_id, purchase_id: purchase_id, currency: subscription_price_target[:currency], tier: subscription_price_target[:tier])
|
194
|
-
pricing_calculator.each do |language_code, value|
|
195
|
-
intervals_array << {
|
196
|
-
value: {
|
197
|
-
tierStem: value["tierStem"],
|
198
|
-
priceTierEffectiveDate: value["priceTierEffectiveDate"],
|
199
|
-
priceTierEndDate: value["priceTierEndDate"],
|
200
|
-
country: language_code,
|
201
|
-
grandfathered: { value: "FUTURE_NONE" }
|
202
|
-
}
|
203
|
-
}
|
204
|
-
end
|
205
|
-
|
206
|
-
end
|
207
|
-
|
208
|
-
raw_data.set(["pricingIntervals"], intervals_array)
|
168
|
+
raw_pricing_intervals =
|
169
|
+
client.transform_to_raw_pricing_intervals(application.apple_id,
|
170
|
+
self.purchase_id, pricing_intervals,
|
171
|
+
subscription_price_target)
|
172
|
+
raw_data.set(["pricingIntervals"], raw_pricing_intervals)
|
173
|
+
@raw_pricing_data["subscriptions"] = raw_pricing_intervals if @raw_pricing_data
|
209
174
|
|
210
175
|
if @review_screenshot
|
211
176
|
# Upload Screenshot
|
@@ -515,13 +515,13 @@ module Spaceship
|
|
515
515
|
# @!group AppAnalytics
|
516
516
|
#####################################################
|
517
517
|
|
518
|
-
def time_series_analytics(app_ids, measures, start_time, end_time, frequency)
|
518
|
+
def time_series_analytics(app_ids, measures, start_time, end_time, frequency, view_by)
|
519
519
|
data = {
|
520
520
|
adamId: app_ids,
|
521
521
|
dimensionFilters: [],
|
522
522
|
endTime: end_time,
|
523
523
|
frequency: frequency,
|
524
|
-
group:
|
524
|
+
group: group_for_view_by(view_by, measures),
|
525
525
|
measures: measures,
|
526
526
|
startTime: start_time
|
527
527
|
}
|
@@ -575,6 +575,51 @@ module Spaceship
|
|
575
575
|
handle_itc_response(r.body)
|
576
576
|
end
|
577
577
|
|
578
|
+
def transform_to_raw_pricing_intervals(app_id = nil, purchase_id = nil, pricing_intervals = nil, subscription_price_target = nil)
|
579
|
+
intervals_array = []
|
580
|
+
if pricing_intervals
|
581
|
+
intervals_array = pricing_intervals.map do |interval|
|
582
|
+
{
|
583
|
+
"value" => {
|
584
|
+
"tierStem" => interval[:tier],
|
585
|
+
"priceTierEffectiveDate" => interval[:begin_date],
|
586
|
+
"priceTierEndDate" => interval[:end_date],
|
587
|
+
"country" => interval[:country] || "WW",
|
588
|
+
"grandfathered" => interval[:grandfathered]
|
589
|
+
}
|
590
|
+
}
|
591
|
+
end
|
592
|
+
end
|
593
|
+
|
594
|
+
if subscription_price_target
|
595
|
+
pricing_calculator = iap_subscription_pricing_target(app_id: app_id, purchase_id: purchase_id, currency: subscription_price_target[:currency], tier: subscription_price_target[:tier])
|
596
|
+
intervals_array = pricing_calculator.map do |language_code, value|
|
597
|
+
existing_interval =
|
598
|
+
if pricing_intervals
|
599
|
+
pricing_intervals.find { |interval| interval[:country] == language_code }
|
600
|
+
end
|
601
|
+
grandfathered =
|
602
|
+
if existing_interval
|
603
|
+
existing_interval[:grandfathered].clone
|
604
|
+
else
|
605
|
+
{ "value" => "FUTURE_NONE" }
|
606
|
+
end
|
607
|
+
|
608
|
+
{
|
609
|
+
"value" => {
|
610
|
+
"tierStem" => value["tierStem"],
|
611
|
+
"priceTierEffectiveDate" => value["priceTierEffectiveDate"],
|
612
|
+
"priceTierEndDate" => value["priceTierEndDate"],
|
613
|
+
"country" => language_code,
|
614
|
+
"grandfathered" => grandfathered
|
615
|
+
}
|
616
|
+
}
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
620
|
+
intervals_array
|
621
|
+
end
|
622
|
+
|
578
623
|
def price_tier(app_id)
|
579
624
|
r = request(:get, "ra/apps/#{app_id}/pricing/intervals")
|
580
625
|
data = parse_response(r, 'data')
|
@@ -1409,6 +1454,21 @@ module Spaceship
|
|
1409
1454
|
@sso_token_for_video ||= ref_data.sso_token_for_video
|
1410
1455
|
end
|
1411
1456
|
|
1457
|
+
# generates group hash used in the analytics time_series API.
|
1458
|
+
# Using rank=DESCENDING and limit=3 as this is what the App Store Connect analytics dashboard uses.
|
1459
|
+
def group_for_view_by(view_by, measures)
|
1460
|
+
if view_by.nil? || measures.nil?
|
1461
|
+
return nil
|
1462
|
+
else
|
1463
|
+
return {
|
1464
|
+
metric: measures.first,
|
1465
|
+
dimension: view_by,
|
1466
|
+
rank: "DESCENDING",
|
1467
|
+
limit: 3
|
1468
|
+
}
|
1469
|
+
end
|
1470
|
+
end
|
1471
|
+
|
1412
1472
|
def update_tester_from_app!(tester, app_id, testing)
|
1413
1473
|
url = tester.class.url(app_id)[:update_by_app]
|
1414
1474
|
data = {
|
data/supply/lib/supply/client.rb
CHANGED
@@ -68,9 +68,9 @@ module Supply
|
|
68
68
|
|
69
69
|
Google::Apis::ClientOptions.default.application_name = "fastlane - supply"
|
70
70
|
Google::Apis::ClientOptions.default.application_version = Fastlane::VERSION
|
71
|
-
Google::Apis::ClientOptions.default.read_timeout_sec =
|
72
|
-
Google::Apis::ClientOptions.default.open_timeout_sec =
|
73
|
-
Google::Apis::ClientOptions.default.send_timeout_sec =
|
71
|
+
Google::Apis::ClientOptions.default.read_timeout_sec = Supply.config[:timeout]
|
72
|
+
Google::Apis::ClientOptions.default.open_timeout_sec = Supply.config[:timeout]
|
73
|
+
Google::Apis::ClientOptions.default.send_timeout_sec = Supply.config[:timeout]
|
74
74
|
Google::Apis::RequestOptions.default.retries = 5
|
75
75
|
|
76
76
|
self.android_publisher = Androidpublisher::AndroidPublisherService.new
|
@@ -202,7 +202,13 @@ module Supply
|
|
202
202
|
optional: true,
|
203
203
|
description: "Check the other tracks for superseded versions and disable them",
|
204
204
|
is_string: false,
|
205
|
-
default_value: false)
|
205
|
+
default_value: false),
|
206
|
+
FastlaneCore::ConfigItem.new(key: :timeout,
|
207
|
+
env_name: "SUPPLY_TIMEOUT",
|
208
|
+
optional: true,
|
209
|
+
description: "Timeout for read, open, and send (in seconds)",
|
210
|
+
type: Integer,
|
211
|
+
default_value: 300)
|
206
212
|
|
207
213
|
]
|
208
214
|
end
|
@@ -23,8 +23,14 @@ module Supply
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
apk_version_codes = []
|
27
|
+
apk_version_codes.concat(upload_apks) unless Supply.config[:skip_upload_apk]
|
28
|
+
apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
|
29
|
+
upload_mapping(apk_version_codes)
|
30
|
+
|
31
|
+
# Only update tracks if we have version codes
|
32
|
+
# Updating a track with empty version codes can completely clear out a track
|
33
|
+
update_track(apk_version_codes) unless apk_version_codes.empty?
|
28
34
|
|
29
35
|
promote_track if Supply.config[:track_promote_to]
|
30
36
|
|
@@ -123,7 +129,7 @@ module Supply
|
|
123
129
|
end
|
124
130
|
end
|
125
131
|
|
126
|
-
def
|
132
|
+
def upload_apks
|
127
133
|
apk_paths = [Supply.config[:apk]] unless (apk_paths = Supply.config[:apk_paths])
|
128
134
|
apk_paths.compact!
|
129
135
|
|
@@ -133,16 +139,16 @@ module Supply
|
|
133
139
|
apk_version_codes.push(upload_binary_data(apk_path))
|
134
140
|
end
|
135
141
|
|
142
|
+
return apk_version_codes
|
143
|
+
end
|
144
|
+
|
145
|
+
def upload_mapping(apk_version_codes)
|
136
146
|
mapping_paths = [Supply.config[:mapping]] unless (mapping_paths = Supply.config[:mapping_paths])
|
137
147
|
mapping_paths.zip(apk_version_codes).each do |mapping_path, version_code|
|
138
148
|
if mapping_path
|
139
149
|
client.upload_mapping(mapping_path, version_code)
|
140
150
|
end
|
141
151
|
end
|
142
|
-
|
143
|
-
# Only update tracks if we have version codes
|
144
|
-
# Updating a track with empty version codes can completely clear out a track
|
145
|
-
update_track(apk_version_codes) unless apk_version_codes.empty?
|
146
152
|
end
|
147
153
|
|
148
154
|
def upload_bundles
|
@@ -150,11 +156,7 @@ module Supply
|
|
150
156
|
return unless aab_path
|
151
157
|
|
152
158
|
UI.message("Preparing aab at path '#{aab_path}' for upload...")
|
153
|
-
|
154
|
-
|
155
|
-
# Only update tracks if we have version codes
|
156
|
-
# Updating a track with empty version codes can completely clear out a track
|
157
|
-
update_track(apk_version_codes) unless apk_version_codes.empty?
|
159
|
+
return [client.upload_bundle(aab_path)]
|
158
160
|
end
|
159
161
|
|
160
162
|
private
|
metadata
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.101.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manu Wallner
|
8
|
+
- Kohki Miki
|
9
|
+
- Olivier Halligon
|
8
10
|
- Jorge Revuelta H
|
9
|
-
- Matthew Ellis
|
10
|
-
- Danielle Tomlinson
|
11
|
-
- Iulian Onofrei
|
12
|
-
- Fumiya Nakamura
|
13
11
|
- Helmut Januschka
|
14
|
-
-
|
12
|
+
- Danielle Tomlinson
|
15
13
|
- Jimmy Dee
|
16
|
-
-
|
17
|
-
-
|
18
|
-
- Olivier Halligon
|
14
|
+
- Fumiya Nakamura
|
15
|
+
- Andrew McBurney
|
19
16
|
- Stefan Natchev
|
17
|
+
- Maksym Grebenets
|
20
18
|
- Joshua Liebowitz
|
21
|
-
-
|
22
|
-
-
|
23
|
-
- Andrew McBurney
|
19
|
+
- Jérôme Lacoste
|
20
|
+
- Felix Krause
|
24
21
|
- Aaron Brager
|
25
|
-
- Josh Holtz
|
26
22
|
- Jan Piotrowski
|
23
|
+
- Luka Mirosevic
|
24
|
+
- Matthew Ellis
|
25
|
+
- Iulian Onofrei
|
26
|
+
- Josh Holtz
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2018-07-
|
30
|
+
date: 2018-07-31 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -608,7 +608,7 @@ dependencies:
|
|
608
608
|
version: 0.21.2
|
609
609
|
- - "<"
|
610
610
|
- !ruby/object:Gem::Version
|
611
|
-
version: 0.
|
611
|
+
version: 0.24.0
|
612
612
|
type: :runtime
|
613
613
|
prerelease: false
|
614
614
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -618,7 +618,7 @@ dependencies:
|
|
618
618
|
version: 0.21.2
|
619
619
|
- - "<"
|
620
620
|
- !ruby/object:Gem::Version
|
621
|
-
version: 0.
|
621
|
+
version: 0.24.0
|
622
622
|
- !ruby/object:Gem::Dependency
|
623
623
|
name: emoji_regex
|
624
624
|
requirement: !ruby/object:Gem::Requirement
|
@@ -940,7 +940,6 @@ files:
|
|
940
940
|
- fastlane/lib/fastlane.rb
|
941
941
|
- fastlane/lib/fastlane/action.rb
|
942
942
|
- fastlane/lib/fastlane/action_collector.rb
|
943
|
-
- fastlane/lib/fastlane/actions/.cocoapods.rb.swp
|
944
943
|
- fastlane/lib/fastlane/actions/README.md
|
945
944
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
946
945
|
- fastlane/lib/fastlane/actions/adb.rb
|
@@ -1339,6 +1338,7 @@ files:
|
|
1339
1338
|
- fastlane_core/lib/fastlane_core/ui/implementations/shell.rb
|
1340
1339
|
- fastlane_core/lib/fastlane_core/ui/interface.rb
|
1341
1340
|
- fastlane_core/lib/fastlane_core/ui/ui.rb
|
1341
|
+
- fastlane_core/lib/fastlane_core/update_checker/.update_checker.rb.swp
|
1342
1342
|
- fastlane_core/lib/fastlane_core/update_checker/changelog.rb
|
1343
1343
|
- fastlane_core/lib/fastlane_core/update_checker/update_checker.rb
|
1344
1344
|
- frameit/README.md
|
Binary file
|