fastlane 2.10.0 → 2.11.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 +3 -1
- data/fastlane/README.md +26 -15
- data/fastlane/lib/.DS_Store +0 -0
- data/fastlane/lib/assets/.DS_Store +0 -0
- data/fastlane/lib/assets/completions/.DS_Store +0 -0
- data/fastlane/lib/fastlane/.DS_Store +0 -0
- data/fastlane/lib/fastlane/{setup → actions}/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/device_grid/.DS_Store +0 -0
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +1 -0
- data/fastlane/lib/fastlane/actions/s3.rb +7 -5
- data/fastlane/lib/fastlane/actions/swiftlint.rb +28 -3
- data/fastlane/lib/fastlane/commands_generator.rb +1 -1
- data/fastlane/lib/fastlane/lane_manager.rb +28 -8
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/.DS_Store +0 -0
- data/{supply/lib → fastlane_core/lib/fastlane_core}/.DS_Store +0 -0
- data/match/lib/assets/READMETemplate.md +21 -5
- data/produce/lib/produce/developer_center.rb +34 -31
- data/screengrab/lib/screengrab/options.rb +4 -2
- data/sigh/lib/assets/resign.sh +7 -2
- data/sigh/lib/sigh/resign.rb +2 -2
- data/snapshot/lib/.DS_Store +0 -0
- data/spaceship/lib/.DS_Store +0 -0
- data/{lib → spaceship/lib/spaceship}/.DS_Store +0 -0
- data/spaceship/lib/spaceship/tunes/application.rb +10 -0
- data/spaceship/lib/spaceship/tunes/availability.rb +46 -0
- data/spaceship/lib/spaceship/tunes/territory.rb +44 -0
- data/spaceship/lib/spaceship/tunes/tunes.rb +2 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +45 -0
- metadata +21 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 727fe731430e8c06f7b4a0c66d044714c879ccaf
|
4
|
+
data.tar.gz: c65677292ad39144080c5bdef78de0aea6b82961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f90f8dbb9649502c8300d957e5535db5ebdcc6abe900489be9173b44be4c55b91fb39f210b8a58d048517d6115f55fc3c0e7c17187bb3097d55234d5a7f2388
|
7
|
+
data.tar.gz: 73591c45604420668dddaf8ba46227fd6f44ab517e781bea5db8d1355e02c82a973680683740e55bbb5ad1088b24736e7a8d1aaf0c534283134bf0bae0b66c80
|
data/README.md
CHANGED
@@ -60,7 +60,9 @@ Then to deploy a new 'beta' version of your app just run
|
|
60
60
|
## Installation
|
61
61
|
Make sure you have the latest version of the Xcode command line tools installed:
|
62
62
|
|
63
|
-
|
63
|
+
```
|
64
|
+
xcode-select --install
|
65
|
+
```
|
64
66
|
|
65
67
|
### Choose your installation method:
|
66
68
|
|
data/fastlane/README.md
CHANGED
@@ -98,22 +98,31 @@ fastlane release
|
|
98
98
|
##### Like this tool? [Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx).
|
99
99
|
|
100
100
|
## Installation
|
101
|
+
Make sure you have the latest version of the Xcode command line tools installed:
|
101
102
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
Make sure, you have the latest version of the Xcode command line tools installed:
|
107
|
-
|
108
|
-
xcode-select --install
|
109
|
-
|
110
|
-
If you experience slow launch times of fastlane, try running
|
111
|
-
|
112
|
-
gem cleanup
|
113
|
-
|
114
|
-
to clean up outdated gems.
|
103
|
+
```
|
104
|
+
xcode-select --install
|
105
|
+
```
|
115
106
|
|
116
|
-
|
107
|
+
### Choose your installation method:
|
108
|
+
|
109
|
+
<table width="100%" >
|
110
|
+
<tr>
|
111
|
+
<th width="33%"><a href="http://brew.sh">Homebrew</a></td>
|
112
|
+
<th width="33%">Installer Script</td>
|
113
|
+
<th width="33%">Rubygems</td>
|
114
|
+
</tr>
|
115
|
+
<tr>
|
116
|
+
<td width="33%" align="center">macOS</td>
|
117
|
+
<td width="33%" align="center">macOS</td>
|
118
|
+
<td width="33%" align="center">macOS or Linux with Ruby 2.0.0 or above</td>
|
119
|
+
</tr>
|
120
|
+
<tr>
|
121
|
+
<td width="33%"><code>brew cask install fastlane</code></td>
|
122
|
+
<td width="33%"><a href="https://download.fastlane.tools/fastlane.zip">Download the zip file</a>. Then double click on the <code>install</code> script (or run it in a terminal window).</td>
|
123
|
+
<td width="33%"><code>sudo gem install fastlane -NV</code></td>
|
124
|
+
</tr>
|
125
|
+
</table>
|
117
126
|
|
118
127
|
|
119
128
|
If you want to take a look at a project, already using `fastlane`, check out the [fastlane-examples](https://github.com/fastlane/examples) with `fastlane` setups by Wikipedia, Product Hunt, MindNode and more.
|
@@ -135,7 +144,9 @@ There are also 2 Japanese fastlane guides available: [qiita](http://qiita.com/gi
|
|
135
144
|
|
136
145
|
Usually you'll use fastlane by triggering individual lanes:
|
137
146
|
|
138
|
-
|
147
|
+
```
|
148
|
+
fastlane [lane_name]
|
149
|
+
```
|
139
150
|
|
140
151
|
#### Other commands
|
141
152
|
|
data/fastlane/lib/.DS_Store
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -6,11 +6,13 @@ require 'cgi'
|
|
6
6
|
module Fastlane
|
7
7
|
module Actions
|
8
8
|
module SharedValues
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
# Using ||= because these MAY be defined by the the
|
10
|
+
# preferred aws_s3 plugin
|
11
|
+
S3_IPA_OUTPUT_PATH ||= :S3_IPA_OUTPUT_PATH
|
12
|
+
S3_DSYM_OUTPUT_PATH ||= :S3_DSYM_OUTPUT_PATH
|
13
|
+
S3_PLIST_OUTPUT_PATH ||= :S3_PLIST_OUTPUT_PATH
|
14
|
+
S3_HTML_OUTPUT_PATH ||= :S3_HTML_OUTPUT_PATH
|
15
|
+
S3_VERSION_OUTPUT_PATH ||= :S3_VERSION_OUTPUT_PATH
|
14
16
|
end
|
15
17
|
|
16
18
|
S3_ARGS_MAP = {
|
@@ -6,18 +6,19 @@ module Fastlane
|
|
6
6
|
UI.user_error!("You have to install swiftlint using `brew install swiftlint`")
|
7
7
|
end
|
8
8
|
|
9
|
-
version =
|
9
|
+
version = swiftlint_version
|
10
10
|
if params[:mode] == :autocorrect and version < Gem::Version.new('0.5.0') and !Helper.test?
|
11
11
|
UI.user_error!("Your version of swiftlint (#{version}) does not support autocorrect mode.\nUpdate swiftlint using `brew update && brew upgrade swiftlint`")
|
12
12
|
end
|
13
13
|
|
14
14
|
command = "swiftlint #{params[:mode]}"
|
15
|
-
command <<
|
15
|
+
command << supported_option_switch(params, :strict, "0.9.2", true)
|
16
16
|
command << " --config #{params[:config_file].shellescape}" if params[:config_file]
|
17
17
|
command << " --reporter #{params[:reporter]}" if params[:reporter]
|
18
|
+
command << supported_option_switch(params, :quiet, "0.9.0", true)
|
18
19
|
|
19
20
|
if params[:files]
|
20
|
-
if version < Gem::Version.new('0.5.1')
|
21
|
+
if version < Gem::Version.new('0.5.1')
|
21
22
|
UI.user_error!("Your version of swiftlint (#{version}) does not support list of files as input.\nUpdate swiftlint using `brew update && brew upgrade swiftlint`")
|
22
23
|
end
|
23
24
|
|
@@ -35,6 +36,25 @@ module Fastlane
|
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
39
|
+
# Get current SwiftLint version
|
40
|
+
def self.swiftlint_version
|
41
|
+
Gem::Version.new(`swiftlint version`.chomp)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return "--option" switch if option is on and current SwiftLint version is greater or equal than min version.
|
45
|
+
# Return "" otherwise.
|
46
|
+
def self.supported_option_switch(params, option, min_version, can_ignore = false)
|
47
|
+
return "" unless params[option]
|
48
|
+
if swiftlint_version < Gem::Version.new(min_version)
|
49
|
+
message = "Your version of swiftlint (#{swiftlint_version}) does not support '--#{option}' option.\nUpdate swiftlint to #{min_version} or above using `brew update && brew upgrade swiftlint`"
|
50
|
+
message += "\nThe option will be ignored." if can_ignore
|
51
|
+
can_ignore ? UI.important(message) : UI.user_error!(message)
|
52
|
+
""
|
53
|
+
else
|
54
|
+
" --#{option}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
38
58
|
#####################################################
|
39
59
|
# @!group Documentation
|
40
60
|
#####################################################
|
@@ -77,6 +97,11 @@ module Fastlane
|
|
77
97
|
FastlaneCore::ConfigItem.new(key: :reporter,
|
78
98
|
description: 'Choose output reporter',
|
79
99
|
is_string: true,
|
100
|
+
optional: true),
|
101
|
+
FastlaneCore::ConfigItem.new(key: :quiet,
|
102
|
+
description: "Don't print status logs like 'Linting <file>' & 'Done linting'",
|
103
|
+
default_value: false,
|
104
|
+
is_string: false,
|
80
105
|
optional: true)
|
81
106
|
]
|
82
107
|
end
|
@@ -98,7 +98,7 @@ module Fastlane
|
|
98
98
|
command :trigger do |c|
|
99
99
|
c.syntax = 'fastlane [lane]'
|
100
100
|
c.description = 'Run a specific lane. Pass the lane name and optionally the platform first.'
|
101
|
-
c.option '--env STRING', String, 'Add environment to use with `dotenv`'
|
101
|
+
c.option '--env STRING[,STRING2]', String, 'Add environment(s) to use with `dotenv`'
|
102
102
|
|
103
103
|
c.action do |args, options|
|
104
104
|
if ensure_fastfile
|
@@ -161,33 +161,53 @@ module Fastlane
|
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
164
|
-
|
165
|
-
|
164
|
+
# @param env_cl_param [String] an optional list of dotenv environment names separated by commas, without space
|
165
|
+
def self.load_dot_env(env_cl_param)
|
166
|
+
base_path = find_dotenv_directory
|
167
|
+
|
168
|
+
return unless base_path
|
169
|
+
|
170
|
+
load_dot_envs_from(env_cl_param, base_path)
|
171
|
+
end
|
172
|
+
|
173
|
+
# finds the first directory of [fastlane, its parent] containing dotenv files
|
174
|
+
def self.find_dotenv_directory
|
166
175
|
path = FastlaneCore::FastlaneFolder.path
|
167
176
|
search_paths = [path]
|
168
177
|
search_paths << path + "/.." unless path.nil?
|
169
178
|
search_paths.compact!
|
170
|
-
|
179
|
+
search_paths.find do |dir|
|
171
180
|
Dir.glob(File.join(dir, '*.env*'), File::FNM_DOTMATCH).count > 0
|
172
181
|
end
|
173
|
-
|
174
|
-
require 'dotenv'
|
182
|
+
end
|
175
183
|
|
176
|
-
|
184
|
+
# loads the dotenvs. First the .env and .env.default and
|
185
|
+
# then override with all speficied extra environments
|
186
|
+
def self.load_dot_envs_from(env_cl_param, base_path)
|
187
|
+
require 'dotenv'
|
177
188
|
|
178
189
|
# Making sure the default '.env' and '.env.default' get loaded
|
179
190
|
env_file = File.join(base_path, '.env')
|
180
191
|
env_default_file = File.join(base_path, '.env.default')
|
181
192
|
Dotenv.load(env_file, env_default_file)
|
182
193
|
|
183
|
-
|
184
|
-
|
194
|
+
return unless env_cl_param
|
195
|
+
|
196
|
+
Actions.lane_context[Actions::SharedValues::ENVIRONMENT] = env_cl_param
|
197
|
+
|
198
|
+
# multiple envs?
|
199
|
+
envs = env_cl_param.split(",")
|
200
|
+
|
201
|
+
# Loads .env file for the environment(s) passed in through options
|
202
|
+
envs.each do |env|
|
185
203
|
env_file = File.join(base_path, ".env.#{env}")
|
186
204
|
UI.success "Loading from '#{env_file}'"
|
187
205
|
Dotenv.overload(env_file)
|
188
206
|
end
|
189
207
|
end
|
190
208
|
|
209
|
+
private_class_method :find_dotenv_directory, :load_dot_envs_from
|
210
|
+
|
191
211
|
def self.print_lane_context
|
192
212
|
return if Actions.lane_context.empty?
|
193
213
|
|
data/fastlane_core/lib/.DS_Store
CHANGED
Binary file
|
Binary file
|
@@ -6,11 +6,7 @@ This repository contains all your certificates and provisioning profiles needed
|
|
6
6
|
|
7
7
|
Do not modify this file, as it gets overwritten every time you run `match`.
|
8
8
|
|
9
|
-
###
|
10
|
-
|
11
|
-
```
|
12
|
-
sudo gem install fastlane
|
13
|
-
```
|
9
|
+
### Installation
|
14
10
|
|
15
11
|
Make sure you have the latest version of the Xcode command line tools installed:
|
16
12
|
|
@@ -18,6 +14,26 @@ Make sure you have the latest version of the Xcode command line tools installed:
|
|
18
14
|
xcode-select --install
|
19
15
|
```
|
20
16
|
|
17
|
+
### Choose your installation method:
|
18
|
+
|
19
|
+
<table width="100%" >
|
20
|
+
<tr>
|
21
|
+
<th width="33%"><a href="http://brew.sh">Homebrew</a></td>
|
22
|
+
<th width="33%">Installer Script</td>
|
23
|
+
<th width="33%">Rubygems</td>
|
24
|
+
</tr>
|
25
|
+
<tr>
|
26
|
+
<td width="33%" align="center">macOS</td>
|
27
|
+
<td width="33%" align="center">macOS</td>
|
28
|
+
<td width="33%" align="center">macOS or Linux with Ruby 2.0.0 or above</td>
|
29
|
+
</tr>
|
30
|
+
<tr>
|
31
|
+
<td width="33%"><code>brew cask install fastlane</code></td>
|
32
|
+
<td width="33%"><a href="https://download.fastlane.tools/fastlane.zip">Download the zip file</a>. Then double click on the <code>install</code> script (or run it in a terminal window).</td>
|
33
|
+
<td width="33%"><code>sudo gem install fastlane -NV</code></td>
|
34
|
+
</tr>
|
35
|
+
</table>
|
36
|
+
|
21
37
|
### Usage
|
22
38
|
|
23
39
|
Navigate to your project folder and run
|
@@ -9,7 +9,6 @@ module Produce
|
|
9
9
|
|
10
10
|
def create_new_app
|
11
11
|
ENV["CREATED_NEW_APP_ID"] = Time.now.to_i.to_s
|
12
|
-
|
13
12
|
if app_exists?
|
14
13
|
UI.success "[DevCenter] App '#{Produce.config[:app_identifier]}' already exists, nothing to do on the Dev Center"
|
15
14
|
ENV["CREATED_NEW_APP_ID"] = nil
|
@@ -18,38 +17,9 @@ module Produce
|
|
18
17
|
app_name = Produce.config[:app_name]
|
19
18
|
UI.message "Creating new app '#{app_name}' on the Apple Dev Center"
|
20
19
|
|
21
|
-
app_service = Spaceship.app_service
|
22
|
-
enabled_clean_options = {}
|
23
|
-
Produce.config[:enabled_features].each do |k, v|
|
24
|
-
if k == :data_protection
|
25
|
-
case v
|
26
|
-
when "complete"
|
27
|
-
enabled_clean_options[app_service.data_protection.complete.service_id] = app_service.data_protection.complete.on
|
28
|
-
when "unlessopen"
|
29
|
-
enabled_clean_options[app_service.data_protection.unlessopen.service_id] = app_service.data_protection.unlessopen.on
|
30
|
-
when "untilfirstauth"
|
31
|
-
enabled_clean_options[app_service.data_protection.untilfirstauth.service_id] = app_service.data_protection.untilfirstauth.on
|
32
|
-
end
|
33
|
-
elsif k == :icloud
|
34
|
-
case v
|
35
|
-
when "legacy"
|
36
|
-
enabled_clean_options[app_service.icloud.on.service_id] = app_service.icloud.on
|
37
|
-
enabled_clean_options[app_service.cloud_kit.xcode5_compatible.service_id] = app_service.cloud_kit.xcode5_compatible
|
38
|
-
when "cloudkit"
|
39
|
-
enabled_clean_options[app_service.icloud.on.service_id] = app_service.icloud.on
|
40
|
-
enabled_clean_options[app_service.cloud_kit.cloud_kit.service_id] = app_service.cloud_kit.cloud_kit
|
41
|
-
end
|
42
|
-
else
|
43
|
-
if v == "on"
|
44
|
-
enabled_clean_options[app_service.send(k.to_s).on.service_id] = app_service.send(k.to_s).on
|
45
|
-
else
|
46
|
-
enabled_clean_options[app_service.send(k.to_s).off.service_id] = app_service.send(k.to_s).off
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
20
|
app = Spaceship.app.create!(bundle_id: app_identifier,
|
51
21
|
name: app_name,
|
52
|
-
enabled_features:
|
22
|
+
enabled_features: enabled_features,
|
53
23
|
mac: Produce.config[:platform] == "osx")
|
54
24
|
|
55
25
|
if app.name != Produce.config[:app_name]
|
@@ -70,6 +40,39 @@ module Produce
|
|
70
40
|
return true
|
71
41
|
end
|
72
42
|
|
43
|
+
def enabled_features
|
44
|
+
app_service = Spaceship.app_service
|
45
|
+
enabled_clean_options = {}
|
46
|
+
Produce.config[:enabled_features].each do |k, v|
|
47
|
+
if k.to_sym == :data_protection
|
48
|
+
case v
|
49
|
+
when "complete"
|
50
|
+
enabled_clean_options[app_service.data_protection.complete.service_id] = app_service.data_protection.complete
|
51
|
+
when "unlessopen"
|
52
|
+
enabled_clean_options[app_service.data_protection.unlessopen.service_id] = app_service.data_protection.unlessopen
|
53
|
+
when "untilfirstauth"
|
54
|
+
enabled_clean_options[app_service.data_protection.untilfirstauth.service_id] = app_service.data_protection.untilfirstauth
|
55
|
+
end
|
56
|
+
elsif k.to_sym == :icloud
|
57
|
+
case v
|
58
|
+
when "legacy"
|
59
|
+
enabled_clean_options[app_service.icloud.on.service_id] = app_service.icloud.on
|
60
|
+
enabled_clean_options[app_service.cloud_kit.xcode5_compatible.service_id] = app_service.cloud_kit.xcode5_compatible
|
61
|
+
when "cloudkit"
|
62
|
+
enabled_clean_options[app_service.icloud.on.service_id] = app_service.icloud.on
|
63
|
+
enabled_clean_options[app_service.cloud_kit.cloud_kit.service_id] = app_service.cloud_kit.cloud_kit
|
64
|
+
end
|
65
|
+
else
|
66
|
+
if v == "on"
|
67
|
+
enabled_clean_options[app_service.send(k.to_s).on.service_id] = app_service.send(k.to_s).on
|
68
|
+
else
|
69
|
+
enabled_clean_options[app_service.send(k.to_s).off.service_id] = app_service.send(k.to_s).off
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
enabled_clean_options
|
74
|
+
end
|
75
|
+
|
73
76
|
def app_identifier
|
74
77
|
Produce.config[:app_identifier].to_s
|
75
78
|
end
|
@@ -112,11 +112,13 @@ module Screengrab
|
|
112
112
|
FastlaneCore::ConfigItem.new(key: :exit_on_test_failure,
|
113
113
|
env_name: 'EXIT_ON_TEST_FAILURE',
|
114
114
|
description: "Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary",
|
115
|
-
default_value: true
|
115
|
+
default_value: true,
|
116
|
+
is_string: false),
|
116
117
|
FastlaneCore::ConfigItem.new(key: :reinstall_app,
|
117
118
|
env_name: 'SCREENGRAB_REINSTALL_APP',
|
118
119
|
description: "Enabling this option will automatically uninstall the application before running it",
|
119
|
-
default_value: false
|
120
|
+
default_value: false,
|
121
|
+
is_string: false)
|
120
122
|
]
|
121
123
|
end
|
122
124
|
end
|
data/sigh/lib/assets/resign.sh
CHANGED
@@ -551,7 +551,10 @@ function resign {
|
|
551
551
|
do
|
552
552
|
if [[ "$framework" == *.framework || "$framework" == *.dylib ]]
|
553
553
|
then
|
554
|
-
|
554
|
+
log "Resigning '$framework'"
|
555
|
+
# Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
|
556
|
+
# shellcheck disable=SC2086
|
557
|
+
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" "$framework"
|
555
558
|
checkStatus
|
556
559
|
else
|
557
560
|
log "Ignoring non-framework: $framework"
|
@@ -764,7 +767,9 @@ function resign {
|
|
764
767
|
log "Resigning application using certificate: '$CERTIFICATE'"
|
765
768
|
log "and entitlements from provisioning profile: $NEW_PROVISION"
|
766
769
|
cp -- "$TEMP_DIR/newEntitlements" "$APP_PATH/archived-expanded-entitlements.xcent"
|
767
|
-
|
770
|
+
# Must not qote KEYCHAIN_FLAG because it needs to be unwrapped and passed to codesign with spaces
|
771
|
+
# shellcheck disable=SC2086
|
772
|
+
/usr/bin/codesign ${VERBOSE} ${KEYCHAIN_FLAG} -f -s "$CERTIFICATE" --entitlements "$TEMP_DIR/newEntitlements" "$APP_PATH"
|
768
773
|
checkStatus
|
769
774
|
fi
|
770
775
|
|
data/sigh/lib/sigh/resign.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
@@ -239,6 +239,16 @@ module Spaceship
|
|
239
239
|
client.price_tier(self.apple_id)
|
240
240
|
end
|
241
241
|
|
242
|
+
# set the availability. This method doesn't require `save` to be called
|
243
|
+
def update_availability!(availability)
|
244
|
+
client.update_availability!(self.apple_id, availability)
|
245
|
+
end
|
246
|
+
|
247
|
+
# The current availability.
|
248
|
+
def availability
|
249
|
+
client.availability(self.apple_id)
|
250
|
+
end
|
251
|
+
|
242
252
|
#####################################################
|
243
253
|
# @!group Builds
|
244
254
|
#####################################################
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Spaceship
|
2
|
+
module Tunes
|
3
|
+
class Availability < TunesBase
|
4
|
+
# @return (Bool) Are future territories included?
|
5
|
+
attr_accessor :include_future_territories
|
6
|
+
|
7
|
+
# @return (Array of Spaceship::Tunes::Territory objects) A list of the territories
|
8
|
+
attr_accessor :territories
|
9
|
+
|
10
|
+
attr_mapping(
|
11
|
+
'theWorld' => :include_future_territories
|
12
|
+
)
|
13
|
+
|
14
|
+
class << self
|
15
|
+
# Create a new object based on a hash.
|
16
|
+
# This is used to create a new object based on the server response.
|
17
|
+
def factory(attrs)
|
18
|
+
obj = self.new(attrs)
|
19
|
+
obj.unfold_territories(attrs['countries'])
|
20
|
+
return obj
|
21
|
+
end
|
22
|
+
|
23
|
+
# Create a new object based on a set of territories.
|
24
|
+
# @param territories (Array of String or Spaceship::Tunes::Territory objects): A list of the territories
|
25
|
+
# @param params (Hash): Optional parameters (include_future_territories (Bool, default: true) Are future territories included?)
|
26
|
+
def from_territories(territories = [], params = {})
|
27
|
+
obj = self.new
|
28
|
+
# Detect if the territories attribute is an array of Strings and convert to Territories
|
29
|
+
obj.territories =
|
30
|
+
if territories[0].kind_of?(String)
|
31
|
+
territories.map { |territory| Spaceship::Tunes::Territory.from_code(territory) }
|
32
|
+
else
|
33
|
+
territories
|
34
|
+
end
|
35
|
+
obj.include_future_territories = params.fetch(:include_future_territories, true)
|
36
|
+
return obj
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def unfold_territories(attrs)
|
41
|
+
unfolded_territories = attrs.map { |info| Territory.new(info) }
|
42
|
+
instance_variable_set(:@territories, unfolded_territories)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Spaceship
|
2
|
+
module Tunes
|
3
|
+
class Territory < TunesBase
|
4
|
+
# @return (String) The two-character country code (e.g. "US" for the United States)
|
5
|
+
attr_accessor :code
|
6
|
+
|
7
|
+
# @return (String) The ISO 3166-1 alpha-3 currency code (e.g. "USD" for the United States)
|
8
|
+
attr_accessor :currency_code
|
9
|
+
|
10
|
+
# @return (String) The country name (e.g. "United States" for the United States)
|
11
|
+
attr_accessor :name
|
12
|
+
|
13
|
+
# @return (String) The region (e.g. "The United States and Canada" for the United States)
|
14
|
+
attr_accessor :region
|
15
|
+
|
16
|
+
# @return (String) The region locale key (e.g. "ITC.region.NAM" for the United States)
|
17
|
+
attr_accessor :region_locale_key
|
18
|
+
|
19
|
+
attr_mapping(
|
20
|
+
'code' => :code,
|
21
|
+
'currencyCodeISO3A' => :currency_code,
|
22
|
+
'name' => :name,
|
23
|
+
'region' => :region,
|
24
|
+
'regionLocaleKey' => :region_locale_key
|
25
|
+
)
|
26
|
+
|
27
|
+
class << self
|
28
|
+
# Create a new object based on a hash.
|
29
|
+
# This is used to create a new object based on the server response.
|
30
|
+
def factory(attrs)
|
31
|
+
obj = self.new(attrs)
|
32
|
+
return obj
|
33
|
+
end
|
34
|
+
|
35
|
+
# Create a new object based on a two-character country code (e.g. "US" for the United States)
|
36
|
+
def from_code(code)
|
37
|
+
obj = self.new
|
38
|
+
obj.code = code
|
39
|
+
return obj
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -25,6 +25,8 @@ require 'spaceship/tunes/tester'
|
|
25
25
|
require 'spaceship/tunes/app_details'
|
26
26
|
require 'spaceship/tunes/pricing_tier'
|
27
27
|
require 'spaceship/tunes/recovery_device'
|
28
|
+
require 'spaceship/tunes/territory'
|
29
|
+
require 'spaceship/tunes/availability'
|
28
30
|
|
29
31
|
require 'spaceship/tunes/app_version_promocodes'
|
30
32
|
require 'spaceship/tunes/app_version_generated_promocodes'
|
@@ -446,6 +446,51 @@ module Spaceship
|
|
446
446
|
data.map { |tier| Spaceship::Tunes::PricingTier.factory(tier) }
|
447
447
|
end
|
448
448
|
|
449
|
+
#####################################################
|
450
|
+
# @!group Availability
|
451
|
+
#####################################################
|
452
|
+
# Updates the availability
|
453
|
+
#
|
454
|
+
# @note Although this information is publicly available, the current spaceship implementation requires you to have a logged in client to access it
|
455
|
+
# @param app_id (String): The id of your app
|
456
|
+
# @param availability (Availability): The availability update
|
457
|
+
#
|
458
|
+
# @return [Spaceship::Tunes::Availability] the new Availability
|
459
|
+
def update_availability!(app_id, availability)
|
460
|
+
r = request(:get, "ra/apps/#{app_id}/pricing/intervals")
|
461
|
+
data = parse_response(r, 'data')
|
462
|
+
|
463
|
+
data["countriesChanged"] = true
|
464
|
+
data["countries"] = availability.territories.map { |territory| { 'code' => territory.code } }
|
465
|
+
data["theWorld"] = availability.include_future_territories.nil? ? true : availability.include_future_territories
|
466
|
+
|
467
|
+
# send the changes back to Apple
|
468
|
+
r = request(:post) do |req|
|
469
|
+
req.url "ra/apps/#{app_id}/pricing/intervals"
|
470
|
+
req.body = data.to_json
|
471
|
+
req.headers['Content-Type'] = 'application/json'
|
472
|
+
end
|
473
|
+
handle_itc_response(r.body)
|
474
|
+
data = parse_response(r, 'data')
|
475
|
+
Spaceship::Tunes::Availability.factory(data)
|
476
|
+
end
|
477
|
+
|
478
|
+
def availability(app_id)
|
479
|
+
r = request(:get, "ra/apps/#{app_id}/pricing/intervals")
|
480
|
+
data = parse_response(r, 'data')
|
481
|
+
Spaceship::Tunes::Availability.factory(data)
|
482
|
+
end
|
483
|
+
|
484
|
+
# Returns an array of all supported territories
|
485
|
+
#
|
486
|
+
# @note Although this information is publicly available, the current spaceship implementation requires you to have a logged in client to access it
|
487
|
+
#
|
488
|
+
# @return [Array] the Territory objects (Spaceship::Tunes::Territory)
|
489
|
+
def supported_territories
|
490
|
+
data = supported_countries
|
491
|
+
data.map { |country| Spaceship::Tunes::Territory.factory(country) }
|
492
|
+
end
|
493
|
+
|
449
494
|
# An array of supported countries
|
450
495
|
# [{
|
451
496
|
# "code": "AL",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-01-
|
17
|
+
date: 2017-01-25 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: slack-notifier
|
@@ -468,16 +468,22 @@ dependencies:
|
|
468
468
|
name: bundler
|
469
469
|
requirement: !ruby/object:Gem::Requirement
|
470
470
|
requirements:
|
471
|
-
- - "
|
471
|
+
- - ">="
|
472
472
|
- !ruby/object:Gem::Version
|
473
|
-
version:
|
473
|
+
version: 1.12.0
|
474
|
+
- - "<"
|
475
|
+
- !ruby/object:Gem::Version
|
476
|
+
version: 2.0.0
|
474
477
|
type: :runtime
|
475
478
|
prerelease: false
|
476
479
|
version_requirements: !ruby/object:Gem::Requirement
|
477
480
|
requirements:
|
478
|
-
- - "
|
481
|
+
- - ">="
|
479
482
|
- !ruby/object:Gem::Version
|
480
|
-
version:
|
483
|
+
version: 1.12.0
|
484
|
+
- - "<"
|
485
|
+
- !ruby/object:Gem::Version
|
486
|
+
version: 2.0.0
|
481
487
|
- !ruby/object:Gem::Dependency
|
482
488
|
name: faraday
|
483
489
|
requirement: !ruby/object:Gem::Requirement
|
@@ -698,7 +704,6 @@ executables:
|
|
698
704
|
extensions: []
|
699
705
|
extra_rdoc_files: []
|
700
706
|
files:
|
701
|
-
- "./lib/.DS_Store"
|
702
707
|
- LICENSE
|
703
708
|
- README.md
|
704
709
|
- bin/bin-proxy
|
@@ -756,6 +761,7 @@ files:
|
|
756
761
|
- fastlane/lib/fastlane/.DS_Store
|
757
762
|
- fastlane/lib/fastlane/action.rb
|
758
763
|
- fastlane/lib/fastlane/action_collector.rb
|
764
|
+
- fastlane/lib/fastlane/actions/.DS_Store
|
759
765
|
- fastlane/lib/fastlane/actions/README.md
|
760
766
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
761
767
|
- fastlane/lib/fastlane/actions/adb.rb
|
@@ -796,6 +802,7 @@ files:
|
|
796
802
|
- fastlane/lib/fastlane/actions/delete_keychain.rb
|
797
803
|
- fastlane/lib/fastlane/actions/deliver.rb
|
798
804
|
- fastlane/lib/fastlane/actions/deploygate.rb
|
805
|
+
- fastlane/lib/fastlane/actions/device_grid/.DS_Store
|
799
806
|
- fastlane/lib/fastlane/actions/device_grid/README.md
|
800
807
|
- fastlane/lib/fastlane/actions/dotgpg_environment.rb
|
801
808
|
- fastlane/lib/fastlane/actions/download.rb
|
@@ -992,7 +999,6 @@ files:
|
|
992
999
|
- fastlane/lib/fastlane/plugins/template/spec/%plugin_name%_action_spec.rb.erb
|
993
1000
|
- fastlane/lib/fastlane/plugins/template/spec/spec_helper.rb.erb
|
994
1001
|
- fastlane/lib/fastlane/runner.rb
|
995
|
-
- fastlane/lib/fastlane/setup/.DS_Store
|
996
1002
|
- fastlane/lib/fastlane/setup/crashlytics_beta.rb
|
997
1003
|
- fastlane/lib/fastlane/setup/crashlytics_beta_command_line_handler.rb
|
998
1004
|
- fastlane/lib/fastlane/setup/crashlytics_beta_info.rb
|
@@ -1010,6 +1016,7 @@ files:
|
|
1010
1016
|
- fastlane_core/lib/.DS_Store
|
1011
1017
|
- fastlane_core/lib/assets/XMLTemplate.xml.erb
|
1012
1018
|
- fastlane_core/lib/fastlane_core.rb
|
1019
|
+
- fastlane_core/lib/fastlane_core/.DS_Store
|
1013
1020
|
- fastlane_core/lib/fastlane_core/cert_checker.rb
|
1014
1021
|
- fastlane_core/lib/fastlane_core/command_executor.rb
|
1015
1022
|
- fastlane_core/lib/fastlane_core/configuration/commander_generator.rb
|
@@ -1165,6 +1172,7 @@ files:
|
|
1165
1172
|
- sigh/lib/sigh/resign.rb
|
1166
1173
|
- sigh/lib/sigh/runner.rb
|
1167
1174
|
- snapshot/README.md
|
1175
|
+
- snapshot/lib/.DS_Store
|
1168
1176
|
- snapshot/lib/assets/SnapfileTemplate
|
1169
1177
|
- snapshot/lib/assets/SnapshotHelper.swift
|
1170
1178
|
- snapshot/lib/assets/SnapshotHelper2-3.swift
|
@@ -1189,9 +1197,11 @@ files:
|
|
1189
1197
|
- snapshot/lib/snapshot/test_command_generator.rb
|
1190
1198
|
- snapshot/lib/snapshot/update.rb
|
1191
1199
|
- spaceship/README.md
|
1200
|
+
- spaceship/lib/.DS_Store
|
1192
1201
|
- spaceship/lib/assets/languageMapping.json
|
1193
1202
|
- spaceship/lib/assets/languageMappingReadable.json
|
1194
1203
|
- spaceship/lib/spaceship.rb
|
1204
|
+
- spaceship/lib/spaceship/.DS_Store
|
1195
1205
|
- spaceship/lib/spaceship/babosa_fix.rb
|
1196
1206
|
- spaceship/lib/spaceship/base.rb
|
1197
1207
|
- spaceship/lib/spaceship/client.rb
|
@@ -1230,6 +1240,7 @@ files:
|
|
1230
1240
|
- spaceship/lib/spaceship/tunes/app_version_ref.rb
|
1231
1241
|
- spaceship/lib/spaceship/tunes/app_version_states_history.rb
|
1232
1242
|
- spaceship/lib/spaceship/tunes/application.rb
|
1243
|
+
- spaceship/lib/spaceship/tunes/availability.rb
|
1233
1244
|
- spaceship/lib/spaceship/tunes/build.rb
|
1234
1245
|
- spaceship/lib/spaceship/tunes/build_details.rb
|
1235
1246
|
- spaceship/lib/spaceship/tunes/build_train.rb
|
@@ -1239,6 +1250,7 @@ files:
|
|
1239
1250
|
- spaceship/lib/spaceship/tunes/pricing_tier.rb
|
1240
1251
|
- spaceship/lib/spaceship/tunes/recovery_device.rb
|
1241
1252
|
- spaceship/lib/spaceship/tunes/spaceship.rb
|
1253
|
+
- spaceship/lib/spaceship/tunes/territory.rb
|
1242
1254
|
- spaceship/lib/spaceship/tunes/tester.rb
|
1243
1255
|
- spaceship/lib/spaceship/tunes/transit_app_file.rb
|
1244
1256
|
- spaceship/lib/spaceship/tunes/tunes.rb
|
@@ -1249,7 +1261,6 @@ files:
|
|
1249
1261
|
- spaceship/lib/spaceship/two_step_client.rb
|
1250
1262
|
- spaceship/lib/spaceship/ui.rb
|
1251
1263
|
- supply/README.md
|
1252
|
-
- supply/lib/.DS_Store
|
1253
1264
|
- supply/lib/supply.rb
|
1254
1265
|
- supply/lib/supply/apk_listing.rb
|
1255
1266
|
- supply/lib/supply/client.rb
|
@@ -1294,7 +1305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1294
1305
|
version: '0'
|
1295
1306
|
requirements: []
|
1296
1307
|
rubyforge_project:
|
1297
|
-
rubygems_version: 2.
|
1308
|
+
rubygems_version: 2.6.6
|
1298
1309
|
signing_key:
|
1299
1310
|
specification_version: 4
|
1300
1311
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|