fastlane 2.141.0 → 2.142.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +84 -84
- data/fastlane/lib/fastlane/actions/README.md +2 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
- data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
- data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
- data/fastlane/lib/fastlane/actions/s3.rb +2 -2
- data/fastlane/lib/fastlane/actions/spm.rb +8 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +17 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
- data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +55 -6
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +5 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
- data/fastlane_core/lib/fastlane_core/project.rb +4 -0
- data/gym/lib/gym/.code_signing_mapping.rb.swp +0 -0
- data/gym/lib/gym/runner.rb +2 -2
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/pilot/lib/pilot/build_manager.rb +9 -3
- data/scan/lib/scan/options.rb +5 -0
- data/scan/lib/scan/runner.rb +9 -7
- data/scan/lib/scan/test_command_generator.rb +6 -3
- data/screengrab/lib/screengrab/runner.rb +20 -15
- data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -0
- metadata +19 -16
@@ -0,0 +1,183 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class NotarizeAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
package_path = params[:package]
|
6
|
+
bundle_id = params[:bundle_id]
|
7
|
+
try_early_stapling = params[:try_early_stapling]
|
8
|
+
print_log = params[:print_log]
|
9
|
+
verbose = params[:verbose]
|
10
|
+
|
11
|
+
# Compress and read bundle identifier only for .app bundle.
|
12
|
+
compressed_package_path = nil
|
13
|
+
if File.extname(package_path) == '.app'
|
14
|
+
compressed_package_path = "#{package_path}.zip"
|
15
|
+
Actions.sh(
|
16
|
+
"ditto -c -k --rsrc --keepParent \"#{package_path}\" \"#{compressed_package_path}\"",
|
17
|
+
log: verbose
|
18
|
+
)
|
19
|
+
|
20
|
+
unless bundle_id
|
21
|
+
info_plist_path = File.join(package_path, 'Contents', 'Info.plist')
|
22
|
+
bundle_id = Actions.sh(
|
23
|
+
"/usr/libexec/PlistBuddy -c \"Print :CFBundleIdentifier\" \"#{info_plist_path}\"",
|
24
|
+
log: verbose
|
25
|
+
).strip
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
UI.user_error!('Could not read bundle identifier, provide as a parameter') unless bundle_id
|
30
|
+
|
31
|
+
apple_id_account = CredentialsManager::AccountManager.new(user: params[:username])
|
32
|
+
|
33
|
+
# Add password as a temporary environment variable for altool.
|
34
|
+
# Use app specific password if specified.
|
35
|
+
ENV['FL_NOTARIZE_PASSWORD'] = ENV['FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD'] || apple_id_account.password
|
36
|
+
|
37
|
+
UI.message('Uploading package to notarization service, might take a while')
|
38
|
+
|
39
|
+
notarization_upload_command = "xcrun altool --notarize-app -t osx -f \"#{compressed_package_path || package_path}\" --primary-bundle-id #{bundle_id} -u #{apple_id_account.user} -p @env:FL_NOTARIZE_PASSWORD --output-format xml"
|
40
|
+
notarization_upload_command << " --asc-provider \"#{params[:asc_provider]}\"" if params[:asc_provider]
|
41
|
+
|
42
|
+
notarization_upload_response = Actions.sh(
|
43
|
+
notarization_upload_command,
|
44
|
+
log: verbose
|
45
|
+
)
|
46
|
+
|
47
|
+
FileUtils.rm_rf(compressed_package_path) if compressed_package_path
|
48
|
+
|
49
|
+
notarization_upload_plist = Plist.parse_xml(notarization_upload_response)
|
50
|
+
notarization_request_id = notarization_upload_plist['notarization-upload']['RequestUUID']
|
51
|
+
|
52
|
+
UI.success("Successfully uploaded package to notarization service with request identifier #{notarization_request_id}")
|
53
|
+
|
54
|
+
notarization_info = {}
|
55
|
+
while notarization_info.empty? || (notarization_info['Status'] == 'in progress')
|
56
|
+
if notarization_info.empty?
|
57
|
+
UI.message('Waiting to query request status')
|
58
|
+
elsif try_early_stapling
|
59
|
+
UI.message('Request in progress, trying early staple')
|
60
|
+
|
61
|
+
begin
|
62
|
+
self.staple(package_path, verbose)
|
63
|
+
UI.message('Successfully notarized and early stapled package.')
|
64
|
+
|
65
|
+
return
|
66
|
+
rescue
|
67
|
+
UI.message('Early staple failed, waiting to query again')
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
sleep(30)
|
72
|
+
|
73
|
+
UI.message('Querying request status')
|
74
|
+
|
75
|
+
notarization_info_response = Actions.sh(
|
76
|
+
"xcrun altool --notarization-info #{notarization_request_id} -u #{apple_id_account.user} -p @env:FL_NOTARIZE_PASSWORD --output-format xml",
|
77
|
+
log: verbose
|
78
|
+
)
|
79
|
+
|
80
|
+
notarization_info_plist = Plist.parse_xml(notarization_info_response)
|
81
|
+
notarization_info = notarization_info_plist['notarization-info']
|
82
|
+
end
|
83
|
+
|
84
|
+
log_url = notarization_info['LogFileURL']
|
85
|
+
ENV['FL_NOTARIZE_LOG_FILE_URL'] = log_url
|
86
|
+
log_suffix = ''
|
87
|
+
if log_url && print_log
|
88
|
+
log_response = Net::HTTP.get(URI(log_url))
|
89
|
+
log_json_object = JSON.parse(log_response)
|
90
|
+
log_suffix = ", with log:\n#{JSON.pretty_generate(log_json_object)}"
|
91
|
+
end
|
92
|
+
|
93
|
+
case notarization_info['Status']
|
94
|
+
when 'success'
|
95
|
+
UI.message('Stapling package')
|
96
|
+
|
97
|
+
self.staple(package_path, verbose)
|
98
|
+
|
99
|
+
UI.success("Successfully notarized and stapled package#{log_suffix}")
|
100
|
+
when 'invalid'
|
101
|
+
UI.user_error!("Could not notarize package with message '#{notarization_info['Status Message']}'#{log_suffix}")
|
102
|
+
else
|
103
|
+
UI.crash!("Could not notarize package with status '#{notarization_info['Status']}'#{log_suffix}")
|
104
|
+
end
|
105
|
+
ensure
|
106
|
+
ENV.delete('FL_NOTARIZE_PASSWORD')
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.staple(package_path, verbose)
|
110
|
+
Actions.sh(
|
111
|
+
"xcrun stapler staple \"#{package_path}\"",
|
112
|
+
log: verbose
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.description
|
117
|
+
'Notarizes a macOS app'
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.authors
|
121
|
+
['zeplin']
|
122
|
+
end
|
123
|
+
|
124
|
+
def self.available_options
|
125
|
+
username = CredentialsManager::AppfileConfig.try_fetch_value(:apple_dev_portal_id)
|
126
|
+
username ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
127
|
+
|
128
|
+
asc_provider = CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_id)
|
129
|
+
|
130
|
+
[
|
131
|
+
FastlaneCore::ConfigItem.new(key: :package,
|
132
|
+
env_name: 'FL_NOTARIZE_PACKAGE',
|
133
|
+
description: 'Path to package to notarize, e.g. .app bundle or disk image',
|
134
|
+
is_string: true,
|
135
|
+
verify_block: proc do |value|
|
136
|
+
UI.user_error!("Could not find package at '#{value}'") unless File.exist?(value)
|
137
|
+
end),
|
138
|
+
FastlaneCore::ConfigItem.new(key: :try_early_stapling,
|
139
|
+
env_name: 'FL_NOTARIZE_TRY_EARLY_STAPLING',
|
140
|
+
description: 'Whether to try early stapling while the notarization request is in progress',
|
141
|
+
optional: true,
|
142
|
+
default_value: false,
|
143
|
+
type: Boolean),
|
144
|
+
FastlaneCore::ConfigItem.new(key: :bundle_id,
|
145
|
+
env_name: 'FL_NOTARIZE_BUNDLE_ID',
|
146
|
+
description: 'Bundle identifier to uniquely identify the package',
|
147
|
+
optional: true,
|
148
|
+
is_string: true),
|
149
|
+
FastlaneCore::ConfigItem.new(key: :username,
|
150
|
+
env_name: 'FL_NOTARIZE_USERNAME',
|
151
|
+
description: 'Apple ID username',
|
152
|
+
default_value: username,
|
153
|
+
default_value_dynamic: true),
|
154
|
+
FastlaneCore::ConfigItem.new(key: :asc_provider,
|
155
|
+
env_name: 'FL_NOTARIZE_ASC_PROVIDER',
|
156
|
+
description: 'Provider short name for accounts associated with multiple providers',
|
157
|
+
optional: true,
|
158
|
+
default_value: asc_provider),
|
159
|
+
FastlaneCore::ConfigItem.new(key: :print_log,
|
160
|
+
env_name: 'FL_NOTARIZE_PRINT_LOG',
|
161
|
+
description: 'Whether to print notarization log file, listing issues on failure and warnings on success',
|
162
|
+
optional: true,
|
163
|
+
default_value: false,
|
164
|
+
type: Boolean),
|
165
|
+
FastlaneCore::ConfigItem.new(key: :verbose,
|
166
|
+
env_name: 'FL_NOTARIZE_VERBOSE',
|
167
|
+
description: 'Whether to log requests',
|
168
|
+
optional: true,
|
169
|
+
default_value: false,
|
170
|
+
type: Boolean)
|
171
|
+
]
|
172
|
+
end
|
173
|
+
|
174
|
+
def self.is_supported?(platform)
|
175
|
+
platform == :mac
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.category
|
179
|
+
:code_signing
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
@@ -434,8 +434,8 @@ module Fastlane
|
|
434
434
|
access_key: ENV["S3_ACCESS_KEY"], # Required from user.
|
435
435
|
secret_access_key: ENV["S3_SECRET_ACCESS_KEY"], # Required from user.
|
436
436
|
bucket: ENV["S3_BUCKET"], # Required from user.
|
437
|
-
ipa: "AppName.ipa", # Optional
|
438
|
-
dsym: "AppName.app.dSYM.zip", # Optional
|
437
|
+
ipa: "AppName.ipa", # Optional if you use `ipa` to build
|
438
|
+
dsym: "AppName.app.dSYM.zip", # Optional if you use `ipa` to build
|
439
439
|
path: "v{CFBundleShortVersionString}_b{CFBundleVersion}/", # This is actually the default.
|
440
440
|
upload_metadata: true, # Upload version.json, plist and HTML. Set to false to skip uploading of these files.
|
441
441
|
version_file_name: "app_version.json", # Name of the file to upload to S3. Defaults to "version.json"
|
@@ -15,6 +15,9 @@ module Fastlane
|
|
15
15
|
end
|
16
16
|
if params[:xcpretty_output]
|
17
17
|
cmd += ["2>&1", "|", "xcpretty", "--#{params[:xcpretty_output]}"]
|
18
|
+
if params[:xcpretty_args]
|
19
|
+
cmd << (params[:xcpretty_args]).to_s
|
20
|
+
end
|
18
21
|
cmd = %w(set -o pipefail &&) + cmd
|
19
22
|
end
|
20
23
|
|
@@ -67,6 +70,11 @@ module Fastlane
|
|
67
70
|
verify_block: proc do |value|
|
68
71
|
UI.user_error!("Please pass a valid xcpretty output type: (#{xcpretty_output_types.join('|')})") unless xcpretty_output_types.include?(value)
|
69
72
|
end),
|
73
|
+
FastlaneCore::ConfigItem.new(key: :xcpretty_args,
|
74
|
+
env_name: "FL_SPM_XCPRETTY_ARGS",
|
75
|
+
description: "Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also",
|
76
|
+
type: String,
|
77
|
+
optional: true),
|
70
78
|
FastlaneCore::ConfigItem.new(key: :verbose,
|
71
79
|
short_option: "-v",
|
72
80
|
env_name: "FL_SPM_VERBOSE",
|
@@ -37,6 +37,7 @@ module Fastlane
|
|
37
37
|
Actions.sh(command)
|
38
38
|
rescue
|
39
39
|
handle_swiftlint_error(params[:ignore_exit_status], $?.exitstatus)
|
40
|
+
raise if params[:raise_if_swiftlint_error]
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
@@ -106,10 +107,22 @@ module Fastlane
|
|
106
107
|
is_string: false,
|
107
108
|
type: Boolean,
|
108
109
|
optional: true),
|
110
|
+
FastlaneCore::ConfigItem.new(key: :raise_if_swiftlint_error,
|
111
|
+
description: "Raises an error if swiftlint fails, so you can fail CI/CD jobs if necessary \
|
112
|
+
(true/false)",
|
113
|
+
default_value: false,
|
114
|
+
is_string: false,
|
115
|
+
type: Boolean,
|
116
|
+
optional: true),
|
109
117
|
FastlaneCore::ConfigItem.new(key: :reporter,
|
110
|
-
description:
|
118
|
+
description: "Choose output reporter. Available: xcode, json, csv, checkstyle, junit, html, \
|
119
|
+
emoji, sonarqube, markdown, github-actions-logging",
|
111
120
|
is_string: true,
|
112
|
-
optional: true
|
121
|
+
optional: true,
|
122
|
+
verify_block: proc do |value|
|
123
|
+
available = ['xcode', 'json', 'csv', 'checkstyle', 'junit', 'html', 'emoji', 'sonarqube', 'markdown', 'github-actions-logging']
|
124
|
+
UI.user_error!("Available values are '#{available.join("', '")}'") unless available.include?(value)
|
125
|
+
end),
|
113
126
|
FastlaneCore::ConfigItem.new(key: :quiet,
|
114
127
|
description: "Don't print status logs like 'Linting <file>' & 'Done linting'",
|
115
128
|
default_value: false,
|
@@ -161,7 +174,9 @@ module Fastlane
|
|
161
174
|
"AppDelegate.swift",
|
162
175
|
"path/to/project/Model.swift"
|
163
176
|
],
|
177
|
+
raise_if_swiftlint_error: true, # Allow fastlane to raise an error if swiftlint fails
|
164
178
|
ignore_exit_status: true # Allow fastlane to continue even if SwiftLint returns a non-zero exit status
|
179
|
+
|
165
180
|
)'
|
166
181
|
]
|
167
182
|
end
|
@@ -10,8 +10,8 @@ module Fastlane
|
|
10
10
|
find_gsp_path(params)
|
11
11
|
find_api_token(params)
|
12
12
|
|
13
|
-
if !params[:
|
14
|
-
UI.user_error!('Either
|
13
|
+
if !params[:app_id] && !params[:gsp_path] && !params[:api_token]
|
14
|
+
UI.user_error!('Either Firebase Crashlytics App ID, path to GoogleService-Info.plist or legacy Fabric API key must be given.')
|
15
15
|
end
|
16
16
|
|
17
17
|
dsym_paths = []
|
@@ -87,7 +87,9 @@ module Fastlane
|
|
87
87
|
UI.message("Uploading '#{path}'...")
|
88
88
|
command = []
|
89
89
|
command << File.expand_path(params[:binary_path]).shellescape
|
90
|
-
if params[:
|
90
|
+
if params[:app_id]
|
91
|
+
command << "-ai #{params[:app_id].shellescape}"
|
92
|
+
elsif params[:gsp_path]
|
91
93
|
command << "-gsp #{params[:gsp_path].shellescape}"
|
92
94
|
elsif params[:api_token]
|
93
95
|
command << "-a #{params[:api_token]}"
|
@@ -186,6 +188,14 @@ module Fastlane
|
|
186
188
|
UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
187
189
|
UI.user_error!("No Path to GoogleService-Info.plist for Firebase Crashlytics given, pass using `gsp_path: 'path'`") if value.to_s.length == 0
|
188
190
|
end),
|
191
|
+
FastlaneCore::ConfigItem.new(key: :app_id,
|
192
|
+
env_name: "CRASHLYTICS_APP_ID",
|
193
|
+
sensitive: true,
|
194
|
+
optional: true,
|
195
|
+
description: "Firebase Crashlytics APP ID",
|
196
|
+
verify_block: proc do |value|
|
197
|
+
UI.user_error!("No App ID for Firebase Crashlytics given, pass using `app_id: 'appId'`") if value.to_s.length == 0
|
198
|
+
end),
|
189
199
|
FastlaneCore::ConfigItem.new(key: :binary_path,
|
190
200
|
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_BINARY_PATH",
|
191
201
|
description: "The path to the upload-symbols file of the Fabric app",
|
@@ -373,7 +373,7 @@ module Fastlane
|
|
373
373
|
# (a plugin may contain any number of actions)
|
374
374
|
version_number = Fastlane::ActionCollector.determine_version(gem_name)
|
375
375
|
references = Fastlane.const_get(module_name).all_classes.collect do |path|
|
376
|
-
next unless File.dirname(path).
|
376
|
+
next unless File.dirname(path).include?("/actions") # we only want to match actions
|
377
377
|
|
378
378
|
File.basename(path).gsub("_action", "").gsub(".rb", "").to_sym # the _action is optional
|
379
379
|
end
|
@@ -83,7 +83,7 @@ module Fastlane
|
|
83
83
|
|
84
84
|
case command.method_name
|
85
85
|
when "sh"
|
86
|
-
error_callback = proc { |string_value| closure_argument_value = string_value }
|
86
|
+
error_callback = proc { |string_value| closure_argument_value = string_value } if parameter_map[:error_callback]
|
87
87
|
command_param = parameter_map[:command]
|
88
88
|
log_param = parameter_map[:log]
|
89
89
|
action_return = Fastlane::FastFile.sh(command_param, log: log_param, error_callback: error_callback)
|
@@ -2832,7 +2832,7 @@ func ensureEnvVars(envVars: [String]) {
|
|
2832
2832
|
/**
|
2833
2833
|
Raises an exception if not on a specific git branch
|
2834
2834
|
|
2835
|
-
- parameter branch: The branch that should be checked for. String that can be either the full name of the branch or a regex to match
|
2835
|
+
- parameter branch: The branch that should be checked for. String that can be either the full name of the branch or a regex e.g. `^feature/.*$` to match
|
2836
2836
|
|
2837
2837
|
This action will check if your git repo is checked out to a specific branch.
|
2838
2838
|
You may only want to make releases from a specific branch, so `ensure_git_branch` will stop a lane if it was accidentally executed on an incorrect branch.
|
@@ -2892,14 +2892,19 @@ func ensureNoDebugCode(text: String,
|
|
2892
2892
|
/**
|
2893
2893
|
Ensure the right version of Xcode is used
|
2894
2894
|
|
2895
|
-
-
|
2895
|
+
- parameters:
|
2896
|
+
- version: Xcode version to verify that is selected
|
2897
|
+
- strict: Should the version be verified strictly (all 3 version numbers), or matching only the given version numbers (i.e. `11.3` == `11.3.x`)
|
2896
2898
|
|
2897
2899
|
If building your app requires a specific version of Xcode, you can invoke this command before using gym.
|
2898
2900
|
For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail.
|
2899
2901
|
You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file.
|
2902
|
+
Using the `strict` parameter, you can either verify the full set of version numbers strictly (i.e. `11.3.1`) or only a subset of them (i.e. `11.3` or `11`).
|
2900
2903
|
*/
|
2901
|
-
func ensureXcodeVersion(version: String? = nil
|
2902
|
-
|
2904
|
+
func ensureXcodeVersion(version: String? = nil,
|
2905
|
+
strict: Bool = true) {
|
2906
|
+
let command = RubyCommand(commandID: "", methodName: "ensure_xcode_version", className: nil, args: [RubyCommand.Argument(name: "version", value: version),
|
2907
|
+
RubyCommand.Argument(name: "strict", value: strict)])
|
2903
2908
|
_ = runner.executeCommand(command)
|
2904
2909
|
}
|
2905
2910
|
|
@@ -4612,6 +4617,35 @@ func nexusUpload(file: String,
|
|
4612
4617
|
_ = runner.executeCommand(command)
|
4613
4618
|
}
|
4614
4619
|
|
4620
|
+
/**
|
4621
|
+
Notarizes a macOS app
|
4622
|
+
|
4623
|
+
- parameters:
|
4624
|
+
- package: Path to package to notarize, e.g. .app bundle or disk image
|
4625
|
+
- tryEarlyStapling: Whether to try early stapling while the notarization request is in progress
|
4626
|
+
- bundleId: Bundle identifier to uniquely identify the package
|
4627
|
+
- username: Apple ID username
|
4628
|
+
- ascProvider: Provider short name for accounts associated with multiple providers
|
4629
|
+
- printLog: Whether to print notarization log file, listing issues on failure and warnings on success
|
4630
|
+
- verbose: Whether to log requests
|
4631
|
+
*/
|
4632
|
+
func notarize(package: String,
|
4633
|
+
tryEarlyStapling: Bool = false,
|
4634
|
+
bundleId: String? = nil,
|
4635
|
+
username: String,
|
4636
|
+
ascProvider: String? = nil,
|
4637
|
+
printLog: Bool = false,
|
4638
|
+
verbose: Bool = false) {
|
4639
|
+
let command = RubyCommand(commandID: "", methodName: "notarize", className: nil, args: [RubyCommand.Argument(name: "package", value: package),
|
4640
|
+
RubyCommand.Argument(name: "try_early_stapling", value: tryEarlyStapling),
|
4641
|
+
RubyCommand.Argument(name: "bundle_id", value: bundleId),
|
4642
|
+
RubyCommand.Argument(name: "username", value: username),
|
4643
|
+
RubyCommand.Argument(name: "asc_provider", value: ascProvider),
|
4644
|
+
RubyCommand.Argument(name: "print_log", value: printLog),
|
4645
|
+
RubyCommand.Argument(name: "verbose", value: verbose)])
|
4646
|
+
_ = runner.executeCommand(command)
|
4647
|
+
}
|
4648
|
+
|
4615
4649
|
/**
|
4616
4650
|
Display a macOS notification with custom message and title
|
4617
4651
|
|
@@ -5584,6 +5618,7 @@ func rubyVersion() {
|
|
5584
5618
|
- shouldZipBuildProducts: Should zip the derived data build products and place in output path?
|
5585
5619
|
- resultBundle: Should an Xcode result bundle be generated in the output directory
|
5586
5620
|
- useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
|
5621
|
+
- concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
|
5587
5622
|
- maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations
|
5588
5623
|
- disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing
|
5589
5624
|
- skipBuild: Should debug build be skipped before test build?
|
@@ -5645,6 +5680,7 @@ func runTests(workspace: String? = nil,
|
|
5645
5680
|
shouldZipBuildProducts: Bool = false,
|
5646
5681
|
resultBundle: Bool = false,
|
5647
5682
|
useClangReportName: Bool = false,
|
5683
|
+
concurrentWorkers: Int? = nil,
|
5648
5684
|
maxConcurrentSimulators: Int? = nil,
|
5649
5685
|
disableConcurrentTesting: Bool = false,
|
5650
5686
|
skipBuild: Bool = false,
|
@@ -5703,6 +5739,7 @@ func runTests(workspace: String? = nil,
|
|
5703
5739
|
RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
|
5704
5740
|
RubyCommand.Argument(name: "result_bundle", value: resultBundle),
|
5705
5741
|
RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
|
5742
|
+
RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
|
5706
5743
|
RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators),
|
5707
5744
|
RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting),
|
5708
5745
|
RubyCommand.Argument(name: "skip_build", value: skipBuild),
|
@@ -5842,6 +5879,7 @@ func say(text: Any,
|
|
5842
5879
|
- shouldZipBuildProducts: Should zip the derived data build products and place in output path?
|
5843
5880
|
- resultBundle: Should an Xcode result bundle be generated in the output directory
|
5844
5881
|
- useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
|
5882
|
+
- concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
|
5845
5883
|
- maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations
|
5846
5884
|
- disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing
|
5847
5885
|
- skipBuild: Should debug build be skipped before test build?
|
@@ -5903,6 +5941,7 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
5903
5941
|
shouldZipBuildProducts: Bool = scanfile.shouldZipBuildProducts,
|
5904
5942
|
resultBundle: Bool = scanfile.resultBundle,
|
5905
5943
|
useClangReportName: Bool = scanfile.useClangReportName,
|
5944
|
+
concurrentWorkers: Int? = scanfile.concurrentWorkers,
|
5906
5945
|
maxConcurrentSimulators: Int? = scanfile.maxConcurrentSimulators,
|
5907
5946
|
disableConcurrentTesting: Bool = scanfile.disableConcurrentTesting,
|
5908
5947
|
skipBuild: Bool = scanfile.skipBuild,
|
@@ -5961,6 +6000,7 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
5961
6000
|
RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
|
5962
6001
|
RubyCommand.Argument(name: "result_bundle", value: resultBundle),
|
5963
6002
|
RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
|
6003
|
+
RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
|
5964
6004
|
RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators),
|
5965
6005
|
RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting),
|
5966
6006
|
RubyCommand.Argument(name: "skip_build", value: skipBuild),
|
@@ -6863,6 +6903,7 @@ func splunkmint(dsym: String? = nil,
|
|
6863
6903
|
- xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
|
6864
6904
|
- configuration: Build with configuration (debug|release) [default: debug]
|
6865
6905
|
- xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple'
|
6906
|
+
- xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also
|
6866
6907
|
- verbose: Increase verbosity of informational output
|
6867
6908
|
*/
|
6868
6909
|
func spm(command: String = "build",
|
@@ -6871,6 +6912,7 @@ func spm(command: String = "build",
|
|
6871
6912
|
xcconfig: String? = nil,
|
6872
6913
|
configuration: String? = nil,
|
6873
6914
|
xcprettyOutput: String? = nil,
|
6915
|
+
xcprettyArgs: String? = nil,
|
6874
6916
|
verbose: Bool = false) {
|
6875
6917
|
let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
|
6876
6918
|
RubyCommand.Argument(name: "build_path", value: buildPath),
|
@@ -6878,6 +6920,7 @@ func spm(command: String = "build",
|
|
6878
6920
|
RubyCommand.Argument(name: "xcconfig", value: xcconfig),
|
6879
6921
|
RubyCommand.Argument(name: "configuration", value: configuration),
|
6880
6922
|
RubyCommand.Argument(name: "xcpretty_output", value: xcprettyOutput),
|
6923
|
+
RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
|
6881
6924
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
6882
6925
|
_ = runner.executeCommand(command)
|
6883
6926
|
}
|
@@ -7033,7 +7076,8 @@ func supply(packageName: String,
|
|
7033
7076
|
- strict: Fail on warnings? (true/false)
|
7034
7077
|
- files: List of files to process
|
7035
7078
|
- ignoreExitStatus: Ignore the exit status of the SwiftLint command, so that serious violations don't fail the build (true/false)
|
7036
|
-
-
|
7079
|
+
- raiseIfSwiftlintError: Raises an error if swiftlint fails, so you can fail CI/CD jobs if necessary (true/false)
|
7080
|
+
- reporter: Choose output reporter. Available: xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown, github-actions-logging
|
7037
7081
|
- quiet: Don't print status logs like 'Linting <file>' & 'Done linting'
|
7038
7082
|
- executable: Path to the `swiftlint` executable on your machine
|
7039
7083
|
- format: Format code when mode is :autocorrect
|
@@ -7046,6 +7090,7 @@ func swiftlint(mode: Any = "lint",
|
|
7046
7090
|
strict: Bool = false,
|
7047
7091
|
files: Any? = nil,
|
7048
7092
|
ignoreExitStatus: Bool = false,
|
7093
|
+
raiseIfSwiftlintError: Bool = false,
|
7049
7094
|
reporter: String? = nil,
|
7050
7095
|
quiet: Bool = false,
|
7051
7096
|
executable: String? = nil,
|
@@ -7058,6 +7103,7 @@ func swiftlint(mode: Any = "lint",
|
|
7058
7103
|
RubyCommand.Argument(name: "strict", value: strict),
|
7059
7104
|
RubyCommand.Argument(name: "files", value: files),
|
7060
7105
|
RubyCommand.Argument(name: "ignore_exit_status", value: ignoreExitStatus),
|
7106
|
+
RubyCommand.Argument(name: "raise_if_swiftlint_error", value: raiseIfSwiftlintError),
|
7061
7107
|
RubyCommand.Argument(name: "reporter", value: reporter),
|
7062
7108
|
RubyCommand.Argument(name: "quiet", value: quiet),
|
7063
7109
|
RubyCommand.Argument(name: "executable", value: executable),
|
@@ -7690,6 +7736,7 @@ func updateUrlSchemes(path: String,
|
|
7690
7736
|
- dsymPaths: Paths to the DSYM files or zips to upload
|
7691
7737
|
- apiToken: Crashlytics API Key
|
7692
7738
|
- gspPath: Path to GoogleService-Info.plist
|
7739
|
+
- appId: Firebase Crashlytics APP ID
|
7693
7740
|
- binaryPath: The path to the upload-symbols file of the Fabric app
|
7694
7741
|
- platform: The platform of the app (ios, appletvos, mac)
|
7695
7742
|
- dsymWorkerThreads: The number of threads to use for simultaneous dSYM upload
|
@@ -7700,6 +7747,7 @@ func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji
|
|
7700
7747
|
dsymPaths: [String]? = nil,
|
7701
7748
|
apiToken: String? = nil,
|
7702
7749
|
gspPath: String? = nil,
|
7750
|
+
appId: String? = nil,
|
7703
7751
|
binaryPath: String? = nil,
|
7704
7752
|
platform: String = "ios",
|
7705
7753
|
dsymWorkerThreads: Int = 1) {
|
@@ -7707,6 +7755,7 @@ func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji
|
|
7707
7755
|
RubyCommand.Argument(name: "dsym_paths", value: dsymPaths),
|
7708
7756
|
RubyCommand.Argument(name: "api_token", value: apiToken),
|
7709
7757
|
RubyCommand.Argument(name: "gsp_path", value: gspPath),
|
7758
|
+
RubyCommand.Argument(name: "app_id", value: appId),
|
7710
7759
|
RubyCommand.Argument(name: "binary_path", value: binaryPath),
|
7711
7760
|
RubyCommand.Argument(name: "platform", value: platform),
|
7712
7761
|
RubyCommand.Argument(name: "dsym_worker_threads", value: dsymWorkerThreads)])
|
@@ -8632,4 +8681,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
8632
8681
|
|
8633
8682
|
// Please don't remove the lines below
|
8634
8683
|
// They are used to detect outdated files
|
8635
|
-
// FastlaneRunnerAPIVersion [0.9.
|
8684
|
+
// FastlaneRunnerAPIVersion [0.9.70]
|