fastlane 2.100.1 → 2.101.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -72
  3. data/fastlane/lib/assets/Actions.md.erb +3 -3
  4. data/fastlane/lib/fastlane/actions/carthage.rb +6 -2
  5. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  6. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +3 -3
  7. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +5 -1
  8. data/fastlane/lib/fastlane/actions/ipa.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/last_git_commit.rb +3 -1
  10. data/fastlane/lib/fastlane/helper/git_helper.rb +1 -0
  11. data/fastlane/lib/fastlane/version.rb +1 -1
  12. data/fastlane/swift/Deliverfile.swift +1 -1
  13. data/fastlane/swift/Fastlane.swift +14 -8
  14. data/fastlane/swift/Gymfile.swift +1 -1
  15. data/fastlane/swift/Matchfile.swift +1 -1
  16. data/fastlane/swift/Precheckfile.swift +1 -1
  17. data/fastlane/swift/Scanfile.swift +1 -1
  18. data/fastlane/swift/Screengrabfile.swift +1 -1
  19. data/fastlane/swift/Snapshotfile.swift +1 -1
  20. data/fastlane_core/lib/fastlane_core/project.rb +5 -2
  21. data/fastlane_core/lib/fastlane_core/update_checker/.update_checker.rb.swp +0 -0
  22. data/snapshot/lib/assets/SnapshotHelper.swift +2 -6
  23. data/spaceship/lib/spaceship/tunes/app_analytics.rb +24 -20
  24. data/spaceship/lib/spaceship/tunes/iap.rb +19 -21
  25. data/spaceship/lib/spaceship/tunes/iap_detail.rb +11 -46
  26. data/spaceship/lib/spaceship/tunes/tunes_client.rb +62 -2
  27. data/supply/lib/supply/client.rb +3 -3
  28. data/supply/lib/supply/options.rb +7 -1
  29. data/supply/lib/supply/uploader.rb +14 -12
  30. metadata +17 -17
  31. 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: c9c569c82afe80df9718dcc307a1ac3c42d7f317
4
- data.tar.gz: 17932681eec485e4dd322fe57fae55b38e0de78e
3
+ metadata.gz: c5dc1ec9ad0287877519c1ea7f976c029d6cc882
4
+ data.tar.gz: c6002cd59d0839916197ecc0382b885fef595b1e
5
5
  SHA512:
6
- metadata.gz: ffa895d80a154a60238e71c3aa9bb6a57241fd19913a3afaba26399ea20b77d7fee40c649cbf68d5951593a558262d6c041a894748c5f1e4a4c30badaf615ad7
7
- data.tar.gz: 20be02130d9f387658fcd2e20c71485888411daba7c30de1c0ce173dc0dc8e15ac1ae87460318e628c1e4504fa4995b71e8ccfb596f80f23cf10650c28f2be54
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='helmut-januschka'>
36
- <a href='https://github.com/hjanuschka'>
37
- <img src='https://github.com/hjanuschka.png?size=140'>
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/giginet'>Kohki Miki</a></h4>
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='danielle-tomlinson'>
74
- <a href='https://github.com/DanToml'>
75
- <img src='https://github.com/DanToml.png?size=140'>
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/lmirosevic'>Luka Mirosevic</a></h4>
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='manu-wallner'>
100
- <a href='https://github.com/milch'>
101
- <img src='https://github.com/milch.png?size=140'>
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/acrooow'>Manu Wallner</a></h4>
71
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
104
72
  </td>
105
- <td id='aaron-brager'>
106
- <a href='https://github.com/getaaron'>
107
- <img src='https://github.com/getaaron.png?size=140'>
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/getaaron'>Aaron Brager</a></h4>
77
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
110
78
  </td>
111
- <td id='andrew-mcburney'>
112
- <a href='https://github.com/AndrewMcBurney'>
113
- <img src='https://github.com/AndrewMcBurney.png?size=140'>
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'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
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='jimmy-dee'>
124
- <a href='https://github.com/jdee'>
125
- <img src='https://github.com/jdee.png?size=140'>
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'>Jimmy Dee</h4>
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='olivier-halligon'>
132
- <a href='https://github.com/AliSoftware'>
133
- <img src='https://github.com/AliSoftware.png?size=140'>
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/aligatr'>Olivier Halligon</a></h4>
103
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
136
104
  </td>
