fastlane 2.162.0 → 2.167.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +78 -78
- data/cert/lib/cert/runner.rb +2 -2
- data/deliver/lib/deliver/app_screenshot.rb +6 -2
- data/deliver/lib/deliver/module.rb +2 -0
- data/deliver/lib/deliver/options.rb +3 -3
- data/deliver/lib/deliver/queue_worker.rb +14 -29
- data/deliver/lib/deliver/upload_metadata.rb +19 -5
- data/deliver/lib/deliver/upload_screenshots.rb +3 -5
- data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/actions_helper.rb +1 -1
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +9 -2
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +39 -3
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +9 -0
- data/fastlane/lib/fastlane/actions/appledoc.rb +1 -1
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +1 -0
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +5 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +9 -0
- data/fastlane/lib/fastlane/actions/get_certificates.rb +1 -0
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -0
- data/fastlane/lib/fastlane/actions/import_from_git.rb +9 -1
- data/fastlane/lib/fastlane/actions/is_ci.rb +1 -1
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +15 -0
- data/fastlane/lib/fastlane/actions/register_device.rb +46 -5
- data/fastlane/lib/fastlane/actions/register_devices.rb +50 -16
- data/fastlane/lib/fastlane/actions/set_changelog.rb +31 -3
- data/fastlane/lib/fastlane/actions/spm.rb +6 -0
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -0
- data/fastlane/lib/fastlane/actions/update_fastlane.rb +29 -8
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +3 -2
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
- data/fastlane/lib/fastlane/fast_file.rb +74 -23
- data/fastlane/lib/fastlane/features.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +4 -4
- data/fastlane/swift/Fastfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +73 -22
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +15 -19
- data/fastlane/swift/MainProcess.swift +3 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +6 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Runner.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/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/SocketClient.swift +1 -1
- data/fastlane/swift/main.swift +1 -1
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +12 -7
- data/fastlane_core/lib/fastlane_core/device_manager.rb +8 -4
- data/fastlane_core/lib/fastlane_core/helper.rb +10 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -3
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +1 -1
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +3 -1
- data/fastlane_core/lib/fastlane_core/ui/disable_colors.rb +8 -0
- data/gym/lib/gym/code_signing_mapping.rb +1 -1
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
- data/match/lib/match/importer.rb +33 -21
- data/match/lib/match/nuke.rb +9 -5
- data/match/lib/match/options.rb +7 -1
- data/pilot/lib/pilot/build_manager.rb +9 -3
- data/scan/lib/scan/detect_values.rb +8 -9
- data/scan/lib/scan/module.rb +4 -0
- data/scan/lib/scan/options.rb +9 -0
- data/scan/lib/scan/runner.rb +2 -1
- data/sigh/lib/assets/resign.sh +1 -1
- data/sigh/lib/sigh/download_all.rb +16 -4
- data/sigh/lib/sigh/runner.rb +4 -4
- data/snapshot/lib/assets/SnapshotHelper.swift +4 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
- data/snapshot/lib/snapshot/test_command_generator.rb +1 -1
- data/snapshot/lib/snapshot/test_command_generator_base.rb +3 -1
- data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +7 -3
- data/spaceship/lib/spaceship/connect_api.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +7 -4
- data/spaceship/lib/spaceship/connect_api/models/app.rb +51 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/models/custom_app_organization.rb +43 -0
- data/spaceship/lib/spaceship/connect_api/models/custom_app_user.rb +41 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +17 -0
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +7 -4
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +71 -0
- data/supply/lib/supply.rb +1 -1
- data/supply/lib/supply/uploader.rb +1 -1
- metadata +21 -18
@@ -6,9 +6,14 @@ module Fastlane
|
|
6
6
|
|
7
7
|
# Team selection passed though FASTLANE_ITC_TEAM_ID and FASTLANE_ITC_TEAM_NAME environment variables
|
8
8
|
# Prompts select team if multiple teams and none specified
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
if (token = self.api_token(params))
|
10
|
+
UI.message("Using App Store Connect API token...")
|
11
|
+
Spaceship::ConnectAPI.token = token
|
12
|
+
else
|
13
|
+
UI.message("Login to App Store Connect (#{params[:username]})")
|
14
|
+
Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true, tunes_team_id: params[:team_id], team_name: params[:team_name])
|
15
|
+
UI.message("Login successful")
|
16
|
+
end
|
12
17
|
|
13
18
|
app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
|
14
19
|
UI.user_error!("Couldn't find app with identifier #{params[:app_identifier]}") if app.nil?
|
@@ -73,6 +78,13 @@ module Fastlane
|
|
73
78
|
UI.success("👼 Successfully pushed the new changelog to for #{edit_version.version_string}")
|
74
79
|
end
|
75
80
|
|
81
|
+
def self.api_token(params)
|
82
|
+
params[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
|
83
|
+
api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
|
84
|
+
api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
|
85
|
+
return api_token
|
86
|
+
end
|
87
|
+
|
76
88
|
def self.default_changelog_path
|
77
89
|
File.join(FastlaneCore::FastlaneFolder.path.to_s, 'changelog.txt')
|
78
90
|
end
|
@@ -98,6 +110,21 @@ module Fastlane
|
|
98
110
|
user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
99
111
|
|
100
112
|
[
|
113
|
+
FastlaneCore::ConfigItem.new(key: :api_key_path,
|
114
|
+
env_name: "FL_SET_CHANGELOG_API_KEY_PATH",
|
115
|
+
description: "Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)",
|
116
|
+
optional: true,
|
117
|
+
conflicting_options: [:api_key],
|
118
|
+
verify_block: proc do |value|
|
119
|
+
UI.user_error!("Couldn't find API key JSON file at path '#{value}'") unless File.exist?(value)
|
120
|
+
end),
|
121
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
122
|
+
env_name: "FL_SET_CHANGELOG_API_KEY",
|
123
|
+
description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
|
124
|
+
type: Hash,
|
125
|
+
optional: true,
|
126
|
+
sensitive: true,
|
127
|
+
conflicting_options: [:api_key_path]),
|
101
128
|
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
102
129
|
short_option: "-a",
|
103
130
|
env_name: "FASTLANE_APP_IDENTIFIER",
|
@@ -109,6 +136,7 @@ module Fastlane
|
|
109
136
|
short_option: "-u",
|
110
137
|
env_name: "FASTLANE_USERNAME",
|
111
138
|
description: "Your Apple ID Username",
|
139
|
+
optional: true,
|
112
140
|
default_value: user,
|
113
141
|
default_value_dynamic: true),
|
114
142
|
FastlaneCore::ConfigItem.new(key: :version,
|
@@ -11,6 +11,7 @@ module Fastlane
|
|
11
11
|
cmd << "--disable-sandbox" if params[:disable_sandbox]
|
12
12
|
cmd << "--verbose" if params[:verbose]
|
13
13
|
cmd << params[:command] if package_commands.include?(params[:command])
|
14
|
+
cmd << "--enable-code-coverage" if params[:enable_code_coverage] && params[:command] == 'generate-xcodeproj'
|
14
15
|
if params[:xcconfig]
|
15
16
|
cmd << "--xcconfig-overrides #{params[:xcconfig]}"
|
16
17
|
end
|
@@ -44,6 +45,11 @@ module Fastlane
|
|
44
45
|
verify_block: proc do |value|
|
45
46
|
UI.user_error!("Please pass a valid command. Use one of the following: #{available_commands.join(', ')}") unless available_commands.include?(value)
|
46
47
|
end),
|
48
|
+
FastlaneCore::ConfigItem.new(key: :enable_code_coverage,
|
49
|
+
env_name: "FL_SPM_ENABLE_CODE_COVERAGE",
|
50
|
+
description: "Enables code coverage for the generated Xcode project when using the generate-xcodeproj command",
|
51
|
+
is_string: false,
|
52
|
+
optional: true),
|
47
53
|
FastlaneCore::ConfigItem.new(key: :build_path,
|
48
54
|
env_name: "FL_SPM_BUILD_PATH",
|
49
55
|
description: "Specify build/cache directory [default: ./.build]",
|
@@ -45,25 +45,36 @@ module Fastlane
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# suppress updater output - very noisy
|
48
|
-
Gem::DefaultUserInteraction.ui = Gem::SilentUI.new
|
48
|
+
Gem::DefaultUserInteraction.ui = Gem::SilentUI.new unless FastlaneCore::Globals.verbose?
|
49
49
|
|
50
50
|
update_needed.each do |tool_info|
|
51
|
-
tool = tool_info
|
51
|
+
tool = self.get_gem_name(tool_info)
|
52
52
|
local_version = Gem::Version.new(highest_versions[tool].version)
|
53
53
|
latest_official_version = FastlaneCore::UpdateChecker.fetch_latest(tool)
|
54
54
|
|
55
55
|
UI.message("Updating #{tool} from #{local_version.to_s.yellow} to #{latest_official_version.to_s.yellow}... 🚀")
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
if Helper.homebrew?
|
58
|
+
Helper.backticks('brew upgrade fastlane')
|
59
|
+
else
|
60
|
+
# Approximate_recommendation will create a string like "~> 0.10" from a version 0.10.0, e.g. one that is valid for versions >= 0.10 and <1.0
|
61
|
+
requirement_version = local_version.approximate_recommendation
|
62
|
+
updater.update_gem(tool, Gem::Requirement.new(requirement_version))
|
63
|
+
end
|
60
64
|
|
61
65
|
UI.success("Finished updating #{tool}")
|
62
66
|
end
|
63
67
|
|
64
|
-
|
65
|
-
|
66
|
-
|
68
|
+
unless Helper.homebrew?
|
69
|
+
UI.message("Cleaning up old versions...")
|
70
|
+
cleaner.options[:args] = tools_to_update
|
71
|
+
cleaner.execute
|
72
|
+
end
|
73
|
+
|
74
|
+
if FastlaneCore::FastlaneFolder.swift?
|
75
|
+
upgrader = SwiftRunnerUpgrader.new
|
76
|
+
upgrader.upgrade_if_needed!
|
77
|
+
end
|
67
78
|
|
68
79
|
UI.message("fastlane.tools successfully updated! I will now restart myself... 😴")
|
69
80
|
|
@@ -71,6 +82,16 @@ module Fastlane
|
|
71
82
|
exec("FL_NO_UPDATE=true #{$PROGRAM_NAME} #{ARGV.join(' ')}")
|
72
83
|
end
|
73
84
|
|
85
|
+
def self.get_gem_name(tool_info)
|
86
|
+
if tool_info.kind_of?(Array)
|
87
|
+
return tool_info[0]
|
88
|
+
elsif tool_info.respond_to?(:name) # Gem::NameTuple in RubyGems >= 3.1.0
|
89
|
+
return tool_info.name
|
90
|
+
else
|
91
|
+
UI.crash!("Unknown gem update information returned from RubyGems. Please file a new issue for this... 🤷")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
74
95
|
def self.description
|
75
96
|
"Makes sure fastlane-tools are up-to-date when running fastlane"
|
76
97
|
end
|
@@ -12,6 +12,7 @@ module Fastlane
|
|
12
12
|
config[:screenshots_path] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
|
13
13
|
config[:ipa] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
14
14
|
config[:pkg] = Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] if Actions.lane_context[SharedValues::PKG_OUTPUT_PATH]
|
15
|
+
config[:api_key] ||= Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
|
15
16
|
|
16
17
|
return config if Helper.test?
|
17
18
|
Deliver::Runner.new(config).run
|
@@ -26,7 +27,7 @@ module Fastlane
|
|
26
27
|
[
|
27
28
|
"Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.",
|
28
29
|
"",
|
29
|
-
"If you don't want
|
30
|
+
"If you don't want to verify an HTML preview for App Store builds, use the `:force` option.",
|
30
31
|
"This is useful when running _fastlane_ on your Continuous Integration server:",
|
31
32
|
"`_upload_to_app_store_(force: true)`",
|
32
33
|
"If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info."
|
@@ -50,7 +51,7 @@ module Fastlane
|
|
50
51
|
def self.example_code
|
51
52
|
[
|
52
53
|
'upload_to_app_store(
|
53
|
-
force: true, # Set to true to skip
|
54
|
+
force: true, # Set to true to skip verification of HTML preview
|
54
55
|
itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option
|
55
56
|
)',
|
56
57
|
'deliver # alias for "upload_to_app_store"',
|
@@ -123,9 +123,9 @@ module Fastlane
|
|
123
123
|
end
|
124
124
|
|
125
125
|
# Since loading dotenv should respect additional environments passed using
|
126
|
-
# --env, we must
|
126
|
+
# --env, we must extract the arguments out of ARGV and process them before
|
127
127
|
# calling into commander. This is required since the ENV must be configured
|
128
|
-
# before running any other commands in order to
|
128
|
+
# before running any other commands in order to correctly respect variables
|
129
129
|
# like FASTLANE_HIDE_CHANGELOG and FASTLANE_DISABLE_COLORS
|
130
130
|
def load_dot_env
|
131
131
|
env_cl_param = lambda do
|
@@ -259,11 +259,20 @@ module Fastlane
|
|
259
259
|
return return_value
|
260
260
|
end
|
261
261
|
|
262
|
+
def find_tag(folder: nil, version: nil, remote: false)
|
263
|
+
req = Gem::Requirement.new(version)
|
264
|
+
all_tags = get_tags(folder: folder, remote: remote)
|
265
|
+
|
266
|
+
return all_tags.select { |t| req =~ FastlaneCore::TagVersion.new(t) }.last
|
267
|
+
end
|
268
|
+
|
262
269
|
# @param url [String] The git URL to clone the repository from
|
263
270
|
# @param branch [String] The branch to checkout in the repository
|
264
271
|
# @param path [String] The path to the Fastfile
|
265
272
|
# @param version [String, Array] Version requirement for repo tags
|
266
|
-
|
273
|
+
# @param dependencies [Array] An optional array of additional Fastfiles in the repository
|
274
|
+
# @param cache_path [String] An optional path to a directory where the repository should be cloned into
|
275
|
+
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [], cache_path: nil) # rubocop:disable Metrics/PerceivedComplexity
|
267
276
|
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
268
277
|
|
269
278
|
Actions.execute_action('import_from_git') do
|
@@ -271,41 +280,75 @@ module Fastlane
|
|
271
280
|
|
272
281
|
action_launched('import_from_git')
|
273
282
|
|
283
|
+
is_eligible_for_caching = !version.nil? && !cache_path.nil?
|
284
|
+
|
285
|
+
UI.message("Eligible for caching") if is_eligible_for_caching
|
286
|
+
|
274
287
|
# Checkout the repo
|
275
288
|
repo_name = url.split("/").last
|
276
289
|
checkout_param = branch
|
277
290
|
|
278
|
-
|
279
|
-
clone_folder = File.join(
|
291
|
+
import_block = proc do |target_path|
|
292
|
+
clone_folder = File.join(target_path, repo_name)
|
280
293
|
|
281
294
|
branch_option = "--branch #{branch}" if branch != 'HEAD'
|
282
295
|
|
283
296
|
checkout_dependencies = dependencies.map(&:shellescape).join(" ")
|
284
297
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
298
|
+
# If the current call is eligible for caching, we check out all the
|
299
|
+
# files and directories. If not, we only check out the specified
|
300
|
+
# `path` and `dependencies`.
|
301
|
+
checkout_path = is_eligible_for_caching ? "" : "#{path.shellescape} #{checkout_dependencies}"
|
302
|
+
|
303
|
+
if Dir[clone_folder].empty?
|
304
|
+
UI.message("Cloning remote git repo...")
|
305
|
+
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
306
|
+
# When using cached clones, we need the entire repository history
|
307
|
+
# so we can switch between tags or branches instantly, or else,
|
308
|
+
# it would defeat the caching's purpose.
|
309
|
+
depth = is_eligible_for_caching ? "" : "--depth 1"
|
310
|
+
|
311
|
+
Actions.sh("git clone #{url.shellescape} #{clone_folder.shellescape} #{depth} --no-checkout #{branch_option}")
|
312
|
+
end
|
290
313
|
end
|
291
314
|
|
292
315
|
unless version.nil?
|
293
|
-
|
294
|
-
|
295
|
-
|
316
|
+
if is_eligible_for_caching
|
317
|
+
checkout_param = find_tag(folder: clone_folder, version: version, remote: false)
|
318
|
+
|
319
|
+
if checkout_param.nil?
|
320
|
+
# Update the repo and try again before failing
|
321
|
+
UI.message("Updating git repo...")
|
322
|
+
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
323
|
+
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{branch} && git reset --hard && git pull --all")
|
324
|
+
end
|
325
|
+
|
326
|
+
checkout_param = find_tag(folder: clone_folder, version: version, remote: false)
|
327
|
+
else
|
328
|
+
UI.message("Found tag #{checkout_param}. No git repo update needed.")
|
329
|
+
end
|
330
|
+
else
|
331
|
+
checkout_param = find_tag(folder: clone_folder, version: version, remote: true)
|
332
|
+
end
|
333
|
+
|
296
334
|
UI.user_error!("No tag found matching #{version.inspect}") if checkout_param.nil?
|
297
335
|
end
|
298
336
|
|
299
337
|
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
|
300
338
|
|
301
|
-
#
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
339
|
+
# Knowing that we check out all the files and directories when the
|
340
|
+
# current call is eligible for caching, we don't need to also
|
341
|
+
# explicitly check out the "actions" directory.
|
342
|
+
unless is_eligible_for_caching
|
343
|
+
# We also want to check out all the local actions of this fastlane setup
|
344
|
+
containing = path.split(File::SEPARATOR)[0..-2]
|
345
|
+
containing = "." if containing.count == 0
|
346
|
+
actions_folder = File.join(containing, "actions")
|
347
|
+
begin
|
348
|
+
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{actions_folder.shellescape}")
|
349
|
+
rescue
|
350
|
+
# We don't care about a failure here, as local actions are optional
|
351
|
+
end
|
309
352
|
end
|
310
353
|
|
311
354
|
return_value = nil
|
@@ -320,6 +363,12 @@ module Fastlane
|
|
320
363
|
|
321
364
|
return return_value
|
322
365
|
end
|
366
|
+
|
367
|
+
if is_eligible_for_caching
|
368
|
+
import_block.call(File.expand_path(cache_path))
|
369
|
+
else
|
370
|
+
Dir.mktmpdir("fl_clone", &import_block)
|
371
|
+
end
|
323
372
|
end
|
324
373
|
end
|
325
374
|
|
@@ -327,10 +376,12 @@ module Fastlane
|
|
327
376
|
# @!group Versioning helpers
|
328
377
|
#####################################################
|
329
378
|
|
330
|
-
def
|
331
|
-
|
332
|
-
|
333
|
-
|
379
|
+
def get_tags(folder: nil, remote: false)
|
380
|
+
if remote
|
381
|
+
UI.message("Fetching remote git tags...")
|
382
|
+
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
383
|
+
Actions.sh("cd #{folder.shellescape} && git fetch --all --tags -q")
|
384
|
+
end
|
334
385
|
end
|
335
386
|
|
336
387
|
# Fetch all possible tags
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Use this file as the place to register Feature switches for the
|
1
|
+
# Use this file as the place to register Feature switches for the fastlane_core project
|
2
2
|
|
3
3
|
# FastlaneCore::Feature.register(env_var: 'YOUR_FEATURE_SWITCH_ENV_VAR',
|
4
4
|
# description: 'Describe what this feature switch controls')
|
@@ -41,6 +41,7 @@ Require/MissingRequireStatement:
|
|
41
41
|
- "**/spec/**/*.rb"
|
42
42
|
- "**/spec_helper.rb"
|
43
43
|
- spaceship/lib/spaceship/babosa_fix.rb
|
44
|
+
- fastlane_core/lib/fastlane_core/ui/disable_colors.rb
|
44
45
|
- "**/Fastfile"
|
45
46
|
- "**/*.gemspec"
|
46
47
|
- rakelib/**/*
|
@@ -179,6 +180,7 @@ Style/MethodCallWithArgsParentheses:
|
|
179
180
|
- private_lane
|
180
181
|
- platform
|
181
182
|
- to
|
183
|
+
- not_to
|
182
184
|
- describe
|
183
185
|
- it
|
184
186
|
- be
|
@@ -136,7 +136,7 @@ module Fastlane
|
|
136
136
|
type = "[String]"
|
137
137
|
elsif default_value.kind_of?(Hash)
|
138
138
|
type = "[String : Any]"
|
139
|
-
#
|
139
|
+
# Although we can have a default value of Integer type, if param_type_override overridden that value, respect it.
|
140
140
|
elsif default_value.kind_of?(Integer)
|
141
141
|
if type == "Double" || type == "Float"
|
142
142
|
begin
|
@@ -53,7 +53,7 @@ public protocol DeliverfileProtocol: class {
|
|
53
53
|
/// Don’t create or update the app version that is being prepared for submission
|
54
54
|
var skipAppVersionUpdate: Bool { get }
|
55
55
|
|
56
|
-
/// Skip
|
56
|
+
/// Skip verification of HTML preview file
|
57
57
|
var force: Bool { get }
|
58
58
|
|
59
59
|
/// Clear all previously uploaded screenshots before uploading the new ones
|
@@ -66,7 +66,7 @@ public protocol DeliverfileProtocol: class {
|
|
66
66
|
var rejectIfPossible: Bool { get }
|
67
67
|
|
68
68
|
/// Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)
|
69
|
-
var automaticRelease: Bool { get }
|
69
|
+
var automaticRelease: Bool? { get }
|
70
70
|
|
71
71
|
/// Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)
|
72
72
|
var autoReleaseDate: Int? { get }
|
@@ -211,7 +211,7 @@ public extension DeliverfileProtocol {
|
|
211
211
|
var overwriteScreenshots: Bool { return false }
|
212
212
|
var submitForReview: Bool { return false }
|
213
213
|
var rejectIfPossible: Bool { return false }
|
214
|
-
var automaticRelease: Bool { return
|
214
|
+
var automaticRelease: Bool? { return nil }
|
215
215
|
var autoReleaseDate: Int? { return nil }
|
216
216
|
var phasedRelease: Bool { return false }
|
217
217
|
var resetRatings: Bool { return false }
|
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
|
|
256
256
|
|
257
257
|
// Please don't remove the lines below
|
258
258
|
// They are used to detect outdated files
|
259
|
-
// FastlaneRunnerAPIVersion [0.9.
|
259
|
+
// FastlaneRunnerAPIVersion [0.9.50]
|
@@ -76,7 +76,7 @@ public func addGitTag(tag: String? = nil,
|
|
76
76
|
grouping: String = "builds",
|
77
77
|
prefix: String = "",
|
78
78
|
postfix: String = "",
|
79
|
-
buildNumber: Any,
|
79
|
+
buildNumber: Any? = nil,
|
80
80
|
message: String? = nil,
|
81
81
|
commit: String? = nil,
|
82
82
|
force: Bool = false,
|
@@ -98,6 +98,8 @@ public func addGitTag(tag: String? = nil,
|
|
98
98
|
Returns the current build_number of either live or edit version
|
99
99
|
|
100
100
|
- parameters:
|
101
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
102
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
101
103
|
- initialBuildNumber: sets the build number to given value if no build is in current train
|
102
104
|
- appIdentifier: The bundle identifier of your app
|
103
105
|
- username: Your Apple ID Username
|
@@ -110,7 +112,9 @@ public func addGitTag(tag: String? = nil,
|
|
110
112
|
Returns the current build number of either the live or testflight version - it is useful for getting the build_number of the current or ready-for-sale app version, and it also works on non-live testflight version.
|
111
113
|
If you need to handle more build-trains please see `latest_testflight_build_number`.
|
112
114
|
*/
|
113
|
-
public func appStoreBuildNumber(
|
115
|
+
public func appStoreBuildNumber(apiKeyPath: String? = nil,
|
116
|
+
apiKey: [String: Any]? = nil,
|
117
|
+
initialBuildNumber: Any,
|
114
118
|
appIdentifier: String,
|
115
119
|
username: String,
|
116
120
|
teamId: Any? = nil,
|
@@ -119,7 +123,9 @@ public func appStoreBuildNumber(initialBuildNumber: Any,
|
|
119
123
|
platform: String = "ios",
|
120
124
|
teamName: String? = nil)
|
121
125
|
{
|
122
|
-
let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "
|
126
|
+
let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
127
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
128
|
+
RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber),
|
123
129
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
124
130
|
RubyCommand.Argument(name: "username", value: username),
|
125
131
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
@@ -138,6 +144,7 @@ public func appStoreBuildNumber(initialBuildNumber: Any,
|
|
138
144
|
- issuerId: The issuer ID
|
139
145
|
- keyFilepath: The path to the key p8 file
|
140
146
|
- keyContent: The content of the key p8 file
|
147
|
+
- isKeyContentBase64: Whether :key_content is Base64 encoded or not
|
141
148
|
- duration: The token session duration
|
142
149
|
- inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot not determine this on its own (yet)
|
143
150
|
|
@@ -147,6 +154,7 @@ public func appStoreConnectApiKey(keyId: String,
|
|
147
154
|
issuerId: String,
|
148
155
|
keyFilepath: String? = nil,
|
149
156
|
keyContent: String? = nil,
|
157
|
+
isKeyContentBase64: Bool = false,
|
150
158
|
duration: Int? = nil,
|
151
159
|
inHouse: Bool? = nil)
|
152
160
|
{
|
@@ -154,6 +162,7 @@ public func appStoreConnectApiKey(keyId: String,
|
|
154
162
|
RubyCommand.Argument(name: "issuer_id", value: issuerId),
|
155
163
|
RubyCommand.Argument(name: "key_filepath", value: keyFilepath),
|
156
164
|
RubyCommand.Argument(name: "key_content", value: keyContent),
|
165
|
+
RubyCommand.Argument(name: "is_key_content_base64", value: isKeyContentBase64),
|
157
166
|
RubyCommand.Argument(name: "duration", value: duration),
|
158
167
|
RubyCommand.Argument(name: "in_house", value: inHouse)])
|
159
168
|
_ = runner.executeCommand(command)
|
@@ -479,7 +488,7 @@ public func appledoc(input: Any,
|
|
479
488
|
- skipScreenshots: Don't upload the screenshots
|
480
489
|
- skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
|
481
490
|
- skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
|
482
|
-
- force: Skip
|
491
|
+
- force: Skip verification of HTML preview file
|
483
492
|
- overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
|
484
493
|
- submitForReview: Submit the new version for Review after uploading everything
|
485
494
|
- rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
|
@@ -527,7 +536,7 @@ public func appledoc(input: Any,
|
|
527
536
|
|
528
537
|
Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
|
529
538
|
|
530
|
-
If you don't want
|
539
|
+
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
|
531
540
|
This is useful when running _fastlane_ on your Continuous Integration server:
|
532
541
|
`_upload_to_app_store_(force: true)`
|
533
542
|
If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
|
@@ -553,7 +562,7 @@ public func appstore(apiKeyPath: String? = nil,
|
|
553
562
|
overwriteScreenshots: Bool = false,
|
554
563
|
submitForReview: Bool = false,
|
555
564
|
rejectIfPossible: Bool = false,
|
556
|
-
automaticRelease: Bool =
|
565
|
+
automaticRelease: Bool? = nil,
|
557
566
|
autoReleaseDate: Int? = nil,
|
558
567
|
phasedRelease: Bool = false,
|
559
568
|
resetRatings: Bool = false,
|
@@ -2600,7 +2609,7 @@ public func deleteKeychain(name: String? = nil,
|
|
2600
2609
|
- skipScreenshots: Don't upload the screenshots
|
2601
2610
|
- skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
|
2602
2611
|
- skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
|
2603
|
-
- force: Skip
|
2612
|
+
- force: Skip verification of HTML preview file
|
2604
2613
|
- overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
|
2605
2614
|
- submitForReview: Submit the new version for Review after uploading everything
|
2606
2615
|
- rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
|
@@ -2648,7 +2657,7 @@ public func deleteKeychain(name: String? = nil,
|
|
2648
2657
|
|
2649
2658
|
Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
|
2650
2659
|
|
2651
|
-
If you don't want
|
2660
|
+
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
|
2652
2661
|
This is useful when running _fastlane_ on your Continuous Integration server:
|
2653
2662
|
`_upload_to_app_store_(force: true)`
|
2654
2663
|
If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
|
@@ -2674,7 +2683,7 @@ public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
|
|
2674
2683
|
overwriteScreenshots: Bool = deliverfile.overwriteScreenshots,
|
2675
2684
|
submitForReview: Bool = deliverfile.submitForReview,
|
2676
2685
|
rejectIfPossible: Bool = deliverfile.rejectIfPossible,
|
2677
|
-
automaticRelease: Bool = deliverfile.automaticRelease,
|
2686
|
+
automaticRelease: Bool? = deliverfile.automaticRelease,
|
2678
2687
|
autoReleaseDate: Int? = deliverfile.autoReleaseDate,
|
2679
2688
|
phasedRelease: Bool = deliverfile.phasedRelease,
|
2680
2689
|
resetRatings: Bool = deliverfile.resetRatings,
|
@@ -4595,6 +4604,8 @@ public func jira(url: String,
|
|
4595
4604
|
Fetches most recent build number from TestFlight
|
4596
4605
|
|
4597
4606
|
- parameters:
|
4607
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
4608
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
4598
4609
|
- live: Query the live version (ready-for-sale)
|
4599
4610
|
- appIdentifier: The bundle identifier of your app
|
4600
4611
|
- username: Your Apple ID Username
|
@@ -4609,7 +4620,9 @@ public func jira(url: String,
|
|
4609
4620
|
Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
|
4610
4621
|
Fetches the most recent build number from TestFlight based on the version number. Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
|
4611
4622
|
*/
|
4612
|
-
@discardableResult public func latestTestflightBuildNumber(
|
4623
|
+
@discardableResult public func latestTestflightBuildNumber(apiKeyPath: String? = nil,
|
4624
|
+
apiKey: [String: Any]? = nil,
|
4625
|
+
live: Bool = false,
|
4613
4626
|
appIdentifier: String,
|
4614
4627
|
username: String,
|
4615
4628
|
version: String? = nil,
|
@@ -4618,7 +4631,9 @@ public func jira(url: String,
|
|
4618
4631
|
teamId: Any? = nil,
|
4619
4632
|
teamName: String? = nil) -> Int
|
4620
4633
|
{
|
4621
|
-
let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "
|
4634
|
+
let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
4635
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
4636
|
+
RubyCommand.Argument(name: "live", value: live),
|
4622
4637
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
4623
4638
|
RubyCommand.Argument(name: "username", value: username),
|
4624
4639
|
RubyCommand.Argument(name: "version", value: version),
|
@@ -4733,7 +4748,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4733
4748
|
- readonly: Only fetch existing certificates and profiles, don't generate new ones
|
4734
4749
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
4735
4750
|
- skipProvisioningProfiles: Skip syncing provisioning profiles
|
4736
|
-
- appIdentifier: The bundle identifier(s) of your app (comma-separated)
|
4751
|
+
- appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
|
4737
4752
|
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
4738
4753
|
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
4739
4754
|
- username: Your Apple ID Username
|
@@ -4768,6 +4783,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4768
4783
|
- templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
4769
4784
|
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
4770
4785
|
- failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first
|
4786
|
+
- skipCertificateMatching: Set to true if there is no access to Apple developer portal but there are certificates, keys and profiles provided. Only works with match import action
|
4771
4787
|
- outputPath: Path in which to export certificates, key and profile
|
4772
4788
|
- skipSetPartitionList: Skips setting the partition list (which can sometimes take a long time). Setting the partition list is usually needed to prevent Xcode from prompting to allow a cert to be used for signing
|
4773
4789
|
- verbose: Print out extra information and all commands
|
@@ -4814,6 +4830,7 @@ public func match(type: Any = matchfile.type,
|
|
4814
4830
|
templateName: Any? = matchfile.templateName,
|
4815
4831
|
profileName: Any? = matchfile.profileName,
|
4816
4832
|
failOnNameTaken: Bool = matchfile.failOnNameTaken,
|
4833
|
+
skipCertificateMatching: Bool = matchfile.skipCertificateMatching,
|
4817
4834
|
outputPath: Any? = matchfile.outputPath,
|
4818
4835
|
skipSetPartitionList: Bool = matchfile.skipSetPartitionList,
|
4819
4836
|
verbose: Bool = matchfile.verbose)
|
@@ -4858,6 +4875,7 @@ public func match(type: Any = matchfile.type,
|
|
4858
4875
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
4859
4876
|
RubyCommand.Argument(name: "profile_name", value: profileName),
|
4860
4877
|
RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
|
4878
|
+
RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
|
4861
4879
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
4862
4880
|
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
4863
4881
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
@@ -5772,7 +5790,10 @@ public func recreateSchemes(project: String) {
|
|
5772
5790
|
|
5773
5791
|
- parameters:
|
5774
5792
|
- name: Provide the name of the device to register as
|
5793
|
+
- platform: Provide the platform of the device to register as (ios, mac)
|
5775
5794
|
- udid: Provide the UDID of the device to register as
|
5795
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
5796
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
5776
5797
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
5777
5798
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
5778
5799
|
- username: Optional: Your Apple ID
|
@@ -5782,13 +5803,19 @@ public func recreateSchemes(project: String) {
|
|
5782
5803
|
The action will connect to the Apple Developer Portal using the username you specified in your `Appfile` with `apple_id`, but you can override it using the `:username` option.
|
5783
5804
|
*/
|
5784
5805
|
@discardableResult public func registerDevice(name: String,
|
5806
|
+
platform: String = "ios",
|
5785
5807
|
udid: String,
|
5808
|
+
apiKeyPath: String? = nil,
|
5809
|
+
apiKey: [String: Any]? = nil,
|
5786
5810
|
teamId: String? = nil,
|
5787
5811
|
teamName: String? = nil,
|
5788
|
-
username: String) -> String
|
5812
|
+
username: String? = nil) -> String
|
5789
5813
|
{
|
5790
5814
|
let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
|
5815
|
+
RubyCommand.Argument(name: "platform", value: platform),
|
5791
5816
|
RubyCommand.Argument(name: "udid", value: udid),
|
5817
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
5818
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
5792
5819
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
5793
5820
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
5794
5821
|
RubyCommand.Argument(name: "username", value: username)])
|
@@ -5801,6 +5828,8 @@ public func recreateSchemes(project: String) {
|
|
5801
5828
|
- parameters:
|
5802
5829
|
- devices: A hash of devices, with the name as key and the UDID as value
|
5803
5830
|
- devicesFile: Provide a path to a file with the devices to register. For the format of the file see the examples
|
5831
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
5832
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
5804
5833
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
5805
5834
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
5806
5835
|
- username: Optional: Your Apple ID
|
@@ -5812,6 +5841,8 @@ public func recreateSchemes(project: String) {
|
|
5812
5841
|
*/
|
5813
5842
|
public func registerDevices(devices: [String: Any]? = nil,
|
5814
5843
|
devicesFile: String? = nil,
|
5844
|
+
apiKeyPath: String? = nil,
|
5845
|
+
apiKey: [String: Any]? = nil,
|
5815
5846
|
teamId: String? = nil,
|
5816
5847
|
teamName: String? = nil,
|
5817
5848
|
username: String,
|
@@ -5819,6 +5850,8 @@ public func registerDevices(devices: [String: Any]? = nil,
|
|
5819
5850
|
{
|
5820
5851
|
let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices),
|
5821
5852
|
RubyCommand.Argument(name: "devices_file", value: devicesFile),
|
5853
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
5854
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
5822
5855
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
5823
5856
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
5824
5857
|
RubyCommand.Argument(name: "username", value: username),
|
@@ -6044,6 +6077,7 @@ public func rubyVersion() {
|
|
6044
6077
|
- skipSlack: Don't publish to slack, even when an URL is given
|
6045
6078
|
- slackOnlyOnFailure: Only post on Slack if the tests fail
|
6046
6079
|
- destination: Use only if you're a pro, use the other options instead
|
6080
|
+
- catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
|
6047
6081
|
- customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
|
6048
6082
|
- xcodebuildCommand: Allows for override of the default `xcodebuild` command
|
6049
6083
|
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
|
@@ -6110,6 +6144,7 @@ public func runTests(workspace: String? = nil,
|
|
6110
6144
|
skipSlack: Bool = false,
|
6111
6145
|
slackOnlyOnFailure: Bool = false,
|
6112
6146
|
destination: Any? = nil,
|
6147
|
+
catalystPlatform: String? = nil,
|
6113
6148
|
customReportFileName: String? = nil,
|
6114
6149
|
xcodebuildCommand: String = "env NSUnbufferedIO=YES xcodebuild",
|
6115
6150
|
clonedSourcePackagesPath: String? = nil,
|
@@ -6174,6 +6209,7 @@ public func runTests(workspace: String? = nil,
|
|
6174
6209
|
RubyCommand.Argument(name: "skip_slack", value: skipSlack),
|
6175
6210
|
RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
|
6176
6211
|
RubyCommand.Argument(name: "destination", value: destination),
|
6212
|
+
RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
|
6177
6213
|
RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
|
6178
6214
|
RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
|
6179
6215
|
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
|
@@ -6320,6 +6356,7 @@ public func say(text: Any,
|
|
6320
6356
|
- skipSlack: Don't publish to slack, even when an URL is given
|
6321
6357
|
- slackOnlyOnFailure: Only post on Slack if the tests fail
|
6322
6358
|
- destination: Use only if you're a pro, use the other options instead
|
6359
|
+
- catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
|
6323
6360
|
- customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
|
6324
6361
|
- xcodebuildCommand: Allows for override of the default `xcodebuild` command
|
6325
6362
|
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
|
@@ -6386,6 +6423,7 @@ public func scan(workspace: Any? = scanfile.workspace,
|
|
6386
6423
|
skipSlack: Bool = scanfile.skipSlack,
|
6387
6424
|
slackOnlyOnFailure: Bool = scanfile.slackOnlyOnFailure,
|
6388
6425
|
destination: Any? = scanfile.destination,
|
6426
|
+
catalystPlatform: Any? = scanfile.catalystPlatform,
|
6389
6427
|
customReportFileName: Any? = scanfile.customReportFileName,
|
6390
6428
|
xcodebuildCommand: Any = scanfile.xcodebuildCommand,
|
6391
6429
|
clonedSourcePackagesPath: Any? = scanfile.clonedSourcePackagesPath,
|
@@ -6450,6 +6488,7 @@ public func scan(workspace: Any? = scanfile.workspace,
|
|
6450
6488
|
RubyCommand.Argument(name: "skip_slack", value: skipSlack),
|
6451
6489
|
RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
|
6452
6490
|
RubyCommand.Argument(name: "destination", value: destination),
|
6491
|
+
RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
|
6453
6492
|
RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
|
6454
6493
|
RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
|
6455
6494
|
RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
|
@@ -6582,6 +6621,8 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
|
|
6582
6621
|
Set the changelog for all languages on App Store Connect
|
6583
6622
|
|
6584
6623
|
- parameters:
|
6624
|
+
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
6625
|
+
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
6585
6626
|
- appIdentifier: The bundle identifier of your app
|
6586
6627
|
- username: Your Apple ID Username
|
6587
6628
|
- version: The version number to create/update
|
@@ -6594,15 +6635,19 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
|
|
6594
6635
|
You can store the changelog in `./changelog.txt` and it will automatically get loaded from there. This integration is useful if you support e.g. 10 languages and want to use the same "What's new"-text for all languages.
|
6595
6636
|
Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one.
|
6596
6637
|
*/
|
6597
|
-
public func setChangelog(
|
6598
|
-
|
6638
|
+
public func setChangelog(apiKeyPath: String? = nil,
|
6639
|
+
apiKey: [String: Any]? = nil,
|
6640
|
+
appIdentifier: String,
|
6641
|
+
username: String? = nil,
|
6599
6642
|
version: String? = nil,
|
6600
6643
|
changelog: String? = nil,
|
6601
6644
|
teamId: Any? = nil,
|
6602
6645
|
teamName: String? = nil,
|
6603
6646
|
platform: String = "ios")
|
6604
6647
|
{
|
6605
|
-
let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "
|
6648
|
+
let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
6649
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
6650
|
+
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
6606
6651
|
RubyCommand.Argument(name: "username", value: username),
|
6607
6652
|
RubyCommand.Argument(name: "version", value: version),
|
6608
6653
|
RubyCommand.Argument(name: "changelog", value: changelog),
|
@@ -7400,6 +7445,7 @@ public func splunkmint(dsym: String? = nil,
|
|
7400
7445
|
|
7401
7446
|
- parameters:
|
7402
7447
|
- command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init)
|
7448
|
+
- enableCodeCoverage: Enables code coverage for the generated Xcode project when using the generate-xcodeproj command
|
7403
7449
|
- buildPath: Specify build/cache directory [default: ./.build]
|
7404
7450
|
- packagePath: Change working directory before any other operation
|
7405
7451
|
- xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
|
@@ -7410,6 +7456,7 @@ public func splunkmint(dsym: String? = nil,
|
|
7410
7456
|
- verbose: Increase verbosity of informational output
|
7411
7457
|
*/
|
7412
7458
|
public func spm(command: String = "build",
|
7459
|
+
enableCodeCoverage: Any? = nil,
|
7413
7460
|
buildPath: String? = nil,
|
7414
7461
|
packagePath: String? = nil,
|
7415
7462
|
xcconfig: String? = nil,
|
@@ -7420,6 +7467,7 @@ public func spm(command: String = "build",
|
|
7420
7467
|
verbose: Bool = false)
|
7421
7468
|
{
|
7422
7469
|
let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
|
7470
|
+
RubyCommand.Argument(name: "enable_code_coverage", value: enableCodeCoverage),
|
7423
7471
|
RubyCommand.Argument(name: "build_path", value: buildPath),
|
7424
7472
|
RubyCommand.Argument(name: "package_path", value: packagePath),
|
7425
7473
|
RubyCommand.Argument(name: "xcconfig", value: xcconfig),
|
@@ -7639,7 +7687,7 @@ public func swiftlint(mode: Any = "lint",
|
|
7639
7687
|
- readonly: Only fetch existing certificates and profiles, don't generate new ones
|
7640
7688
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
7641
7689
|
- skipProvisioningProfiles: Skip syncing provisioning profiles
|
7642
|
-
- appIdentifier: The bundle identifier(s) of your app (comma-separated)
|
7690
|
+
- appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
|
7643
7691
|
- apiKeyPath: Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
|
7644
7692
|
- apiKey: Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
|
7645
7693
|
- username: Your Apple ID Username
|
@@ -7674,6 +7722,7 @@ public func swiftlint(mode: Any = "lint",
|
|
7674
7722
|
- templateName: The name of provisioning profile template. If the developer account has provisioning profile templates (aka: custom entitlements), the template name can be found by inspecting the Entitlements drop-down while creating/editing a provisioning profile (e.g. "Apple Pay Pass Suppression Development")
|
7675
7723
|
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
7676
7724
|
- failOnNameTaken: Should the command fail if it was about to create a duplicate of an existing provisioning profile. It can happen due to issues on Apple Developer Portal, when profile to be recreated was not properly deleted first
|
7725
|
+
- skipCertificateMatching: Set to true if there is no access to Apple developer portal but there are certificates, keys and profiles provided. Only works with match import action
|
7677
7726
|
- outputPath: Path in which to export certificates, key and profile
|
7678
7727
|
- skipSetPartitionList: Skips setting the partition list (which can sometimes take a long time). Setting the partition list is usually needed to prevent Xcode from prompting to allow a cert to be used for signing
|
7679
7728
|
- verbose: Print out extra information and all commands
|
@@ -7720,6 +7769,7 @@ public func syncCodeSigning(type: String = "development",
|
|
7720
7769
|
templateName: String? = nil,
|
7721
7770
|
profileName: String? = nil,
|
7722
7771
|
failOnNameTaken: Bool = false,
|
7772
|
+
skipCertificateMatching: Bool = false,
|
7723
7773
|
outputPath: String? = nil,
|
7724
7774
|
skipSetPartitionList: Bool = false,
|
7725
7775
|
verbose: Bool = false)
|
@@ -7764,6 +7814,7 @@ public func syncCodeSigning(type: String = "development",
|
|
7764
7814
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
7765
7815
|
RubyCommand.Argument(name: "profile_name", value: profileName),
|
7766
7816
|
RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
|
7817
|
+
RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
|
7767
7818
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
7768
7819
|
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
7769
7820
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
@@ -8451,7 +8502,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
|
|
8451
8502
|
- skipScreenshots: Don't upload the screenshots
|
8452
8503
|
- skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
|
8453
8504
|
- skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
|
8454
|
-
- force: Skip
|
8505
|
+
- force: Skip verification of HTML preview file
|
8455
8506
|
- overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
|
8456
8507
|
- submitForReview: Submit the new version for Review after uploading everything
|
8457
8508
|
- rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
|
@@ -8499,7 +8550,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
|
|
8499
8550
|
|
8500
8551
|
Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
|
8501
8552
|
|
8502
|
-
If you don't want
|
8553
|
+
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
|
8503
8554
|
This is useful when running _fastlane_ on your Continuous Integration server:
|
8504
8555
|
`_upload_to_app_store_(force: true)`
|
8505
8556
|
If your account is on multiple teams and you need to tell the `iTMSTransporter` which 'provider' to use, you can set the `:itc_provider` option to pass this info.
|
@@ -8525,7 +8576,7 @@ public func uploadToAppStore(apiKeyPath: String? = nil,
|
|
8525
8576
|
overwriteScreenshots: Bool = false,
|
8526
8577
|
submitForReview: Bool = false,
|
8527
8578
|
rejectIfPossible: Bool = false,
|
8528
|
-
automaticRelease: Bool =
|
8579
|
+
automaticRelease: Bool? = nil,
|
8529
8580
|
autoReleaseDate: Int? = nil,
|
8530
8581
|
phasedRelease: Bool = false,
|
8531
8582
|
resetRatings: Bool = false,
|
@@ -9211,7 +9262,7 @@ public func xcov(workspace: String? = nil,
|
|
9211
9262
|
coverallsServiceJobId: String? = nil,
|
9212
9263
|
coverallsRepoToken: String? = nil,
|
9213
9264
|
xcconfig: String? = nil,
|
9214
|
-
ideFoundationPath: String = "/Applications/Xcode-11.
|
9265
|
+
ideFoundationPath: String = "/Applications/Xcode-11.7.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
9215
9266
|
legacySupport: Bool = false)
|
9216
9267
|
{
|
9217
9268
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
@@ -9357,4 +9408,4 @@ public let snapshotfile = Snapshotfile()
|
|
9357
9408
|
|
9358
9409
|
// Please don't remove the lines below
|
9359
9410
|
// They are used to detect outdated files
|
9360
|
-
// FastlaneRunnerAPIVersion [0.9.
|
9411
|
+
// FastlaneRunnerAPIVersion [0.9.103]
|