fastlane 2.129.0.beta.20190811200106 → 2.129.0.beta.20190813200016
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/deliver/lib/deliver/submit_for_review.rb +1 -1
- data/fastlane/lib/fastlane/actions/appetize_viewing_url_generator.rb +1 -1
- data/fastlane/lib/fastlane/actions/automatic_code_signing.rb +1 -1
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/get_version_number.rb +18 -2
- data/fastlane/lib/fastlane/actions/github_api.rb +1 -1
- data/fastlane/lib/fastlane/actions/gradle.rb +26 -7
- data/fastlane/lib/fastlane/actions/import_from_git.rb +1 -1
- data/fastlane/lib/fastlane/actions/pod_push.rb +20 -10
- data/fastlane/lib/fastlane/actions/puts.rb +1 -1
- data/fastlane/lib/fastlane/actions/sonar.rb +18 -0
- data/fastlane/lib/fastlane/commands_generator.rb +1 -1
- data/fastlane/lib/fastlane/helper/adb_helper.rb +5 -0
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.rb +4 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +11 -7
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb +1 -1
- data/fastlane_core/lib/fastlane_core/configuration/config_item.rb +1 -1
- data/frameit/lib/frameit/editor.rb +1 -1
- data/gym/lib/gym/options.rb +1 -1
- data/match/lib/match/nuke.rb +1 -1
- data/match/lib/match/runner.rb +2 -2
- data/match/lib/match/storage/interface.rb +1 -1
- data/scan/lib/scan/options.rb +1 -1
- data/scan/lib/scan/runner.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb +1 -0
- data/spaceship/lib/spaceship/du/du_client.rb +4 -0
- data/spaceship/lib/spaceship/portal/certificate.rb +15 -1
- data/spaceship/lib/spaceship/spaceauth_runner.rb +1 -1
- data/spaceship/lib/spaceship/test_flight/tester.rb +1 -1
- data/spaceship/lib/spaceship/tunes/display_family.rb +3 -3
- data/spaceship/lib/spaceship/tunes/iap.rb +2 -0
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +17 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +37 -1
- data/supply/lib/supply/client.rb +1 -1
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b1f0d75e2cef96d9d66abd38b3d8f421ef561e8
|
4
|
+
data.tar.gz: 056af703f6e8ba46111b997331b1bfad37a9c042
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09e2b9151be73aae01748f211df62a622a419332da4d7113f05d691b8f872b774072bf72c0454b97cefe4e8505f8bb28a458380efe0cd21927433d93c134b936'
|
7
|
+
data.tar.gz: 896ed6d895e3c8f16b507c499ae8029ff5870a389d6a85fc246a4464491b60963ee7f09c3d897893330beca522a00571f1163bf8cfb06767f85179d213b12a39
|
@@ -59,7 +59,7 @@ module Deliver
|
|
59
59
|
build = nil
|
60
60
|
|
61
61
|
loop do
|
62
|
-
# Sometimes candidate_builds don't appear immediately after
|
62
|
+
# Sometimes candidate_builds don't appear immediately after submission
|
63
63
|
# Wait for candidate_builds to appear on App Store Connect
|
64
64
|
# Issue https://github.com/fastlane/fastlane/issues/10411
|
65
65
|
candidate_builds = app.latest_version.candidate_builds
|
@@ -115,7 +115,7 @@ module Fastlane
|
|
115
115
|
optional: true),
|
116
116
|
FastlaneCore::ConfigItem.new(key: :params,
|
117
117
|
env_name: "APPETIZE_VIEWING_URL_GENERATOR_PARAMS",
|
118
|
-
description: "
|
118
|
+
description: "Specify params value to be passed to Appetize",
|
119
119
|
is_string: true,
|
120
120
|
optional: true),
|
121
121
|
FastlaneCore::ConfigItem.new(key: :proxy,
|
@@ -50,7 +50,7 @@ module Fastlane
|
|
50
50
|
if params[:code_sign_identity]
|
51
51
|
build_configuration_list.set_setting("CODE_SIGN_IDENTITY", params[:code_sign_identity])
|
52
52
|
|
53
|
-
# We also need to update the value if it was
|
53
|
+
# We also need to update the value if it was overridden for a specific SDK
|
54
54
|
build_configuration_list.build_configurations.each do |build_configuration|
|
55
55
|
codesign_build_settings_keys = build_configuration.build_settings.keys.select { |key| key.to_s.match(/CODE_SIGN_IDENTITY.*/) }
|
56
56
|
codesign_build_settings_keys.each do |setting|
|
@@ -50,7 +50,7 @@ module Fastlane
|
|
50
50
|
end
|
51
51
|
}
|
52
52
|
}) do |result|
|
53
|
-
UI.success("Successfully
|
53
|
+
UI.success("Successfully committed file to GitHub")
|
54
54
|
json = result[:json]
|
55
55
|
html_url = json['commit']['html_url']
|
56
56
|
download_url = json['content']['download_url']
|
@@ -16,7 +16,12 @@ module Fastlane
|
|
16
16
|
project = get_project!(folder)
|
17
17
|
target = get_target!(project, target_name)
|
18
18
|
plist_file = get_plist!(folder, target, configuration)
|
19
|
-
version_number =
|
19
|
+
version_number = get_version_number_from_plist!(plist_file)
|
20
|
+
|
21
|
+
# Get from build settings if needed (ex: $(MARKETING_VERSION) is default in Xcode 11)
|
22
|
+
if version_number =~ /\$\(([\w\-]+)\)/
|
23
|
+
version_number = get_version_number_from_build_settings!(target, $1, configuration)
|
24
|
+
end
|
20
25
|
|
21
26
|
# Store the number in the shared hash
|
22
27
|
Actions.lane_context[SharedValues::VERSION_NUMBER] = version_number
|
@@ -65,6 +70,17 @@ module Fastlane
|
|
65
70
|
target
|
66
71
|
end
|
67
72
|
|
73
|
+
def self.get_version_number_from_build_settings!(target, variable, configuration = nil)
|
74
|
+
target.build_configurations.each do |config|
|
75
|
+
if configuration.nil? || config.name == configuration
|
76
|
+
value = config.build_settings[variable]
|
77
|
+
return value if value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
UI.user_error!("Unable to find Xcode build setting: #{variable}")
|
82
|
+
end
|
83
|
+
|
68
84
|
def self.get_plist!(folder, target, configuration = nil)
|
69
85
|
plist_files = target.resolved_build_setting("INFOPLIST_FILE")
|
70
86
|
plist_files_count = plist_files.values.compact.uniq.count
|
@@ -94,7 +110,7 @@ module Fastlane
|
|
94
110
|
plist_file
|
95
111
|
end
|
96
112
|
|
97
|
-
def self.
|
113
|
+
def self.get_version_number_from_plist!(plist_file)
|
98
114
|
plist = Xcodeproj::Plist.read_from_path(plist_file)
|
99
115
|
UI.user_error!("Unable to read plist: #{plist_file}") unless plist
|
100
116
|
|
@@ -113,7 +113,7 @@ module Fastlane
|
|
113
113
|
optional: true),
|
114
114
|
FastlaneCore::ConfigItem.new(key: :raw_body,
|
115
115
|
env_name: "FL_GITHUB_API_REQUEST_RAW_BODY",
|
116
|
-
description: "The request body taken
|
116
|
+
description: "The request body taken verbatim instead of as JSON, useful for file uploads",
|
117
117
|
is_string: true,
|
118
118
|
optional: true),
|
119
119
|
FastlaneCore::ConfigItem.new(key: :path,
|
@@ -102,7 +102,7 @@ module Fastlane
|
|
102
102
|
[
|
103
103
|
FastlaneCore::ConfigItem.new(key: :task,
|
104
104
|
env_name: 'FL_GRADLE_TASK',
|
105
|
-
description: 'The gradle task you want to execute, e.g. `assemble` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: \'assemble\', flavor: \'Myflavor\', build_type: \'Release\')',
|
105
|
+
description: 'The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: \'assemble\', flavor: \'Myflavor\', build_type: \'Release\')',
|
106
106
|
optional: false,
|
107
107
|
is_string: true),
|
108
108
|
FastlaneCore::ConfigItem.new(key: :flavor,
|
@@ -187,8 +187,21 @@ module Fastlane
|
|
187
187
|
task: "assemble",
|
188
188
|
flavor: "WorldDomination",
|
189
189
|
build_type: "Release"
|
190
|
-
)
|
191
|
-
|
190
|
+
)
|
191
|
+
```
|
192
|
+
|
193
|
+
To build an AAB use:
|
194
|
+
```ruby
|
195
|
+
gradle(
|
196
|
+
task: "bundle",
|
197
|
+
flavor: "WorldDomination",
|
198
|
+
build_type: "Release"
|
199
|
+
)
|
200
|
+
```
|
201
|
+
|
202
|
+
You can pass properties to gradle:
|
203
|
+
```ruby
|
204
|
+
gradle(
|
192
205
|
# ...
|
193
206
|
|
194
207
|
properties: {
|
@@ -211,8 +224,11 @@ module Fastlane
|
|
211
224
|
"android.injected.signing.key.alias" => "key_alias",
|
212
225
|
"android.injected.signing.key.password" => "key_password",
|
213
226
|
}
|
214
|
-
)
|
215
|
-
|
227
|
+
)
|
228
|
+
```
|
229
|
+
|
230
|
+
If you need to pass sensitive information through the `gradle` action, and don\'t want the generated command to be printed before it is run, you can suppress that:
|
231
|
+
```ruby
|
216
232
|
gradle(
|
217
233
|
# ...
|
218
234
|
print_command: false
|
@@ -233,8 +249,11 @@ module Fastlane
|
|
233
249
|
# ...
|
234
250
|
|
235
251
|
flags: "--exitcode --xml file.xml"
|
236
|
-
)
|
237
|
-
|
252
|
+
)
|
253
|
+
```
|
254
|
+
|
255
|
+
Delete the build directory, generated APKs and AABs
|
256
|
+
```ruby
|
238
257
|
gradle(
|
239
258
|
task: "clean"
|
240
259
|
)'
|
@@ -31,7 +31,7 @@ module Fastlane
|
|
31
31
|
default_value: 'fastlane/Fastfile',
|
32
32
|
optional: true),
|
33
33
|
FastlaneCore::ConfigItem.new(key: :version,
|
34
|
-
description: "The version to checkout on the
|
34
|
+
description: "The version to checkout on the repository. Optimistic match operator or multiple conditions can be used to select the latest version within constraints",
|
35
35
|
default_value: nil,
|
36
36
|
is_string: false,
|
37
37
|
optional: true)
|
@@ -65,25 +65,30 @@ module Fastlane
|
|
65
65
|
FastlaneCore::ConfigItem.new(key: :use_bundle_exec,
|
66
66
|
description: "Use bundle exec when there is a Gemfile presented",
|
67
67
|
type: Boolean,
|
68
|
-
default_value: false
|
68
|
+
default_value: false,
|
69
|
+
env_name: "FL_POD_PUSH_USE_BUNDLE_EXEC"),
|
69
70
|
FastlaneCore::ConfigItem.new(key: :path,
|
70
71
|
description: "The Podspec you want to push",
|
71
72
|
optional: true,
|
72
73
|
verify_block: proc do |value|
|
73
74
|
UI.user_error!("Couldn't find file at path '#{value}'") unless File.exist?(value)
|
74
75
|
UI.user_error!("File must be a `.podspec` or `.podspec.json`") unless value.end_with?(".podspec", ".podspec.json")
|
75
|
-
end
|
76
|
+
end,
|
77
|
+
env_name: "FL_POD_PUSH_PATH"),
|
76
78
|
FastlaneCore::ConfigItem.new(key: :repo,
|
77
79
|
description: "The repo you want to push. Pushes to Trunk by default",
|
78
|
-
optional: true
|
80
|
+
optional: true,
|
81
|
+
env_name: "FL_POD_PUSH_REPO"),
|
79
82
|
FastlaneCore::ConfigItem.new(key: :allow_warnings,
|
80
83
|
description: "Allow warnings during pod push",
|
81
84
|
optional: true,
|
82
|
-
type: Boolean
|
85
|
+
type: Boolean,
|
86
|
+
env_name: "FL_POD_PUSH_ALLOW_WARNINGS"),
|
83
87
|
FastlaneCore::ConfigItem.new(key: :use_libraries,
|
84
88
|
description: "Allow lint to use static libraries to install the spec",
|
85
89
|
optional: true,
|
86
|
-
type: Boolean
|
90
|
+
type: Boolean,
|
91
|
+
env_name: "FL_POD_PUSH_USE_LIBRARIES"),
|
87
92
|
FastlaneCore::ConfigItem.new(key: :sources,
|
88
93
|
description: "The sources of repos you want the pod spec to lint with, separated by commas",
|
89
94
|
optional: true,
|
@@ -91,24 +96,29 @@ module Fastlane
|
|
91
96
|
type: Array,
|
92
97
|
verify_block: proc do |value|
|
93
98
|
UI.user_error!("Sources must be an array.") unless value.kind_of?(Array)
|
94
|
-
end
|
99
|
+
end,
|
100
|
+
env_name: "FL_POD_PUSH_SOURCES"),
|
95
101
|
FastlaneCore::ConfigItem.new(key: :swift_version,
|
96
102
|
description: "The SWIFT_VERSION that should be used to lint the spec. This takes precedence over a .swift-version file",
|
97
103
|
optional: true,
|
98
|
-
is_string: true
|
104
|
+
is_string: true,
|
105
|
+
env_name: "FL_POD_PUSH_SWIFT_VERSION"),
|
99
106
|
FastlaneCore::ConfigItem.new(key: :skip_import_validation,
|
100
107
|
description: "Lint skips validating that the pod can be imported",
|
101
108
|
optional: true,
|
102
|
-
type: Boolean
|
109
|
+
type: Boolean,
|
110
|
+
env_name: "FL_POD_PUSH_SKIP_IMPORT_VALIDATION"),
|
103
111
|
FastlaneCore::ConfigItem.new(key: :skip_tests,
|
104
112
|
description: "Lint skips building and running tests during validation",
|
105
113
|
optional: true,
|
106
|
-
type: Boolean
|
114
|
+
type: Boolean,
|
115
|
+
env_name: "FL_POD_PUSH_SKIP_TESTS"),
|
107
116
|
FastlaneCore::ConfigItem.new(key: :verbose,
|
108
117
|
description: "Show more debugging information",
|
109
118
|
optional: true,
|
110
119
|
type: Boolean,
|
111
|
-
default_value: false
|
120
|
+
default_value: false,
|
121
|
+
env_name: "FL_POD_PUSH_VERBOSE")
|
112
122
|
]
|
113
123
|
end
|
114
124
|
|
@@ -21,6 +21,9 @@ module Fastlane
|
|
21
21
|
sonar_scanner_args << "-Dsonar.login=\"#{params[:sonar_login]}\"" if params[:sonar_login]
|
22
22
|
sonar_scanner_args << "-Dsonar.host.url=\"#{params[:sonar_url]}\"" if params[:sonar_url]
|
23
23
|
sonar_scanner_args << "-Dsonar.branch.name=\"#{params[:branch_name]}\"" if params[:branch_name]
|
24
|
+
sonar_scanner_args << "-Dsonar.pullrequest.branch=\"#{params[:pull_request_branch]}\"" if params[:pull_request_branch]
|
25
|
+
sonar_scanner_args << "-Dsonar.pullrequest.base=\"#{params[:pull_request_base]}\"" if params[:pull_request_base]
|
26
|
+
sonar_scanner_args << "-Dsonar.pullrequest.key=\"#{params[:pull_request_key]}\"" if params[:pull_request_key]
|
24
27
|
sonar_scanner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
|
25
28
|
|
26
29
|
command = [
|
@@ -103,6 +106,21 @@ module Fastlane
|
|
103
106
|
env_name: "FL_SONAR_RUNNER_BRANCH_NAME",
|
104
107
|
description: "Pass the branch name which is getting scanned",
|
105
108
|
optional: true,
|
109
|
+
is_string: true),
|
110
|
+
FastlaneCore::ConfigItem.new(key: :pull_request_branch,
|
111
|
+
env_name: "FL_SONAR_RUNNER_PULL_REQUEST_BRANCH",
|
112
|
+
description: "The name of the branch that contains the changes to be merged",
|
113
|
+
optional: true,
|
114
|
+
is_string: true),
|
115
|
+
FastlaneCore::ConfigItem.new(key: :pull_request_base,
|
116
|
+
env_name: "FL_SONAR_RUNNER_PULL_REQUEST_BASE",
|
117
|
+
description: "The long-lived branch into which the PR will be merged",
|
118
|
+
optional: true,
|
119
|
+
is_string: true),
|
120
|
+
FastlaneCore::ConfigItem.new(key: :pull_request_key,
|
121
|
+
env_name: "FL_SONAR_RUNNER_PULL_REQUEST_KEY",
|
122
|
+
description: "Unique identifier of your PR. Must correspond to the key of the PR in GitHub or TFS",
|
123
|
+
optional: true,
|
106
124
|
is_string: true)
|
107
125
|
]
|
108
126
|
end
|
@@ -43,7 +43,7 @@ module Fastlane
|
|
43
43
|
Fastlane::PluginUpdateManager.show_update_status
|
44
44
|
if FastlaneCore::Globals.capture_output?
|
45
45
|
if $stdout.respond_to?(:string)
|
46
|
-
# Sometimes you can get NoMethodError: undefined method `string' for #<IO:<STDOUT>> when
|
46
|
+
# Sometimes you can get NoMethodError: undefined method `string' for #<IO:<STDOUT>> when running with FastlaneRunner (swift)
|
47
47
|
FastlaneCore::Globals.captured_output = Helper.strip_ansi_colors($stdout.string)
|
48
48
|
end
|
49
49
|
$stdout = STDOUT
|
@@ -31,6 +31,11 @@ module Fastlane
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def device_avalaible?(serial)
|
34
|
+
UI.deprecated("Please use `device_available?` instead... This will be removed in a future version of fastlane")
|
35
|
+
device_available?(serial)
|
36
|
+
end
|
37
|
+
|
38
|
+
def device_available?(serial)
|
34
39
|
load_all_devices
|
35
40
|
return devices.map(&:serial).include?(serial)
|
36
41
|
end
|
@@ -7,7 +7,7 @@ module Fastlane
|
|
7
7
|
def discover_crashlytics_path(params)
|
8
8
|
path = params[:crashlytics_path]
|
9
9
|
|
10
|
-
# Finding submit binary inside of given Crashlytics path (for backwards
|
10
|
+
# Finding submit binary inside of given Crashlytics path (for backwards compatibility)
|
11
11
|
if path
|
12
12
|
if File.basename(path) != "submit"
|
13
13
|
path = Dir[File.join(path, '**', 'submit')].last
|
@@ -337,6 +337,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
|
|
337
337
|
key_default_values = []
|
338
338
|
key_optionality_values = []
|
339
339
|
key_type_overrides = []
|
340
|
+
key_is_strings = []
|
340
341
|
|
341
342
|
if options.kind_of?(Array)
|
342
343
|
options.each do |current|
|
@@ -350,6 +351,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
|
|
350
351
|
key_default_values << current.code_gen_default_value
|
351
352
|
key_optionality_values << current.optional
|
352
353
|
key_type_overrides << current.data_type
|
354
|
+
key_is_strings << current.is_string
|
353
355
|
end
|
354
356
|
end
|
355
357
|
action_return_type = action.return_type
|
@@ -362,6 +364,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
|
|
362
364
|
key_default_values: key_default_values,
|
363
365
|
key_optionality_values: key_optionality_values,
|
364
366
|
key_type_overrides: key_type_overrides,
|
367
|
+
key_is_strings: key_is_strings,
|
365
368
|
return_type: action_return_type
|
366
369
|
)
|
367
370
|
generated_protocol_file_path = generate_tool_protocol(tool_swift_function: tool_swift_function)
|
@@ -375,6 +378,7 @@ func parseInt(fromString: String, function: String = #function) -> Int {
|
|
375
378
|
key_default_values: key_default_values,
|
376
379
|
key_optionality_values: key_optionality_values,
|
377
380
|
key_type_overrides: key_type_overrides,
|
381
|
+
key_is_strings: key_is_strings,
|
378
382
|
return_type: action_return_type
|
379
383
|
)
|
380
384
|
end
|
@@ -7,15 +7,17 @@ module Fastlane
|
|
7
7
|
attr_accessor :param_default_values
|
8
8
|
attr_accessor :param_optionality_values
|
9
9
|
attr_accessor :param_type_overrides
|
10
|
+
attr_accessor :param_is_strings
|
10
11
|
attr_accessor :reserved_words
|
11
12
|
attr_accessor :default_values_to_ignore
|
12
13
|
|
13
|
-
def initialize(action_name: nil, keys: nil, key_descriptions: nil, key_default_values: nil, key_optionality_values: nil, key_type_overrides: nil, return_type: nil)
|
14
|
+
def initialize(action_name: nil, keys: nil, key_descriptions: nil, key_default_values: nil, key_optionality_values: nil, key_type_overrides: nil, key_is_strings: nil, return_type: nil)
|
14
15
|
@function_name = action_name
|
15
16
|
@param_names = keys
|
16
17
|
@param_descriptions = key_descriptions
|
17
18
|
@param_default_values = key_default_values
|
18
19
|
@param_optionality_values = key_optionality_values
|
20
|
+
@param_is_strings = key_is_strings
|
19
21
|
@return_type = return_type
|
20
22
|
@param_type_overrides = key_type_overrides
|
21
23
|
|
@@ -91,11 +93,13 @@ module Fastlane
|
|
91
93
|
return default_value
|
92
94
|
end
|
93
95
|
|
94
|
-
def get_type(param: nil, default_value: nil, optional: nil, param_type_override: nil)
|
96
|
+
def get_type(param: nil, default_value: nil, optional: nil, param_type_override: nil, is_string: true)
|
95
97
|
unless param_type_override.nil?
|
96
98
|
type = determine_type_from_override(type_override: param_type_override)
|
97
99
|
end
|
98
|
-
|
100
|
+
|
101
|
+
# defaulting type to Any if is_string is false so users are allowed to input all allowed types
|
102
|
+
type ||= is_string ? "String" : "Any"
|
99
103
|
|
100
104
|
optional_specifier = ""
|
101
105
|
# if we are optional and don't have a default value, we'll need to use ?
|
@@ -121,8 +125,8 @@ module Fastlane
|
|
121
125
|
return ""
|
122
126
|
end
|
123
127
|
|
124
|
-
param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override|
|
125
|
-
type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override)
|
128
|
+
param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides, param_is_strings).map do |param, default_value, optional, param_type_override, is_string|
|
129
|
+
type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override, is_string: is_string)
|
126
130
|
|
127
131
|
unless default_value.nil?
|
128
132
|
if type == "[String : Any]"
|
@@ -304,8 +308,8 @@ module Fastlane
|
|
304
308
|
return ""
|
305
309
|
end
|
306
310
|
|
307
|
-
param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override|
|
308
|
-
type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override)
|
311
|
+
param_names_and_types = @param_names.zip(param_default_values, param_optionality_values, param_type_overrides).map do |param, default_value, optional, param_type_override, is_string|
|
312
|
+
type = get_type(param: param, default_value: default_value, optional: optional, param_type_override: param_type_override, is_string: is_string)
|
309
313
|
|
310
314
|
param = camel_case_lower(string: param)
|
311
315
|
param = sanitize_reserved_word(word: param)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.129.0.beta.
|
2
|
+
VERSION = '2.129.0.beta.20190813200016'.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
|
@@ -13,7 +13,7 @@ module FastlaneCore
|
|
13
13
|
def new_event(action_stage)
|
14
14
|
{
|
15
15
|
client_id: @p_hash,
|
16
|
-
category: "fastlane Client
|
16
|
+
category: "fastlane Client Language - #{@fastlane_client_language}",
|
17
17
|
action: action_stage,
|
18
18
|
label: action_name,
|
19
19
|
value: nil
|
@@ -196,7 +196,7 @@ module FastlaneCore
|
|
196
196
|
return
|
197
197
|
end
|
198
198
|
|
199
|
-
# We need to
|
199
|
+
# We need to explicitly test against Fastlane::Boolean, TrueClass/FalseClass
|
200
200
|
if value.class != FalseClass && value.class != TrueClass
|
201
201
|
UI.user_error!("'#{self.key}' value must be either `true` or `false`! Found #{value.class} instead.")
|
202
202
|
end
|
@@ -330,7 +330,7 @@ module Frameit
|
|
330
330
|
background = put_title_into_background_stacked(background, title, keyword)
|
331
331
|
return background
|
332
332
|
end
|
333
|
-
# sum_width: the width of both labels together including the space
|
333
|
+
# sum_width: the width of both labels together including the space in-between
|
334
334
|
# is used to calculate the ratio
|
335
335
|
sum_width = title.width
|
336
336
|
sum_width += keyword.width + keyword_padding if keyword
|
data/gym/lib/gym/options.rb
CHANGED
@@ -210,7 +210,7 @@ module Gym
|
|
210
210
|
env_name: "SUPPRESS_OUTPUT",
|
211
211
|
description: "Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path",
|
212
212
|
optional: true,
|
213
|
-
|
213
|
+
type: Boolean),
|
214
214
|
FastlaneCore::ConfigItem.new(key: :disable_xcpretty,
|
215
215
|
env_name: "DISABLE_XCPRETTY",
|
216
216
|
description: "Disable xcpretty formatting of build output",
|
data/match/lib/match/nuke.rb
CHANGED
@@ -148,7 +148,7 @@ module Match
|
|
148
148
|
rows = self.profiles.collect do |p|
|
149
149
|
status = p.status == 'Active' ? p.status.green : p.status.red
|
150
150
|
|
151
|
-
# Expires is
|
151
|
+
# Expires is sometimes nil
|
152
152
|
expires = p.expires ? p.expires.strftime("%Y-%m-%d") : nil
|
153
153
|
[p.name, p.id, status, p.type, expires]
|
154
154
|
end
|
data/match/lib/match/runner.rb
CHANGED
@@ -156,7 +156,7 @@ module Match
|
|
156
156
|
UI.message("Installing certificate...")
|
157
157
|
|
158
158
|
# Only looking for cert in "custom" (non login.keychain) keychain
|
159
|
-
# Doing this for backwards
|
159
|
+
# Doing this for backwards compatibility
|
160
160
|
keychain_name = params[:keychain_name] == "login.keychain" ? nil : params[:keychain_name]
|
161
161
|
|
162
162
|
if FastlaneCore::CertChecker.installed?(cert_path, in_keychain: keychain_name)
|
@@ -217,7 +217,7 @@ module Match
|
|
217
217
|
end
|
218
218
|
end
|
219
219
|
|
220
|
-
if profile.nil? ||
|
220
|
+
if profile.nil? || force
|
221
221
|
if params[:readonly]
|
222
222
|
UI.error("No matching provisioning profiles found for '#{profile_name}'")
|
223
223
|
UI.error("A new one cannot be created because you enabled `readonly`")
|
@@ -23,7 +23,7 @@ module Match
|
|
23
23
|
|
24
24
|
# Call this method after creating a new object to configure
|
25
25
|
# the given Storage object. This method will take
|
26
|
-
# different
|
26
|
+
# different parameters depending on specific class being used
|
27
27
|
def configure
|
28
28
|
not_implemented(__method__)
|
29
29
|
end
|
data/scan/lib/scan/options.rb
CHANGED
@@ -213,7 +213,7 @@ module Scan
|
|
213
213
|
env_name: "SCAN_SUPPRESS_XCODE_OUTPUT",
|
214
214
|
description: "Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path",
|
215
215
|
optional: true,
|
216
|
-
|
216
|
+
type: Boolean),
|
217
217
|
FastlaneCore::ConfigItem.new(key: :formatter,
|
218
218
|
short_option: "-n",
|
219
219
|
env_name: "SCAN_FORMATTER",
|
data/scan/lib/scan/runner.rb
CHANGED
@@ -136,7 +136,7 @@ module Scan
|
|
136
136
|
# Zips build products and moves it to output directory
|
137
137
|
UI.message("Zipping build products")
|
138
138
|
FastlaneCore::Helper.zip_directory(path, output_path, contents_only: true, overwrite: true, print: false)
|
139
|
-
UI.message("
|
139
|
+
UI.message("Successfully zipped build products: #{output_path}")
|
140
140
|
end
|
141
141
|
|
142
142
|
def test_results
|
@@ -22,6 +22,10 @@ module Spaceship
|
|
22
22
|
upload_file(app_version: app_version, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: screenshot_picture_type(device, is_messages))
|
23
23
|
end
|
24
24
|
|
25
|
+
def upload_purchase_merch_screenshot(app_id, upload_file, content_provider_id, sso_token_for_image)
|
26
|
+
upload_file(app_id: app_id, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: 'MZPFT.MerchandisingIAPIcon')
|
27
|
+
end
|
28
|
+
|
25
29
|
def upload_purchase_review_screenshot(app_id, upload_file, content_provider_id, sso_token_for_image)
|
26
30
|
upload_file(app_id: app_id, upload_file: upload_file, path: '/upload/image', content_provider_id: content_provider_id, sso_token: sso_token_for_image, du_validation_rule_set: get_picture_type(upload_file))
|
27
31
|
end
|
@@ -89,6 +89,12 @@ module Spaceship
|
|
89
89
|
# Certs are not associated with apps
|
90
90
|
#####################################################
|
91
91
|
|
92
|
+
# An Apple development code signing certificate used for development environment
|
93
|
+
class AppleDevelopment < Certificate; end
|
94
|
+
|
95
|
+
# An Apple distribution code signing certificate used for distribution environment
|
96
|
+
class AppleDistribution < Certificate; end
|
97
|
+
|
92
98
|
# A development code signing certificate used for development environment
|
93
99
|
class Development < Certificate; end
|
94
100
|
|
@@ -152,6 +158,11 @@ module Spaceship
|
|
152
158
|
# A Mac push notification certificate for production environment
|
153
159
|
class MacProductionPush < PushCertificate; end
|
154
160
|
|
161
|
+
APPLE_CERTIFICATE_TYPE_IDS = {
|
162
|
+
"83Q87W3TGH" => AppleDevelopment,
|
163
|
+
"WXV89964HE" => AppleDistribution
|
164
|
+
}
|
165
|
+
|
155
166
|
IOS_CERTIFICATE_TYPE_IDS = {
|
156
167
|
"5QPB9NHCEI" => Development,
|
157
168
|
"R58UK2EWSO" => Production,
|
@@ -187,7 +198,9 @@ module Spaceship
|
|
187
198
|
"DIVN2GW3XT" => DeveloperIdApplication
|
188
199
|
}
|
189
200
|
|
190
|
-
CERTIFICATE_TYPE_IDS =
|
201
|
+
CERTIFICATE_TYPE_IDS = APPLE_CERTIFICATE_TYPE_IDS
|
202
|
+
.merge(IOS_CERTIFICATE_TYPE_IDS)
|
203
|
+
.merge(MAC_CERTIFICATE_TYPE_IDS)
|
191
204
|
|
192
205
|
# Class methods
|
193
206
|
class << self
|
@@ -259,6 +272,7 @@ module Spaceship
|
|
259
272
|
def all(mac: false)
|
260
273
|
if self == Certificate # are we the base-class?
|
261
274
|
type_ids = mac ? MAC_CERTIFICATE_TYPE_IDS : IOS_CERTIFICATE_TYPE_IDS
|
275
|
+
type_ids = APPLE_CERTIFICATE_TYPE_IDS.merge(type_ids)
|
262
276
|
types = type_ids.keys
|
263
277
|
types += OLDER_IOS_CERTIFICATE_TYPES unless mac
|
264
278
|
else
|
@@ -25,7 +25,7 @@ module Spaceship
|
|
25
25
|
puts("Please try unsetting the FASTLANE_SESSION environment variable".yellow)
|
26
26
|
puts("(if it is set) and re-run `fastlane spaceauth`".yellow)
|
27
27
|
puts("")
|
28
|
-
puts("
|
28
|
+
puts("Exception type: #{ex.class}")
|
29
29
|
raise ex
|
30
30
|
end
|
31
31
|
|
@@ -93,7 +93,7 @@ module Spaceship
|
|
93
93
|
end
|
94
94
|
|
95
95
|
# @return (Spaceship::TestFlight::Tester) Returns the testers matching the parameter.
|
96
|
-
# ITC
|
96
|
+
# ITC searches all fields, and is full text. The search results are the union of all words in the search text
|
97
97
|
# @param text (String) (required): Value used to filter the tester, case insensitive
|
98
98
|
def self.search(app_id: nil, text: nil, is_email_exact_match: false)
|
99
99
|
text = text.strip
|
@@ -5,7 +5,7 @@ module Spaceship
|
|
5
5
|
# A definition of different styled displays used by devices
|
6
6
|
# that App Store Connect supports storing screenshots.
|
7
7
|
# Display styles often only vary based on screen resolution
|
8
|
-
# however other aspects of a displays physical
|
8
|
+
# however other aspects of a displays physical appearance are
|
9
9
|
# also factored (i.e if the home indicator is provided via
|
10
10
|
# a hardware button or a software interface).
|
11
11
|
class DisplayFamily
|
@@ -15,12 +15,12 @@ module Spaceship
|
|
15
15
|
# Spaceship::Tunes::AppScreenshot#device_type attribute.
|
16
16
|
attr_accessor :name
|
17
17
|
|
18
|
-
# The user friendly name of this
|
18
|
+
# The user friendly name of this definition.
|
19
19
|
#
|
20
20
|
# Source: Media Manager in App Store Connect.
|
21
21
|
attr_accessor :friendly_name
|
22
22
|
|
23
|
-
# The user friendly category for this
|
23
|
+
# The user friendly category for this definition (i.e iPhone,
|
24
24
|
# Apple TV or Desktop).
|
25
25
|
attr_accessor :friendly_category_name
|
26
26
|
|
@@ -65,6 +65,7 @@ module Spaceship
|
|
65
65
|
reference_name: nil,
|
66
66
|
product_id: nil,
|
67
67
|
cleared_for_sale: true,
|
68
|
+
merch_screenshot: nil,
|
68
69
|
review_notes: nil,
|
69
70
|
review_screenshot: nil,
|
70
71
|
pricing_intervals: nil,
|
@@ -78,6 +79,7 @@ module Spaceship
|
|
78
79
|
reference_name: reference_name,
|
79
80
|
product_id: product_id,
|
80
81
|
cleared_for_sale: cleared_for_sale,
|
82
|
+
merch_screenshot: merch_screenshot,
|
81
83
|
review_notes: review_notes,
|
82
84
|
review_screenshot: review_screenshot,
|
83
85
|
pricing_intervals: pricing_intervals,
|
@@ -30,6 +30,10 @@ module Spaceship
|
|
30
30
|
# @return (Bool) Cleared for sale flag
|
31
31
|
attr_accessor :cleared_for_sale
|
32
32
|
|
33
|
+
# @return (Hash) app store promotion image (optional)
|
34
|
+
attr_accessor :merch_screenshot
|
35
|
+
|
36
|
+
# @return (Hash) app review screenshot (required)
|
33
37
|
attr_accessor :review_screenshot
|
34
38
|
|
35
39
|
# @return (String) the notes for the review team
|
@@ -142,6 +146,12 @@ module Spaceship
|
|
142
146
|
Tunes::IAPStatus.get_from_string(raw_data["versions"].first["status"])
|
143
147
|
end
|
144
148
|
|
149
|
+
# @return (Hash) Hash containing existing promotional image data
|
150
|
+
def merch_screenshot
|
151
|
+
return nil unless raw_data && raw_data["versions"] && raw_data["versions"].first && raw_data["versions"].first["merch"] && raw_data["versions"].first["merch"]["images"].first["image"]["value"]
|
152
|
+
raw_data["versions"].first["merch"]["images"].first["image"]["value"]
|
153
|
+
end
|
154
|
+
|
145
155
|
# @return (Hash) Hash containing existing review screenshot data
|
146
156
|
def review_screenshot
|
147
157
|
return nil unless raw_data && raw_data["versions"] && raw_data["versions"].first && raw_data["versions"].first["reviewScreenshot"] && raw_data['versions'].first["reviewScreenshot"]["value"]
|
@@ -172,6 +182,13 @@ module Spaceship
|
|
172
182
|
raw_data.set(["pricingIntervals"], raw_pricing_intervals)
|
173
183
|
@raw_pricing_data["subscriptions"] = raw_pricing_intervals if @raw_pricing_data
|
174
184
|
|
185
|
+
if @merch_screenshot
|
186
|
+
# Upload App Store Promotional image (Optional)
|
187
|
+
upload_file = UploadFile.from_path(@merch_screenshot)
|
188
|
+
merch_data = client.upload_purchase_merch_screenshot(application.apple_id, upload_file)
|
189
|
+
raw_data["versions"][0]["merch"] = merch_data
|
190
|
+
end
|
191
|
+
|
175
192
|
if @review_screenshot
|
176
193
|
# Upload Screenshot
|
177
194
|
upload_file = UploadFile.from_path(@review_screenshot)
|
@@ -791,6 +791,35 @@ module Spaceship
|
|
791
791
|
du_client.upload_watch_icon(app_version, upload_image, content_provider_id, sso_token_for_image)
|
792
792
|
end
|
793
793
|
|
794
|
+
# Uploads an In-App-Purchase Promotional image
|
795
|
+
# @param upload_image (UploadFile): The icon to upload
|
796
|
+
# @return [JSON] the image data, ready to be added to an In-App-Purchase
|
797
|
+
def upload_purchase_merch_screenshot(app_id, upload_image)
|
798
|
+
data = du_client.upload_purchase_merch_screenshot(app_id, upload_image, content_provider_id, sso_token_for_image)
|
799
|
+
{
|
800
|
+
"images" => [
|
801
|
+
{
|
802
|
+
"id" => nil,
|
803
|
+
"image" => {
|
804
|
+
"value" => {
|
805
|
+
"assetToken" => data["token"],
|
806
|
+
"originalFileName" => upload_image.file_name,
|
807
|
+
"height" => data["height"],
|
808
|
+
"width" => data["width"],
|
809
|
+
"checksum" => data["md5"]
|
810
|
+
},
|
811
|
+
"isEditable" => true,
|
812
|
+
"isREquired" => false,
|
813
|
+
"errorKeys" => nil
|
814
|
+
},
|
815
|
+
"status" => "proposed"
|
816
|
+
}
|
817
|
+
],
|
818
|
+
"showByDefault" => true,
|
819
|
+
"isActive" => false
|
820
|
+
}
|
821
|
+
end
|
822
|
+
|
794
823
|
# Uploads an In-App-Purchase Review screenshot
|
795
824
|
# @param app_id (AppId): The id of the app
|
796
825
|
# @param upload_image (UploadFile): The icon to upload
|
@@ -1304,7 +1333,7 @@ module Spaceship
|
|
1304
1333
|
end
|
1305
1334
|
|
1306
1335
|
# Creates an In-App-Purchases
|
1307
|
-
def create_iap!(app_id: nil, type: nil, versions: nil, reference_name: nil, product_id: nil, cleared_for_sale: true, review_notes: nil, review_screenshot: nil, pricing_intervals: nil, family_id: nil, subscription_duration: nil, subscription_free_trial: nil)
|
1336
|
+
def create_iap!(app_id: nil, type: nil, versions: nil, reference_name: nil, product_id: nil, cleared_for_sale: true, merch_screenshot: nil, review_notes: nil, review_screenshot: nil, pricing_intervals: nil, family_id: nil, subscription_duration: nil, subscription_free_trial: nil)
|
1308
1337
|
# Load IAP Template based on Type
|
1309
1338
|
type ||= "consumable"
|
1310
1339
|
r = request(:get, "ra/apps/#{app_id}/iaps/#{type}/template")
|
@@ -1348,6 +1377,13 @@ module Spaceship
|
|
1348
1377
|
data["versions"][0]["details"]["value"] = versions_array
|
1349
1378
|
data['versions'][0]["reviewNotes"] = { value: review_notes }
|
1350
1379
|
|
1380
|
+
if merch_screenshot
|
1381
|
+
# Upload App Store Promotional image (Optional)
|
1382
|
+
upload_file = UploadFile.from_path(merch_screenshot)
|
1383
|
+
merch_data = upload_purchase_merch_screenshot(app_id, upload_file)
|
1384
|
+
data["versions"][0]["merch"] = merch_data
|
1385
|
+
end
|
1386
|
+
|
1351
1387
|
if review_screenshot
|
1352
1388
|
# Upload Screenshot:
|
1353
1389
|
upload_file = UploadFile.from_path(review_screenshot)
|
data/supply/lib/supply/client.rb
CHANGED
@@ -312,7 +312,7 @@ module Supply
|
|
312
312
|
|
313
313
|
track_version_codes = apk_version_code.kind_of?(Array) ? apk_version_code : [apk_version_code]
|
314
314
|
|
315
|
-
# This change
|
315
|
+
# This change happened on 2018-04-24
|
316
316
|
# rollout cannot be sent on any other track besides "rollout"
|
317
317
|
# https://github.com/fastlane/fastlane/issues/12372
|
318
318
|
rollout = nil unless track == "rollout"
|
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.129.0.beta.
|
4
|
+
version: 2.129.0.beta.20190813200016
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luka Mirosevic
|
@@ -27,7 +27,7 @@ authors:
|
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2019-08-
|
30
|
+
date: 2019-08-13 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -1742,24 +1742,24 @@ metadata:
|
|
1742
1742
|
post_install_message:
|
1743
1743
|
rdoc_options: []
|
1744
1744
|
require_paths:
|
1745
|
-
-
|
1745
|
+
- scan/lib
|
1746
|
+
- deliver/lib
|
1746
1747
|
- produce/lib
|
1748
|
+
- spaceship/lib
|
1749
|
+
- pem/lib
|
1750
|
+
- match/lib
|
1751
|
+
- screengrab/lib
|
1747
1752
|
- frameit/lib
|
1753
|
+
- credentials_manager/lib
|
1754
|
+
- pilot/lib
|
1748
1755
|
- fastlane/lib
|
1749
|
-
-
|
1750
|
-
- fastlane_core/lib
|
1756
|
+
- cert/lib
|
1751
1757
|
- supply/lib
|
1752
|
-
- gym/lib
|
1753
|
-
- screengrab/lib
|
1754
1758
|
- precheck/lib
|
1755
|
-
- pem/lib
|
1756
|
-
- scan/lib
|
1757
|
-
- credentials_manager/lib
|
1758
|
-
- match/lib
|
1759
1759
|
- snapshot/lib
|
1760
|
-
-
|
1761
|
-
-
|
1762
|
-
-
|
1760
|
+
- gym/lib
|
1761
|
+
- sigh/lib
|
1762
|
+
- fastlane_core/lib
|
1763
1763
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1764
1764
|
requirements:
|
1765
1765
|
- - ">="
|