137
- <td id='jorge-revuelta-h'>
138
- <a href='https://github.com/minuscorp'>
139
- <img src='https://github.com/minuscorp.png?size=140'>
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/minuscorp'>Jorge Revuelta H</a></h4>
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='fumiya-nakamura'>
150
- <a href='https://github.com/nafu'>
151
- <img src='https://github.com/nafu.png?size=140'>
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/nafu003'>Fumiya Nakamura</a></h4>
121
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
154
122
  </td>
155
- <td id='maksym-grebenets'>
156
- <a href='https://github.com/mgrebenets'>
157
- <img src='https://github.com/mgrebenets.png?size=140'>
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/mgrebenets'>Maksym Grebenets</a></h4>
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 = ["carthage"]
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 ``_pem_`` file for your server.
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 ``_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.
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
- ``_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.
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. Sample CSV file available [here](https://itunesconnect.apple.com/itc/docs/tester_import.csv).
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')
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.100.1'.freeze
2
+ VERSION = '2.101.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -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-9.2.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
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.24]
4072
+ // FastlaneRunnerAPIVersion [0.9.25]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.100.1
21
+ // Generated with fastlane 2.101.0
@@ -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.find_all do |current_match|
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
- !current_match.end_with?("Pods/Pods.xcodeproj")
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
- guard let window = app.windows.allElementsBoundByIndex.first(where: { $0.frame.isEmpty == false }) else {
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.11]
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 app_units_interval(start_t, end_t)
76
- client.time_series_analytics([apple_id], ['units'], start_t, end_t, "DAY")
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 app_views_interval(start_t, end_t)
80
- client.time_series_analytics([apple_id], ['pageViewCount'], start_t, end_t, "DAY")
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 app_in_app_purchases_interval(start_t, end_t)
84
- client.time_series_analytics([apple_id], ['iap'], start_t, end_t, "DAY")
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 app_sales_interval(start_t, end_t)
88
- client.time_series_analytics([apple_id], ['sales'], start_t, end_t, "DAY")
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 app_paying_users_interval(start_t, end_t)
92
- client.time_series_analytics([apple_id], ['payingUsers'], start_t, end_t, "DAY")
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 app_installs_interval(start_t, end_t)
96
- client.time_series_analytics([apple_id], ['installs'], start_t, end_t, "DAY")
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 app_sessions_interval(start_t, end_t)
100
- client.time_series_analytics([apple_id], ['sessions'], start_t, end_t, "DAY")
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 app_active_devices_interval(start_t, end_t)
104
- client.time_series_analytics([apple_id], ['activeDevices'], start_t, end_t, "DAY")
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 app_active_last_30_days_interval(start_t, end_t)
108
- client.time_series_analytics([apple_id], ['rollingActiveDevices'], start_t, end_t, "DAY")
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 app_crashes_interval(start_t, end_t)
112
- client.time_series_analytics([apple_id], ['crashes'], start_t, end_t, "DAY")
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 && pricing_intervals
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 4 tries, a PotentialServerError
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, 4)
87
- transformed_pricing_intervals = transform_pricing_intervals(pricing_intervals)
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: transformed_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
- new_intervals = []
108
- value.each do |current_interval|
109
- new_intervals << {
110
- "value" => {
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
- intervals_array = []
179
- pricing_intervals.each do |interval|
180
- intervals_array << {
181
- "value" => {
182
- "tierStem" => interval[:tier],
183
- "priceTierEffectiveDate" => interval[:begin_date],
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: nil,
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 = {
@@ -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 = 300
72
- Google::Apis::ClientOptions.default.open_timeout_sec = 300
73
- Google::Apis::ClientOptions.default.send_timeout_sec = 300
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
- upload_binaries unless Supply.config[:skip_upload_apk]
27
- upload_bundles unless Supply.config[:skip_upload_aab]
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 upload_binaries
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
- apk_version_codes = [client.upload_bundle(aab_path)]
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.100.1
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
- - Maksym Grebenets
12
+ - Danielle Tomlinson
15
13
  - Jimmy Dee
16
- - Felix Krause
17
- - Jérôme Lacoste
18
- - Olivier Halligon
14
+ - Fumiya Nakamura
15
+ - Andrew McBurney
19
16
  - Stefan Natchev
17
+ - Maksym Grebenets
20
18
  - Joshua Liebowitz
21
- - Luka Mirosevic
22
- - Kohki Miki
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-20 00:00:00.000000000 Z
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.22.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.22.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