fastlane 2.160.0 → 2.165.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/options.rb +28 -1
- data/cert/lib/cert/runner.rb +51 -34
- data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -4
- data/deliver/lib/deliver/module.rb +2 -0
- data/deliver/lib/deliver/options.rb +5 -5
- data/deliver/lib/deliver/queue_worker.rb +14 -29
- data/deliver/lib/deliver/upload_metadata.rb +20 -5
- data/deliver/lib/deliver/upload_screenshots.rb +28 -13
- data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/actions_helper.rb +20 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +39 -3
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +15 -1
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +1 -0
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +12 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -0
- data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +13 -2
- 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/sync_code_signing.rb +1 -0
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +3 -2
- data/fastlane/lib/fastlane/fast_file.rb +74 -23
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
- 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/Fastlane.swift +120 -27
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +28 -36
- data/fastlane/swift/MainProcess.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +21 -5
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -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/main.swift +1 -1
- data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +6 -7
- data/fastlane_core/lib/fastlane_core/device_manager.rb +8 -4
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +3 -3
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
- data/match/lib/match/generator.rb +6 -1
- data/match/lib/match/importer.rb +63 -18
- data/match/lib/match/migrate.rb +13 -2
- data/match/lib/match/nuke.rb +65 -22
- data/match/lib/match/options.rb +34 -3
- data/match/lib/match/runner.rb +38 -10
- data/match/lib/match/spaceship_ensure.rb +27 -21
- data/match/lib/match/storage/google_cloud_storage.rb +20 -3
- data/match/lib/match/storage/s3_storage.rb +19 -3
- data/scan/lib/scan/detect_values.rb +5 -8
- 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/options.rb +21 -0
- data/sigh/lib/sigh/runner.rb +83 -41
- data/snapshot/lib/assets/SnapshotHelper.swift +4 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/client.rb +9 -4
- data/spaceship/lib/spaceship/connect_api.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +12 -3
- data/spaceship/lib/spaceship/connect_api/client.rb +20 -7
- data/spaceship/lib/spaceship/connect_api/models/app.rb +51 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +3 -1
- data/spaceship/lib/spaceship/connect_api/models/beta_tester.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +42 -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/models/profile.rb +7 -1
- data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +45 -2
- data/spaceship/lib/spaceship/connect_api/spaceship.rb +7 -4
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +6 -1
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +75 -1
- data/spaceship/lib/spaceship/connect_api/users/users.rb +40 -0
- data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +11 -5
- data/supply/lib/supply/uploader.rb +1 -1
- metadata +19 -15
@@ -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,
|
@@ -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"',
|
@@ -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
|
@@ -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.48]
|
@@ -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,
|
@@ -1844,6 +1853,8 @@ public func carthage(command: String = "bootstrap",
|
|
1844
1853
|
- type: Create specific certificate type (takes precedence over :development)
|
1845
1854
|
- force: Create a certificate even if an existing certificate exists
|
1846
1855
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
1856
|
+
- 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)
|
1857
|
+
- 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)
|
1847
1858
|
- username: Your Apple ID Username
|
1848
1859
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
1849
1860
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -1851,6 +1862,7 @@ public func carthage(command: String = "bootstrap",
|
|
1851
1862
|
- outputPath: The path to a directory in which all certificates and private keys should be stored
|
1852
1863
|
- keychainPath: Path to a custom keychain
|
1853
1864
|
- keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
|
1865
|
+
- 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
|
1854
1866
|
- platform: Set the provisioning profile's platform (ios, macos)
|
1855
1867
|
|
1856
1868
|
**Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
|
@@ -1860,6 +1872,8 @@ public func cert(development: Bool = false,
|
|
1860
1872
|
type: String? = nil,
|
1861
1873
|
force: Bool = false,
|
1862
1874
|
generateAppleCerts: Bool = true,
|
1875
|
+
apiKeyPath: String? = nil,
|
1876
|
+
apiKey: [String: Any]? = nil,
|
1863
1877
|
username: String,
|
1864
1878
|
teamId: String? = nil,
|
1865
1879
|
teamName: String? = nil,
|
@@ -1867,12 +1881,15 @@ public func cert(development: Bool = false,
|
|
1867
1881
|
outputPath: String = ".",
|
1868
1882
|
keychainPath: String,
|
1869
1883
|
keychainPassword: String? = nil,
|
1884
|
+
skipSetPartitionList: Bool = false,
|
1870
1885
|
platform: String = "ios")
|
1871
1886
|
{
|
1872
1887
|
let command = RubyCommand(commandID: "", methodName: "cert", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
|
1873
1888
|
RubyCommand.Argument(name: "type", value: type),
|
1874
1889
|
RubyCommand.Argument(name: "force", value: force),
|
1875
1890
|
RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
|
1891
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
1892
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
1876
1893
|
RubyCommand.Argument(name: "username", value: username),
|
1877
1894
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
1878
1895
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -1880,6 +1897,7 @@ public func cert(development: Bool = false,
|
|
1880
1897
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
1881
1898
|
RubyCommand.Argument(name: "keychain_path", value: keychainPath),
|
1882
1899
|
RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
|
1900
|
+
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
1883
1901
|
RubyCommand.Argument(name: "platform", value: platform)])
|
1884
1902
|
_ = runner.executeCommand(command)
|
1885
1903
|
}
|
@@ -2591,7 +2609,7 @@ public func deleteKeychain(name: String? = nil,
|
|
2591
2609
|
- skipScreenshots: Don't upload the screenshots
|
2592
2610
|
- skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
|
2593
2611
|
- skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
|
2594
|
-
- force: Skip
|
2612
|
+
- force: Skip verification of HTML preview file
|
2595
2613
|
- overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
|
2596
2614
|
- submitForReview: Submit the new version for Review after uploading everything
|
2597
2615
|
- rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
|
@@ -2639,7 +2657,7 @@ public func deleteKeychain(name: String? = nil,
|
|
2639
2657
|
|
2640
2658
|
Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
|
2641
2659
|
|
2642
|
-
If you don't want
|
2660
|
+
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
|
2643
2661
|
This is useful when running _fastlane_ on your Continuous Integration server:
|
2644
2662
|
`_upload_to_app_store_(force: true)`
|
2645
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.
|
@@ -2665,7 +2683,7 @@ public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
|
|
2665
2683
|
overwriteScreenshots: Bool = deliverfile.overwriteScreenshots,
|
2666
2684
|
submitForReview: Bool = deliverfile.submitForReview,
|
2667
2685
|
rejectIfPossible: Bool = deliverfile.rejectIfPossible,
|
2668
|
-
automaticRelease: Bool = deliverfile.automaticRelease,
|
2686
|
+
automaticRelease: Bool? = deliverfile.automaticRelease,
|
2669
2687
|
autoReleaseDate: Int? = deliverfile.autoReleaseDate,
|
2670
2688
|
phasedRelease: Bool = deliverfile.phasedRelease,
|
2671
2689
|
resetRatings: Bool = deliverfile.resetRatings,
|
@@ -3006,16 +3024,19 @@ public func ensureGitBranch(branch: String = "master") {
|
|
3006
3024
|
- parameters:
|
3007
3025
|
- showUncommittedChanges: The flag whether to show uncommitted changes if the repo is dirty
|
3008
3026
|
- showDiff: The flag whether to show the git diff if the repo is dirty
|
3027
|
+
- ignored: The flag whether to ignore file the git status if the repo is dirty
|
3009
3028
|
|
3010
3029
|
A sanity check to make sure you are working in a repo that is clean.
|
3011
3030
|
Especially useful to put at the beginning of your Fastfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work.
|
3012
3031
|
Also needed as a prerequisite for some other actions like `reset_git_repo`.
|
3013
3032
|
*/
|
3014
3033
|
public func ensureGitStatusClean(showUncommittedChanges: Bool = false,
|
3015
|
-
showDiff: Bool = false
|
3034
|
+
showDiff: Bool = false,
|
3035
|
+
ignored: String? = nil)
|
3016
3036
|
{
|
3017
3037
|
let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges),
|
3018
|
-
RubyCommand.Argument(name: "show_diff", value: showDiff)
|
3038
|
+
RubyCommand.Argument(name: "show_diff", value: showDiff),
|
3039
|
+
RubyCommand.Argument(name: "ignored", value: ignored)])
|
3019
3040
|
_ = runner.executeCommand(command)
|
3020
3041
|
}
|
3021
3042
|
|
@@ -3320,6 +3341,8 @@ public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
|
|
3320
3341
|
- type: Create specific certificate type (takes precedence over :development)
|
3321
3342
|
- force: Create a certificate even if an existing certificate exists
|
3322
3343
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
3344
|
+
- 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)
|
3345
|
+
- 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)
|
3323
3346
|
- username: Your Apple ID Username
|
3324
3347
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
3325
3348
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -3327,6 +3350,7 @@ public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
|
|
3327
3350
|
- outputPath: The path to a directory in which all certificates and private keys should be stored
|
3328
3351
|
- keychainPath: Path to a custom keychain
|
3329
3352
|
- keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your account password
|
3353
|
+
- 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
|
3330
3354
|
- platform: Set the provisioning profile's platform (ios, macos)
|
3331
3355
|
|
3332
3356
|
**Important**: It is recommended to use [match](https://docs.fastlane.tools/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
|
@@ -3336,6 +3360,8 @@ public func getCertificates(development: Bool = false,
|
|
3336
3360
|
type: String? = nil,
|
3337
3361
|
force: Bool = false,
|
3338
3362
|
generateAppleCerts: Bool = true,
|
3363
|
+
apiKeyPath: String? = nil,
|
3364
|
+
apiKey: [String: Any]? = nil,
|
3339
3365
|
username: String,
|
3340
3366
|
teamId: String? = nil,
|
3341
3367
|
teamName: String? = nil,
|
@@ -3343,12 +3369,15 @@ public func getCertificates(development: Bool = false,
|
|
3343
3369
|
outputPath: String = ".",
|
3344
3370
|
keychainPath: String,
|
3345
3371
|
keychainPassword: String? = nil,
|
3372
|
+
skipSetPartitionList: Bool = false,
|
3346
3373
|
platform: String = "ios")
|
3347
3374
|
{
|
3348
3375
|
let command = RubyCommand(commandID: "", methodName: "get_certificates", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
|
3349
3376
|
RubyCommand.Argument(name: "type", value: type),
|
3350
3377
|
RubyCommand.Argument(name: "force", value: force),
|
3351
3378
|
RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
|
3379
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
3380
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
3352
3381
|
RubyCommand.Argument(name: "username", value: username),
|
3353
3382
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
3354
3383
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -3356,6 +3385,7 @@ public func getCertificates(development: Bool = false,
|
|
3356
3385
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
3357
3386
|
RubyCommand.Argument(name: "keychain_path", value: keychainPath),
|
3358
3387
|
RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
|
3388
|
+
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
3359
3389
|
RubyCommand.Argument(name: "platform", value: platform)])
|
3360
3390
|
_ = runner.executeCommand(command)
|
3361
3391
|
}
|
@@ -3492,6 +3522,8 @@ public func getManagedPlayStorePublishingRights(jsonKey: String? = nil,
|
|
3492
3522
|
- skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
|
3493
3523
|
- force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
|
3494
3524
|
- appIdentifier: The bundle identifier of your app
|
3525
|
+
- 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)
|
3526
|
+
- 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)
|
3495
3527
|
- username: Your Apple ID Username
|
3496
3528
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
3497
3529
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -3518,6 +3550,8 @@ public func getProvisioningProfile(adhoc: Bool = false,
|
|
3518
3550
|
skipInstall: Bool = false,
|
3519
3551
|
force: Bool = false,
|
3520
3552
|
appIdentifier: String,
|
3553
|
+
apiKeyPath: String? = nil,
|
3554
|
+
apiKey: [String: Any]? = nil,
|
3521
3555
|
username: String,
|
3522
3556
|
teamId: String? = nil,
|
3523
3557
|
teamName: String? = nil,
|
@@ -3540,6 +3574,8 @@ public func getProvisioningProfile(adhoc: Bool = false,
|
|
3540
3574
|
RubyCommand.Argument(name: "skip_install", value: skipInstall),
|
3541
3575
|
RubyCommand.Argument(name: "force", value: force),
|
3542
3576
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
3577
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
3578
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
3543
3579
|
RubyCommand.Argument(name: "username", value: username),
|
3544
3580
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
3545
3581
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -4568,6 +4604,8 @@ public func jira(url: String,
|
|
4568
4604
|
Fetches most recent build number from TestFlight
|
4569
4605
|
|
4570
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)
|
4571
4609
|
- live: Query the live version (ready-for-sale)
|
4572
4610
|
- appIdentifier: The bundle identifier of your app
|
4573
4611
|
- username: Your Apple ID Username
|
@@ -4582,7 +4620,9 @@ public func jira(url: String,
|
|
4582
4620
|
Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
|
4583
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.
|
4584
4622
|
*/
|
4585
|
-
@discardableResult public func latestTestflightBuildNumber(
|
4623
|
+
@discardableResult public func latestTestflightBuildNumber(apiKeyPath: String? = nil,
|
4624
|
+
apiKey: [String: Any]? = nil,
|
4625
|
+
live: Bool = false,
|
4586
4626
|
appIdentifier: String,
|
4587
4627
|
username: String,
|
4588
4628
|
version: String? = nil,
|
@@ -4591,7 +4631,9 @@ public func jira(url: String,
|
|
4591
4631
|
teamId: Any? = nil,
|
4592
4632
|
teamName: String? = nil) -> Int
|
4593
4633
|
{
|
4594
|
-
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),
|
4595
4637
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
4596
4638
|
RubyCommand.Argument(name: "username", value: username),
|
4597
4639
|
RubyCommand.Argument(name: "version", value: version),
|
@@ -4706,7 +4748,9 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4706
4748
|
- readonly: Only fetch existing certificates and profiles, don't generate new ones
|
4707
4749
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
4708
4750
|
- skipProvisioningProfiles: Skip syncing provisioning profiles
|
4709
|
-
- 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)
|
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)
|
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)
|
4710
4754
|
- username: Your Apple ID Username
|
4711
4755
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
4712
4756
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -4718,7 +4762,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4718
4762
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
4719
4763
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
4720
4764
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
4721
|
-
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
4765
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
|
4722
4766
|
- gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
|
4723
4767
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
4724
4768
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
@@ -4739,7 +4783,9 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4739
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")
|
4740
4784
|
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
4741
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
|
4742
4787
|
- outputPath: Path in which to export certificates, key and profile
|
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
|
4743
4789
|
- verbose: Print out extra information and all commands
|
4744
4790
|
|
4745
4791
|
More information: https://docs.fastlane.tools/actions/match/
|
@@ -4750,7 +4796,9 @@ public func match(type: Any = matchfile.type,
|
|
4750
4796
|
generateAppleCerts: Bool = matchfile.generateAppleCerts,
|
4751
4797
|
skipProvisioningProfiles: Bool = matchfile.skipProvisioningProfiles,
|
4752
4798
|
appIdentifier: [String] = matchfile.appIdentifier,
|
4753
|
-
|
4799
|
+
apiKeyPath: Any? = matchfile.apiKeyPath,
|
4800
|
+
apiKey: [String: Any]? = matchfile.apiKey,
|
4801
|
+
username: Any? = matchfile.username,
|
4754
4802
|
teamId: Any? = matchfile.teamId,
|
4755
4803
|
teamName: Any? = matchfile.teamName,
|
4756
4804
|
storageMode: Any = matchfile.storageMode,
|
@@ -4782,7 +4830,9 @@ public func match(type: Any = matchfile.type,
|
|
4782
4830
|
templateName: Any? = matchfile.templateName,
|
4783
4831
|
profileName: Any? = matchfile.profileName,
|
4784
4832
|
failOnNameTaken: Bool = matchfile.failOnNameTaken,
|
4833
|
+
skipCertificateMatching: Bool = matchfile.skipCertificateMatching,
|
4785
4834
|
outputPath: Any? = matchfile.outputPath,
|
4835
|
+
skipSetPartitionList: Bool = matchfile.skipSetPartitionList,
|
4786
4836
|
verbose: Bool = matchfile.verbose)
|
4787
4837
|
{
|
4788
4838
|
let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
|
@@ -4791,6 +4841,8 @@ public func match(type: Any = matchfile.type,
|
|
4791
4841
|
RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
|
4792
4842
|
RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
|
4793
4843
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
4844
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
4845
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
4794
4846
|
RubyCommand.Argument(name: "username", value: username),
|
4795
4847
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
4796
4848
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -4823,7 +4875,9 @@ public func match(type: Any = matchfile.type,
|
|
4823
4875
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
4824
4876
|
RubyCommand.Argument(name: "profile_name", value: profileName),
|
4825
4877
|
RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
|
4878
|
+
RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
|
4826
4879
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
4880
|
+
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
4827
4881
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
4828
4882
|
_ = runner.executeCommand(command)
|
4829
4883
|
}
|
@@ -5736,7 +5790,10 @@ public func recreateSchemes(project: String) {
|
|
5736
5790
|
|
5737
5791
|
- parameters:
|
5738
5792
|
- name: Provide the name of the device to register as
|
5793
|
+
- platform: Provide the platform of the device to register as (ios, mac)
|
5739
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)
|
5740
5797
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
5741
5798
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
5742
5799
|
- username: Optional: Your Apple ID
|
@@ -5746,13 +5803,19 @@ public func recreateSchemes(project: String) {
|
|
5746
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.
|
5747
5804
|
*/
|
5748
5805
|
@discardableResult public func registerDevice(name: String,
|
5806
|
+
platform: String = "ios",
|
5749
5807
|
udid: String,
|
5808
|
+
apiKeyPath: String? = nil,
|
5809
|
+
apiKey: [String: Any]? = nil,
|
5750
5810
|
teamId: String? = nil,
|
5751
5811
|
teamName: String? = nil,
|
5752
|
-
username: String) -> String
|
5812
|
+
username: String? = nil) -> String
|
5753
5813
|
{
|
5754
5814
|
let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
|
5815
|
+
RubyCommand.Argument(name: "platform", value: platform),
|
5755
5816
|
RubyCommand.Argument(name: "udid", value: udid),
|
5817
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
5818
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
5756
5819
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
5757
5820
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
5758
5821
|
RubyCommand.Argument(name: "username", value: username)])
|
@@ -5765,6 +5828,8 @@ public func recreateSchemes(project: String) {
|
|
5765
5828
|
- parameters:
|
5766
5829
|
- devices: A hash of devices, with the name as key and the UDID as value
|
5767
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)
|
5768
5833
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
5769
5834
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
5770
5835
|
- username: Optional: Your Apple ID
|
@@ -5776,6 +5841,8 @@ public func recreateSchemes(project: String) {
|
|
5776
5841
|
*/
|
5777
5842
|
public func registerDevices(devices: [String: Any]? = nil,
|
5778
5843
|
devicesFile: String? = nil,
|
5844
|
+
apiKeyPath: String? = nil,
|
5845
|
+
apiKey: [String: Any]? = nil,
|
5779
5846
|
teamId: String? = nil,
|
5780
5847
|
teamName: String? = nil,
|
5781
5848
|
username: String,
|
@@ -5783,6 +5850,8 @@ public func registerDevices(devices: [String: Any]? = nil,
|
|
5783
5850
|
{
|
5784
5851
|
let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices),
|
5785
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),
|
5786
5855
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
5787
5856
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
5788
5857
|
RubyCommand.Argument(name: "username", value: username),
|
@@ -6546,6 +6615,8 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
|
|
6546
6615
|
Set the changelog for all languages on App Store Connect
|
6547
6616
|
|
6548
6617
|
- parameters:
|
6618
|
+
- 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)
|
6619
|
+
- 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)
|
6549
6620
|
- appIdentifier: The bundle identifier of your app
|
6550
6621
|
- username: Your Apple ID Username
|
6551
6622
|
- version: The version number to create/update
|
@@ -6558,15 +6629,19 @@ public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
|
|
6558
6629
|
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.
|
6559
6630
|
Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one.
|
6560
6631
|
*/
|
6561
|
-
public func setChangelog(
|
6562
|
-
|
6632
|
+
public func setChangelog(apiKeyPath: String? = nil,
|
6633
|
+
apiKey: [String: Any]? = nil,
|
6634
|
+
appIdentifier: String,
|
6635
|
+
username: String? = nil,
|
6563
6636
|
version: String? = nil,
|
6564
6637
|
changelog: String? = nil,
|
6565
6638
|
teamId: Any? = nil,
|
6566
6639
|
teamName: String? = nil,
|
6567
6640
|
platform: String = "ios")
|
6568
6641
|
{
|
6569
|
-
let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "
|
6642
|
+
let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
6643
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
6644
|
+
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
6570
6645
|
RubyCommand.Argument(name: "username", value: username),
|
6571
6646
|
RubyCommand.Argument(name: "version", value: version),
|
6572
6647
|
RubyCommand.Argument(name: "changelog", value: changelog),
|
@@ -6808,6 +6883,8 @@ public func setupTravis(force: Bool = false) {
|
|
6808
6883
|
- skipInstall: By default, the certificate will be added to your local machine. Setting this flag will skip this action
|
6809
6884
|
- force: Renew provisioning profiles regardless of its state - to automatically add all devices for ad hoc profiles
|
6810
6885
|
- appIdentifier: The bundle identifier of your app
|
6886
|
+
- 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)
|
6887
|
+
- 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)
|
6811
6888
|
- username: Your Apple ID Username
|
6812
6889
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
6813
6890
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -6834,6 +6911,8 @@ public func sigh(adhoc: Bool = false,
|
|
6834
6911
|
skipInstall: Bool = false,
|
6835
6912
|
force: Bool = false,
|
6836
6913
|
appIdentifier: String,
|
6914
|
+
apiKeyPath: String? = nil,
|
6915
|
+
apiKey: [String: Any]? = nil,
|
6837
6916
|
username: String,
|
6838
6917
|
teamId: String? = nil,
|
6839
6918
|
teamName: String? = nil,
|
@@ -6856,6 +6935,8 @@ public func sigh(adhoc: Bool = false,
|
|
6856
6935
|
RubyCommand.Argument(name: "skip_install", value: skipInstall),
|
6857
6936
|
RubyCommand.Argument(name: "force", value: force),
|
6858
6937
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
6938
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
6939
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
6859
6940
|
RubyCommand.Argument(name: "username", value: username),
|
6860
6941
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
6861
6942
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -7597,7 +7678,9 @@ public func swiftlint(mode: Any = "lint",
|
|
7597
7678
|
- readonly: Only fetch existing certificates and profiles, don't generate new ones
|
7598
7679
|
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
|
7599
7680
|
- skipProvisioningProfiles: Skip syncing provisioning profiles
|
7600
|
-
- appIdentifier: The bundle identifier(s) of your app (comma-separated)
|
7681
|
+
- appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
|
7682
|
+
- 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)
|
7683
|
+
- 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)
|
7601
7684
|
- username: Your Apple ID Username
|
7602
7685
|
- teamId: The ID of your Developer Portal team if you're in multiple teams
|
7603
7686
|
- teamName: The name of your Developer Portal team if you're in multiple teams
|
@@ -7609,7 +7692,7 @@ public func swiftlint(mode: Any = "lint",
|
|
7609
7692
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
7610
7693
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
7611
7694
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
7612
|
-
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure
|
7695
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
|
7613
7696
|
- gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
|
7614
7697
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
7615
7698
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
@@ -7630,7 +7713,9 @@ public func swiftlint(mode: Any = "lint",
|
|
7630
7713
|
- 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")
|
7631
7714
|
- profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
|
7632
7715
|
- 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
|
7716
|
+
- 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
|
7633
7717
|
- outputPath: Path in which to export certificates, key and profile
|
7718
|
+
- 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
|
7634
7719
|
- verbose: Print out extra information and all commands
|
7635
7720
|
|
7636
7721
|
More information: https://docs.fastlane.tools/actions/match/
|
@@ -7641,7 +7726,9 @@ public func syncCodeSigning(type: String = "development",
|
|
7641
7726
|
generateAppleCerts: Bool = true,
|
7642
7727
|
skipProvisioningProfiles: Bool = false,
|
7643
7728
|
appIdentifier: [String],
|
7644
|
-
|
7729
|
+
apiKeyPath: String? = nil,
|
7730
|
+
apiKey: [String: Any]? = nil,
|
7731
|
+
username: String? = nil,
|
7645
7732
|
teamId: String? = nil,
|
7646
7733
|
teamName: String? = nil,
|
7647
7734
|
storageMode: String = "git",
|
@@ -7673,7 +7760,9 @@ public func syncCodeSigning(type: String = "development",
|
|
7673
7760
|
templateName: String? = nil,
|
7674
7761
|
profileName: String? = nil,
|
7675
7762
|
failOnNameTaken: Bool = false,
|
7763
|
+
skipCertificateMatching: Bool = false,
|
7676
7764
|
outputPath: String? = nil,
|
7765
|
+
skipSetPartitionList: Bool = false,
|
7677
7766
|
verbose: Bool = false)
|
7678
7767
|
{
|
7679
7768
|
let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
|
@@ -7682,6 +7771,8 @@ public func syncCodeSigning(type: String = "development",
|
|
7682
7771
|
RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
|
7683
7772
|
RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
|
7684
7773
|
RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
|
7774
|
+
RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
|
7775
|
+
RubyCommand.Argument(name: "api_key", value: apiKey),
|
7685
7776
|
RubyCommand.Argument(name: "username", value: username),
|
7686
7777
|
RubyCommand.Argument(name: "team_id", value: teamId),
|
7687
7778
|
RubyCommand.Argument(name: "team_name", value: teamName),
|
@@ -7714,7 +7805,9 @@ public func syncCodeSigning(type: String = "development",
|
|
7714
7805
|
RubyCommand.Argument(name: "template_name", value: templateName),
|
7715
7806
|
RubyCommand.Argument(name: "profile_name", value: profileName),
|
7716
7807
|
RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
|
7808
|
+
RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
|
7717
7809
|
RubyCommand.Argument(name: "output_path", value: outputPath),
|
7810
|
+
RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
|
7718
7811
|
RubyCommand.Argument(name: "verbose", value: verbose)])
|
7719
7812
|
_ = runner.executeCommand(command)
|
7720
7813
|
}
|
@@ -8400,7 +8493,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
|
|
8400
8493
|
- skipScreenshots: Don't upload the screenshots
|
8401
8494
|
- skipMetadata: Don't upload the metadata (e.g. title, description). This will still upload screenshots
|
8402
8495
|
- skipAppVersionUpdate: Don’t create or update the app version that is being prepared for submission
|
8403
|
-
- force: Skip
|
8496
|
+
- force: Skip verification of HTML preview file
|
8404
8497
|
- overwriteScreenshots: Clear all previously uploaded screenshots before uploading the new ones
|
8405
8498
|
- submitForReview: Submit the new version for Review after uploading everything
|
8406
8499
|
- rejectIfPossible: Rejects the previously submitted build if it's in a state where it's possible
|
@@ -8448,7 +8541,7 @@ public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/a
|
|
8448
8541
|
|
8449
8542
|
Using _upload_to_app_store_ after _build_app_ and _capture_screenshots_ will automatically upload the latest ipa and screenshots with no other configuration.
|
8450
8543
|
|
8451
|
-
If you don't want
|
8544
|
+
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
|
8452
8545
|
This is useful when running _fastlane_ on your Continuous Integration server:
|
8453
8546
|
`_upload_to_app_store_(force: true)`
|
8454
8547
|
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.
|
@@ -8474,7 +8567,7 @@ public func uploadToAppStore(apiKeyPath: String? = nil,
|
|
8474
8567
|
overwriteScreenshots: Bool = false,
|
8475
8568
|
submitForReview: Bool = false,
|
8476
8569
|
rejectIfPossible: Bool = false,
|
8477
|
-
automaticRelease: Bool =
|
8570
|
+
automaticRelease: Bool? = nil,
|
8478
8571
|
autoReleaseDate: Int? = nil,
|
8479
8572
|
phasedRelease: Bool = false,
|
8480
8573
|
resetRatings: Bool = false,
|
@@ -9160,7 +9253,7 @@ public func xcov(workspace: String? = nil,
|
|
9160
9253
|
coverallsServiceJobId: String? = nil,
|
9161
9254
|
coverallsRepoToken: String? = nil,
|
9162
9255
|
xcconfig: String? = nil,
|
9163
|
-
ideFoundationPath: String = "/Applications/Xcode-
|
9256
|
+
ideFoundationPath: String = "/Applications/Xcode-12.0.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
9164
9257
|
legacySupport: Bool = false)
|
9165
9258
|
{
|
9166
9259
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
@@ -9306,4 +9399,4 @@ public let snapshotfile = Snapshotfile()
|
|
9306
9399
|
|
9307
9400
|
// Please don't remove the lines below
|
9308
9401
|
// They are used to detect outdated files
|
9309
|
-
// FastlaneRunnerAPIVersion [0.9.
|
9402
|
+
// FastlaneRunnerAPIVersion [0.9.101]
|