fastlane 2.96.0.beta.20180521050117 → 2.96.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 +62 -62
- data/fastlane/lib/assets/ActionDetails.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/cocoapods.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +97 -84
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +8 -5
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +19 -2
- data/fastlane/lib/fastlane/actions/gradle.rb +18 -7
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +15 -5
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- 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/gym/lib/gym/options.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +9 -0
- data/spaceship/lib/spaceship/errors.rb +6 -0
- data/supply/lib/supply/client.rb +15 -0
- data/supply/lib/supply/options.rb +23 -2
- data/supply/lib/supply/uploader.rb +24 -2
- metadata +38 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d6f2db45c6b7964ddef4cfffd143509b5041e39
|
4
|
+
data.tar.gz: c1a14a73094bd8c5d0ce552118993d34d6555836
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2750d952fa4da1517492acc4685ed1e9e86e5f74a9909f2c9f6994bf3413f2db6c13f335c43b7329584938d8fe8f9e4aa46c97f4b2a3729d005a35eff307f65
|
7
|
+
data.tar.gz: 40754777e16327ef27e2d0008d5e139f9466475f5927cd909dc8f2a1f4e4f45921d4f9686c86bd17d71a3c4ed4e0c98c777560a2c27cbe50f3819c383161457d
|
data/README.md
CHANGED
@@ -32,17 +32,17 @@ 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/
|
35
|
+
<td id='iulian-onofrei'>
|
36
|
+
<a href='https://github.com/revolter'>
|
37
|
+
<img src='https://github.com/revolter.png?size=140'>
|
38
38
|
</a>
|
39
|
-
<h4 align='center'><a href='https://twitter.com/
|
39
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
40
40
|
</td>
|
41
|
-
<td id='
|
42
|
-
<a href='https://github.com/
|
43
|
-
<img src='https://github.com/
|
41
|
+
<td id='kohki-miki'>
|
42
|
+
<a href='https://github.com/giginet'>
|
43
|
+
<img src='https://github.com/giginet.png?size=140'>
|
44
44
|
</a>
|
45
|
-
<h4 align='center'><a href='https://twitter.com/
|
45
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
46
46
|
</td>
|
47
47
|
<td id='manu-wallner'>
|
48
48
|
<a href='https://github.com/milch'>
|
@@ -50,25 +50,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
50
50
|
</a>
|
51
51
|
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
52
52
|
</td>
|
53
|
-
<td id='
|
54
|
-
<a href='https://github.com/
|
55
|
-
<img src='https://github.com/
|
53
|
+
<td id='jan-piotrowski'>
|
54
|
+
<a href='https://github.com/janpio'>
|
55
|
+
<img src='https://github.com/janpio.png?size=140'>
|
56
56
|
</a>
|
57
|
-
<h4 align='center'><a href='https://twitter.com/
|
57
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
58
58
|
</td>
|
59
|
+
<td id='luka-mirosevic'>
|
60
|
+
<a href='https://github.com/lmirosevic'>
|
61
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
62
|
+
</a>
|
63
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
64
|
+
</td>
|
65
|
+
</tr>
|
66
|
+
<tr>
|
59
67
|
<td id='felix-krause'>
|
60
68
|
<a href='https://github.com/KrauseFx'>
|
61
69
|
<img src='https://github.com/KrauseFx.png?size=140'>
|
62
70
|
</a>
|
63
71
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
64
72
|
</td>
|
65
|
-
|
66
|
-
<
|
67
|
-
<
|
68
|
-
<a href='https://github.com/taquitos'>
|
69
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
73
|
+
<td id='olivier-halligon'>
|
74
|
+
<a href='https://github.com/AliSoftware'>
|
75
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
70
76
|
</a>
|
71
|
-
<h4 align='center'><a href='https://twitter.com/
|
77
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
72
78
|
</td>
|
73
79
|
<td id='jimmy-dee'>
|
74
80
|
<a href='https://github.com/jdee'>
|
@@ -76,11 +82,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
76
82
|
</a>
|
77
83
|
<h4 align='center'>Jimmy Dee</h4>
|
78
84
|
</td>
|
79
|
-
<td id='
|
80
|
-
<a href='https://github.com/
|
81
|
-
<img src='https://github.com/
|
85
|
+
<td id='josh-holtz'>
|
86
|
+
<a href='https://github.com/joshdholtz'>
|
87
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
82
88
|
</a>
|
83
|
-
<h4 align='center'><a href='https://twitter.com/
|
89
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
84
90
|
</td>
|
85
91
|
<td id='aaron-brager'>
|
86
92
|
<a href='https://github.com/getaaron'>
|
@@ -88,46 +94,46 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
88
94
|
</a>
|
89
95
|
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
90
96
|
</td>
|
91
|
-
<td id='danielle-tomlinson'>
|
92
|
-
<a href='https://github.com/DanToml'>
|
93
|
-
<img src='https://github.com/DanToml.png?size=140'>
|
94
|
-
</a>
|
95
|
-
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
96
|
-
</td>
|
97
97
|
</tr>
|
98
98
|
<tr>
|
99
|
-
<td id='
|
100
|
-
<a href='https://github.com/
|
101
|
-
<img src='https://github.com/
|
99
|
+
<td id='maksym-grebenets'>
|
100
|
+
<a href='https://github.com/mgrebenets'>
|
101
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
102
102
|
</a>
|
103
|
-
<h4 align='center'><a href='https://twitter.com/
|
103
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
104
104
|
</td>
|
105
|
-
<td id='
|
106
|
-
<a href='https://github.com/
|
107
|
-
<img src='https://github.com/
|
105
|
+
<td id='jorge-revuelta-h'>
|
106
|
+
<a href='https://github.com/minuscorp'>
|
107
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
108
108
|
</a>
|
109
|
-
<h4 align='center'><a href='https://twitter.com/
|
109
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
110
110
|
</td>
|
111
|
-
<td id='
|
112
|
-
<a href='https://github.com/
|
113
|
-
<img src='https://github.com/
|
111
|
+
<td id='jérôme-lacoste'>
|
112
|
+
<a href='https://github.com/lacostej'>
|
113
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
114
114
|
</a>
|
115
|
-
<h4 align='center'><a href='https://twitter.com/
|
115
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
116
116
|
</td>
|
117
|
-
<td id='
|
118
|
-
<a href='https://github.com/
|
119
|
-
<img src='https://github.com/
|
117
|
+
<td id='fumiya-nakamura'>
|
118
|
+
<a href='https://github.com/nafu'>
|
119
|
+
<img src='https://github.com/nafu.png?size=140'>
|
120
120
|
</a>
|
121
|
-
<h4 align='center'><a href='https://twitter.com/
|
121
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
122
122
|
</td>
|
123
|
-
<td id='
|
124
|
-
<a href='https://github.com/
|
125
|
-
<img src='https://github.com/
|
123
|
+
<td id='danielle-tomlinson'>
|
124
|
+
<a href='https://github.com/DanToml'>
|
125
|
+
<img src='https://github.com/DanToml.png?size=140'>
|
126
126
|
</a>
|
127
|
-
<h4 align='center'><a href='https://twitter.com/
|
127
|
+
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
128
128
|
</td>
|
129
129
|
</tr>
|
130
130
|
<tr>
|
131
|
+
<td id='joshua-liebowitz'>
|
132
|
+
<a href='https://github.com/taquitos'>
|
133
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
134
|
+
</a>
|
135
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
136
|
+
</td>
|
131
137
|
<td id='stefan-natchev'>
|
132
138
|
<a href='https://github.com/snatchev'>
|
133
139
|
<img src='https://github.com/snatchev.png?size=140'>
|
@@ -140,23 +146,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
140
146
|
</a>
|
141
147
|
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
142
148
|
</td>
|
143
|
-
<td id='
|
144
|
-
<a href='https://github.com/
|
145
|
-
<img src='https://github.com/
|
146
|
-
</a>
|
147
|
-
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
148
|
-
</td>
|
149
|
-
<td id='luka-mirosevic'>
|
150
|
-
<a href='https://github.com/lmirosevic'>
|
151
|
-
<img src='https://github.com/lmirosevic.png?size=140'>
|
149
|
+
<td id='matthew-ellis'>
|
150
|
+
<a href='https://github.com/matthewellis'>
|
151
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
152
152
|
</a>
|
153
|
-
<h4 align='center'><a href='https://twitter.com/
|
153
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
154
154
|
</td>
|
155
|
-
<td id='
|
156
|
-
<a href='https://github.com/
|
157
|
-
<img src='https://github.com/
|
155
|
+
<td id='helmut-januschka'>
|
156
|
+
<a href='https://github.com/hjanuschka'>
|
157
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
158
158
|
</a>
|
159
|
-
<h4 align='center'><a href='https://twitter.com/
|
159
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
160
160
|
</td>
|
161
161
|
</tr>
|
162
162
|
</table>
|
@@ -44,7 +44,7 @@ Key | Description | Default
|
|
44
44
|
<%- (action.available_options || []).each do |config_item| -%>
|
45
45
|
<%- next unless config_item.kind_of?(FastlaneCore::ConfigItem) -%>
|
46
46
|
<%- next if config_item.description.to_s.length == 0 -%>
|
47
|
-
`<%= config_item.key %>` | <%= config_item.description %> | <%= config_item.doc_default_value %>
|
47
|
+
`<%= config_item.key %>` | <%= config_item.description.gsub(/(?<!\\)\|/, "\\|") %> | <%= config_item.doc_default_value %>
|
48
48
|
<%- end %>
|
49
49
|
<em id="parameters-legend-dynamic">* = default value is dependent on the user's system</em>
|
50
50
|
<% end %><%# End of action.available_options... %>
|
@@ -64,7 +64,7 @@ module Fastlane
|
|
64
64
|
default_value: true),
|
65
65
|
FastlaneCore::ConfigItem.new(key: :repo_update,
|
66
66
|
env_name: "FL_COCOAPODS_REPO_UPDATE",
|
67
|
-
description: "
|
67
|
+
description: "Add `--repo-update` flag to `pod install` command",
|
68
68
|
is_string: false,
|
69
69
|
default_value: false,
|
70
70
|
conflicting_options: [:try_repo_update_on_error]),
|
@@ -30,64 +30,76 @@ _produce_ creates new iOS apps on both the Apple Developer Portal and iTunes Con
|
|
30
30
|
|
31
31
|
## Creating a new application
|
32
32
|
|
33
|
-
|
33
|
+
```no-highlight
|
34
|
+
fastlane produce
|
35
|
+
```
|
34
36
|
|
35
37
|
To get a list of all available parameters:
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
```
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
39
|
+
```no-highlight
|
40
|
+
fastlane produce --help
|
41
|
+
```
|
42
|
+
|
43
|
+
```no-highlight
|
44
|
+
Commands: (* default)
|
45
|
+
associate_group Associate with a group, which is created if needed or simply located otherwise
|
46
|
+
associate_merchant Associate with a merchant for use with Apple Pay. Apple Pay will be enabled for this app
|
47
|
+
create * Creates a new app on iTunes Connect and the Apple Developer Portal
|
48
|
+
disable_services Disable specific Application Services for a specific app on the Apple Developer Portal
|
49
|
+
enable_services Enable specific Application Services for a specific app on the Apple Developer Portal
|
50
|
+
group Ensure that a specific App Group exists
|
51
|
+
help Display global or [command] help documentation
|
52
|
+
merchant Ensure that a specific Merchant exists
|
53
|
+
|
54
|
+
Global Options:
|
55
|
+
--verbose
|
56
|
+
-h, --help Display help documentation
|
57
|
+
-v, --version Display version information
|
58
|
+
|
59
|
+
Options for create:
|
60
|
+
-u, --username STRING Your Apple ID Username (PRODUCE_USERNAME)
|
61
|
+
-a, --app_identifier STRING App Identifier (Bundle ID, e.g. com.krausefx.app) (PRODUCE_APP_IDENTIFIER)
|
62
|
+
-e, --bundle_identifier_suffix STRING App Identifier Suffix (Ignored if App Identifier does not ends with .*) (PRODUCE_APP_IDENTIFIER_SUFFIX)
|
63
|
+
-q, --app_name STRING App Name (PRODUCE_APP_NAME)
|
64
|
+
-z, --app_version STRING Initial version number (e.g. '1.0') (PRODUCE_VERSION)
|
65
|
+
-y, --sku STRING SKU Number (e.g. '1234') (PRODUCE_SKU)
|
66
|
+
-j, --platform STRING The platform to use (optional) (PRODUCE_PLATFORM)
|
67
|
+
-m, --language STRING Primary Language (e.g. 'English', 'German') (PRODUCE_LANGUAGE)
|
68
|
+
-c, --company_name STRING The name of your company. Only required if it's the first app you create (PRODUCE_COMPANY_NAME)
|
69
|
+
-i, --skip_itc [VALUE] Skip the creation of the app on iTunes Connect (PRODUCE_SKIP_ITC)
|
70
|
+
-d, --skip_devcenter [VALUE] Skip the creation of the app on the Apple Developer Portal (PRODUCE_SKIP_DEVCENTER)
|
71
|
+
-s, --itc_users ARRAY Array of iTunes Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles (ITC_USERS)
|
72
|
+
-b, --team_id STRING The ID of your Developer Portal team if you're in multiple teams (PRODUCE_TEAM_ID)
|
73
|
+
-l, --team_name STRING The name of your Developer Portal team if you're in multiple teams (PRODUCE_TEAM_NAME)
|
74
|
+
-k, --itc_team_id [VALUE] The ID of your iTunes Connect team if you're in multiple teams (PRODUCE_ITC_TEAM_ID)
|
75
|
+
-p, --itc_team_name STRING The name of your iTunes Connect team if you're in multiple teams (PRODUCE_ITC_TEAM_NAME)
|
72
76
|
```
|
73
77
|
|
74
78
|
## Enabling / Disabling Application Services
|
75
79
|
|
76
80
|
If you want to enable Application Services for an App ID (HomeKit and HealthKit in this example):
|
77
81
|
|
78
|
-
|
82
|
+
```no-highlight
|
83
|
+
fastlane produce enable_services --homekit --healthkit
|
84
|
+
```
|
79
85
|
|
80
86
|
If you want to disable Application Services for an App ID (iCloud in this case):
|
81
87
|
|
82
|
-
|
88
|
+
```no-highlight
|
89
|
+
fastlane produce disable_services --icloud
|
90
|
+
```
|
83
91
|
|
84
92
|
If you want to create a new App Group:
|
85
93
|
|
86
|
-
|
94
|
+
```no-highlight
|
95
|
+
fastlane produce group -g group.krausefx -n "Example App Group"
|
96
|
+
```
|
87
97
|
|
88
98
|
If you want to associate an app with an App Group:
|
89
99
|
|
90
|
-
|
100
|
+
```no-highlight
|
101
|
+
fastlane produce associate_group -a com.krausefx.app group.krausefx
|
102
|
+
```
|
91
103
|
|
92
104
|
# Parameters
|
93
105
|
|
@@ -98,55 +110,55 @@ fastlane produce enable_services --help
|
|
98
110
|
```
|
99
111
|
|
100
112
|
```no-highlight
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
113
|
+
--app-group Enable App Groups
|
114
|
+
--apple-pay Enable Apple Pay
|
115
|
+
--associated-domains Enable Associated Domains
|
116
|
+
--data-protection STRING Enable Data Protection, suitable values are "complete", "unlessopen" and "untilfirstauth"
|
117
|
+
--game-center Enable Game Center
|
118
|
+
--healthkit Enable HealthKit
|
119
|
+
--homekit Enable HomeKit
|
120
|
+
--hotspot Enable Hotspot
|
121
|
+
--icloud STRING Enable iCloud, suitable values are "legacy" and "cloudkit"
|
122
|
+
--in-app-purchase Enable In-App Purchase
|
123
|
+
--inter-app-audio Enable Inter-App-Audio
|
124
|
+
--multipath Enable Multipath
|
125
|
+
--network-extension Enable Network Extensions
|
126
|
+
--nfc-tag-reading Enable NFC Tag Reading
|
127
|
+
--personal-vpn Enable Personal VPN
|
128
|
+
--passbook Enable Passbook (deprecated)
|
129
|
+
--push-notification Enable Push notification (only enables the service, does not configure certificates)
|
130
|
+
--sirikit Enable SiriKit
|
131
|
+
--vpn-conf Enable VPN Configuration (deprecated)
|
132
|
+
--wallet Enable Wallet
|
133
|
+
--wireless-conf Enable Wireless Accessory Configuration
|
122
134
|
```
|
123
135
|
|
124
136
|
```no-highlight
|
125
137
|
fastlane produce disable_services --help
|
126
138
|
```
|
127
139
|
|
128
|
-
```
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
140
|
+
```no-highlight
|
141
|
+
--app-group Disable App Groups
|
142
|
+
--apple-pay Disable Apple Pay
|
143
|
+
--associated-domains Disable Associated Domains
|
144
|
+
--data-protection Disable Data Protection
|
145
|
+
--game-center Disable Game Center
|
146
|
+
--healthkit Disable HealthKit
|
147
|
+
--homekit Disable HomeKit
|
148
|
+
--hotspot Disable Hotspot
|
149
|
+
--icloud Disable iCloud
|
150
|
+
--in-app-purchase Disable In-App Purchase
|
151
|
+
--inter-app-audio Disable Inter-App-Audio
|
152
|
+
--multipath Disable Multipath
|
153
|
+
--network-extension Disable Network Extensions
|
154
|
+
--nfc-tag-reading Disable NFC Tag Reading
|
155
|
+
--personal-vpn Disable Personal VPN
|
156
|
+
--passbook Disable Passbook (deprecated)
|
157
|
+
--push-notification Disable Push notifications
|
158
|
+
--sirikit Disable SiriKit
|
159
|
+
--vpn-conf Disable VPN Configuration (deprecated)
|
160
|
+
--wallet Disable Wallet
|
161
|
+
--wireless-conf Disable Wireless Accessory Configuration
|
150
162
|
```
|
151
163
|
|
152
164
|
## Creating Apple Pay merchants and associating them with an App ID
|
@@ -158,7 +170,8 @@ fastlane produce merchant -o merchant.com.example.production -r "Example Merchan
|
|
158
170
|
```
|
159
171
|
|
160
172
|
Use `--help` for more information about all available parameters
|
161
|
-
|
173
|
+
|
174
|
+
```no-highlight
|
162
175
|
fastlane produce merchant --help
|
163
176
|
```
|
164
177
|
|
@@ -309,7 +309,7 @@ You'll have to confirm a list of profiles / certificates that will be deleted.
|
|
309
309
|
|
310
310
|
### Change Password
|
311
311
|
|
312
|
-
To change the password of your repo and therefore decrypting and encrypting all files run
|
312
|
+
To change the password of your repo and therefore decrypting and encrypting all files run:
|
313
313
|
|
314
314
|
```no-highlight
|
315
315
|
fastlane match change_password
|
@@ -327,20 +327,23 @@ openssl aes-256-cbc -k "<password>" -in "<fileYouWantToDecryptPath>" -out "<decr
|
|
327
327
|
|
328
328
|
#### Export Distribution Certificate and Private Key as Single .p12 File
|
329
329
|
|
330
|
-
_match_ stores the certificate (
|
330
|
+
_match_ stores the certificate (`.cer`) and the private key (`.p12`) files separately. The following steps will repackage the separate certificate and private key into a single `.p12` file.
|
331
|
+
|
332
|
+
Decrypt your cert found in `certs/<type>/<unique-id>.cer` as a pem file:
|
331
333
|
|
332
|
-
Decrypt your cert found in certs/`<type>`/`<unique-id>`.cer as a pem file
|
333
334
|
```no-highlight
|
334
335
|
openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.dem" -a -d
|
335
336
|
openssl x509 -inform der -in cert.der -out cert.pem
|
336
337
|
```
|
337
338
|
|
338
|
-
Decrypt your private key found in certs
|
339
|
+
Decrypt your private key found in `certs/<type>/<unique-id>.p12` as a pem file:
|
340
|
+
|
339
341
|
```no-highlight
|
340
342
|
openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -out "key.pem" -a -d
|
341
343
|
```
|
342
344
|
|
343
|
-
Generate an encrypted p12 file with the same or new password
|
345
|
+
Generate an encrypted p12 file with the same or new password:
|
346
|
+
|
344
347
|
```no-highlight
|
345
348
|
openssl pkcs12 -export -out "cert.p12" -inkey "key.pem' -in "cert.pem" -password pass:<password>
|
346
349
|
```
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
###### Command line tool for updating Android apps and their metadata on the Google Play Store
|
6
6
|
|
7
|
-
_supply_ uploads app metadata, screenshots and
|
7
|
+
_supply_ uploads app metadata, screenshots, binaries, and app bundles to Google Play. You can also select tracks for builds and promote builds to production.
|
8
8
|
|
9
9
|
-------
|
10
10
|
|
@@ -14,6 +14,7 @@ _supply_ uploads app metadata, screenshots and binaries to Google Play. You can
|
|
14
14
|
<a href="#quick-start">Quick Start</a> •
|
15
15
|
<a href="#available-commands">Commands</a> •
|
16
16
|
<a href="#uploading-an-apk">Uploading an APK</a> •
|
17
|
+
<a href="#uploading-an-aab">Uploading an AAB</a> •
|
17
18
|
<a href="#images-and-screenshots">Images</a>
|
18
19
|
</p>
|
19
20
|
|
@@ -21,7 +22,7 @@ _supply_ uploads app metadata, screenshots and binaries to Google Play. You can
|
|
21
22
|
|
22
23
|
## Features
|
23
24
|
- Update existing Android applications on Google Play via the command line
|
24
|
-
- Upload new builds (APKs)
|
25
|
+
- Upload new builds (APKs and AABs)
|
25
26
|
- Retrieve and edit metadata, such as title and description, for multiple languages
|
26
27
|
- Upload the app icon, promo graphics and screenshots for multiple languages
|
27
28
|
- Have a local copy of the metadata in your git repository
|
@@ -95,6 +96,22 @@ Expansion files (obbs) found under the same directory as your APK will also be u
|
|
95
96
|
- they are identified as type 'main' or 'patch' (by containing 'main' or 'patch' in their file name)
|
96
97
|
- you have at most one of each type
|
97
98
|
|
99
|
+
## Uploading an AAB
|
100
|
+
|
101
|
+
To upload a new [Android application bundle](https://developer.android.com/guide/app-bundle/) to Google Play, simply run
|
102
|
+
|
103
|
+
```no-highlight
|
104
|
+
fastlane supply --aab path/to/app.aab
|
105
|
+
```
|
106
|
+
|
107
|
+
This will also upload app metadata if you previously ran `fastlane supply init`.
|
108
|
+
|
109
|
+
To gradually roll out a new build use
|
110
|
+
|
111
|
+
```no-highlight
|
112
|
+
fastlane supply --aab path/app.aab --track rollout --rollout 0.5
|
113
|
+
```
|
114
|
+
|
98
115
|
## Images and Screenshots
|
99
116
|
|
100
117
|
After running `fastlane supply init`, you will have a metadata directory. This directory contains one or more locale directories (e.g. en-US, en-GB, etc.), and inside this directory are text files such as `title.txt` and `short_description.txt`.
|
@@ -6,6 +6,8 @@ module Fastlane
|
|
6
6
|
module SharedValues
|
7
7
|
GRADLE_APK_OUTPUT_PATH = :GRADLE_APK_OUTPUT_PATH
|
8
8
|
GRADLE_ALL_APK_OUTPUT_PATHS = :GRADLE_ALL_APK_OUTPUT_PATHS
|
9
|
+
GRADLE_AAB_OUTPUT_PATH = :GRADLE_AAB_OUTPUT_PATH
|
10
|
+
GRADLE_ALL_AAB_OUTPUT_PATHS = :GRADLE_ALL_AAB_OUTPUT_PATHS
|
9
11
|
GRADLE_FLAVOR = :GRADLE_FLAVOR
|
10
12
|
GRADLE_BUILD_TYPE = :GRADLE_BUILD_TYPE
|
11
13
|
end
|
@@ -53,24 +55,33 @@ module Fastlane
|
|
53
55
|
print_command: params[:print_command],
|
54
56
|
print_command_output: params[:print_command_output])
|
55
57
|
|
56
|
-
# If we didn't build, then we return now, as it makes no sense to search for apk's in a non-`assemble` scenario
|
57
|
-
return result unless task =~ /\b(assemble)/
|
58
|
+
# If we didn't build, then we return now, as it makes no sense to search for apk's in a non-`assemble` or non-`build` scenario
|
59
|
+
return result unless task =~ /\b(assemble)/ || task =~ /\b(bundle)/
|
58
60
|
|
59
61
|
apk_search_path = File.join(project_dir, '**', 'build', 'outputs', 'apk', '**', '*.apk')
|
62
|
+
aab_search_path = File.join(project_dir, '**', 'build', 'outputs', 'bundle', '**', '*.aab')
|
60
63
|
|
61
|
-
# Our apk is now built, but there might actually be multiple ones that were built if a flavor was not specified in a multi-flavor project (e.g. `assembleRelease`)
|
64
|
+
# Our apk/aab is now built, but there might actually be multiple ones that were built if a flavor was not specified in a multi-flavor project (e.g. `assembleRelease`)
|
65
|
+
# However, we're not interested in unaligned apk's...
|
62
66
|
new_apks = Dir[apk_search_path].reject { |path| path =~ /^.*-unaligned.apk$/i }
|
63
67
|
new_apks = new_apks.map { |path| File.expand_path(path) }
|
68
|
+
new_aabs = Dir[aab_search_path]
|
69
|
+
new_aabs = new_aabs.map { |path| File.expand_path(path) }
|
64
70
|
|
65
|
-
# We expose all of these new
|
71
|
+
# We expose all of these new apks and aabs
|
66
72
|
Actions.lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] = new_apks
|
73
|
+
Actions.lane_context[SharedValues::GRADLE_ALL_AAB_OUTPUT_PATHS] = new_aabs
|
67
74
|
|
68
|
-
# We also take the most recent apk to return as SharedValues::GRADLE_APK_OUTPUT_PATH
|
75
|
+
# We also take the most recent apk and aab to return as SharedValues::GRADLE_APK_OUTPUT_PATH and SharedValues::GRADLE_AAB_OUTPUT_PATH
|
76
|
+
# This is the one that will be relevant for most projects that just build a single build variant (flavor + build type combo).
|
77
|
+
# In multi build variants this value is undefined
|
69
78
|
last_apk_path = new_apks.sort_by(&File.method(:mtime)).last
|
79
|
+
last_aab_path = new_aabs.sort_by(&File.method(:mtime)).last
|
70
80
|
Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] = File.expand_path(last_apk_path) if last_apk_path
|
81
|
+
Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH] = File.expand_path(last_aab_path) if last_aab_path
|
71
82
|
|
72
|
-
# Give a helpful message in case there were no new
|
73
|
-
UI.message('Couldn\'t find any new signed apk files...') if new_apks.empty?
|
83
|
+
# Give a helpful message in case there were no new apks or aabs. Remember we're only running this code when assembling, in which case we certainly expect there to be an apk or aab
|
84
|
+
UI.message('Couldn\'t find any new signed apk files...') if new_apks.empty? && new_aabs.empty?
|
74
85
|
|
75
86
|
return result
|
76
87
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.96.0
|
2
|
+
VERSION = '2.96.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
|
@@ -1373,7 +1373,7 @@ func ensureNoDebugCode(text: String,
|
|
1373
1373
|
RubyCommand.Argument(name: "exclude_dirs", value: excludeDirs)])
|
1374
1374
|
_ = runner.executeCommand(command)
|
1375
1375
|
}
|
1376
|
-
func ensureXcodeVersion(version: String) {
|
1376
|
+
func ensureXcodeVersion(version: String? = nil) {
|
1377
1377
|
let command = RubyCommand(commandID: "", methodName: "ensure_xcode_version", className: nil, args: [RubyCommand.Argument(name: "version", value: version)])
|
1378
1378
|
_ = runner.executeCommand(command)
|
1379
1379
|
}
|
@@ -3237,7 +3237,9 @@ func supply(packageName: String,
|
|
3237
3237
|
jsonKeyData: String? = nil,
|
3238
3238
|
apk: String? = nil,
|
3239
3239
|
apkPaths: [String]? = nil,
|
3240
|
+
aab: String? = nil,
|
3240
3241
|
skipUploadApk: Bool = false,
|
3242
|
+
skipUploadAab: Bool = false,
|
3241
3243
|
skipUploadMetadata: Bool = false,
|
3242
3244
|
skipUploadImages: Bool = false,
|
3243
3245
|
skipUploadScreenshots: Bool = false,
|
@@ -3257,7 +3259,9 @@ func supply(packageName: String,
|
|
3257
3259
|
RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
|
3258
3260
|
RubyCommand.Argument(name: "apk", value: apk),
|
3259
3261
|
RubyCommand.Argument(name: "apk_paths", value: apkPaths),
|
3262
|
+
RubyCommand.Argument(name: "aab", value: aab),
|
3260
3263
|
RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk),
|
3264
|
+
RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab),
|
3261
3265
|
RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata),
|
3262
3266
|
RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages),
|
3263
3267
|
RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots),
|
@@ -3510,7 +3514,7 @@ func updatePlist(plistPath: String? = nil,
|
|
3510
3514
|
_ = runner.executeCommand(command)
|
3511
3515
|
}
|
3512
3516
|
func updateProjectCodeSigning(path: String,
|
3513
|
-
udid: String,
|
3517
|
+
udid: String? = nil,
|
3514
3518
|
uuid: String) {
|
3515
3519
|
let command = RubyCommand(commandID: "", methodName: "update_project_code_signing", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
|
3516
3520
|
RubyCommand.Argument(name: "udid", value: udid),
|
@@ -3522,13 +3526,15 @@ func updateProjectProvisioning(xcodeproj: String? = nil,
|
|
3522
3526
|
targetFilter: String? = nil,
|
3523
3527
|
buildConfigurationFilter: String? = nil,
|
3524
3528
|
buildConfiguration: String? = nil,
|
3525
|
-
certificate: String = "/tmp/AppleIncRootCertificate.cer"
|
3529
|
+
certificate: String = "/tmp/AppleIncRootCertificate.cer",
|
3530
|
+
codeSigningIdentity: String? = nil) {
|
3526
3531
|
let command = RubyCommand(commandID: "", methodName: "update_project_provisioning", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
|
3527
3532
|
RubyCommand.Argument(name: "profile", value: profile),
|
3528
3533
|
RubyCommand.Argument(name: "target_filter", value: targetFilter),
|
3529
3534
|
RubyCommand.Argument(name: "build_configuration_filter", value: buildConfigurationFilter),
|
3530
3535
|
RubyCommand.Argument(name: "build_configuration", value: buildConfiguration),
|
3531
|
-
RubyCommand.Argument(name: "certificate", value: certificate)
|
3536
|
+
RubyCommand.Argument(name: "certificate", value: certificate),
|
3537
|
+
RubyCommand.Argument(name: "code_signing_identity", value: codeSigningIdentity)])
|
3532
3538
|
_ = runner.executeCommand(command)
|
3533
3539
|
}
|
3534
3540
|
func updateProjectTeam(path: String,
|
@@ -3713,7 +3719,9 @@ func uploadToPlayStore(packageName: String,
|
|
3713
3719
|
jsonKeyData: String? = nil,
|
3714
3720
|
apk: String? = nil,
|
3715
3721
|
apkPaths: [String]? = nil,
|
3722
|
+
aab: String? = nil,
|
3716
3723
|
skipUploadApk: Bool = false,
|
3724
|
+
skipUploadAab: Bool = false,
|
3717
3725
|
skipUploadMetadata: Bool = false,
|
3718
3726
|
skipUploadImages: Bool = false,
|
3719
3727
|
skipUploadScreenshots: Bool = false,
|
@@ -3733,7 +3741,9 @@ func uploadToPlayStore(packageName: String,
|
|
3733
3741
|
RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
|
3734
3742
|
RubyCommand.Argument(name: "apk", value: apk),
|
3735
3743
|
RubyCommand.Argument(name: "apk_paths", value: apkPaths),
|
3744
|
+
RubyCommand.Argument(name: "aab", value: aab),
|
3736
3745
|
RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk),
|
3746
|
+
RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab),
|
3737
3747
|
RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata),
|
3738
3748
|
RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages),
|
3739
3749
|
RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots),
|
@@ -4023,4 +4033,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
|
|
4023
4033
|
let snapshotfile: Snapshotfile = Snapshotfile()
|
4024
4034
|
// Please don't remove the lines below
|
4025
4035
|
// They are used to detect outdated files
|
4026
|
-
// FastlaneRunnerAPIVersion [0.9.
|
4036
|
+
// FastlaneRunnerAPIVersion [0.9.18]
|
Binary file
|
data/gym/lib/gym/options.rb
CHANGED
@@ -111,7 +111,7 @@ module Gym
|
|
111
111
|
end),
|
112
112
|
FastlaneCore::ConfigItem.new(key: :export_options,
|
113
113
|
env_name: "GYM_EXPORT_OPTIONS",
|
114
|
-
description: "
|
114
|
+
description: "Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options",
|
115
115
|
is_string: false,
|
116
116
|
optional: true,
|
117
117
|
type: Hash,
|
@@ -193,6 +193,11 @@ module Spaceship
|
|
193
193
|
end
|
194
194
|
end
|
195
195
|
|
196
|
+
# @return (String) Fetches name from currently used team
|
197
|
+
def team_name
|
198
|
+
(team_information || {})['name']
|
199
|
+
end
|
200
|
+
|
196
201
|
# Instantiates a client but with a cookie derived from another client.
|
197
202
|
#
|
198
203
|
# HACK: since the `@cookie` is not exposed, we use this hacky way of sharing the instance.
|
@@ -462,6 +467,10 @@ module Spaceship
|
|
462
467
|
if (response.body || "").include?('invalid="true"')
|
463
468
|
# User Credentials are wrong
|
464
469
|
raise InvalidUserCredentialsError.new, "Invalid username and password combination. Used '#{user}' as the username."
|
470
|
+
elsif response.status == 412 &&
|
471
|
+
(response.body["authType"] == "sa" || response.body["authType"] == "hsa")
|
472
|
+
# Need to acknowledge Apple ID and Privacy statement - https://github.com/fastlane/fastlane/issues/12577
|
473
|
+
raise AppleIDAndPrivacyAcknowledgementNeeded.new, "Need to acknowledge to Apple's Apple ID and Privacy statement. Please manually log into https://appleid.apple.com (or https://itunesconnect.apple.com) to acknowledge the statement."
|
465
474
|
elsif (response['Set-Cookie'] || "").include?("itctx")
|
466
475
|
raise "Looks like your Apple ID is not enabled for iTunes Connect, make sure to be able to login online"
|
467
476
|
else
|
@@ -22,6 +22,12 @@ module Spaceship
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
class AppleIDAndPrivacyAcknowledgementNeeded < BasicPreferredInfoError
|
26
|
+
def show_github_issues
|
27
|
+
false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
25
31
|
# User doesn't have enough permission for given action
|
26
32
|
class InsufficientPermissions < BasicPreferredInfoError
|
27
33
|
TITLE = 'Insufficient permissions for your Apple ID:'.freeze
|
data/supply/lib/supply/client.rb
CHANGED
@@ -236,6 +236,21 @@ module Supply
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
+
def upload_bundle(path_to_aab)
|
240
|
+
ensure_active_edit!
|
241
|
+
|
242
|
+
result_upload = call_google_api do
|
243
|
+
android_publisher.upload_edit_bundle(
|
244
|
+
current_package_name,
|
245
|
+
self.current_edit.id,
|
246
|
+
upload_source: path_to_aab,
|
247
|
+
content_type: "application/octet-stream"
|
248
|
+
)
|
249
|
+
end
|
250
|
+
|
251
|
+
return result_upload.version_code
|
252
|
+
end
|
253
|
+
|
239
254
|
# Updates the track for the provided version code(s)
|
240
255
|
def update_track(track, rollout, apk_version_code)
|
241
256
|
ensure_active_edit!
|
@@ -3,6 +3,7 @@ require 'credentials_manager/appfile_config'
|
|
3
3
|
|
4
4
|
module Supply
|
5
5
|
class Options
|
6
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
6
7
|
def self.available_options
|
7
8
|
default_tracks = %w(production beta alpha internal rollout)
|
8
9
|
@options ||= [
|
@@ -91,7 +92,7 @@ module Supply
|
|
91
92
|
env_name: "SUPPLY_APK",
|
92
93
|
description: "Path to the APK file to upload",
|
93
94
|
short_option: "-b",
|
94
|
-
conflicting_options: [:apk_paths],
|
95
|
+
conflicting_options: [:apk_paths, :aab],
|
95
96
|
code_gen_sensitive: true,
|
96
97
|
default_value: Dir["*.apk"].last || Dir[File.join("app", "build", "outputs", "apk", "app-Release.apk")].last,
|
97
98
|
default_value_dynamic: true,
|
@@ -102,7 +103,7 @@ module Supply
|
|
102
103
|
end),
|
103
104
|
FastlaneCore::ConfigItem.new(key: :apk_paths,
|
104
105
|
env_name: "SUPPLY_APK_PATHS",
|
105
|
-
conflicting_options: [:apk],
|
106
|
+
conflicting_options: [:apk, :aab],
|
106
107
|
optional: true,
|
107
108
|
type: Array,
|
108
109
|
description: "An array of paths to APK files to upload",
|
@@ -114,12 +115,31 @@ module Supply
|
|
114
115
|
UI.user_error!("file at path '#{path}' is not an apk") unless path.end_with?('.apk')
|
115
116
|
end
|
116
117
|
end),
|
118
|
+
FastlaneCore::ConfigItem.new(key: :aab,
|
119
|
+
env_name: "SUPPLY_AAB",
|
120
|
+
description: "Path to the AAB file to upload",
|
121
|
+
short_option: "-f",
|
122
|
+
conflicting_options: [:apk_path, :apk_paths],
|
123
|
+
code_gen_sensitive: true,
|
124
|
+
default_value: Dir["*.aab"].last || Dir[File.join("app", "build", "outputs", "bundle", "release", "bundle.aab")].last,
|
125
|
+
default_value_dynamic: true,
|
126
|
+
optional: true,
|
127
|
+
verify_block: proc do |value|
|
128
|
+
UI.user_error!("Could not find aab file at path '#{value}'") unless File.exist?(value)
|
129
|
+
UI.user_error!("aab file is not an aab") unless value.end_with?('.aab')
|
130
|
+
end),
|
117
131
|
FastlaneCore::ConfigItem.new(key: :skip_upload_apk,
|
118
132
|
env_name: "SUPPLY_SKIP_UPLOAD_APK",
|
119
133
|
optional: true,
|
120
134
|
description: "Whether to skip uploading APK",
|
121
135
|
is_string: false,
|
122
136
|
default_value: false),
|
137
|
+
FastlaneCore::ConfigItem.new(key: :skip_upload_aab,
|
138
|
+
env_name: "SUPPLY_SKIP_UPLOAD_AAB",
|
139
|
+
optional: true,
|
140
|
+
description: "Whether to skip uploading AAB",
|
141
|
+
is_string: false,
|
142
|
+
default_value: false),
|
123
143
|
FastlaneCore::ConfigItem.new(key: :skip_upload_metadata,
|
124
144
|
env_name: "SUPPLY_SKIP_UPLOAD_METADATA",
|
125
145
|
optional: true,
|
@@ -186,5 +206,6 @@ module Supply
|
|
186
206
|
|
187
207
|
]
|
188
208
|
end
|
209
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
189
210
|
end
|
190
211
|
end
|
@@ -24,6 +24,7 @@ module Supply
|
|
24
24
|
end
|
25
25
|
|
26
26
|
upload_binaries unless Supply.config[:skip_upload_apk]
|
27
|
+
upload_bundles unless Supply.config[:skip_upload_aab]
|
27
28
|
|
28
29
|
promote_track if Supply.config[:track_promote_to]
|
29
30
|
|
@@ -39,8 +40,17 @@ module Supply
|
|
39
40
|
end
|
40
41
|
|
41
42
|
def verify_config!
|
42
|
-
unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || (Supply.config[:track] && Supply.config[:track_promote_to])
|
43
|
-
UI.user_error!("No local metadata, apks, or track to promote were found, make sure to run `fastlane supply init` to setup supply")
|
43
|
+
unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || Supply.config[:aab] || (Supply.config[:track] && Supply.config[:track_promote_to])
|
44
|
+
UI.user_error!("No local metadata, apks, aab, or track to promote were found, make sure to run `fastlane supply init` to setup supply")
|
45
|
+
end
|
46
|
+
|
47
|
+
# Can't upload both at apk and aab at same time
|
48
|
+
# Need to error out users when there both apks and aabs are detected
|
49
|
+
apk_paths = [Supply.config[:apk], Supply.config[:apk_paths]].flatten.compact
|
50
|
+
could_upload_apk = !apk_paths.empty? && !Supply.config[:skip_upload_apk]
|
51
|
+
could_upload_aab = Supply.config[:aab] && !Supply.config[:skip_upload_aab]
|
52
|
+
if could_upload_apk && could_upload_aab
|
53
|
+
UI.user_error!("Cannot provide both apk(s) and aab - use `skip_upload_apk`, `skip_upload_aab`, or make sure to remove any existing .apk or .aab files that are no longer needed")
|
44
54
|
end
|
45
55
|
end
|
46
56
|
|
@@ -132,6 +142,18 @@ module Supply
|
|
132
142
|
update_track(apk_version_codes) unless apk_version_codes.empty?
|
133
143
|
end
|
134
144
|
|
145
|
+
def upload_bundles
|
146
|
+
aab_path = Supply.config[:aab]
|
147
|
+
return unless aab_path
|
148
|
+
|
149
|
+
UI.message("Preparing aab at path '#{aab_path}' for upload...")
|
150
|
+
apk_version_codes = [client.upload_bundle(aab_path)]
|
151
|
+
|
152
|
+
# Only update tracks if we have version codes
|
153
|
+
# Updating a track with empty version codes can completely clear out a track
|
154
|
+
update_track(apk_version_codes) unless apk_version_codes.empty?
|
155
|
+
end
|
156
|
+
|
135
157
|
private
|
136
158
|
|
137
159
|
##
|
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.96.0
|
4
|
+
version: 2.96.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Felix Krause
|
8
|
+
- Jérôme Lacoste
|
9
|
+
- Jimmy Dee
|
10
|
+
- Andrew McBurney
|
8
11
|
- Fumiya Nakamura
|
9
|
-
-
|
10
|
-
-
|
11
|
-
- Manu Wallner
|
12
|
-
- Jorge Revuelta H
|
12
|
+
- Danielle Tomlinson
|
13
|
+
- Kohki Miki
|
13
14
|
- Olivier Halligon
|
15
|
+
- Stefan Natchev
|
16
|
+
- Manu Wallner
|
17
|
+
- Iulian Onofrei
|
18
|
+
- Aaron Brager
|
14
19
|
- Luka Mirosevic
|
15
|
-
- Jimmy Dee
|
16
20
|
- Helmut Januschka
|
17
|
-
-
|
18
|
-
- Kohki Miki
|
19
|
-
- Andrew McBurney
|
20
|
-
- Aaron Brager
|
21
|
+
- Joshua Liebowitz
|
21
22
|
- Matthew Ellis
|
22
|
-
-
|
23
|
-
- Maksym Grebenets
|
24
|
-
- Jérôme Lacoste
|
23
|
+
- Jan Piotrowski
|
25
24
|
- Josh Holtz
|
26
|
-
-
|
25
|
+
- Jorge Revuelta H
|
26
|
+
- Maksym Grebenets
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2018-05-
|
30
|
+
date: 2018-05-22 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -611,20 +611,20 @@ dependencies:
|
|
611
611
|
requirements:
|
612
612
|
- - ">="
|
613
613
|
- !ruby/object:Gem::Version
|
614
|
-
version: 0.
|
614
|
+
version: 0.21.2
|
615
615
|
- - "<"
|
616
616
|
- !ruby/object:Gem::Version
|
617
|
-
version: 0.
|
617
|
+
version: 0.22.0
|
618
618
|
type: :runtime
|
619
619
|
prerelease: false
|
620
620
|
version_requirements: !ruby/object:Gem::Requirement
|
621
621
|
requirements:
|
622
622
|
- - ">="
|
623
623
|
- !ruby/object:Gem::Version
|
624
|
-
version: 0.
|
624
|
+
version: 0.21.2
|
625
625
|
- - "<"
|
626
626
|
- !ruby/object:Gem::Version
|
627
|
-
version: 0.
|
627
|
+
version: 0.22.0
|
628
628
|
- !ruby/object:Gem::Dependency
|
629
629
|
name: emoji_regex
|
630
630
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1262,6 +1262,7 @@ files:
|
|
1262
1262
|
- fastlane/swift/Fastlane.swift
|
1263
1263
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj
|
1264
1264
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
1265
|
+
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate
|
1265
1266
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme
|
1266
1267
|
- fastlane/swift/FastlaneSwiftRunner/README.txt
|
1267
1268
|
- fastlane/swift/Gymfile.swift
|
@@ -1652,24 +1653,24 @@ metadata:
|
|
1652
1653
|
post_install_message:
|
1653
1654
|
rdoc_options: []
|
1654
1655
|
require_paths:
|
1655
|
-
-
|
1656
|
-
-
|
1657
|
-
- produce/lib
|
1658
|
-
- fastlane_core/lib
|
1659
|
-
- screengrab/lib
|
1660
|
-
- fastlane/lib
|
1661
|
-
- pilot/lib
|
1656
|
+
- credentials_manager/lib
|
1657
|
+
- pem/lib
|
1662
1658
|
- snapshot/lib
|
1663
|
-
-
|
1659
|
+
- frameit/lib
|
1660
|
+
- match/lib
|
1661
|
+
- fastlane_core/lib
|
1664
1662
|
- deliver/lib
|
1663
|
+
- scan/lib
|
1665
1664
|
- supply/lib
|
1666
|
-
- spaceship/lib
|
1667
1665
|
- cert/lib
|
1668
|
-
-
|
1669
|
-
-
|
1670
|
-
-
|
1671
|
-
-
|
1672
|
-
-
|
1666
|
+
- fastlane/lib
|
1667
|
+
- spaceship/lib
|
1668
|
+
- pilot/lib
|
1669
|
+
- gym/lib
|
1670
|
+
- precheck/lib
|
1671
|
+
- screengrab/lib
|
1672
|
+
- sigh/lib
|
1673
|
+
- produce/lib
|
1673
1674
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1674
1675
|
requirements:
|
1675
1676
|
- - ">="
|
@@ -1677,12 +1678,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1677
1678
|
version: 2.0.0
|
1678
1679
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1679
1680
|
requirements:
|
1680
|
-
- - "
|
1681
|
+
- - ">="
|
1681
1682
|
- !ruby/object:Gem::Version
|
1682
|
-
version:
|
1683
|
+
version: '0'
|
1683
1684
|
requirements: []
|
1684
1685
|
rubyforge_project:
|
1685
|
-
rubygems_version: 2.5.2.
|
1686
|
+
rubygems_version: 2.5.2.3
|
1686
1687
|
signing_key:
|
1687
1688
|
specification_version: 4
|
1688
1689
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|