fastlane 2.129.0.beta.20190811200106 → 2.129.0.beta.20190813200016
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/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
|
- - ">="
|