fastlane 2.100.1 → 2.101.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 +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
|