fastlane/swift/Fastlane.swift in fastlane_hotfix-2.165.1 vs fastlane/swift/Fastlane.swift in fastlane_hotfix-2.187.0
- old
+ new
@@ -1,28 +1,35 @@
// Fastlane.swift
-// Copyright (c) 2020 FastlaneTools
+// Copyright (c) 2021 FastlaneTools
import Foundation
/**
Run ADB Actions
- parameters:
- serial: Android serial of the device to use for this command
- command: All commands you want to pass to the adb command, e.g. `kill-server`
- - adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT environment variable is set)
+ - adbPath: The path to your `adb` binary (can be left blank if the ANDROID_SDK_ROOT, ANDROID_HOME or ANDROID_SDK environment variable is set)
- returns: The output of the adb command
see adb --help for more details
*/
@discardableResult public func adb(serial: String = "",
- command: String? = nil,
+ command: OptionalConfigValue<String?> = .fastlaneDefault(nil),
adbPath: String = "adb") -> String
{
- let command = RubyCommand(commandID: "", methodName: "adb", className: nil, args: [RubyCommand.Argument(name: "serial", value: serial),
- RubyCommand.Argument(name: "command", value: command),
- RubyCommand.Argument(name: "adb_path", value: adbPath)])
+ let serialArg = RubyCommand.Argument(name: "serial", value: serial, type: nil)
+ let commandArg = command.asRubyArgument(name: "command", type: nil)
+ let adbPathArg = RubyCommand.Argument(name: "adb_path", value: adbPath, type: nil)
+ let array: [RubyCommand.Argument?] = [serialArg,
+ commandArg,
+ adbPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "adb", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Get an array of Connected android device serials
@@ -32,67 +39,94 @@
- returns: Returns an array of all currently connected android devices. Example: []
Fetches device list via adb, e.g. run an adb command on all connected devices.
*/
public func adbDevices(adbPath: String = "adb") {
- let command = RubyCommand(commandID: "", methodName: "adb_devices", className: nil, args: [RubyCommand.Argument(name: "adb_path", value: adbPath)])
+ let adbPathArg = RubyCommand.Argument(name: "adb_path", value: adbPath, type: nil)
+ let array: [RubyCommand.Argument?] = [adbPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "adb_devices", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Modify the default list of supported platforms
- parameter platforms: The optional extra platforms to support
*/
public func addExtraPlatforms(platforms: [String] = []) {
- let command = RubyCommand(commandID: "", methodName: "add_extra_platforms", className: nil, args: [RubyCommand.Argument(name: "platforms", value: platforms)])
+ let platformsArg = RubyCommand.Argument(name: "platforms", value: platforms, type: nil)
+ let array: [RubyCommand.Argument?] = [platformsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "add_extra_platforms", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will add an annotated git tag to the current branch
- parameters:
- tag: Define your own tag text. This will replace all other parameters
- grouping: Is used to keep your tags organised under one 'folder'
+ - includesLane: Whether the current lane should be included in the tag and message composition, e.g. '<grouping>/<lane>/<prefix><build_number><postfix>'
- prefix: Anything you want to put in front of the version number (e.g. 'v')
- postfix: Anything you want to put at the end of the version number (e.g. '-RC1')
- buildNumber: The build number. Defaults to the result of increment_build_number if you're using it
- message: The tag message. Defaults to the tag's name
- commit: The commit or object where the tag will be set. Defaults to the current HEAD
- force: Force adding the tag
- sign: Make a GPG-signed tag, using the default e-mail address's key
- This will automatically tag your build with the following format: `<grouping>/<lane>/<prefix><build_number>`, where:|
+ This will automatically tag your build with the following format: `<grouping>/<lane>/<prefix><build_number><postfix>`, where:|
|
>- `grouping` is just to keep your tags organised under one 'folder', defaults to 'builds'|
- - `lane` is the name of the current fastlane lane|
+ - `lane` is the name of the current fastlane lane, if chosen to be included via 'includes_lane' option, which defaults to 'true'|
- `prefix` is anything you want to stick in front of the version number, e.g. 'v'|
- `postfix` is anything you want to stick at the end of the version number, e.g. '-RC1'|
- `build_number` is the build number, which defaults to the value emitted by the `increment_build_number` action|
>|
For example, for build 1234 in the 'appstore' lane, it will tag the commit with `builds/appstore/1234`.
*/
-public func addGitTag(tag: String? = nil,
+public func addGitTag(tag: OptionalConfigValue<String?> = .fastlaneDefault(nil),
grouping: String = "builds",
+ includesLane: OptionalConfigValue<Bool> = .fastlaneDefault(true),
prefix: String = "",
postfix: String = "",
- buildNumber: Any,
- message: String? = nil,
- commit: String? = nil,
- force: Bool = false,
- sign: Bool = false)
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ message: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ commit: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ sign: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "add_git_tag", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag),
- RubyCommand.Argument(name: "grouping", value: grouping),
- RubyCommand.Argument(name: "prefix", value: prefix),
- RubyCommand.Argument(name: "postfix", value: postfix),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "commit", value: commit),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "sign", value: sign)])
+ let tagArg = tag.asRubyArgument(name: "tag", type: nil)
+ let groupingArg = RubyCommand.Argument(name: "grouping", value: grouping, type: nil)
+ let includesLaneArg = includesLane.asRubyArgument(name: "includes_lane", type: nil)
+ let prefixArg = RubyCommand.Argument(name: "prefix", value: prefix, type: nil)
+ let postfixArg = RubyCommand.Argument(name: "postfix", value: postfix, type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let commitArg = commit.asRubyArgument(name: "commit", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let signArg = sign.asRubyArgument(name: "sign", type: nil)
+ let array: [RubyCommand.Argument?] = [tagArg,
+ groupingArg,
+ includesLaneArg,
+ prefixArg,
+ postfixArg,
+ buildNumberArg,
+ messageArg,
+ commitArg,
+ forceArg,
+ signArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "add_git_tag", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Returns the current build_number of either live or edit version
@@ -110,31 +144,45 @@
- teamName: The name of your App Store Connect team if you're in multiple teams
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.
If you need to handle more build-trains please see `latest_testflight_build_number`.
*/
-public func appStoreBuildNumber(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- initialBuildNumber: Any,
+public func appStoreBuildNumber(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ initialBuildNumber: String,
appIdentifier: String,
- username: String,
- teamId: Any? = nil,
- live: Bool = true,
- version: String? = nil,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ live: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
- teamName: String? = nil)
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "live", value: live),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "team_name", value: teamName)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let initialBuildNumberArg = RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let liveArg = live.asRubyArgument(name: "live", type: nil)
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ initialBuildNumberArg,
+ appIdentifierArg,
+ usernameArg,
+ teamIdArg,
+ liveArg,
+ versionArg,
+ platformArg,
+ teamNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "app_store_build_number", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Load the App Store Connect API token to use in other fastlane tools and actions
@@ -144,29 +192,44 @@
- issuerId: The issuer ID
- keyFilepath: The path to the key p8 file
- keyContent: The content of the key p8 file
- isKeyContentBase64: Whether :key_content is Base64 encoded or not
- duration: The token session duration
- - inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot not determine this on its own (yet)
+ - inHouse: Is App Store or Enterprise (in house) team? App Store Connect API cannot determine this on its own (yet)
+ - setSpaceshipToken: Authorizes all Spaceship::ConnectAPI requests by automatically setting Spaceship::ConnectAPI.token
Load the App Store Connect API token to use in other fastlane tools and actions
*/
public func appStoreConnectApiKey(keyId: String,
issuerId: String,
- keyFilepath: String? = nil,
- keyContent: String? = nil,
- isKeyContentBase64: Bool = false,
- duration: Int? = nil,
- inHouse: Bool? = nil)
+ keyFilepath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ keyContent: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ isKeyContentBase64: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ duration: Int = 1200,
+ inHouse: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ setSpaceshipToken: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "app_store_connect_api_key", className: nil, args: [RubyCommand.Argument(name: "key_id", value: keyId),
- RubyCommand.Argument(name: "issuer_id", value: issuerId),
- RubyCommand.Argument(name: "key_filepath", value: keyFilepath),
- RubyCommand.Argument(name: "key_content", value: keyContent),
- RubyCommand.Argument(name: "is_key_content_base64", value: isKeyContentBase64),
- RubyCommand.Argument(name: "duration", value: duration),
- RubyCommand.Argument(name: "in_house", value: inHouse)])
+ let keyIdArg = RubyCommand.Argument(name: "key_id", value: keyId, type: nil)
+ let issuerIdArg = RubyCommand.Argument(name: "issuer_id", value: issuerId, type: nil)
+ let keyFilepathArg = keyFilepath.asRubyArgument(name: "key_filepath", type: nil)
+ let keyContentArg = keyContent.asRubyArgument(name: "key_content", type: nil)
+ let isKeyContentBase64Arg = isKeyContentBase64.asRubyArgument(name: "is_key_content_base64", type: nil)
+ let durationArg = RubyCommand.Argument(name: "duration", value: duration, type: nil)
+ let inHouseArg = inHouse.asRubyArgument(name: "in_house", type: nil)
+ let setSpaceshipTokenArg = setSpaceshipToken.asRubyArgument(name: "set_spaceship_token", type: nil)
+ let array: [RubyCommand.Argument?] = [keyIdArg,
+ issuerIdArg,
+ keyFilepathArg,
+ keyContentArg,
+ isKeyContentBase64Arg,
+ durationArg,
+ inHouseArg,
+ setSpaceshipTokenArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "app_store_connect_api_key", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload your app to [Appaloosa Store](https://www.appaloosa-store.com/)
@@ -178,10 +241,11 @@
- groupIds: Your app is limited to special users? Give us the group ids
- screenshots: Add some screenshots application to your store or hit [enter]
- locale: Select the folder locale for your screenshots
- device: Select the device format for your screenshots
- description: Your app description
+ - changelog: Your app changelog
Appaloosa is a private mobile application store. This action offers a quick deployment on the platform.
You can create an account, push to your existing account, or manage your user groups.
We accept iOS and Android applications.
*/
@@ -189,21 +253,36 @@
apiToken: String,
storeId: String,
groupIds: String = "",
screenshots: String,
locale: String = "en-US",
- device: String? = nil,
- description: String? = nil)
+ device: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ description: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ changelog: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "appaloosa", className: nil, args: [RubyCommand.Argument(name: "binary", value: binary),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "store_id", value: storeId),
- RubyCommand.Argument(name: "group_ids", value: groupIds),
- RubyCommand.Argument(name: "screenshots", value: screenshots),
- RubyCommand.Argument(name: "locale", value: locale),
- RubyCommand.Argument(name: "device", value: device),
- RubyCommand.Argument(name: "description", value: description)])
+ let binaryArg = RubyCommand.Argument(name: "binary", value: binary, type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let storeIdArg = RubyCommand.Argument(name: "store_id", value: storeId, type: nil)
+ let groupIdsArg = RubyCommand.Argument(name: "group_ids", value: groupIds, type: nil)
+ let screenshotsArg = RubyCommand.Argument(name: "screenshots", value: screenshots, type: nil)
+ let localeArg = RubyCommand.Argument(name: "locale", value: locale, type: nil)
+ let deviceArg = device.asRubyArgument(name: "device", type: nil)
+ let descriptionArg = description.asRubyArgument(name: "description", type: nil)
+ let changelogArg = changelog.asRubyArgument(name: "changelog", type: nil)
+ let array: [RubyCommand.Argument?] = [binaryArg,
+ apiTokenArg,
+ storeIdArg,
+ groupIdsArg,
+ screenshotsArg,
+ localeArg,
+ deviceArg,
+ descriptionArg,
+ changelogArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appaloosa", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload your app to [Appetize.io](https://appetize.io/) to stream it in browser
@@ -214,30 +293,45 @@
- url: URL from which the ipa file can be fetched. Alternative to :path
- platform: Platform. Either `ios` or `android`
- path: Path to zipped build on the local filesystem. Either this or `url` must be specified
- publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
- note: Notes you wish to add to the uploaded app
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
If you provide a `public_key`, this will overwrite an existing application. If you want to have this build as a new app version, you shouldn't provide this value.
To integrate appetize into your GitHub workflow check out the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md).
*/
public func appetize(apiHost: String = "api.appetize.io",
apiToken: String,
- url: String? = nil,
+ url: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
- path: String? = nil,
- publicKey: String? = nil,
- note: String? = nil)
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ publicKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ note: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "appetize", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "url", value: url),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "public_key", value: publicKey),
- RubyCommand.Argument(name: "note", value: note)])
+ let apiHostArg = RubyCommand.Argument(name: "api_host", value: apiHost, type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let urlArg = url.asRubyArgument(name: "url", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let publicKeyArg = publicKey.asRubyArgument(name: "public_key", type: nil)
+ let noteArg = note.asRubyArgument(name: "note", type: nil)
+ let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
+ let array: [RubyCommand.Argument?] = [apiHostArg,
+ apiTokenArg,
+ urlArg,
+ platformArg,
+ pathArg,
+ publicKeyArg,
+ noteArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appetize", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generate an URL for appetize simulator
@@ -260,30 +354,45 @@
Check out the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md) for more information
*/
public func appetizeViewingUrlGenerator(publicKey: String,
baseUrl: String = "https://appetize.io/embed",
device: String = "iphone5s",
- scale: String? = nil,
+ scale: OptionalConfigValue<String?> = .fastlaneDefault(nil),
orientation: String = "portrait",
- language: String? = nil,
+ language: OptionalConfigValue<String?> = .fastlaneDefault(nil),
color: String = "black",
- launchUrl: String? = nil,
- osVersion: String? = nil,
- params: String? = nil,
- proxy: String? = nil)
+ launchUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ osVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ params: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxy: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "appetize_viewing_url_generator", className: nil, args: [RubyCommand.Argument(name: "public_key", value: publicKey),
- RubyCommand.Argument(name: "base_url", value: baseUrl),
- RubyCommand.Argument(name: "device", value: device),
- RubyCommand.Argument(name: "scale", value: scale),
- RubyCommand.Argument(name: "orientation", value: orientation),
- RubyCommand.Argument(name: "language", value: language),
- RubyCommand.Argument(name: "color", value: color),
- RubyCommand.Argument(name: "launch_url", value: launchUrl),
- RubyCommand.Argument(name: "os_version", value: osVersion),
- RubyCommand.Argument(name: "params", value: params),
- RubyCommand.Argument(name: "proxy", value: proxy)])
+ let publicKeyArg = RubyCommand.Argument(name: "public_key", value: publicKey, type: nil)
+ let baseUrlArg = RubyCommand.Argument(name: "base_url", value: baseUrl, type: nil)
+ let deviceArg = RubyCommand.Argument(name: "device", value: device, type: nil)
+ let scaleArg = scale.asRubyArgument(name: "scale", type: nil)
+ let orientationArg = RubyCommand.Argument(name: "orientation", value: orientation, type: nil)
+ let languageArg = language.asRubyArgument(name: "language", type: nil)
+ let colorArg = RubyCommand.Argument(name: "color", value: color, type: nil)
+ let launchUrlArg = launchUrl.asRubyArgument(name: "launch_url", type: nil)
+ let osVersionArg = osVersion.asRubyArgument(name: "os_version", type: nil)
+ let paramsArg = params.asRubyArgument(name: "params", type: nil)
+ let proxyArg = proxy.asRubyArgument(name: "proxy", type: nil)
+ let array: [RubyCommand.Argument?] = [publicKeyArg,
+ baseUrlArg,
+ deviceArg,
+ scaleArg,
+ orientationArg,
+ languageArg,
+ colorArg,
+ launchUrlArg,
+ osVersionArg,
+ paramsArg,
+ proxyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appetize_viewing_url_generator", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Run UI test by Appium with RSpec
@@ -300,26 +409,39 @@
- appiumLib: Hash of appium_lib for Appium::Driver
*/
public func appium(platform: String,
specPath: String,
appPath: String,
- invokeAppiumServer: Bool = true,
+ invokeAppiumServer: OptionalConfigValue<Bool> = .fastlaneDefault(true),
host: String = "0.0.0.0",
port: Int = 4723,
- appiumPath: String? = nil,
- caps: [String: Any]? = nil,
- appiumLib: [String: Any]? = nil)
+ appiumPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ caps: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appiumLib: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "appium", className: nil, args: [RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "spec_path", value: specPath),
- RubyCommand.Argument(name: "app_path", value: appPath),
- RubyCommand.Argument(name: "invoke_appium_server", value: invokeAppiumServer),
- RubyCommand.Argument(name: "host", value: host),
- RubyCommand.Argument(name: "port", value: port),
- RubyCommand.Argument(name: "appium_path", value: appiumPath),
- RubyCommand.Argument(name: "caps", value: caps),
- RubyCommand.Argument(name: "appium_lib", value: appiumLib)])
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let specPathArg = RubyCommand.Argument(name: "spec_path", value: specPath, type: nil)
+ let appPathArg = RubyCommand.Argument(name: "app_path", value: appPath, type: nil)
+ let invokeAppiumServerArg = invokeAppiumServer.asRubyArgument(name: "invoke_appium_server", type: nil)
+ let hostArg = RubyCommand.Argument(name: "host", value: host, type: nil)
+ let portArg = RubyCommand.Argument(name: "port", value: port, type: nil)
+ let appiumPathArg = appiumPath.asRubyArgument(name: "appium_path", type: nil)
+ let capsArg = caps.asRubyArgument(name: "caps", type: nil)
+ let appiumLibArg = appiumLib.asRubyArgument(name: "appium_lib", type: nil)
+ let array: [RubyCommand.Argument?] = [platformArg,
+ specPathArg,
+ appPathArg,
+ invokeAppiumServerArg,
+ hostArg,
+ portArg,
+ appiumPathArg,
+ capsArg,
+ appiumLibArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appium", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generate Apple-like source code documentation from the source code
@@ -372,100 +494,149 @@
- verbose: Log verbosity level [0-6,xcode]
Runs `appledoc [OPTIONS] <paths to source dirs or files>` for the project
*/
public func appledoc(input: Any,
- output: String? = nil,
- templates: String? = nil,
- docsetInstallPath: String? = nil,
- include: String? = nil,
+ output: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ templates: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetInstallPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ include: OptionalConfigValue<String?> = .fastlaneDefault(nil),
ignore: Any? = nil,
excludeOutput: Any? = nil,
- indexDesc: String? = nil,
+ indexDesc: OptionalConfigValue<String?> = .fastlaneDefault(nil),
projectName: String,
- projectVersion: String? = nil,
+ projectVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
projectCompany: String,
- companyId: String? = nil,
- createHtml: Bool = false,
- createDocset: Bool = false,
- installDocset: Bool = false,
- publishDocset: Bool = false,
- noCreateDocset: Bool = false,
- htmlAnchors: String? = nil,
- cleanOutput: Bool = false,
- docsetBundleId: String? = nil,
- docsetBundleName: String? = nil,
- docsetDesc: String? = nil,
- docsetCopyright: String? = nil,
- docsetFeedName: String? = nil,
- docsetFeedUrl: String? = nil,
- docsetFeedFormats: String? = nil,
- docsetPackageUrl: String? = nil,
- docsetFallbackUrl: String? = nil,
- docsetPublisherId: String? = nil,
- docsetPublisherName: String? = nil,
- docsetMinXcodeVersion: String? = nil,
- docsetPlatformFamily: String? = nil,
- docsetCertIssuer: String? = nil,
- docsetCertSigner: String? = nil,
- docsetBundleFilename: String? = nil,
- docsetAtomFilename: String? = nil,
- docsetXmlFilename: String? = nil,
- docsetPackageFilename: String? = nil,
- options: String? = nil,
- crossrefFormat: String? = nil,
+ companyId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ createHtml: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ createDocset: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ installDocset: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ publishDocset: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noCreateDocset: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ htmlAnchors: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ cleanOutput: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ docsetBundleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetBundleName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetDesc: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetCopyright: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetFeedName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetFeedUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetFeedFormats: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetPackageUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetFallbackUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetPublisherId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetPublisherName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetMinXcodeVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetPlatformFamily: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetCertIssuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetCertSigner: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetBundleFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetAtomFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetXmlFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ docsetPackageFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ options: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ crossrefFormat: OptionalConfigValue<String?> = .fastlaneDefault(nil),
exitThreshold: Int = 2,
- docsSectionTitle: String? = nil,
- warnings: String? = nil,
+ docsSectionTitle: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ warnings: OptionalConfigValue<String?> = .fastlaneDefault(nil),
logformat: Any? = nil,
verbose: Any? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "appledoc", className: nil, args: [RubyCommand.Argument(name: "input", value: input),
- RubyCommand.Argument(name: "output", value: output),
- RubyCommand.Argument(name: "templates", value: templates),
- RubyCommand.Argument(name: "docset_install_path", value: docsetInstallPath),
- RubyCommand.Argument(name: "include", value: include),
- RubyCommand.Argument(name: "ignore", value: ignore),
- RubyCommand.Argument(name: "exclude_output", value: excludeOutput),
- RubyCommand.Argument(name: "index_desc", value: indexDesc),
- RubyCommand.Argument(name: "project_name", value: projectName),
- RubyCommand.Argument(name: "project_version", value: projectVersion),
- RubyCommand.Argument(name: "project_company", value: projectCompany),
- RubyCommand.Argument(name: "company_id", value: companyId),
- RubyCommand.Argument(name: "create_html", value: createHtml),
- RubyCommand.Argument(name: "create_docset", value: createDocset),
- RubyCommand.Argument(name: "install_docset", value: installDocset),
- RubyCommand.Argument(name: "publish_docset", value: publishDocset),
- RubyCommand.Argument(name: "no_create_docset", value: noCreateDocset),
- RubyCommand.Argument(name: "html_anchors", value: htmlAnchors),
- RubyCommand.Argument(name: "clean_output", value: cleanOutput),
- RubyCommand.Argument(name: "docset_bundle_id", value: docsetBundleId),
- RubyCommand.Argument(name: "docset_bundle_name", value: docsetBundleName),
- RubyCommand.Argument(name: "docset_desc", value: docsetDesc),
- RubyCommand.Argument(name: "docset_copyright", value: docsetCopyright),
- RubyCommand.Argument(name: "docset_feed_name", value: docsetFeedName),
- RubyCommand.Argument(name: "docset_feed_url", value: docsetFeedUrl),
- RubyCommand.Argument(name: "docset_feed_formats", value: docsetFeedFormats),
- RubyCommand.Argument(name: "docset_package_url", value: docsetPackageUrl),
- RubyCommand.Argument(name: "docset_fallback_url", value: docsetFallbackUrl),
- RubyCommand.Argument(name: "docset_publisher_id", value: docsetPublisherId),
- RubyCommand.Argument(name: "docset_publisher_name", value: docsetPublisherName),
- RubyCommand.Argument(name: "docset_min_xcode_version", value: docsetMinXcodeVersion),
- RubyCommand.Argument(name: "docset_platform_family", value: docsetPlatformFamily),
- RubyCommand.Argument(name: "docset_cert_issuer", value: docsetCertIssuer),
- RubyCommand.Argument(name: "docset_cert_signer", value: docsetCertSigner),
- RubyCommand.Argument(name: "docset_bundle_filename", value: docsetBundleFilename),
- RubyCommand.Argument(name: "docset_atom_filename", value: docsetAtomFilename),
- RubyCommand.Argument(name: "docset_xml_filename", value: docsetXmlFilename),
- RubyCommand.Argument(name: "docset_package_filename", value: docsetPackageFilename),
- RubyCommand.Argument(name: "options", value: options),
- RubyCommand.Argument(name: "crossref_format", value: crossrefFormat),
- RubyCommand.Argument(name: "exit_threshold", value: exitThreshold),
- RubyCommand.Argument(name: "docs_section_title", value: docsSectionTitle),
- RubyCommand.Argument(name: "warnings", value: warnings),
- RubyCommand.Argument(name: "logformat", value: logformat),
- RubyCommand.Argument(name: "verbose", value: verbose)])
+ let inputArg = RubyCommand.Argument(name: "input", value: input, type: nil)
+ let outputArg = output.asRubyArgument(name: "output", type: nil)
+ let templatesArg = templates.asRubyArgument(name: "templates", type: nil)
+ let docsetInstallPathArg = docsetInstallPath.asRubyArgument(name: "docset_install_path", type: nil)
+ let includeArg = include.asRubyArgument(name: "include", type: nil)
+ let ignoreArg = RubyCommand.Argument(name: "ignore", value: ignore, type: nil)
+ let excludeOutputArg = RubyCommand.Argument(name: "exclude_output", value: excludeOutput, type: nil)
+ let indexDescArg = indexDesc.asRubyArgument(name: "index_desc", type: nil)
+ let projectNameArg = RubyCommand.Argument(name: "project_name", value: projectName, type: nil)
+ let projectVersionArg = projectVersion.asRubyArgument(name: "project_version", type: nil)
+ let projectCompanyArg = RubyCommand.Argument(name: "project_company", value: projectCompany, type: nil)
+ let companyIdArg = companyId.asRubyArgument(name: "company_id", type: nil)
+ let createHtmlArg = createHtml.asRubyArgument(name: "create_html", type: nil)
+ let createDocsetArg = createDocset.asRubyArgument(name: "create_docset", type: nil)
+ let installDocsetArg = installDocset.asRubyArgument(name: "install_docset", type: nil)
+ let publishDocsetArg = publishDocset.asRubyArgument(name: "publish_docset", type: nil)
+ let noCreateDocsetArg = noCreateDocset.asRubyArgument(name: "no_create_docset", type: nil)
+ let htmlAnchorsArg = htmlAnchors.asRubyArgument(name: "html_anchors", type: nil)
+ let cleanOutputArg = cleanOutput.asRubyArgument(name: "clean_output", type: nil)
+ let docsetBundleIdArg = docsetBundleId.asRubyArgument(name: "docset_bundle_id", type: nil)
+ let docsetBundleNameArg = docsetBundleName.asRubyArgument(name: "docset_bundle_name", type: nil)
+ let docsetDescArg = docsetDesc.asRubyArgument(name: "docset_desc", type: nil)
+ let docsetCopyrightArg = docsetCopyright.asRubyArgument(name: "docset_copyright", type: nil)
+ let docsetFeedNameArg = docsetFeedName.asRubyArgument(name: "docset_feed_name", type: nil)
+ let docsetFeedUrlArg = docsetFeedUrl.asRubyArgument(name: "docset_feed_url", type: nil)
+ let docsetFeedFormatsArg = docsetFeedFormats.asRubyArgument(name: "docset_feed_formats", type: nil)
+ let docsetPackageUrlArg = docsetPackageUrl.asRubyArgument(name: "docset_package_url", type: nil)
+ let docsetFallbackUrlArg = docsetFallbackUrl.asRubyArgument(name: "docset_fallback_url", type: nil)
+ let docsetPublisherIdArg = docsetPublisherId.asRubyArgument(name: "docset_publisher_id", type: nil)
+ let docsetPublisherNameArg = docsetPublisherName.asRubyArgument(name: "docset_publisher_name", type: nil)
+ let docsetMinXcodeVersionArg = docsetMinXcodeVersion.asRubyArgument(name: "docset_min_xcode_version", type: nil)
+ let docsetPlatformFamilyArg = docsetPlatformFamily.asRubyArgument(name: "docset_platform_family", type: nil)
+ let docsetCertIssuerArg = docsetCertIssuer.asRubyArgument(name: "docset_cert_issuer", type: nil)
+ let docsetCertSignerArg = docsetCertSigner.asRubyArgument(name: "docset_cert_signer", type: nil)
+ let docsetBundleFilenameArg = docsetBundleFilename.asRubyArgument(name: "docset_bundle_filename", type: nil)
+ let docsetAtomFilenameArg = docsetAtomFilename.asRubyArgument(name: "docset_atom_filename", type: nil)
+ let docsetXmlFilenameArg = docsetXmlFilename.asRubyArgument(name: "docset_xml_filename", type: nil)
+ let docsetPackageFilenameArg = docsetPackageFilename.asRubyArgument(name: "docset_package_filename", type: nil)
+ let optionsArg = options.asRubyArgument(name: "options", type: nil)
+ let crossrefFormatArg = crossrefFormat.asRubyArgument(name: "crossref_format", type: nil)
+ let exitThresholdArg = RubyCommand.Argument(name: "exit_threshold", value: exitThreshold, type: nil)
+ let docsSectionTitleArg = docsSectionTitle.asRubyArgument(name: "docs_section_title", type: nil)
+ let warningsArg = warnings.asRubyArgument(name: "warnings", type: nil)
+ let logformatArg = RubyCommand.Argument(name: "logformat", value: logformat, type: nil)
+ let verboseArg = RubyCommand.Argument(name: "verbose", value: verbose, type: nil)
+ let array: [RubyCommand.Argument?] = [inputArg,
+ outputArg,
+ templatesArg,
+ docsetInstallPathArg,
+ includeArg,
+ ignoreArg,
+ excludeOutputArg,
+ indexDescArg,
+ projectNameArg,
+ projectVersionArg,
+ projectCompanyArg,
+ companyIdArg,
+ createHtmlArg,
+ createDocsetArg,
+ installDocsetArg,
+ publishDocsetArg,
+ noCreateDocsetArg,
+ htmlAnchorsArg,
+ cleanOutputArg,
+ docsetBundleIdArg,
+ docsetBundleNameArg,
+ docsetDescArg,
+ docsetCopyrightArg,
+ docsetFeedNameArg,
+ docsetFeedUrlArg,
+ docsetFeedFormatsArg,
+ docsetPackageUrlArg,
+ docsetFallbackUrlArg,
+ docsetPublisherIdArg,
+ docsetPublisherNameArg,
+ docsetMinXcodeVersionArg,
+ docsetPlatformFamilyArg,
+ docsetCertIssuerArg,
+ docsetCertSignerArg,
+ docsetBundleFilenameArg,
+ docsetAtomFilenameArg,
+ docsetXmlFilenameArg,
+ docsetPackageFilenameArg,
+ optionsArg,
+ crossrefFormatArg,
+ exitThresholdArg,
+ docsSectionTitleArg,
+ warningsArg,
+ logformatArg,
+ verboseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appledoc", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `upload_to_app_store` action
@@ -514,11 +685,11 @@
- secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
- primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)
- primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)
- secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)
- secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)
- - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information
+ - tradeRepresentativeContactInformation: **DEPRECATED!** This is no longer used by App Store Connect - Metadata: A hash containing the trade representative contact information
- appReviewInformation: Metadata: A hash containing the review information
- appReviewAttachmentFile: Metadata: Path to the app review attachment file
- description: Metadata: The localised app description
- name: Metadata: The localised app name
- subtitle: Metadata: The localised app subtitle
@@ -539,135 +710,201 @@
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
This is useful when running _fastlane_ on your Continuous Integration server:
`_upload_to_app_store_(force: true)`
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.
*/
-public func appstore(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- appIdentifier: String? = nil,
- appVersion: String? = nil,
- ipa: String? = nil,
- pkg: String? = nil,
- buildNumber: String? = nil,
+public func appstore(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pkg: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
- editLive: Bool = false,
- useLiveVersion: Bool = false,
- metadataPath: String? = nil,
- screenshotsPath: String? = nil,
- skipBinaryUpload: Bool = false,
- skipScreenshots: Bool = false,
- skipMetadata: Bool = false,
- skipAppVersionUpdate: Bool = false,
- force: Bool = false,
- overwriteScreenshots: Bool = false,
- submitForReview: Bool = false,
- rejectIfPossible: Bool = false,
- automaticRelease: Bool? = nil,
- autoReleaseDate: Int? = nil,
- phasedRelease: Bool = false,
- resetRatings: Bool = false,
- priceTier: Any? = nil,
- appRatingConfigPath: String? = nil,
- submissionInformation: [String: Any]? = nil,
- teamId: Any? = nil,
- teamName: String? = nil,
- devPortalTeamId: String? = nil,
- devPortalTeamName: String? = nil,
- itcProvider: String? = nil,
- runPrecheckBeforeSubmit: Bool = true,
- precheckDefaultRuleLevel: Any = "warn",
- individualMetadataItems: [String]? = nil,
- appIcon: String? = nil,
- appleWatchAppIcon: String? = nil,
- copyright: String? = nil,
- primaryCategory: String? = nil,
- secondaryCategory: String? = nil,
- primaryFirstSubCategory: String? = nil,
- primarySecondSubCategory: String? = nil,
- secondaryFirstSubCategory: String? = nil,
- secondarySecondSubCategory: String? = nil,
- tradeRepresentativeContactInformation: [String: Any]? = nil,
- appReviewInformation: [String: Any]? = nil,
- appReviewAttachmentFile: String? = nil,
- description: Any? = nil,
- name: Any? = nil,
- subtitle: [String: Any]? = nil,
- keywords: [String: Any]? = nil,
- promotionalText: [String: Any]? = nil,
- releaseNotes: Any? = nil,
- privacyUrl: Any? = nil,
- appleTvPrivacyPolicy: Any? = nil,
- supportUrl: Any? = nil,
- marketingUrl: Any? = nil,
- languages: [String]? = nil,
- ignoreLanguageDirectoryValidation: Bool = false,
- precheckIncludeInAppPurchases: Bool = true,
- app: Any)
+ editLive: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLiveVersion: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ screenshotsPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipBinaryUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resetRatings: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ priceTier: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ appRatingConfigPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ submissionInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ runPrecheckBeforeSubmit: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ precheckDefaultRuleLevel: String = "warn",
+ individualMetadataItems: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ appIcon: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appleWatchAppIcon: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ copyright: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ tradeRepresentativeContactInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appReviewInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appReviewAttachmentFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ description: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ name: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ subtitle: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ keywords: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ promotionalText: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ releaseNotes: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ privacyUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appleTvPrivacyPolicy: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ supportUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ marketingUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ languages: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ ignoreLanguageDirectoryValidation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ precheckIncludeInAppPurchases: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ app: OptionalConfigValue<Int?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "appstore", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "pkg", value: pkg),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "edit_live", value: editLive),
- RubyCommand.Argument(name: "use_live_version", value: useLiveVersion),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath),
- RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload),
- RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots),
- RubyCommand.Argument(name: "skip_metadata", value: skipMetadata),
- RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots),
- RubyCommand.Argument(name: "submit_for_review", value: submitForReview),
- RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible),
- RubyCommand.Argument(name: "automatic_release", value: automaticRelease),
- RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate),
- RubyCommand.Argument(name: "phased_release", value: phasedRelease),
- RubyCommand.Argument(name: "reset_ratings", value: resetRatings),
- RubyCommand.Argument(name: "price_tier", value: priceTier),
- RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath),
- RubyCommand.Argument(name: "submission_information", value: submissionInformation),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit),
- RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel),
- RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems),
- RubyCommand.Argument(name: "app_icon", value: appIcon),
- RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon),
- RubyCommand.Argument(name: "copyright", value: copyright),
- RubyCommand.Argument(name: "primary_category", value: primaryCategory),
- RubyCommand.Argument(name: "secondary_category", value: secondaryCategory),
- RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory),
- RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory),
- RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory),
- RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory),
- RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation),
- RubyCommand.Argument(name: "app_review_information", value: appReviewInformation),
- RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile),
- RubyCommand.Argument(name: "description", value: description),
- RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "subtitle", value: subtitle),
- RubyCommand.Argument(name: "keywords", value: keywords),
- RubyCommand.Argument(name: "promotional_text", value: promotionalText),
- RubyCommand.Argument(name: "release_notes", value: releaseNotes),
- RubyCommand.Argument(name: "privacy_url", value: privacyUrl),
- RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy),
- RubyCommand.Argument(name: "support_url", value: supportUrl),
- RubyCommand.Argument(name: "marketing_url", value: marketingUrl),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation),
- RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases),
- RubyCommand.Argument(name: "app", value: app)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let pkgArg = pkg.asRubyArgument(name: "pkg", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let editLiveArg = editLive.asRubyArgument(name: "edit_live", type: nil)
+ let useLiveVersionArg = useLiveVersion.asRubyArgument(name: "use_live_version", type: nil)
+ let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
+ let screenshotsPathArg = screenshotsPath.asRubyArgument(name: "screenshots_path", type: nil)
+ let skipBinaryUploadArg = skipBinaryUpload.asRubyArgument(name: "skip_binary_upload", type: nil)
+ let skipScreenshotsArg = skipScreenshots.asRubyArgument(name: "skip_screenshots", type: nil)
+ let skipMetadataArg = skipMetadata.asRubyArgument(name: "skip_metadata", type: nil)
+ let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
+ let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
+ let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
+ let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
+ let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
+ let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
+ let resetRatingsArg = resetRatings.asRubyArgument(name: "reset_ratings", type: nil)
+ let priceTierArg = priceTier.asRubyArgument(name: "price_tier", type: nil)
+ let appRatingConfigPathArg = appRatingConfigPath.asRubyArgument(name: "app_rating_config_path", type: nil)
+ let submissionInformationArg = submissionInformation.asRubyArgument(name: "submission_information", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let devPortalTeamNameArg = devPortalTeamName.asRubyArgument(name: "dev_portal_team_name", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let runPrecheckBeforeSubmitArg = runPrecheckBeforeSubmit.asRubyArgument(name: "run_precheck_before_submit", type: nil)
+ let precheckDefaultRuleLevelArg = RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel, type: nil)
+ let individualMetadataItemsArg = individualMetadataItems.asRubyArgument(name: "individual_metadata_items", type: nil)
+ let appIconArg = appIcon.asRubyArgument(name: "app_icon", type: nil)
+ let appleWatchAppIconArg = appleWatchAppIcon.asRubyArgument(name: "apple_watch_app_icon", type: nil)
+ let copyrightArg = copyright.asRubyArgument(name: "copyright", type: nil)
+ let primaryCategoryArg = primaryCategory.asRubyArgument(name: "primary_category", type: nil)
+ let secondaryCategoryArg = secondaryCategory.asRubyArgument(name: "secondary_category", type: nil)
+ let primaryFirstSubCategoryArg = primaryFirstSubCategory.asRubyArgument(name: "primary_first_sub_category", type: nil)
+ let primarySecondSubCategoryArg = primarySecondSubCategory.asRubyArgument(name: "primary_second_sub_category", type: nil)
+ let secondaryFirstSubCategoryArg = secondaryFirstSubCategory.asRubyArgument(name: "secondary_first_sub_category", type: nil)
+ let secondarySecondSubCategoryArg = secondarySecondSubCategory.asRubyArgument(name: "secondary_second_sub_category", type: nil)
+ let tradeRepresentativeContactInformationArg = tradeRepresentativeContactInformation.asRubyArgument(name: "trade_representative_contact_information", type: nil)
+ let appReviewInformationArg = appReviewInformation.asRubyArgument(name: "app_review_information", type: nil)
+ let appReviewAttachmentFileArg = appReviewAttachmentFile.asRubyArgument(name: "app_review_attachment_file", type: nil)
+ let descriptionArg = description.asRubyArgument(name: "description", type: nil)
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let subtitleArg = subtitle.asRubyArgument(name: "subtitle", type: nil)
+ let keywordsArg = keywords.asRubyArgument(name: "keywords", type: nil)
+ let promotionalTextArg = promotionalText.asRubyArgument(name: "promotional_text", type: nil)
+ let releaseNotesArg = releaseNotes.asRubyArgument(name: "release_notes", type: nil)
+ let privacyUrlArg = privacyUrl.asRubyArgument(name: "privacy_url", type: nil)
+ let appleTvPrivacyPolicyArg = appleTvPrivacyPolicy.asRubyArgument(name: "apple_tv_privacy_policy", type: nil)
+ let supportUrlArg = supportUrl.asRubyArgument(name: "support_url", type: nil)
+ let marketingUrlArg = marketingUrl.asRubyArgument(name: "marketing_url", type: nil)
+ let languagesArg = languages.asRubyArgument(name: "languages", type: nil)
+ let ignoreLanguageDirectoryValidationArg = ignoreLanguageDirectoryValidation.asRubyArgument(name: "ignore_language_directory_validation", type: nil)
+ let precheckIncludeInAppPurchasesArg = precheckIncludeInAppPurchases.asRubyArgument(name: "precheck_include_in_app_purchases", type: nil)
+ let appArg = app.asRubyArgument(name: "app", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appVersionArg,
+ ipaArg,
+ pkgArg,
+ buildNumberArg,
+ platformArg,
+ editLiveArg,
+ useLiveVersionArg,
+ metadataPathArg,
+ screenshotsPathArg,
+ skipBinaryUploadArg,
+ skipScreenshotsArg,
+ skipMetadataArg,
+ skipAppVersionUpdateArg,
+ forceArg,
+ overwriteScreenshotsArg,
+ submitForReviewArg,
+ rejectIfPossibleArg,
+ automaticReleaseArg,
+ autoReleaseDateArg,
+ phasedReleaseArg,
+ resetRatingsArg,
+ priceTierArg,
+ appRatingConfigPathArg,
+ submissionInformationArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ devPortalTeamNameArg,
+ itcProviderArg,
+ runPrecheckBeforeSubmitArg,
+ precheckDefaultRuleLevelArg,
+ individualMetadataItemsArg,
+ appIconArg,
+ appleWatchAppIconArg,
+ copyrightArg,
+ primaryCategoryArg,
+ secondaryCategoryArg,
+ primaryFirstSubCategoryArg,
+ primarySecondSubCategoryArg,
+ secondaryFirstSubCategoryArg,
+ secondarySecondSubCategoryArg,
+ tradeRepresentativeContactInformationArg,
+ appReviewInformationArg,
+ appReviewAttachmentFileArg,
+ descriptionArg,
+ nameArg,
+ subtitleArg,
+ keywordsArg,
+ promotionalTextArg,
+ releaseNotesArg,
+ privacyUrlArg,
+ appleTvPrivacyPolicyArg,
+ supportUrlArg,
+ marketingUrlArg,
+ languagesArg,
+ ignoreLanguageDirectoryValidationArg,
+ precheckIncludeInAppPurchasesArg,
+ appArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "appstore", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload dSYM file to [Apteligent (Crittercism)](http://www.apteligent.com/)
@@ -675,17 +912,24 @@
- parameters:
- dsym: dSYM.zip file to upload to Apteligent
- appId: Apteligent App ID key e.g. 569f5c87cb99e10e00c7xxxx
- apiKey: Apteligent App API key e.g. IXPQIi8yCbHaLliqzRoo065tH0lxxxxx
*/
-public func apteligent(dsym: String? = nil,
+public func apteligent(dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appId: String,
apiKey: String)
{
- let command = RubyCommand(commandID: "", methodName: "apteligent", className: nil, args: [RubyCommand.Argument(name: "dsym", value: dsym),
- RubyCommand.Argument(name: "app_id", value: appId),
- RubyCommand.Argument(name: "api_key", value: apiKey)])
+ let dsymArg = dsym.asRubyArgument(name: "dsym", type: nil)
+ let appIdArg = RubyCommand.Argument(name: "app_id", value: appId, type: nil)
+ let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
+ let array: [RubyCommand.Argument?] = [dsymArg,
+ appIdArg,
+ apiKeyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "apteligent", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action uploads an artifact to artifactory
@@ -695,48 +939,72 @@
- repo: Artifactory repo to put the file in
- repoPath: Path to deploy within the repo, including filename
- endpoint: Artifactory endpoint
- username: Artifactory username
- password: Artifactory password
+ - apiKey: Artifactory API key
- properties: Artifact properties hash
- sslPemFile: Location of pem file to use for ssl verification
- sslVerify: Verify SSL
- proxyUsername: Proxy username
- proxyPassword: Proxy password
- proxyAddress: Proxy address
- proxyPort: Proxy port
- readTimeout: Read timeout
+
+ Connect to the artifactory server using either a username/password or an api_key
*/
public func artifactory(file: String,
repo: String,
repoPath: String,
endpoint: String,
- username: String,
- password: String,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
properties: [String: Any] = [:],
- sslPemFile: String? = nil,
- sslVerify: Bool = true,
- proxyUsername: String? = nil,
- proxyPassword: String? = nil,
- proxyAddress: String? = nil,
- proxyPort: String? = nil,
- readTimeout: String? = nil)
+ sslPemFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sslVerify: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ proxyUsername: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyAddress: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPort: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ readTimeout: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "artifactory", className: nil, args: [RubyCommand.Argument(name: "file", value: file),
- RubyCommand.Argument(name: "repo", value: repo),
- RubyCommand.Argument(name: "repo_path", value: repoPath),
- RubyCommand.Argument(name: "endpoint", value: endpoint),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "properties", value: properties),
- RubyCommand.Argument(name: "ssl_pem_file", value: sslPemFile),
- RubyCommand.Argument(name: "ssl_verify", value: sslVerify),
- RubyCommand.Argument(name: "proxy_username", value: proxyUsername),
- RubyCommand.Argument(name: "proxy_password", value: proxyPassword),
- RubyCommand.Argument(name: "proxy_address", value: proxyAddress),
- RubyCommand.Argument(name: "proxy_port", value: proxyPort),
- RubyCommand.Argument(name: "read_timeout", value: readTimeout)])
+ let fileArg = RubyCommand.Argument(name: "file", value: file, type: nil)
+ let repoArg = RubyCommand.Argument(name: "repo", value: repo, type: nil)
+ let repoPathArg = RubyCommand.Argument(name: "repo_path", value: repoPath, type: nil)
+ let endpointArg = RubyCommand.Argument(name: "endpoint", value: endpoint, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let passwordArg = password.asRubyArgument(name: "password", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let propertiesArg = RubyCommand.Argument(name: "properties", value: properties, type: nil)
+ let sslPemFileArg = sslPemFile.asRubyArgument(name: "ssl_pem_file", type: nil)
+ let sslVerifyArg = sslVerify.asRubyArgument(name: "ssl_verify", type: nil)
+ let proxyUsernameArg = proxyUsername.asRubyArgument(name: "proxy_username", type: nil)
+ let proxyPasswordArg = proxyPassword.asRubyArgument(name: "proxy_password", type: nil)
+ let proxyAddressArg = proxyAddress.asRubyArgument(name: "proxy_address", type: nil)
+ let proxyPortArg = proxyPort.asRubyArgument(name: "proxy_port", type: nil)
+ let readTimeoutArg = readTimeout.asRubyArgument(name: "read_timeout", type: nil)
+ let array: [RubyCommand.Argument?] = [fileArg,
+ repoArg,
+ repoPathArg,
+ endpointArg,
+ usernameArg,
+ passwordArg,
+ apiKeyArg,
+ propertiesArg,
+ sslPemFileArg,
+ sslVerifyArg,
+ proxyUsernameArg,
+ proxyPasswordArg,
+ proxyAddressArg,
+ proxyPortArg,
+ readTimeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "artifactory", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Configures Xcode's Codesigning options
@@ -754,36 +1022,53 @@
- returns: The current status (boolean) of codesigning after modification
Configures Xcode's Codesigning options of all targets in the project
*/
public func automaticCodeSigning(path: String,
- useAutomaticSigning: Bool = false,
- teamId: String? = nil,
- targets: [String]? = nil,
- codeSignIdentity: String? = nil,
- profileName: String? = nil,
- profileUuid: String? = nil,
- bundleIdentifier: String? = nil)
+ useAutomaticSigning: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ targets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ codeSignIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileUuid: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "automatic_code_signing", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "use_automatic_signing", value: useAutomaticSigning),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "targets", value: targets),
- RubyCommand.Argument(name: "code_sign_identity", value: codeSignIdentity),
- RubyCommand.Argument(name: "profile_name", value: profileName),
- RubyCommand.Argument(name: "profile_uuid", value: profileUuid),
- RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let useAutomaticSigningArg = useAutomaticSigning.asRubyArgument(name: "use_automatic_signing", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let targetsArg = targets.asRubyArgument(name: "targets", type: nil)
+ let codeSignIdentityArg = codeSignIdentity.asRubyArgument(name: "code_sign_identity", type: nil)
+ let profileNameArg = profileName.asRubyArgument(name: "profile_name", type: nil)
+ let profileUuidArg = profileUuid.asRubyArgument(name: "profile_uuid", type: nil)
+ let bundleIdentifierArg = bundleIdentifier.asRubyArgument(name: "bundle_identifier", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ useAutomaticSigningArg,
+ teamIdArg,
+ targetsArg,
+ codeSignIdentityArg,
+ profileNameArg,
+ profileUuidArg,
+ bundleIdentifierArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "automatic_code_signing", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action backs up your file to "[path].back"
- parameter path: Path to the file you want to backup
*/
public func backupFile(path: String) {
- let command = RubyCommand(commandID: "", methodName: "backup_file", className: nil, args: [RubyCommand.Argument(name: "path", value: path)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "backup_file", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Save your [zipped] xcarchive elsewhere from default path
@@ -795,19 +1080,28 @@
- zipFilename: Filename of the compressed archive. Will be appended by `.xcarchive.zip`. Default value is the output xcarchive filename
- versioned: Create a versioned (date and app version) subfolder where to put the archive
*/
public func backupXcarchive(xcarchive: String,
destination: String,
- zip: Bool = true,
- zipFilename: String? = nil,
- versioned: Bool = true)
+ zip: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ zipFilename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versioned: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "backup_xcarchive", className: nil, args: [RubyCommand.Argument(name: "xcarchive", value: xcarchive),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "zip", value: zip),
- RubyCommand.Argument(name: "zip_filename", value: zipFilename),
- RubyCommand.Argument(name: "versioned", value: versioned)])
+ let xcarchiveArg = RubyCommand.Argument(name: "xcarchive", value: xcarchive, type: nil)
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
+ let zipArg = zip.asRubyArgument(name: "zip", type: nil)
+ let zipFilenameArg = zipFilename.asRubyArgument(name: "zip_filename", type: nil)
+ let versionedArg = versioned.asRubyArgument(name: "versioned", type: nil)
+ let array: [RubyCommand.Argument?] = [xcarchiveArg,
+ destinationArg,
+ zipArg,
+ zipFilenameArg,
+ versionedArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "backup_xcarchive", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Automatically add a badge to your app icon
@@ -829,33 +1123,48 @@
This action will add a light/dark badge onto your app icon.
You can also provide your custom badge/overlay or add a shield for more customization.
More info: [https://github.com/HazAT/badge](https://github.com/HazAT/badge)
**Note**: If you want to reset the badge back to default, you can use `sh 'git checkout -- <path>/Assets.xcassets/'`.
*/
-public func badge(dark: Any? = nil,
- custom: String? = nil,
- noBadge: Any? = nil,
- shield: String? = nil,
- alpha: Any? = nil,
+public func badge(dark: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ custom: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ noBadge: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ shield: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ alpha: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
path: String = ".",
- shieldIoTimeout: Any? = nil,
- glob: String? = nil,
- alphaChannel: Any? = nil,
- shieldGravity: String? = nil,
- shieldNoResize: Any? = nil)
+ shieldIoTimeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ glob: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ alphaChannel: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ shieldGravity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ shieldNoResize: OptionalConfigValue<Bool?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "badge", className: nil, args: [RubyCommand.Argument(name: "dark", value: dark),
- RubyCommand.Argument(name: "custom", value: custom),
- RubyCommand.Argument(name: "no_badge", value: noBadge),
- RubyCommand.Argument(name: "shield", value: shield),
- RubyCommand.Argument(name: "alpha", value: alpha),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "shield_io_timeout", value: shieldIoTimeout),
- RubyCommand.Argument(name: "glob", value: glob),
- RubyCommand.Argument(name: "alpha_channel", value: alphaChannel),
- RubyCommand.Argument(name: "shield_gravity", value: shieldGravity),
- RubyCommand.Argument(name: "shield_no_resize", value: shieldNoResize)])
+ let darkArg = dark.asRubyArgument(name: "dark", type: nil)
+ let customArg = custom.asRubyArgument(name: "custom", type: nil)
+ let noBadgeArg = noBadge.asRubyArgument(name: "no_badge", type: nil)
+ let shieldArg = shield.asRubyArgument(name: "shield", type: nil)
+ let alphaArg = alpha.asRubyArgument(name: "alpha", type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let shieldIoTimeoutArg = shieldIoTimeout.asRubyArgument(name: "shield_io_timeout", type: nil)
+ let globArg = glob.asRubyArgument(name: "glob", type: nil)
+ let alphaChannelArg = alphaChannel.asRubyArgument(name: "alpha_channel", type: nil)
+ let shieldGravityArg = shieldGravity.asRubyArgument(name: "shield_gravity", type: nil)
+ let shieldNoResizeArg = shieldNoResize.asRubyArgument(name: "shield_no_resize", type: nil)
+ let array: [RubyCommand.Argument?] = [darkArg,
+ customArg,
+ noBadgeArg,
+ shieldArg,
+ alphaArg,
+ pathArg,
+ shieldIoTimeoutArg,
+ globArg,
+ alphaChannelArg,
+ shieldGravityArg,
+ shieldNoResizeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "badge", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generate and upload an ipa file to appetize.io
@@ -864,25 +1173,38 @@
- xcodebuild: Parameters that are passed to the xcodebuild action
- scheme: The scheme to build. Can also be passed using the `xcodebuild` parameter
- apiToken: Appetize.io API Token
- publicKey: If not provided, a new app will be created. If provided, the existing build will be overwritten
- note: Notes you wish to add to the uploaded app
+ - timeout: The number of seconds to wait until automatically ending the session due to user inactivity. Must be 30, 60, 90, 120, 180, 300, 600, 1800, 3600 or 7200. Default is 120
This should be called from danger.
More information in the [device_grid guide](https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/device_grid/README.md).
*/
public func buildAndUploadToAppetize(xcodebuild: [String: Any] = [:],
- scheme: String? = nil,
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
apiToken: String,
- publicKey: String? = nil,
- note: String? = nil)
+ publicKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ note: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "build_and_upload_to_appetize", className: nil, args: [RubyCommand.Argument(name: "xcodebuild", value: xcodebuild),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "public_key", value: publicKey),
- RubyCommand.Argument(name: "note", value: note)])
+ let xcodebuildArg = RubyCommand.Argument(name: "xcodebuild", value: xcodebuild, type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let publicKeyArg = publicKey.asRubyArgument(name: "public_key", type: nil)
+ let noteArg = note.asRubyArgument(name: "note", type: nil)
+ let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
+ let array: [RubyCommand.Argument?] = [xcodebuildArg,
+ schemeArg,
+ apiTokenArg,
+ publicKeyArg,
+ noteArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "build_and_upload_to_appetize", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `gradle` action
@@ -903,35 +1225,51 @@
- returns: The output of running the gradle task
Run `./gradlew tasks` to get a list of all available gradle tasks for your project
*/
-public func buildAndroidApp(task: String? = nil,
- flavor: String? = nil,
- buildType: String? = nil,
- tasks: [String]? = nil,
- flags: String? = nil,
+public func buildAndroidApp(task: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ flavor: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildType: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ tasks: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ flags: OptionalConfigValue<String?> = .fastlaneDefault(nil),
projectDir: String = ".",
- gradlePath: String? = nil,
- properties: Any? = nil,
- systemProperties: Any? = nil,
+ gradlePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ properties: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ systemProperties: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
serial: String = "",
- printCommand: Bool = true,
- printCommandOutput: Bool = true)
+ printCommand: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ printCommandOutput: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "build_android_app", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
- RubyCommand.Argument(name: "flavor", value: flavor),
- RubyCommand.Argument(name: "build_type", value: buildType),
- RubyCommand.Argument(name: "tasks", value: tasks),
- RubyCommand.Argument(name: "flags", value: flags),
- RubyCommand.Argument(name: "project_dir", value: projectDir),
- RubyCommand.Argument(name: "gradle_path", value: gradlePath),
- RubyCommand.Argument(name: "properties", value: properties),
- RubyCommand.Argument(name: "system_properties", value: systemProperties),
- RubyCommand.Argument(name: "serial", value: serial),
- RubyCommand.Argument(name: "print_command", value: printCommand),
- RubyCommand.Argument(name: "print_command_output", value: printCommandOutput)])
+ let taskArg = task.asRubyArgument(name: "task", type: nil)
+ let flavorArg = flavor.asRubyArgument(name: "flavor", type: nil)
+ let buildTypeArg = buildType.asRubyArgument(name: "build_type", type: nil)
+ let tasksArg = tasks.asRubyArgument(name: "tasks", type: nil)
+ let flagsArg = flags.asRubyArgument(name: "flags", type: nil)
+ let projectDirArg = RubyCommand.Argument(name: "project_dir", value: projectDir, type: nil)
+ let gradlePathArg = gradlePath.asRubyArgument(name: "gradle_path", type: nil)
+ let propertiesArg = properties.asRubyArgument(name: "properties", type: nil)
+ let systemPropertiesArg = systemProperties.asRubyArgument(name: "system_properties", type: nil)
+ let serialArg = RubyCommand.Argument(name: "serial", value: serial, type: nil)
+ let printCommandArg = printCommand.asRubyArgument(name: "print_command", type: nil)
+ let printCommandOutputArg = printCommandOutput.asRubyArgument(name: "print_command_output", type: nil)
+ let array: [RubyCommand.Argument?] = [taskArg,
+ flavorArg,
+ buildTypeArg,
+ tasksArg,
+ flagsArg,
+ projectDirArg,
+ gradlePathArg,
+ propertiesArg,
+ systemPropertiesArg,
+ serialArg,
+ printCommandArg,
+ printCommandOutputArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "build_android_app", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Easily build and sign your app (via _gym_)
@@ -948,11 +1286,11 @@
- codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'
- skipPackageIpa: Should we skip packaging the ipa?
- skipPackagePkg: Should we skip packaging the pkg?
- includeSymbols: Should the ipa file include symbols?
- includeBitcode: Should the ipa file include bitcode?
- - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id
+ - exportMethod: Method used to export the archive. Valid values are: app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
- exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options
- exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
- skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source
- skipArchive: After building, don't archive, effectively not including -archivePath param
- skipCodesigning: Build without codesigning
@@ -979,105 +1317,165 @@
- xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path
- analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file
- xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
- skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
- returns: The absolute path to the generated ipa file
More information: https://fastlane.tools/gym
*/
-public func buildApp(workspace: String? = nil,
- project: String? = nil,
- scheme: String? = nil,
- clean: Bool = false,
- outputDirectory: String = ".",
- outputName: String? = nil,
- configuration: String? = nil,
- silent: Bool = false,
- codesigningIdentity: String? = nil,
- skipPackageIpa: Bool = false,
- skipPackagePkg: Bool = false,
- includeSymbols: Bool? = nil,
- includeBitcode: Bool? = nil,
- exportMethod: String? = nil,
- exportOptions: [String: Any]? = nil,
- exportXcargs: String? = nil,
- skipBuildArchive: Bool? = nil,
- skipArchive: Bool? = nil,
- skipCodesigning: Bool? = nil,
- catalystPlatform: String? = nil,
- installerCertName: String? = nil,
- buildPath: String? = nil,
- archivePath: String? = nil,
- derivedDataPath: String? = nil,
- resultBundle: Bool = false,
- resultBundlePath: String? = nil,
- buildlogPath: String = "~/Library/Logs/gym",
- sdk: String? = nil,
- toolchain: String? = nil,
- destination: String? = nil,
- exportTeamId: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- suppressXcodeOutput: Bool? = nil,
- disableXcpretty: Bool? = nil,
- xcprettyTestFormat: Bool? = nil,
- xcprettyFormatter: String? = nil,
- xcprettyReportJunit: String? = nil,
- xcprettyReportHtml: String? = nil,
- xcprettyReportJson: String? = nil,
- analyzeBuildTime: Bool? = nil,
- xcprettyUtf: Bool? = nil,
- skipProfileDetection: Bool = false,
- clonedSourcePackagesPath: String? = nil)
+@discardableResult public func buildApp(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputDirectory: String = ".",
+ outputName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ silent: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ codesigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageIpa: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipPackagePkg: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ includeSymbols: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ includeBitcode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ exportMethod: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportOptions: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ exportXcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipBuildArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipCodesigning: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ catalystPlatform: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ installerCertName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ archivePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resultBundlePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildlogPath: String = "~/Library/Logs/gym",
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ toolchain: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyTestFormat: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJunit: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportHtml: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJson: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ analyzeBuildTime: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyUtf: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipProfileDetection: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_name", value: outputName),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "silent", value: silent),
- RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity),
- RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa),
- RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg),
- RubyCommand.Argument(name: "include_symbols", value: includeSymbols),
- RubyCommand.Argument(name: "include_bitcode", value: includeBitcode),
- RubyCommand.Argument(name: "export_method", value: exportMethod),
- RubyCommand.Argument(name: "export_options", value: exportOptions),
- RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
- RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
- RubyCommand.Argument(name: "skip_archive", value: skipArchive),
- RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
- RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
- RubyCommand.Argument(name: "installer_cert_name", value: installerCertName),
- RubyCommand.Argument(name: "build_path", value: buildPath),
- RubyCommand.Argument(name: "archive_path", value: archivePath),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "export_team_id", value: exportTeamId),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat),
- RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter),
- RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit),
- RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml),
- RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson),
- RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
- RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
- RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
- _ = runner.executeCommand(command)
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputNameArg = outputName.asRubyArgument(name: "output_name", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let silentArg = silent.asRubyArgument(name: "silent", type: nil)
+ let codesigningIdentityArg = codesigningIdentity.asRubyArgument(name: "codesigning_identity", type: nil)
+ let skipPackageIpaArg = skipPackageIpa.asRubyArgument(name: "skip_package_ipa", type: nil)
+ let skipPackagePkgArg = skipPackagePkg.asRubyArgument(name: "skip_package_pkg", type: nil)
+ let includeSymbolsArg = includeSymbols.asRubyArgument(name: "include_symbols", type: nil)
+ let includeBitcodeArg = includeBitcode.asRubyArgument(name: "include_bitcode", type: nil)
+ let exportMethodArg = exportMethod.asRubyArgument(name: "export_method", type: nil)
+ let exportOptionsArg = exportOptions.asRubyArgument(name: "export_options", type: nil)
+ let exportXcargsArg = exportXcargs.asRubyArgument(name: "export_xcargs", type: nil)
+ let skipBuildArchiveArg = skipBuildArchive.asRubyArgument(name: "skip_build_archive", type: nil)
+ let skipArchiveArg = skipArchive.asRubyArgument(name: "skip_archive", type: nil)
+ let skipCodesigningArg = skipCodesigning.asRubyArgument(name: "skip_codesigning", type: nil)
+ let catalystPlatformArg = catalystPlatform.asRubyArgument(name: "catalyst_platform", type: nil)
+ let installerCertNameArg = installerCertName.asRubyArgument(name: "installer_cert_name", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let archivePathArg = archivePath.asRubyArgument(name: "archive_path", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let resultBundlePathArg = resultBundlePath.asRubyArgument(name: "result_bundle_path", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let toolchainArg = toolchain.asRubyArgument(name: "toolchain", type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let exportTeamIdArg = exportTeamId.asRubyArgument(name: "export_team_id", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let xcprettyTestFormatArg = xcprettyTestFormat.asRubyArgument(name: "xcpretty_test_format", type: nil)
+ let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
+ let xcprettyReportJunitArg = xcprettyReportJunit.asRubyArgument(name: "xcpretty_report_junit", type: nil)
+ let xcprettyReportHtmlArg = xcprettyReportHtml.asRubyArgument(name: "xcpretty_report_html", type: nil)
+ let xcprettyReportJsonArg = xcprettyReportJson.asRubyArgument(name: "xcpretty_report_json", type: nil)
+ let analyzeBuildTimeArg = analyzeBuildTime.asRubyArgument(name: "analyze_build_time", type: nil)
+ let xcprettyUtfArg = xcprettyUtf.asRubyArgument(name: "xcpretty_utf", type: nil)
+ let skipProfileDetectionArg = skipProfileDetection.asRubyArgument(name: "skip_profile_detection", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ cleanArg,
+ outputDirectoryArg,
+ outputNameArg,
+ configurationArg,
+ silentArg,
+ codesigningIdentityArg,
+ skipPackageIpaArg,
+ skipPackagePkgArg,
+ includeSymbolsArg,
+ includeBitcodeArg,
+ exportMethodArg,
+ exportOptionsArg,
+ exportXcargsArg,
+ skipBuildArchiveArg,
+ skipArchiveArg,
+ skipCodesigningArg,
+ catalystPlatformArg,
+ installerCertNameArg,
+ buildPathArg,
+ archivePathArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ resultBundlePathArg,
+ buildlogPathArg,
+ sdkArg,
+ toolchainArg,
+ destinationArg,
+ exportTeamIdArg,
+ xcargsArg,
+ xcconfigArg,
+ suppressXcodeOutputArg,
+ disableXcprettyArg,
+ xcprettyTestFormatArg,
+ xcprettyFormatterArg,
+ xcprettyReportJunitArg,
+ xcprettyReportHtmlArg,
+ xcprettyReportJsonArg,
+ analyzeBuildTimeArg,
+ xcprettyUtfArg,
+ skipProfileDetectionArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "build_app", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
Alias for the `build_app` action but only for iOS
@@ -1092,11 +1490,11 @@
- silent: Hide all information that's not necessary while building
- codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'
- skipPackageIpa: Should we skip packaging the ipa?
- includeSymbols: Should the ipa file include symbols?
- includeBitcode: Should the ipa file include bitcode?
- - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id
+ - exportMethod: Method used to export the archive. Valid values are: app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
- exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options
- exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
- skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source
- skipArchive: After building, don't archive, effectively not including -archivePath param
- skipCodesigning: Build without codesigning
@@ -1121,99 +1519,156 @@
- xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path
- analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file
- xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
- skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
- returns: The absolute path to the generated ipa file
More information: https://fastlane.tools/gym
*/
-public func buildIosApp(workspace: String? = nil,
- project: String? = nil,
- scheme: String? = nil,
- clean: Bool = false,
- outputDirectory: String = ".",
- outputName: String? = nil,
- configuration: String? = nil,
- silent: Bool = false,
- codesigningIdentity: String? = nil,
- skipPackageIpa: Bool = false,
- includeSymbols: Bool? = nil,
- includeBitcode: Bool? = nil,
- exportMethod: String? = nil,
- exportOptions: [String: Any]? = nil,
- exportXcargs: String? = nil,
- skipBuildArchive: Bool? = nil,
- skipArchive: Bool? = nil,
- skipCodesigning: Bool? = nil,
- buildPath: String? = nil,
- archivePath: String? = nil,
- derivedDataPath: String? = nil,
- resultBundle: Bool = false,
- resultBundlePath: String? = nil,
- buildlogPath: String = "~/Library/Logs/gym",
- sdk: String? = nil,
- toolchain: String? = nil,
- destination: String? = nil,
- exportTeamId: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- suppressXcodeOutput: Bool? = nil,
- disableXcpretty: Bool? = nil,
- xcprettyTestFormat: Bool? = nil,
- xcprettyFormatter: String? = nil,
- xcprettyReportJunit: String? = nil,
- xcprettyReportHtml: String? = nil,
- xcprettyReportJson: String? = nil,
- analyzeBuildTime: Bool? = nil,
- xcprettyUtf: Bool? = nil,
- skipProfileDetection: Bool = false,
- clonedSourcePackagesPath: String? = nil)
+@discardableResult public func buildIosApp(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputDirectory: String = ".",
+ outputName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ silent: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ codesigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageIpa: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ includeSymbols: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ includeBitcode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ exportMethod: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportOptions: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ exportXcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipBuildArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipCodesigning: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ archivePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resultBundlePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildlogPath: String = "~/Library/Logs/gym",
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ toolchain: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyTestFormat: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJunit: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportHtml: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJson: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ analyzeBuildTime: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyUtf: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipProfileDetection: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_name", value: outputName),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "silent", value: silent),
- RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity),
- RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa),
- RubyCommand.Argument(name: "include_symbols", value: includeSymbols),
- RubyCommand.Argument(name: "include_bitcode", value: includeBitcode),
- RubyCommand.Argument(name: "export_method", value: exportMethod),
- RubyCommand.Argument(name: "export_options", value: exportOptions),
- RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
- RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
- RubyCommand.Argument(name: "skip_archive", value: skipArchive),
- RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
- RubyCommand.Argument(name: "build_path", value: buildPath),
- RubyCommand.Argument(name: "archive_path", value: archivePath),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "export_team_id", value: exportTeamId),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat),
- RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter),
- RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit),
- RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml),
- RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson),
- RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
- RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
- RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
- _ = runner.executeCommand(command)
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputNameArg = outputName.asRubyArgument(name: "output_name", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let silentArg = silent.asRubyArgument(name: "silent", type: nil)
+ let codesigningIdentityArg = codesigningIdentity.asRubyArgument(name: "codesigning_identity", type: nil)
+ let skipPackageIpaArg = skipPackageIpa.asRubyArgument(name: "skip_package_ipa", type: nil)
+ let includeSymbolsArg = includeSymbols.asRubyArgument(name: "include_symbols", type: nil)
+ let includeBitcodeArg = includeBitcode.asRubyArgument(name: "include_bitcode", type: nil)
+ let exportMethodArg = exportMethod.asRubyArgument(name: "export_method", type: nil)
+ let exportOptionsArg = exportOptions.asRubyArgument(name: "export_options", type: nil)
+ let exportXcargsArg = exportXcargs.asRubyArgument(name: "export_xcargs", type: nil)
+ let skipBuildArchiveArg = skipBuildArchive.asRubyArgument(name: "skip_build_archive", type: nil)
+ let skipArchiveArg = skipArchive.asRubyArgument(name: "skip_archive", type: nil)
+ let skipCodesigningArg = skipCodesigning.asRubyArgument(name: "skip_codesigning", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let archivePathArg = archivePath.asRubyArgument(name: "archive_path", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let resultBundlePathArg = resultBundlePath.asRubyArgument(name: "result_bundle_path", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let toolchainArg = toolchain.asRubyArgument(name: "toolchain", type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let exportTeamIdArg = exportTeamId.asRubyArgument(name: "export_team_id", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let xcprettyTestFormatArg = xcprettyTestFormat.asRubyArgument(name: "xcpretty_test_format", type: nil)
+ let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
+ let xcprettyReportJunitArg = xcprettyReportJunit.asRubyArgument(name: "xcpretty_report_junit", type: nil)
+ let xcprettyReportHtmlArg = xcprettyReportHtml.asRubyArgument(name: "xcpretty_report_html", type: nil)
+ let xcprettyReportJsonArg = xcprettyReportJson.asRubyArgument(name: "xcpretty_report_json", type: nil)
+ let analyzeBuildTimeArg = analyzeBuildTime.asRubyArgument(name: "analyze_build_time", type: nil)
+ let xcprettyUtfArg = xcprettyUtf.asRubyArgument(name: "xcpretty_utf", type: nil)
+ let skipProfileDetectionArg = skipProfileDetection.asRubyArgument(name: "skip_profile_detection", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ cleanArg,
+ outputDirectoryArg,
+ outputNameArg,
+ configurationArg,
+ silentArg,
+ codesigningIdentityArg,
+ skipPackageIpaArg,
+ includeSymbolsArg,
+ includeBitcodeArg,
+ exportMethodArg,
+ exportOptionsArg,
+ exportXcargsArg,
+ skipBuildArchiveArg,
+ skipArchiveArg,
+ skipCodesigningArg,
+ buildPathArg,
+ archivePathArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ resultBundlePathArg,
+ buildlogPathArg,
+ sdkArg,
+ toolchainArg,
+ destinationArg,
+ exportTeamIdArg,
+ xcargsArg,
+ xcconfigArg,
+ suppressXcodeOutputArg,
+ disableXcprettyArg,
+ xcprettyTestFormatArg,
+ xcprettyFormatterArg,
+ xcprettyReportJunitArg,
+ xcprettyReportHtmlArg,
+ xcprettyReportJsonArg,
+ analyzeBuildTimeArg,
+ xcprettyUtfArg,
+ skipProfileDetectionArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "build_ios_app", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
Alias for the `build_app` action but only for macOS
@@ -1228,11 +1683,11 @@
- silent: Hide all information that's not necessary while building
- codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'
- skipPackagePkg: Should we skip packaging the pkg?
- includeSymbols: Should the ipa file include symbols?
- includeBitcode: Should the ipa file include bitcode?
- - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id
+ - exportMethod: Method used to export the archive. Valid values are: app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
- exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options
- exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
- skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source
- skipArchive: After building, don't archive, effectively not including -archivePath param
- skipCodesigning: Build without codesigning
@@ -1258,101 +1713,159 @@
- xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path
- analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file
- xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
- skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
- returns: The absolute path to the generated ipa file
More information: https://fastlane.tools/gym
*/
-public func buildMacApp(workspace: String? = nil,
- project: String? = nil,
- scheme: String? = nil,
- clean: Bool = false,
- outputDirectory: String = ".",
- outputName: String? = nil,
- configuration: String? = nil,
- silent: Bool = false,
- codesigningIdentity: String? = nil,
- skipPackagePkg: Bool = false,
- includeSymbols: Bool? = nil,
- includeBitcode: Bool? = nil,
- exportMethod: String? = nil,
- exportOptions: [String: Any]? = nil,
- exportXcargs: String? = nil,
- skipBuildArchive: Bool? = nil,
- skipArchive: Bool? = nil,
- skipCodesigning: Bool? = nil,
- installerCertName: String? = nil,
- buildPath: String? = nil,
- archivePath: String? = nil,
- derivedDataPath: String? = nil,
- resultBundle: Bool = false,
- resultBundlePath: String? = nil,
- buildlogPath: String = "~/Library/Logs/gym",
- sdk: String? = nil,
- toolchain: String? = nil,
- destination: String? = nil,
- exportTeamId: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- suppressXcodeOutput: Bool? = nil,
- disableXcpretty: Bool? = nil,
- xcprettyTestFormat: Bool? = nil,
- xcprettyFormatter: String? = nil,
- xcprettyReportJunit: String? = nil,
- xcprettyReportHtml: String? = nil,
- xcprettyReportJson: String? = nil,
- analyzeBuildTime: Bool? = nil,
- xcprettyUtf: Bool? = nil,
- skipProfileDetection: Bool = false,
- clonedSourcePackagesPath: String? = nil)
+@discardableResult public func buildMacApp(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputDirectory: String = ".",
+ outputName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ silent: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ codesigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackagePkg: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ includeSymbols: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ includeBitcode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ exportMethod: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportOptions: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ exportXcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipBuildArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipCodesigning: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ installerCertName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ archivePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resultBundlePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildlogPath: String = "~/Library/Logs/gym",
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ toolchain: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exportTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyTestFormat: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJunit: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportHtml: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyReportJson: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ analyzeBuildTime: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ xcprettyUtf: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipProfileDetection: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "build_mac_app", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_name", value: outputName),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "silent", value: silent),
- RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity),
- RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg),
- RubyCommand.Argument(name: "include_symbols", value: includeSymbols),
- RubyCommand.Argument(name: "include_bitcode", value: includeBitcode),
- RubyCommand.Argument(name: "export_method", value: exportMethod),
- RubyCommand.Argument(name: "export_options", value: exportOptions),
- RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
- RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
- RubyCommand.Argument(name: "skip_archive", value: skipArchive),
- RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
- RubyCommand.Argument(name: "installer_cert_name", value: installerCertName),
- RubyCommand.Argument(name: "build_path", value: buildPath),
- RubyCommand.Argument(name: "archive_path", value: archivePath),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "export_team_id", value: exportTeamId),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat),
- RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter),
- RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit),
- RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml),
- RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson),
- RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
- RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
- RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
- _ = runner.executeCommand(command)
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputNameArg = outputName.asRubyArgument(name: "output_name", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let silentArg = silent.asRubyArgument(name: "silent", type: nil)
+ let codesigningIdentityArg = codesigningIdentity.asRubyArgument(name: "codesigning_identity", type: nil)
+ let skipPackagePkgArg = skipPackagePkg.asRubyArgument(name: "skip_package_pkg", type: nil)
+ let includeSymbolsArg = includeSymbols.asRubyArgument(name: "include_symbols", type: nil)
+ let includeBitcodeArg = includeBitcode.asRubyArgument(name: "include_bitcode", type: nil)
+ let exportMethodArg = exportMethod.asRubyArgument(name: "export_method", type: nil)
+ let exportOptionsArg = exportOptions.asRubyArgument(name: "export_options", type: nil)
+ let exportXcargsArg = exportXcargs.asRubyArgument(name: "export_xcargs", type: nil)
+ let skipBuildArchiveArg = skipBuildArchive.asRubyArgument(name: "skip_build_archive", type: nil)
+ let skipArchiveArg = skipArchive.asRubyArgument(name: "skip_archive", type: nil)
+ let skipCodesigningArg = skipCodesigning.asRubyArgument(name: "skip_codesigning", type: nil)
+ let installerCertNameArg = installerCertName.asRubyArgument(name: "installer_cert_name", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let archivePathArg = archivePath.asRubyArgument(name: "archive_path", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let resultBundlePathArg = resultBundlePath.asRubyArgument(name: "result_bundle_path", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let toolchainArg = toolchain.asRubyArgument(name: "toolchain", type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let exportTeamIdArg = exportTeamId.asRubyArgument(name: "export_team_id", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let xcprettyTestFormatArg = xcprettyTestFormat.asRubyArgument(name: "xcpretty_test_format", type: nil)
+ let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
+ let xcprettyReportJunitArg = xcprettyReportJunit.asRubyArgument(name: "xcpretty_report_junit", type: nil)
+ let xcprettyReportHtmlArg = xcprettyReportHtml.asRubyArgument(name: "xcpretty_report_html", type: nil)
+ let xcprettyReportJsonArg = xcprettyReportJson.asRubyArgument(name: "xcpretty_report_json", type: nil)
+ let analyzeBuildTimeArg = analyzeBuildTime.asRubyArgument(name: "analyze_build_time", type: nil)
+ let xcprettyUtfArg = xcprettyUtf.asRubyArgument(name: "xcpretty_utf", type: nil)
+ let skipProfileDetectionArg = skipProfileDetection.asRubyArgument(name: "skip_profile_detection", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ cleanArg,
+ outputDirectoryArg,
+ outputNameArg,
+ configurationArg,
+ silentArg,
+ codesigningIdentityArg,
+ skipPackagePkgArg,
+ includeSymbolsArg,
+ includeBitcodeArg,
+ exportMethodArg,
+ exportOptionsArg,
+ exportXcargsArg,
+ skipBuildArchiveArg,
+ skipArchiveArg,
+ skipCodesigningArg,
+ installerCertNameArg,
+ buildPathArg,
+ archivePathArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ resultBundlePathArg,
+ buildlogPathArg,
+ sdkArg,
+ toolchainArg,
+ destinationArg,
+ exportTeamIdArg,
+ xcargsArg,
+ xcconfigArg,
+ suppressXcodeOutputArg,
+ disableXcprettyArg,
+ xcprettyTestFormatArg,
+ xcprettyFormatterArg,
+ xcprettyReportJunitArg,
+ xcprettyReportHtmlArg,
+ xcprettyReportJsonArg,
+ analyzeBuildTimeArg,
+ xcprettyUtfArg,
+ skipProfileDetectionArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "build_mac_app", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
This action runs `bundle install` (if available)
@@ -1374,122 +1887,170 @@
- standalone: Make a bundle that can work without the Bundler runtime
- trustPolicy: Sets level of security when dealing with signed gems. Accepts `LowSecurity`, `MediumSecurity` and `HighSecurity` as values
- without: Exclude gems that are part of the specified named group
- with: Include gems that are part of the specified named group
*/
-public func bundleInstall(binstubs: String? = nil,
- clean: Bool = false,
- fullIndex: Bool = false,
- gemfile: String? = nil,
- jobs: Bool? = nil,
- local: Bool = false,
- deployment: Bool = false,
- noCache: Bool = false,
- noPrune: Bool = false,
- path: String? = nil,
- system: Bool = false,
- quiet: Bool = false,
- retry: Bool? = nil,
- shebang: String? = nil,
- standalone: String? = nil,
- trustPolicy: String? = nil,
- without: String? = nil,
- with: String? = nil)
+public func bundleInstall(binstubs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ fullIndex: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ gemfile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jobs: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ local: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ deployment: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noCache: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noPrune: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ system: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ quiet: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ retry: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ shebang: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ standalone: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ trustPolicy: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ without: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ with: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "bundle_install", className: nil, args: [RubyCommand.Argument(name: "binstubs", value: binstubs),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "full_index", value: fullIndex),
- RubyCommand.Argument(name: "gemfile", value: gemfile),
- RubyCommand.Argument(name: "jobs", value: jobs),
- RubyCommand.Argument(name: "local", value: local),
- RubyCommand.Argument(name: "deployment", value: deployment),
- RubyCommand.Argument(name: "no_cache", value: noCache),
- RubyCommand.Argument(name: "no_prune", value: noPrune),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "system", value: system),
- RubyCommand.Argument(name: "quiet", value: quiet),
- RubyCommand.Argument(name: "retry", value: retry),
- RubyCommand.Argument(name: "shebang", value: shebang),
- RubyCommand.Argument(name: "standalone", value: standalone),
- RubyCommand.Argument(name: "trust_policy", value: trustPolicy),
- RubyCommand.Argument(name: "without", value: without),
- RubyCommand.Argument(name: "with", value: with)])
+ let binstubsArg = binstubs.asRubyArgument(name: "binstubs", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let fullIndexArg = fullIndex.asRubyArgument(name: "full_index", type: nil)
+ let gemfileArg = gemfile.asRubyArgument(name: "gemfile", type: nil)
+ let jobsArg = jobs.asRubyArgument(name: "jobs", type: nil)
+ let localArg = local.asRubyArgument(name: "local", type: nil)
+ let deploymentArg = deployment.asRubyArgument(name: "deployment", type: nil)
+ let noCacheArg = noCache.asRubyArgument(name: "no_cache", type: nil)
+ let noPruneArg = noPrune.asRubyArgument(name: "no_prune", type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let systemArg = system.asRubyArgument(name: "system", type: nil)
+ let quietArg = quiet.asRubyArgument(name: "quiet", type: nil)
+ let retryArg = retry.asRubyArgument(name: "retry", type: nil)
+ let shebangArg = shebang.asRubyArgument(name: "shebang", type: nil)
+ let standaloneArg = standalone.asRubyArgument(name: "standalone", type: nil)
+ let trustPolicyArg = trustPolicy.asRubyArgument(name: "trust_policy", type: nil)
+ let withoutArg = without.asRubyArgument(name: "without", type: nil)
+ let withArg = with.asRubyArgument(name: "with", type: nil)
+ let array: [RubyCommand.Argument?] = [binstubsArg,
+ cleanArg,
+ fullIndexArg,
+ gemfileArg,
+ jobsArg,
+ localArg,
+ deploymentArg,
+ noCacheArg,
+ noPruneArg,
+ pathArg,
+ systemArg,
+ quietArg,
+ retryArg,
+ shebangArg,
+ standaloneArg,
+ trustPolicyArg,
+ withoutArg,
+ withArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "bundle_install", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Automated localized screenshots of your Android app (via _screengrab_)
- parameters:
- androidHome: Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
- - buildToolsVersion: The Android build tools version to use, e.g. '23.0.2'
+ - buildToolsVersion: **DEPRECATED!** The Android build tools version to use, e.g. '23.0.2'
- locales: A list of locales which should be used
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running screengrab
- outputDirectory: The directory where to store the screenshots
- skipOpenSummary: Don't open the summary after running _screengrab_
- appPackageName: The package name of the app under test (e.g. com.yourcompany.yourapp)
- testsPackageName: The package name of the tests bundle (e.g. com.yourcompany.yourapp.test)
- useTestsInPackages: Only run tests in these Java packages
- useTestsInClasses: Only run tests in these Java classes
- launchArguments: Additional launch arguments
- testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
- - endingLocale: Return the device to this locale after running tests
- - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
+ - endingLocale: **DEPRECATED!** Return the device to this locale after running tests
+ - useAdbRoot: **DEPRECATED!** Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
- appApkPath: The path to the APK for the app under test
- testsApkPath: The path to the APK for the the tests bundle
- specificDevice: Use the device or emulator with the given serial number or qualifier
- deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
- exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
- reinstallApp: Enabling this option will automatically uninstall the application before running it
- useTimestampSuffix: Add timestamp suffix to screenshot filename
- adbHost: Configure the host used by adb to connect, allows running on remote devices farm
*/
-public func captureAndroidScreenshots(androidHome: String? = nil,
- buildToolsVersion: String? = nil,
+public func captureAndroidScreenshots(androidHome: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildToolsVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
locales: [String] = ["en-US"],
- clearPreviousScreenshots: Bool = false,
+ clearPreviousScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
outputDirectory: String = "fastlane/metadata/android",
- skipOpenSummary: Bool = false,
+ skipOpenSummary: OptionalConfigValue<Bool> = .fastlaneDefault(false),
appPackageName: String,
- testsPackageName: String? = nil,
- useTestsInPackages: [String]? = nil,
- useTestsInClasses: [String]? = nil,
- launchArguments: [String]? = nil,
+ testsPackageName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useTestsInPackages: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ useTestsInClasses: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ launchArguments: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
testInstrumentationRunner: String = "androidx.test.runner.AndroidJUnitRunner",
endingLocale: String = "en-US",
- useAdbRoot: Bool = false,
- appApkPath: String? = nil,
- testsApkPath: String? = nil,
- specificDevice: String? = nil,
+ useAdbRoot: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ appApkPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ testsApkPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ specificDevice: OptionalConfigValue<String?> = .fastlaneDefault(nil),
deviceType: String = "phone",
- exitOnTestFailure: Bool = true,
- reinstallApp: Bool = false,
- useTimestampSuffix: Bool = true,
- adbHost: String? = nil)
+ exitOnTestFailure: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useTimestampSuffix: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ adbHost: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "capture_android_screenshots", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
- RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
- RubyCommand.Argument(name: "locales", value: locales),
- RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary),
- RubyCommand.Argument(name: "app_package_name", value: appPackageName),
- RubyCommand.Argument(name: "tests_package_name", value: testsPackageName),
- RubyCommand.Argument(name: "use_tests_in_packages", value: useTestsInPackages),
- RubyCommand.Argument(name: "use_tests_in_classes", value: useTestsInClasses),
- RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
- RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
- RubyCommand.Argument(name: "ending_locale", value: endingLocale),
- RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
- RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
- RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
- RubyCommand.Argument(name: "specific_device", value: specificDevice),
- RubyCommand.Argument(name: "device_type", value: deviceType),
- RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
- RubyCommand.Argument(name: "adb_host", value: adbHost)])
+ let androidHomeArg = androidHome.asRubyArgument(name: "android_home", type: nil)
+ let buildToolsVersionArg = buildToolsVersion.asRubyArgument(name: "build_tools_version", type: nil)
+ let localesArg = RubyCommand.Argument(name: "locales", value: locales, type: nil)
+ let clearPreviousScreenshotsArg = clearPreviousScreenshots.asRubyArgument(name: "clear_previous_screenshots", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let skipOpenSummaryArg = skipOpenSummary.asRubyArgument(name: "skip_open_summary", type: nil)
+ let appPackageNameArg = RubyCommand.Argument(name: "app_package_name", value: appPackageName, type: nil)
+ let testsPackageNameArg = testsPackageName.asRubyArgument(name: "tests_package_name", type: nil)
+ let useTestsInPackagesArg = useTestsInPackages.asRubyArgument(name: "use_tests_in_packages", type: nil)
+ let useTestsInClassesArg = useTestsInClasses.asRubyArgument(name: "use_tests_in_classes", type: nil)
+ let launchArgumentsArg = launchArguments.asRubyArgument(name: "launch_arguments", type: nil)
+ let testInstrumentationRunnerArg = RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner, type: nil)
+ let endingLocaleArg = RubyCommand.Argument(name: "ending_locale", value: endingLocale, type: nil)
+ let useAdbRootArg = useAdbRoot.asRubyArgument(name: "use_adb_root", type: nil)
+ let appApkPathArg = appApkPath.asRubyArgument(name: "app_apk_path", type: nil)
+ let testsApkPathArg = testsApkPath.asRubyArgument(name: "tests_apk_path", type: nil)
+ let specificDeviceArg = specificDevice.asRubyArgument(name: "specific_device", type: nil)
+ let deviceTypeArg = RubyCommand.Argument(name: "device_type", value: deviceType, type: nil)
+ let exitOnTestFailureArg = exitOnTestFailure.asRubyArgument(name: "exit_on_test_failure", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let useTimestampSuffixArg = useTimestampSuffix.asRubyArgument(name: "use_timestamp_suffix", type: nil)
+ let adbHostArg = adbHost.asRubyArgument(name: "adb_host", type: nil)
+ let array: [RubyCommand.Argument?] = [androidHomeArg,
+ buildToolsVersionArg,
+ localesArg,
+ clearPreviousScreenshotsArg,
+ outputDirectoryArg,
+ skipOpenSummaryArg,
+ appPackageNameArg,
+ testsPackageNameArg,
+ useTestsInPackagesArg,
+ useTestsInClassesArg,
+ launchArgumentsArg,
+ testInstrumentationRunnerArg,
+ endingLocaleArg,
+ useAdbRootArg,
+ appApkPathArg,
+ testsApkPathArg,
+ specificDeviceArg,
+ deviceTypeArg,
+ exitOnTestFailureArg,
+ reinstallAppArg,
+ useTimestampSuffixArg,
+ adbHostArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "capture_android_screenshots", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generate new localized screenshots on multiple devices (via _snapshot_)
@@ -1509,11 +2070,12 @@
- skipHelperVersionCheck: Do not check for most recent SnapshotHelper code
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
- reinstallApp: Enabling this option will automatically uninstall the application before running it
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
- headless: Enabling this option will prevent displaying the simulator window
- - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBar: Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBarArguments: Fully customize the status bar by setting each option here. See `xcrun simctl status_bar --help`
- localizeSimulator: Enabling this option will configure the Simulator's system language
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
- addPhotos: A list of photos that should be added to the simulator before running the application
- addVideos: A list of videos that should be added to the simulator before running the application
@@ -1532,105 +2094,168 @@
- testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode)
- namespaceLogFiles: Separate the log files per device and per language
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
- testplan: The testplan associated with the scheme that should be used for testing
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
- disableXcpretty: Disable xcpretty formatting of build
- suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
+ - useSystemScm: Lets xcodebuild use system's scm configuration
*/
-public func captureIosScreenshots(workspace: String? = nil,
- project: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- devices: [String]? = nil,
+public func captureIosScreenshots(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devices: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
languages: [String] = ["en-US"],
launchArguments: [String] = [""],
outputDirectory: String = "screenshots",
- outputSimulatorLogs: Bool = false,
- iosVersion: String? = nil,
- skipOpenSummary: Bool = false,
- skipHelperVersionCheck: Bool = false,
- clearPreviousScreenshots: Bool = false,
- reinstallApp: Bool = false,
- eraseSimulator: Bool = false,
- headless: Bool = true,
- overrideStatusBar: Bool = false,
- localizeSimulator: Bool = false,
- darkMode: Bool? = nil,
- appIdentifier: String? = nil,
- addPhotos: [String]? = nil,
- addVideos: [String]? = nil,
- htmlTemplate: String? = nil,
+ outputSimulatorLogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ iosVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipOpenSummary: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipHelperVersionCheck: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clearPreviousScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ eraseSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ headless: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ overrideStatusBar: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ overrideStatusBarArguments: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ localizeSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ darkMode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ addPhotos: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ addVideos: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ htmlTemplate: OptionalConfigValue<String?> = .fastlaneDefault(nil),
buildlogPath: String = "~/Library/Logs/snapshot",
- clean: Bool = false,
- testWithoutBuilding: Bool? = nil,
- configuration: String? = nil,
- xcprettyArgs: String? = nil,
- sdk: String? = nil,
- scheme: String? = nil,
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testWithoutBuilding: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
numberOfRetries: Int = 1,
- stopAfterFirstError: Bool = false,
- derivedDataPath: String? = nil,
- resultBundle: Bool = false,
- testTargetName: String? = nil,
+ stopAfterFirstError: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testTargetName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
namespaceLogFiles: Any? = nil,
- concurrentSimulators: Bool = true,
- disableSlideToType: Bool = false,
- clonedSourcePackagesPath: String? = nil,
- testplan: String? = nil,
+ concurrentSimulators: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ disableSlideToType: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testplan: OptionalConfigValue<String?> = .fastlaneDefault(nil),
onlyTesting: Any? = nil,
skipTesting: Any? = nil,
- disableXcpretty: Bool? = nil,
- suppressXcodeOutput: Bool? = nil)
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "capture_ios_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs),
- RubyCommand.Argument(name: "ios_version", value: iosVersion),
- RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary),
- RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck),
- RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
- RubyCommand.Argument(name: "headless", value: headless),
- RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
- RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
- RubyCommand.Argument(name: "dark_mode", value: darkMode),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "add_photos", value: addPhotos),
- RubyCommand.Argument(name: "add_videos", value: addVideos),
- RubyCommand.Argument(name: "html_template", value: htmlTemplate),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
- RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "test_target_name", value: testTargetName),
- RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
- RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
- RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
- RubyCommand.Argument(name: "testplan", value: testplan),
- RubyCommand.Argument(name: "only_testing", value: onlyTesting),
- RubyCommand.Argument(name: "skip_testing", value: skipTesting),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let languagesArg = RubyCommand.Argument(name: "languages", value: languages, type: nil)
+ let launchArgumentsArg = RubyCommand.Argument(name: "launch_arguments", value: launchArguments, type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputSimulatorLogsArg = outputSimulatorLogs.asRubyArgument(name: "output_simulator_logs", type: nil)
+ let iosVersionArg = iosVersion.asRubyArgument(name: "ios_version", type: nil)
+ let skipOpenSummaryArg = skipOpenSummary.asRubyArgument(name: "skip_open_summary", type: nil)
+ let skipHelperVersionCheckArg = skipHelperVersionCheck.asRubyArgument(name: "skip_helper_version_check", type: nil)
+ let clearPreviousScreenshotsArg = clearPreviousScreenshots.asRubyArgument(name: "clear_previous_screenshots", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let eraseSimulatorArg = eraseSimulator.asRubyArgument(name: "erase_simulator", type: nil)
+ let headlessArg = headless.asRubyArgument(name: "headless", type: nil)
+ let overrideStatusBarArg = overrideStatusBar.asRubyArgument(name: "override_status_bar", type: nil)
+ let overrideStatusBarArgumentsArg = overrideStatusBarArguments.asRubyArgument(name: "override_status_bar_arguments", type: nil)
+ let localizeSimulatorArg = localizeSimulator.asRubyArgument(name: "localize_simulator", type: nil)
+ let darkModeArg = darkMode.asRubyArgument(name: "dark_mode", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let addPhotosArg = addPhotos.asRubyArgument(name: "add_photos", type: nil)
+ let addVideosArg = addVideos.asRubyArgument(name: "add_videos", type: nil)
+ let htmlTemplateArg = htmlTemplate.asRubyArgument(name: "html_template", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let testWithoutBuildingArg = testWithoutBuilding.asRubyArgument(name: "test_without_building", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let numberOfRetriesArg = RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries, type: nil)
+ let stopAfterFirstErrorArg = stopAfterFirstError.asRubyArgument(name: "stop_after_first_error", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let testTargetNameArg = testTargetName.asRubyArgument(name: "test_target_name", type: nil)
+ let namespaceLogFilesArg = RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles, type: nil)
+ let concurrentSimulatorsArg = concurrentSimulators.asRubyArgument(name: "concurrent_simulators", type: nil)
+ let disableSlideToTypeArg = disableSlideToType.asRubyArgument(name: "disable_slide_to_type", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
+ let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
+ let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ xcargsArg,
+ xcconfigArg,
+ devicesArg,
+ languagesArg,
+ launchArgumentsArg,
+ outputDirectoryArg,
+ outputSimulatorLogsArg,
+ iosVersionArg,
+ skipOpenSummaryArg,
+ skipHelperVersionCheckArg,
+ clearPreviousScreenshotsArg,
+ reinstallAppArg,
+ eraseSimulatorArg,
+ headlessArg,
+ overrideStatusBarArg,
+ overrideStatusBarArgumentsArg,
+ localizeSimulatorArg,
+ darkModeArg,
+ appIdentifierArg,
+ addPhotosArg,
+ addVideosArg,
+ htmlTemplateArg,
+ buildlogPathArg,
+ cleanArg,
+ testWithoutBuildingArg,
+ configurationArg,
+ xcprettyArgsArg,
+ sdkArg,
+ schemeArg,
+ numberOfRetriesArg,
+ stopAfterFirstErrorArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ testTargetNameArg,
+ namespaceLogFilesArg,
+ concurrentSimulatorsArg,
+ disableSlideToTypeArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ testplanArg,
+ onlyTestingArg,
+ skipTestingArg,
+ disableXcprettyArg,
+ suppressXcodeOutputArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "capture_ios_screenshots", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `capture_ios_screenshots` action
@@ -1650,11 +2275,12 @@
- skipHelperVersionCheck: Do not check for most recent SnapshotHelper code
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
- reinstallApp: Enabling this option will automatically uninstall the application before running it
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
- headless: Enabling this option will prevent displaying the simulator window
- - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBar: Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBarArguments: Fully customize the status bar by setting each option here. See `xcrun simctl status_bar --help`
- localizeSimulator: Enabling this option will configure the Simulator's system language
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
- addPhotos: A list of photos that should be added to the simulator before running the application
- addVideos: A list of videos that should be added to the simulator before running the application
@@ -1673,105 +2299,168 @@
- testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode)
- namespaceLogFiles: Separate the log files per device and per language
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
- testplan: The testplan associated with the scheme that should be used for testing
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
- disableXcpretty: Disable xcpretty formatting of build
- suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
+ - useSystemScm: Lets xcodebuild use system's scm configuration
*/
-public func captureScreenshots(workspace: String? = nil,
- project: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- devices: [String]? = nil,
+public func captureScreenshots(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devices: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
languages: [String] = ["en-US"],
launchArguments: [String] = [""],
outputDirectory: String = "screenshots",
- outputSimulatorLogs: Bool = false,
- iosVersion: String? = nil,
- skipOpenSummary: Bool = false,
- skipHelperVersionCheck: Bool = false,
- clearPreviousScreenshots: Bool = false,
- reinstallApp: Bool = false,
- eraseSimulator: Bool = false,
- headless: Bool = true,
- overrideStatusBar: Bool = false,
- localizeSimulator: Bool = false,
- darkMode: Bool? = nil,
- appIdentifier: String? = nil,
- addPhotos: [String]? = nil,
- addVideos: [String]? = nil,
- htmlTemplate: String? = nil,
+ outputSimulatorLogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ iosVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipOpenSummary: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipHelperVersionCheck: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clearPreviousScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ eraseSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ headless: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ overrideStatusBar: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ overrideStatusBarArguments: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ localizeSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ darkMode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ addPhotos: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ addVideos: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ htmlTemplate: OptionalConfigValue<String?> = .fastlaneDefault(nil),
buildlogPath: String = "~/Library/Logs/snapshot",
- clean: Bool = false,
- testWithoutBuilding: Bool? = nil,
- configuration: String? = nil,
- xcprettyArgs: String? = nil,
- sdk: String? = nil,
- scheme: String? = nil,
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testWithoutBuilding: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
numberOfRetries: Int = 1,
- stopAfterFirstError: Bool = false,
- derivedDataPath: String? = nil,
- resultBundle: Bool = false,
- testTargetName: String? = nil,
+ stopAfterFirstError: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testTargetName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
namespaceLogFiles: Any? = nil,
- concurrentSimulators: Bool = true,
- disableSlideToType: Bool = false,
- clonedSourcePackagesPath: String? = nil,
- testplan: String? = nil,
+ concurrentSimulators: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ disableSlideToType: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testplan: OptionalConfigValue<String?> = .fastlaneDefault(nil),
onlyTesting: Any? = nil,
skipTesting: Any? = nil,
- disableXcpretty: Bool? = nil,
- suppressXcodeOutput: Bool? = nil)
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "capture_screenshots", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs),
- RubyCommand.Argument(name: "ios_version", value: iosVersion),
- RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary),
- RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck),
- RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
- RubyCommand.Argument(name: "headless", value: headless),
- RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
- RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
- RubyCommand.Argument(name: "dark_mode", value: darkMode),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "add_photos", value: addPhotos),
- RubyCommand.Argument(name: "add_videos", value: addVideos),
- RubyCommand.Argument(name: "html_template", value: htmlTemplate),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
- RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "test_target_name", value: testTargetName),
- RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
- RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
- RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
- RubyCommand.Argument(name: "testplan", value: testplan),
- RubyCommand.Argument(name: "only_testing", value: onlyTesting),
- RubyCommand.Argument(name: "skip_testing", value: skipTesting),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let languagesArg = RubyCommand.Argument(name: "languages", value: languages, type: nil)
+ let launchArgumentsArg = RubyCommand.Argument(name: "launch_arguments", value: launchArguments, type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputSimulatorLogsArg = outputSimulatorLogs.asRubyArgument(name: "output_simulator_logs", type: nil)
+ let iosVersionArg = iosVersion.asRubyArgument(name: "ios_version", type: nil)
+ let skipOpenSummaryArg = skipOpenSummary.asRubyArgument(name: "skip_open_summary", type: nil)
+ let skipHelperVersionCheckArg = skipHelperVersionCheck.asRubyArgument(name: "skip_helper_version_check", type: nil)
+ let clearPreviousScreenshotsArg = clearPreviousScreenshots.asRubyArgument(name: "clear_previous_screenshots", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let eraseSimulatorArg = eraseSimulator.asRubyArgument(name: "erase_simulator", type: nil)
+ let headlessArg = headless.asRubyArgument(name: "headless", type: nil)
+ let overrideStatusBarArg = overrideStatusBar.asRubyArgument(name: "override_status_bar", type: nil)
+ let overrideStatusBarArgumentsArg = overrideStatusBarArguments.asRubyArgument(name: "override_status_bar_arguments", type: nil)
+ let localizeSimulatorArg = localizeSimulator.asRubyArgument(name: "localize_simulator", type: nil)
+ let darkModeArg = darkMode.asRubyArgument(name: "dark_mode", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let addPhotosArg = addPhotos.asRubyArgument(name: "add_photos", type: nil)
+ let addVideosArg = addVideos.asRubyArgument(name: "add_videos", type: nil)
+ let htmlTemplateArg = htmlTemplate.asRubyArgument(name: "html_template", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let testWithoutBuildingArg = testWithoutBuilding.asRubyArgument(name: "test_without_building", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let numberOfRetriesArg = RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries, type: nil)
+ let stopAfterFirstErrorArg = stopAfterFirstError.asRubyArgument(name: "stop_after_first_error", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let testTargetNameArg = testTargetName.asRubyArgument(name: "test_target_name", type: nil)
+ let namespaceLogFilesArg = RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles, type: nil)
+ let concurrentSimulatorsArg = concurrentSimulators.asRubyArgument(name: "concurrent_simulators", type: nil)
+ let disableSlideToTypeArg = disableSlideToType.asRubyArgument(name: "disable_slide_to_type", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
+ let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
+ let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ xcargsArg,
+ xcconfigArg,
+ devicesArg,
+ languagesArg,
+ launchArgumentsArg,
+ outputDirectoryArg,
+ outputSimulatorLogsArg,
+ iosVersionArg,
+ skipOpenSummaryArg,
+ skipHelperVersionCheckArg,
+ clearPreviousScreenshotsArg,
+ reinstallAppArg,
+ eraseSimulatorArg,
+ headlessArg,
+ overrideStatusBarArg,
+ overrideStatusBarArgumentsArg,
+ localizeSimulatorArg,
+ darkModeArg,
+ appIdentifierArg,
+ addPhotosArg,
+ addVideosArg,
+ htmlTemplateArg,
+ buildlogPathArg,
+ cleanArg,
+ testWithoutBuildingArg,
+ configurationArg,
+ xcprettyArgsArg,
+ sdkArg,
+ schemeArg,
+ numberOfRetriesArg,
+ stopAfterFirstErrorArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ testTargetNameArg,
+ namespaceLogFilesArg,
+ concurrentSimulatorsArg,
+ disableSlideToTypeArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ testplanArg,
+ onlyTestingArg,
+ skipTestingArg,
+ disableXcprettyArg,
+ suppressXcodeOutputArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "capture_screenshots", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs `carthage` for your project
@@ -1795,55 +2484,88 @@
- configuration: Define which build configuration to use when building
- toolchain: Define which xcodebuild toolchain to use when building
- projectDirectory: Define the directory containing the Carthage project
- newResolver: Use new resolver when resolving dependency graph
- logPath: Path to the xcode build output
+ - useXcframeworks: Create xcframework bundles instead of one framework per platform (requires Xcode 12+)
+ - archive: Archive built frameworks from the current project
- executable: Path to the `carthage` executable on your machine
*/
public func carthage(command: String = "bootstrap",
dependencies: [String] = [],
- useSsh: Bool? = nil,
- useSubmodules: Bool? = nil,
- useNetrc: Bool? = nil,
- useBinaries: Bool? = nil,
- noCheckout: Bool? = nil,
- noBuild: Bool? = nil,
- noSkipCurrent: Bool? = nil,
- derivedData: String? = nil,
- verbose: Bool? = nil,
- platform: String? = nil,
- cacheBuilds: Bool = false,
+ useSsh: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useSubmodules: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useNetrc: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useBinaries: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ noCheckout: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ noBuild: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ noSkipCurrent: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ derivedData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ platform: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ cacheBuilds: OptionalConfigValue<Bool> = .fastlaneDefault(false),
frameworks: [String] = [],
- output: String? = nil,
- configuration: String? = nil,
- toolchain: String? = nil,
- projectDirectory: String? = nil,
- newResolver: Bool? = nil,
- logPath: String? = nil,
+ output: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ toolchain: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ projectDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ newResolver: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ logPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useXcframeworks: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ archive: OptionalConfigValue<Bool> = .fastlaneDefault(false),
executable: String = "carthage")
{
- let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
- RubyCommand.Argument(name: "dependencies", value: dependencies),
- RubyCommand.Argument(name: "use_ssh", value: useSsh),
- RubyCommand.Argument(name: "use_submodules", value: useSubmodules),
- RubyCommand.Argument(name: "use_netrc", value: useNetrc),
- RubyCommand.Argument(name: "use_binaries", value: useBinaries),
- RubyCommand.Argument(name: "no_checkout", value: noCheckout),
- RubyCommand.Argument(name: "no_build", value: noBuild),
- RubyCommand.Argument(name: "no_skip_current", value: noSkipCurrent),
- RubyCommand.Argument(name: "derived_data", value: derivedData),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "cache_builds", value: cacheBuilds),
- RubyCommand.Argument(name: "frameworks", value: frameworks),
- RubyCommand.Argument(name: "output", value: output),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "project_directory", value: projectDirectory),
- RubyCommand.Argument(name: "new_resolver", value: newResolver),
- RubyCommand.Argument(name: "log_path", value: logPath),
- RubyCommand.Argument(name: "executable", value: executable)])
+ let commandArg = RubyCommand.Argument(name: "command", value: command, type: nil)
+ let dependenciesArg = RubyCommand.Argument(name: "dependencies", value: dependencies, type: nil)
+ let useSshArg = useSsh.asRubyArgument(name: "use_ssh", type: nil)
+ let useSubmodulesArg = useSubmodules.asRubyArgument(name: "use_submodules", type: nil)
+ let useNetrcArg = useNetrc.asRubyArgument(name: "use_netrc", type: nil)
+ let useBinariesArg = useBinaries.asRubyArgument(name: "use_binaries", type: nil)
+ let noCheckoutArg = noCheckout.asRubyArgument(name: "no_checkout", type: nil)
+ let noBuildArg = noBuild.asRubyArgument(name: "no_build", type: nil)
+ let noSkipCurrentArg = noSkipCurrent.asRubyArgument(name: "no_skip_current", type: nil)
+ let derivedDataArg = derivedData.asRubyArgument(name: "derived_data", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let platformArg = platform.asRubyArgument(name: "platform", type: nil)
+ let cacheBuildsArg = cacheBuilds.asRubyArgument(name: "cache_builds", type: nil)
+ let frameworksArg = RubyCommand.Argument(name: "frameworks", value: frameworks, type: nil)
+ let outputArg = output.asRubyArgument(name: "output", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let toolchainArg = toolchain.asRubyArgument(name: "toolchain", type: nil)
+ let projectDirectoryArg = projectDirectory.asRubyArgument(name: "project_directory", type: nil)
+ let newResolverArg = newResolver.asRubyArgument(name: "new_resolver", type: nil)
+ let logPathArg = logPath.asRubyArgument(name: "log_path", type: nil)
+ let useXcframeworksArg = useXcframeworks.asRubyArgument(name: "use_xcframeworks", type: nil)
+ let archiveArg = archive.asRubyArgument(name: "archive", type: nil)
+ let executableArg = RubyCommand.Argument(name: "executable", value: executable, type: nil)
+ let array: [RubyCommand.Argument?] = [commandArg,
+ dependenciesArg,
+ useSshArg,
+ useSubmodulesArg,
+ useNetrcArg,
+ useBinariesArg,
+ noCheckoutArg,
+ noBuildArg,
+ noSkipCurrentArg,
+ derivedDataArg,
+ verboseArg,
+ platformArg,
+ cacheBuildsArg,
+ frameworksArg,
+ outputArg,
+ configurationArg,
+ toolchainArg,
+ projectDirectoryArg,
+ newResolverArg,
+ logPathArg,
+ useXcframeworksArg,
+ archiveArg,
+ executableArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "carthage", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `get_certificates` action
@@ -1859,48 +2581,67 @@
- teamId: The ID of your Developer Portal team if you're in multiple teams
- teamName: The name of your Developer Portal team if you're in multiple teams
- filename: The filename of certificate to store
- outputPath: The path to a directory in which all certificates and private keys should be stored
- keychainPath: Path to a custom keychain
- - 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
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
- 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
- - platform: Set the provisioning profile's platform (ios, macos)
+ - platform: Set the provisioning profile's platform (ios, macos, tvos)
**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.
Use this action to download the latest code signing identity.
*/
-public func cert(development: Bool = false,
- type: String? = nil,
- force: Bool = false,
- generateAppleCerts: Bool = true,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- teamId: String? = nil,
- teamName: String? = nil,
- filename: String? = nil,
+public func cert(development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ type: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateAppleCerts: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputPath: String = ".",
keychainPath: String,
- keychainPassword: String? = nil,
- skipSetPartitionList: Bool = false,
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
platform: String = "ios")
{
- let command = RubyCommand(commandID: "", methodName: "cert", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "type", value: type),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "filename", value: filename),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
- RubyCommand.Argument(name: "platform", value: platform)])
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let typeArg = type.asRubyArgument(name: "type", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let generateAppleCertsArg = generateAppleCerts.asRubyArgument(name: "generate_apple_certs", type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let keychainPathArg = RubyCommand.Argument(name: "keychain_path", value: keychainPath, type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let array: [RubyCommand.Argument?] = [developmentArg,
+ typeArg,
+ forceArg,
+ generateAppleCertsArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ filenameArg,
+ outputPathArg,
+ keychainPathArg,
+ keychainPasswordArg,
+ skipSetPartitionListArg,
+ platformArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "cert", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Collect git commit messages into a changelog
@@ -1920,33 +2661,48 @@
- returns: Returns a String containing your formatted git commits
By default, messages will be collected back to the last tag, but the range can be controlled
*/
-@discardableResult public func changelogFromGitCommits(between: Any? = nil,
- commitsCount: Int? = nil,
+@discardableResult public func changelogFromGitCommits(between: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ commitsCount: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
path: String = "./",
pretty: String = "%B",
- dateFormat: String? = nil,
- ancestryPath: Bool = false,
- tagMatchPattern: String? = nil,
- matchLightweightTag: Bool = true,
- quiet: Bool = false,
- includeMerges: Bool? = nil,
+ dateFormat: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ancestryPath: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ tagMatchPattern: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ matchLightweightTag: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ quiet: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ includeMerges: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
mergeCommitFiltering: String = "include_merges") -> String
{
- let command = RubyCommand(commandID: "", methodName: "changelog_from_git_commits", className: nil, args: [RubyCommand.Argument(name: "between", value: between),
- RubyCommand.Argument(name: "commits_count", value: commitsCount),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "pretty", value: pretty),
- RubyCommand.Argument(name: "date_format", value: dateFormat),
- RubyCommand.Argument(name: "ancestry_path", value: ancestryPath),
- RubyCommand.Argument(name: "tag_match_pattern", value: tagMatchPattern),
- RubyCommand.Argument(name: "match_lightweight_tag", value: matchLightweightTag),
- RubyCommand.Argument(name: "quiet", value: quiet),
- RubyCommand.Argument(name: "include_merges", value: includeMerges),
- RubyCommand.Argument(name: "merge_commit_filtering", value: mergeCommitFiltering)])
+ let betweenArg = between.asRubyArgument(name: "between", type: nil)
+ let commitsCountArg = commitsCount.asRubyArgument(name: "commits_count", type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let prettyArg = RubyCommand.Argument(name: "pretty", value: pretty, type: nil)
+ let dateFormatArg = dateFormat.asRubyArgument(name: "date_format", type: nil)
+ let ancestryPathArg = ancestryPath.asRubyArgument(name: "ancestry_path", type: nil)
+ let tagMatchPatternArg = tagMatchPattern.asRubyArgument(name: "tag_match_pattern", type: nil)
+ let matchLightweightTagArg = matchLightweightTag.asRubyArgument(name: "match_lightweight_tag", type: nil)
+ let quietArg = quiet.asRubyArgument(name: "quiet", type: nil)
+ let includeMergesArg = includeMerges.asRubyArgument(name: "include_merges", type: nil)
+ let mergeCommitFilteringArg = RubyCommand.Argument(name: "merge_commit_filtering", value: mergeCommitFiltering, type: nil)
+ let array: [RubyCommand.Argument?] = [betweenArg,
+ commitsCountArg,
+ pathArg,
+ prettyArg,
+ dateFormatArg,
+ ancestryPathArg,
+ tagMatchPatternArg,
+ matchLightweightTagArg,
+ quietArg,
+ includeMergesArg,
+ mergeCommitFilteringArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "changelog_from_git_commits", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Send a success/error message to [ChatWork](https://go.chatwork.com/)
@@ -1959,17 +2715,25 @@
Information on how to obtain an API token: [http://developer.chatwork.com/ja/authenticate.html](http://developer.chatwork.com/ja/authenticate.html)
*/
public func chatwork(apiToken: String,
message: String,
- roomid: Any,
- success: Bool = true)
+ roomid: Int,
+ success: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "chatwork", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "roomid", value: roomid),
- RubyCommand.Argument(name: "success", value: success)])
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let roomidArg = RubyCommand.Argument(name: "roomid", value: roomid, type: nil)
+ let successArg = success.asRubyArgument(name: "success", type: nil)
+ let array: [RubyCommand.Argument?] = [apiTokenArg,
+ messageArg,
+ roomidArg,
+ successArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "chatwork", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Check your app's metadata before you submit your app to review (via _precheck_)
@@ -1982,10 +2746,11 @@
- teamId: The ID of your App Store Connect team if you're in multiple teams
- teamName: The name of your App Store Connect team if you're in multiple teams
- platform: The platform to use (optional)
- defaultRuleLevel: The default rule level unless otherwise configured
- includeInAppPurchases: Should check in-app purchases?
+ - useLive: Should force check live app?
- negativeAppleSentiment: mentioning in a way that could be considered negative
- placeholderText: using placeholder text (e.g.:"lorem ipsum", "text here", etc...)
- otherPlatforms: mentioning other platforms, like Android or Blackberry
- futureFunctionality: mentioning features or content that is not currently available in your app
- testWords: using text indicating this release is a test
@@ -1997,50 +2762,76 @@
- returns: true if precheck passes, else, false
More information: https://fastlane.tools/precheck
*/
-public func checkAppStoreMetadata(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- appIdentifier: String,
- username: String,
- teamId: String? = nil,
- teamName: String? = nil,
- platform: String = "ios",
- defaultRuleLevel: Any = "error",
- includeInAppPurchases: Bool = true,
- negativeAppleSentiment: Any? = nil,
- placeholderText: Any? = nil,
- otherPlatforms: Any? = nil,
- futureFunctionality: Any? = nil,
- testWords: Any? = nil,
- curseWords: Any? = nil,
- freeStuffInIap: Any? = nil,
- customText: Any? = nil,
- copyrightDate: Any? = nil,
- unreachableUrls: Any? = nil)
+@discardableResult public func checkAppStoreMetadata(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appIdentifier: String,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ platform: String = "ios",
+ defaultRuleLevel: Any = "error",
+ includeInAppPurchases: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ useLive: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ negativeAppleSentiment: Any? = nil,
+ placeholderText: Any? = nil,
+ otherPlatforms: Any? = nil,
+ futureFunctionality: Any? = nil,
+ testWords: Any? = nil,
+ curseWords: Any? = nil,
+ freeStuffInIap: Any? = nil,
+ customText: Any? = nil,
+ copyrightDate: Any? = nil,
+ unreachableUrls: Any? = nil) -> Bool
{
- let command = RubyCommand(commandID: "", methodName: "check_app_store_metadata", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel),
- RubyCommand.Argument(name: "include_in_app_purchases", value: includeInAppPurchases),
- RubyCommand.Argument(name: "negative_apple_sentiment", value: negativeAppleSentiment),
- RubyCommand.Argument(name: "placeholder_text", value: placeholderText),
- RubyCommand.Argument(name: "other_platforms", value: otherPlatforms),
- RubyCommand.Argument(name: "future_functionality", value: futureFunctionality),
- RubyCommand.Argument(name: "test_words", value: testWords),
- RubyCommand.Argument(name: "curse_words", value: curseWords),
- RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap),
- RubyCommand.Argument(name: "custom_text", value: customText),
- RubyCommand.Argument(name: "copyright_date", value: copyrightDate),
- RubyCommand.Argument(name: "unreachable_urls", value: unreachableUrls)])
- _ = runner.executeCommand(command)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let defaultRuleLevelArg = RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel, type: nil)
+ let includeInAppPurchasesArg = includeInAppPurchases.asRubyArgument(name: "include_in_app_purchases", type: nil)
+ let useLiveArg = useLive.asRubyArgument(name: "use_live", type: nil)
+ let negativeAppleSentimentArg = RubyCommand.Argument(name: "negative_apple_sentiment", value: negativeAppleSentiment, type: nil)
+ let placeholderTextArg = RubyCommand.Argument(name: "placeholder_text", value: placeholderText, type: nil)
+ let otherPlatformsArg = RubyCommand.Argument(name: "other_platforms", value: otherPlatforms, type: nil)
+ let futureFunctionalityArg = RubyCommand.Argument(name: "future_functionality", value: futureFunctionality, type: nil)
+ let testWordsArg = RubyCommand.Argument(name: "test_words", value: testWords, type: nil)
+ let curseWordsArg = RubyCommand.Argument(name: "curse_words", value: curseWords, type: nil)
+ let freeStuffInIapArg = RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap, type: nil)
+ let customTextArg = RubyCommand.Argument(name: "custom_text", value: customText, type: nil)
+ let copyrightDateArg = RubyCommand.Argument(name: "copyright_date", value: copyrightDate, type: nil)
+ let unreachableUrlsArg = RubyCommand.Argument(name: "unreachable_urls", value: unreachableUrls, type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ appIdentifierArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ platformArg,
+ defaultRuleLevelArg,
+ includeInAppPurchasesArg,
+ useLiveArg,
+ negativeAppleSentimentArg,
+ placeholderTextArg,
+ otherPlatformsArg,
+ futureFunctionalityArg,
+ testWordsArg,
+ curseWordsArg,
+ freeStuffInIapArg,
+ customTextArg,
+ copyrightDateArg,
+ unreachableUrlsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "check_app_store_metadata", className: nil, args: args)
+ return parseBool(fromString: runner.executeCommand(command))
}
/**
Deletes files created as result of running gym, cert, sigh or download_dsyms
@@ -2048,22 +2839,32 @@
This action deletes the files that get created in your repo as a result of running the _gym_ and _sigh_ commands. It doesn't delete the `fastlane/report.xml` though, this is probably more suited for the .gitignore.
Useful if you quickly want to send out a test build by dropping down to the command line and typing something like `fastlane beta`, without leaving your repo in a messy state afterwards.
*/
-public func cleanBuildArtifacts(excludePattern: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "clean_build_artifacts", className: nil, args: [RubyCommand.Argument(name: "exclude_pattern", value: excludePattern)])
+public func cleanBuildArtifacts(excludePattern: OptionalConfigValue<String?> = .fastlaneDefault(nil)) {
+ let excludePatternArg = excludePattern.asRubyArgument(name: "exclude_pattern", type: nil)
+ let array: [RubyCommand.Argument?] = [excludePatternArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "clean_build_artifacts", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Remove the cache for pods
- parameter name: Pod name to be removed from cache
*/
-public func cleanCocoapodsCache(name: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "clean_cocoapods_cache", className: nil, args: [RubyCommand.Argument(name: "name", value: name)])
+public func cleanCocoapodsCache(name: OptionalConfigValue<String?> = .fastlaneDefault(nil)) {
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let array: [RubyCommand.Argument?] = [nameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "clean_cocoapods_cache", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Deletes the Xcode Derived Data
@@ -2071,21 +2872,31 @@
- parameter derivedDataPath: Custom path for derivedData
Deletes the Derived Data from path set on Xcode or a supplied path
*/
public func clearDerivedData(derivedDataPath: String = "~/Library/Developer/Xcode/DerivedData") {
- let command = RubyCommand(commandID: "", methodName: "clear_derived_data", className: nil, args: [RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath)])
+ let derivedDataPathArg = RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath, type: nil)
+ let array: [RubyCommand.Argument?] = [derivedDataPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "clear_derived_data", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Copies a given string into the clipboard. Works only on macOS
- parameter value: The string that should be copied into the clipboard
*/
public func clipboard(value: String) {
- let command = RubyCommand(commandID: "", methodName: "clipboard", className: nil, args: [RubyCommand.Argument(name: "value", value: value)])
+ let valueArg = RubyCommand.Argument(name: "value", value: value, type: nil)
+ let array: [RubyCommand.Argument?] = [valueArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "clipboard", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generates a Code Count that can be read by Jenkins (xml format)
@@ -2099,28 +2910,38 @@
This action will run cloc to generate a SLOC report that the Jenkins SLOCCount plugin can read.
See [https://wiki.jenkins-ci.org/display/JENKINS/SLOCCount+Plugin](https://wiki.jenkins-ci.org/display/JENKINS/SLOCCount+Plugin) and [https://github.com/AlDanial/cloc](https://github.com/AlDanial/cloc) for more information.
*/
public func cloc(binaryPath: String = "/usr/local/bin/cloc",
- excludeDir: String? = nil,
+ excludeDir: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputDirectory: String = "build",
sourceDirectory: String = "",
- xml: Bool = true)
+ xml: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "cloc", className: nil, args: [RubyCommand.Argument(name: "binary_path", value: binaryPath),
- RubyCommand.Argument(name: "exclude_dir", value: excludeDir),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "source_directory", value: sourceDirectory),
- RubyCommand.Argument(name: "xml", value: xml)])
+ let binaryPathArg = RubyCommand.Argument(name: "binary_path", value: binaryPath, type: nil)
+ let excludeDirArg = excludeDir.asRubyArgument(name: "exclude_dir", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let sourceDirectoryArg = RubyCommand.Argument(name: "source_directory", value: sourceDirectory, type: nil)
+ let xmlArg = xml.asRubyArgument(name: "xml", type: nil)
+ let array: [RubyCommand.Argument?] = [binaryPathArg,
+ excludeDirArg,
+ outputDirectoryArg,
+ sourceDirectoryArg,
+ xmlArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "cloc", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Print a Club Mate in your build output
*/
public func clubmate() {
- let command = RubyCommand(commandID: "", methodName: "clubmate", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "clubmate", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs `pod install` for the project
@@ -2134,50 +2955,71 @@
- useBundleExec: Use bundle exec when there is a Gemfile presented
- podfile: Explicitly specify the path to the Cocoapods' Podfile. You can either set it to the Podfile's path or to the folder containing the Podfile file
- errorCallback: A callback invoked with the command output if there is a non-zero exit status
- tryRepoUpdateOnError: Retry with --repo-update if action was finished with error
- deployment: Disallow any changes to the Podfile or the Podfile.lock during installation
+ - allowRoot: Allows CocoaPods to run as root
- clean: **DEPRECATED!** (Option renamed as clean_install) Remove SCM directories
- integrate: **DEPRECATED!** (Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)
If you use [CocoaPods](http://cocoapods.org) you can use the `cocoapods` integration to run `pod install` before building your app.
*/
-public func cocoapods(repoUpdate: Bool = false,
- cleanInstall: Bool = false,
- silent: Bool = false,
- verbose: Bool = false,
- ansi: Bool = true,
- useBundleExec: Bool = true,
- podfile: String? = nil,
+public func cocoapods(repoUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ cleanInstall: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ silent: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ ansi: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ podfile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
errorCallback: ((String) -> Void)? = nil,
- tryRepoUpdateOnError: Bool = false,
- deployment: Bool = false,
- clean: Bool = true,
- integrate: Bool = true)
+ tryRepoUpdateOnError: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ deployment: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ allowRoot: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ integrate: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "repo_update", value: repoUpdate),
- RubyCommand.Argument(name: "clean_install", value: cleanInstall),
- RubyCommand.Argument(name: "silent", value: silent),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "ansi", value: ansi),
- RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "podfile", value: podfile),
- RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure),
- RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
- RubyCommand.Argument(name: "deployment", value: deployment),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "integrate", value: integrate)])
+ let repoUpdateArg = repoUpdate.asRubyArgument(name: "repo_update", type: nil)
+ let cleanInstallArg = cleanInstall.asRubyArgument(name: "clean_install", type: nil)
+ let silentArg = silent.asRubyArgument(name: "silent", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let ansiArg = ansi.asRubyArgument(name: "ansi", type: nil)
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let podfileArg = podfile.asRubyArgument(name: "podfile", type: nil)
+ let errorCallbackArg = RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure)
+ let tryRepoUpdateOnErrorArg = tryRepoUpdateOnError.asRubyArgument(name: "try_repo_update_on_error", type: nil)
+ let deploymentArg = deployment.asRubyArgument(name: "deployment", type: nil)
+ let allowRootArg = allowRoot.asRubyArgument(name: "allow_root", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let integrateArg = integrate.asRubyArgument(name: "integrate", type: nil)
+ let array: [RubyCommand.Argument?] = [repoUpdateArg,
+ cleanInstallArg,
+ silentArg,
+ verboseArg,
+ ansiArg,
+ useBundleExecArg,
+ podfileArg,
+ errorCallbackArg,
+ tryRepoUpdateOnErrorArg,
+ deploymentArg,
+ allowRootArg,
+ cleanArg,
+ integrateArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will commit a file directly on GitHub via the API
- parameters:
- repositoryName: The path to your repo, e.g. 'fastlane/fastlane'
- serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com')
- apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
- branch: The branch that the file should be committed on (default: master)
- path: The relative path to your file from project root e.g. assets/my_app.xcarchive
- message: The commit message. Defaults to the file name
- secure: Optionally disable secure requests (ssl_verify_peer)
@@ -2188,23 +3030,37 @@
Out parameters provide the commit sha created, which can be used for later usage for examples such as releases, the direct download link and the full response JSON.
Documentation: [https://developer.github.com/v3/repos/contents/#create-a-file](https://developer.github.com/v3/repos/contents/#create-a-file).
*/
@discardableResult public func commitGithubFile(repositoryName: String,
serverUrl: String = "https://api.github.com",
- apiToken: String,
+ apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiBearer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
branch: String = "master",
path: String,
- message: String? = nil,
- secure: Bool = true) -> [String: String]
+ message: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secure: OptionalConfigValue<Bool> = .fastlaneDefault(true)) -> [String: String]
{
- let command = RubyCommand(commandID: "", methodName: "commit_github_file", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName),
- RubyCommand.Argument(name: "server_url", value: serverUrl),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "branch", value: branch),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "secure", value: secure)])
+ let repositoryNameArg = RubyCommand.Argument(name: "repository_name", value: repositoryName, type: nil)
+ let serverUrlArg = RubyCommand.Argument(name: "server_url", value: serverUrl, type: nil)
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let apiBearerArg = apiBearer.asRubyArgument(name: "api_bearer", type: nil)
+ let branchArg = RubyCommand.Argument(name: "branch", value: branch, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let secureArg = secure.asRubyArgument(name: "secure", type: nil)
+ let array: [RubyCommand.Argument?] = [repositoryNameArg,
+ serverUrlArg,
+ apiTokenArg,
+ apiBearerArg,
+ branchArg,
+ pathArg,
+ messageArg,
+ secureArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "commit_github_file", className: nil, args: args)
return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Creates a 'Version Bump' commit. Run after `increment_build_number`
@@ -2226,25 +3082,36 @@
>|
Then commits those files to the repo.
Customize the message with the `:message` option. It defaults to 'Version Bump'.
If you have other uncommitted changes in your repo, this action will fail. If you started off in a clean repo, and used the _ipa_ and or _sigh_ actions, then you can use the [clean_build_artifacts](https://docs.fastlane.tools/actions/clean_build_artifacts/) action to clean those temporary files up before running this action.
*/
-public func commitVersionBump(message: String? = nil,
- xcodeproj: String? = nil,
- force: Bool = false,
- settings: Bool = false,
- ignore: Any? = nil,
+public func commitVersionBump(message: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ settings: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ ignore: OptionalConfigValue<String?> = .fastlaneDefault(nil),
include: [String] = [],
- noVerify: Bool = false)
+ noVerify: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "commit_version_bump", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "settings", value: settings),
- RubyCommand.Argument(name: "ignore", value: ignore),
- RubyCommand.Argument(name: "include", value: include),
- RubyCommand.Argument(name: "no_verify", value: noVerify)])
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let settingsArg = settings.asRubyArgument(name: "settings", type: nil)
+ let ignoreArg = ignore.asRubyArgument(name: "ignore", type: nil)
+ let includeArg = RubyCommand.Argument(name: "include", value: include, type: nil)
+ let noVerifyArg = noVerify.asRubyArgument(name: "no_verify", type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg,
+ xcodeprojArg,
+ forceArg,
+ settingsArg,
+ ignoreArg,
+ includeArg,
+ noVerifyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "commit_version_bump", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Copy and save your build artifacts (useful when you use reset_git_repo)
@@ -2256,19 +3123,27 @@
- failOnMissing: Fail when a source file isn't found
This action copies artifacts to a target directory. It's useful if you have a CI that will pick up these artifacts and attach them to the build. Useful e.g. for storing your `.ipa`s, `.dSYM.zip`s, `.mobileprovision`s, `.cert`s.
Make sure your `:target_path` is ignored from git, and if you use `reset_git_repo`, make sure the artifacts are added to the exclude list.
*/
-public func copyArtifacts(keepOriginal: Bool = true,
- targetPath: Any = "artifacts",
+public func copyArtifacts(keepOriginal: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ targetPath: String = "artifacts",
artifacts: [String] = [],
- failOnMissing: Bool = false)
+ failOnMissing: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "copy_artifacts", className: nil, args: [RubyCommand.Argument(name: "keep_original", value: keepOriginal),
- RubyCommand.Argument(name: "target_path", value: targetPath),
- RubyCommand.Argument(name: "artifacts", value: artifacts),
- RubyCommand.Argument(name: "fail_on_missing", value: failOnMissing)])
+ let keepOriginalArg = keepOriginal.asRubyArgument(name: "keep_original", type: nil)
+ let targetPathArg = RubyCommand.Argument(name: "target_path", value: targetPath, type: nil)
+ let artifactsArg = RubyCommand.Argument(name: "artifacts", value: artifacts, type: nil)
+ let failOnMissingArg = failOnMissing.asRubyArgument(name: "fail_on_missing", type: nil)
+ let array: [RubyCommand.Argument?] = [keepOriginalArg,
+ targetPathArg,
+ artifactsArg,
+ failOnMissingArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "copy_artifacts", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Refer to [Firebase App Distribution](https://appdistro.page.link/fastlane-repo)
@@ -2288,33 +3163,48 @@
Additionally, you can specify `notes`, `emails`, `groups` and `notifications`.
Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button.
This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option.
*/
-public func crashlytics(ipaPath: String? = nil,
- apkPath: String? = nil,
- crashlyticsPath: String? = nil,
+public func crashlytics(ipaPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apkPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ crashlyticsPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
apiToken: String,
buildSecret: String,
- notesPath: String? = nil,
- notes: String? = nil,
- groups: Any? = nil,
- emails: Any? = nil,
- notifications: Bool = true,
- debug: Bool = false)
+ notesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ notes: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ groups: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ emails: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ notifications: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ debug: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "crashlytics", className: nil, args: [RubyCommand.Argument(name: "ipa_path", value: ipaPath),
- RubyCommand.Argument(name: "apk_path", value: apkPath),
- RubyCommand.Argument(name: "crashlytics_path", value: crashlyticsPath),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "build_secret", value: buildSecret),
- RubyCommand.Argument(name: "notes_path", value: notesPath),
- RubyCommand.Argument(name: "notes", value: notes),
- RubyCommand.Argument(name: "groups", value: groups),
- RubyCommand.Argument(name: "emails", value: emails),
- RubyCommand.Argument(name: "notifications", value: notifications),
- RubyCommand.Argument(name: "debug", value: debug)])
+ let ipaPathArg = ipaPath.asRubyArgument(name: "ipa_path", type: nil)
+ let apkPathArg = apkPath.asRubyArgument(name: "apk_path", type: nil)
+ let crashlyticsPathArg = crashlyticsPath.asRubyArgument(name: "crashlytics_path", type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let buildSecretArg = RubyCommand.Argument(name: "build_secret", value: buildSecret, type: nil)
+ let notesPathArg = notesPath.asRubyArgument(name: "notes_path", type: nil)
+ let notesArg = notes.asRubyArgument(name: "notes", type: nil)
+ let groupsArg = groups.asRubyArgument(name: "groups", type: nil)
+ let emailsArg = emails.asRubyArgument(name: "emails", type: nil)
+ let notificationsArg = notifications.asRubyArgument(name: "notifications", type: nil)
+ let debugArg = debug.asRubyArgument(name: "debug", type: nil)
+ let array: [RubyCommand.Argument?] = [ipaPathArg,
+ apkPathArg,
+ crashlyticsPathArg,
+ apiTokenArg,
+ buildSecretArg,
+ notesPathArg,
+ notesArg,
+ groupsArg,
+ emailsArg,
+ notificationsArg,
+ debugArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "crashlytics", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Create Managed Google Play Apps
@@ -2329,27 +3219,39 @@
- rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
- timeout: Timeout for read, open, and send (in seconds)
Create new apps on Managed Google Play.
*/
-public func createAppOnManagedPlayStore(jsonKey: String? = nil,
- jsonKeyData: String? = nil,
+public func createAppOnManagedPlayStore(jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
developerAccountId: String,
apk: String,
appTitle: String,
language: String = "en_US",
- rootUrl: String? = nil,
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "create_app_on_managed_play_store", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "developer_account_id", value: developerAccountId),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "app_title", value: appTitle),
- RubyCommand.Argument(name: "language", value: language),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let developerAccountIdArg = RubyCommand.Argument(name: "developer_account_id", value: developerAccountId, type: nil)
+ let apkArg = RubyCommand.Argument(name: "apk", value: apk, type: nil)
+ let appTitleArg = RubyCommand.Argument(name: "app_title", value: appTitle, type: nil)
+ let languageArg = RubyCommand.Argument(name: "language", value: language, type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [jsonKeyArg,
+ jsonKeyDataArg,
+ developerAccountIdArg,
+ apkArg,
+ appTitleArg,
+ languageArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "create_app_on_managed_play_store", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Creates the given application on iTC and the Dev Portal (via _produce_)
@@ -2362,15 +3264,15 @@
- appVersion: Initial version number (e.g. '1.0')
- sku: SKU Number (e.g. '1234')
- platform: The platform to use (optional)
- platforms: The platforms to use (optional)
- language: Primary Language (e.g. 'en-US', 'fr-FR')
- - companyName: The name of your company. Only required if it's the first app you create
+ - companyName: The name of your company. It's used to set company name on App Store Connect team's app pages. Only required if it's the first app you create
- skipItc: Skip the creation of the app on App Store Connect
- itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles
- enabledFeatures: **DEPRECATED!** Please use `enable_services` instead - Array with Spaceship App Services
- - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), data_protection: (complete|unlessopen|untilfirstauth), game_center: (on|off), health_kit: (on|off), home_kit: (on|off), hotspot: (on|off), icloud: (legacy|cloudkit), in_app_purchase: (on|off), inter_app_audio: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), siri_kit: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off))
+ - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_attest: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), class_kit: (on|off), icloud: (legacy|cloudkit), custom_network_protocol: (on|off), data_protection: (complete|unlessopen|untilfirstauth), extended_virtual_address_space: (on|off), family_controls: (on|off), file_provider_testing_mode: (on|off), fonts: (on|off), game_center: (ios|mac), health_kit: (on|off), hls_interstitial_preview: (on|off), home_kit: (on|off), hotspot: (on|off), in_app_purchase: (on|off), inter_app_audio: (on|off), low_latency_hls: (on|off), managed_associated_domains: (on|off), maps: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), sign_in_with_apple: (on), siri_kit: (on|off), system_extension: (on|off), user_management: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off), car_play_audio_app: (on|off), car_play_messaging_app: (on|off), car_play_navigation_app: (on|off), car_play_voip_calling_app: (on|off), critical_alerts: (on|off), hotspot_helper: (on|off), driver_kit: (on|off), driver_kit_endpoint_security: (on|off), driver_kit_family_hid_device: (on|off), driver_kit_family_networking: (on|off), driver_kit_family_serial: (on|off), driver_kit_hid_event_service: (on|off), driver_kit_transport_hid: (on|off), multitasking_camera_access: (on|off), sf_universal_link_api: (on|off), vp9_decoder: (on|off), music_kit: (on|off), shazam_kit: (on|off), communication_notifications: (on|off), group_activities: (on|off), health_kit_estimate_recalibration: (on|off), time_sensitive_notifications: (on|off))
- skipDevcenter: Skip the creation of the app on the Apple Developer Portal
- teamId: The ID of your Developer Portal team if you're in multiple teams
- teamName: The name of your Developer Portal team if you're in multiple teams
- itcTeamId: The ID of your App Store Connect team if you're in multiple teams
- itcTeamName: The name of your App Store Connect team if you're in multiple teams
@@ -2379,47 +3281,70 @@
If the app already exists, `create_app_online` will not do anything.
For more information about _produce_, visit its documentation page: [https://docs.fastlane.tools/actions/produce/](https://docs.fastlane.tools/actions/produce/).
*/
public func createAppOnline(username: String,
appIdentifier: String,
- bundleIdentifierSuffix: String? = nil,
+ bundleIdentifierSuffix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appName: String,
- appVersion: String? = nil,
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
sku: String,
platform: String = "ios",
- platforms: [String]? = nil,
+ platforms: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
language: String = "English",
- companyName: String? = nil,
- skipItc: Bool = false,
- itcUsers: [String]? = nil,
+ companyName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipItc: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ itcUsers: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
enabledFeatures: [String: Any] = [:],
enableServices: [String: Any] = [:],
- skipDevcenter: Bool = false,
- teamId: String? = nil,
- teamName: String? = nil,
+ skipDevcenter: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
itcTeamId: Any? = nil,
- itcTeamName: String? = nil)
+ itcTeamName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "create_app_online", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "bundle_identifier_suffix", value: bundleIdentifierSuffix),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "sku", value: sku),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "platforms", value: platforms),
- RubyCommand.Argument(name: "language", value: language),
- RubyCommand.Argument(name: "company_name", value: companyName),
- RubyCommand.Argument(name: "skip_itc", value: skipItc),
- RubyCommand.Argument(name: "itc_users", value: itcUsers),
- RubyCommand.Argument(name: "enabled_features", value: enabledFeatures),
- RubyCommand.Argument(name: "enable_services", value: enableServices),
- RubyCommand.Argument(name: "skip_devcenter", value: skipDevcenter),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "itc_team_id", value: itcTeamId),
- RubyCommand.Argument(name: "itc_team_name", value: itcTeamName)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let bundleIdentifierSuffixArg = bundleIdentifierSuffix.asRubyArgument(name: "bundle_identifier_suffix", type: nil)
+ let appNameArg = RubyCommand.Argument(name: "app_name", value: appName, type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let skuArg = RubyCommand.Argument(name: "sku", value: sku, type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let platformsArg = platforms.asRubyArgument(name: "platforms", type: nil)
+ let languageArg = RubyCommand.Argument(name: "language", value: language, type: nil)
+ let companyNameArg = companyName.asRubyArgument(name: "company_name", type: nil)
+ let skipItcArg = skipItc.asRubyArgument(name: "skip_itc", type: nil)
+ let itcUsersArg = itcUsers.asRubyArgument(name: "itc_users", type: nil)
+ let enabledFeaturesArg = RubyCommand.Argument(name: "enabled_features", value: enabledFeatures, type: nil)
+ let enableServicesArg = RubyCommand.Argument(name: "enable_services", value: enableServices, type: nil)
+ let skipDevcenterArg = skipDevcenter.asRubyArgument(name: "skip_devcenter", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let itcTeamIdArg = RubyCommand.Argument(name: "itc_team_id", value: itcTeamId, type: nil)
+ let itcTeamNameArg = itcTeamName.asRubyArgument(name: "itc_team_name", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ bundleIdentifierSuffixArg,
+ appNameArg,
+ appVersionArg,
+ skuArg,
+ platformArg,
+ platformsArg,
+ languageArg,
+ companyNameArg,
+ skipItcArg,
+ itcUsersArg,
+ enabledFeaturesArg,
+ enableServicesArg,
+ skipDevcenterArg,
+ teamIdArg,
+ teamNameArg,
+ itcTeamIdArg,
+ itcTeamNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "create_app_online", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Create a new Keychain
@@ -2428,45 +3353,60 @@
- name: Keychain name
- path: Path to keychain
- password: Password for the keychain
- defaultKeychain: Should the newly created Keychain be the new system default keychain
- unlock: Unlock keychain after create
- - timeout: timeout interval in seconds. Set `false` if you want to specify "no time-out"
+ - timeout: timeout interval in seconds. Set `0` if you want to specify "no time-out"
- lockWhenSleeps: Lock keychain when the system sleeps
- lockAfterTimeout: Lock keychain after timeout interval
- addToSearchList: Add keychain to search list
- requireCreate: Fail the action if the Keychain already exists
*/
-public func createKeychain(name: String? = nil,
- path: String? = nil,
+public func createKeychain(name: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
password: String,
- defaultKeychain: Bool = false,
- unlock: Bool = false,
+ defaultKeychain: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ unlock: OptionalConfigValue<Bool> = .fastlaneDefault(false),
timeout: Int = 300,
- lockWhenSleeps: Bool = false,
- lockAfterTimeout: Bool = false,
- addToSearchList: Bool = true,
- requireCreate: Bool = false)
+ lockWhenSleeps: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ lockAfterTimeout: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ addToSearchList: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ requireCreate: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "create_keychain", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "default_keychain", value: defaultKeychain),
- RubyCommand.Argument(name: "unlock", value: unlock),
- RubyCommand.Argument(name: "timeout", value: timeout),
- RubyCommand.Argument(name: "lock_when_sleeps", value: lockWhenSleeps),
- RubyCommand.Argument(name: "lock_after_timeout", value: lockAfterTimeout),
- RubyCommand.Argument(name: "add_to_search_list", value: addToSearchList),
- RubyCommand.Argument(name: "require_create", value: requireCreate)])
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let passwordArg = RubyCommand.Argument(name: "password", value: password, type: nil)
+ let defaultKeychainArg = defaultKeychain.asRubyArgument(name: "default_keychain", type: nil)
+ let unlockArg = unlock.asRubyArgument(name: "unlock", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let lockWhenSleepsArg = lockWhenSleeps.asRubyArgument(name: "lock_when_sleeps", type: nil)
+ let lockAfterTimeoutArg = lockAfterTimeout.asRubyArgument(name: "lock_after_timeout", type: nil)
+ let addToSearchListArg = addToSearchList.asRubyArgument(name: "add_to_search_list", type: nil)
+ let requireCreateArg = requireCreate.asRubyArgument(name: "require_create", type: nil)
+ let array: [RubyCommand.Argument?] = [nameArg,
+ pathArg,
+ passwordArg,
+ defaultKeychainArg,
+ unlockArg,
+ timeoutArg,
+ lockWhenSleepsArg,
+ lockAfterTimeoutArg,
+ addToSearchListArg,
+ requireCreateArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "create_keychain", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will create a new pull request on GitHub
- parameters:
- apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
- repo: The name of the repository you want to submit the pull request to
- title: The title of the pull request
- body: The contents of the pull request
- draft: Indicates whether the pull request is a draft
- labels: The labels for the pull request
@@ -2478,41 +3418,105 @@
- reviewers: The reviewers (slug) for the pull request
- teamReviewers: The team reviewers (slug) for the pull request
- returns: The pull request URL when successful
*/
-public func createPullRequest(apiToken: String,
+public func createPullRequest(apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiBearer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
repo: String,
title: String,
- body: String? = nil,
- draft: Bool? = nil,
- labels: [String]? = nil,
- milestone: String? = nil,
- head: String? = nil,
+ body: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ draft: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ labels: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ milestone: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ head: String = "master",
base: String = "master",
apiUrl: String = "https://api.github.com",
- assignees: [String]? = nil,
- reviewers: [String]? = nil,
- teamReviewers: [String]? = nil)
+ assignees: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ reviewers: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ teamReviewers: OptionalConfigValue<[String]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "create_pull_request", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "repo", value: repo),
- RubyCommand.Argument(name: "title", value: title),
- RubyCommand.Argument(name: "body", value: body),
- RubyCommand.Argument(name: "draft", value: draft),
- RubyCommand.Argument(name: "labels", value: labels),
- RubyCommand.Argument(name: "milestone", value: milestone),
- RubyCommand.Argument(name: "head", value: head),
- RubyCommand.Argument(name: "base", value: base),
- RubyCommand.Argument(name: "api_url", value: apiUrl),
- RubyCommand.Argument(name: "assignees", value: assignees),
- RubyCommand.Argument(name: "reviewers", value: reviewers),
- RubyCommand.Argument(name: "team_reviewers", value: teamReviewers)])
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let apiBearerArg = apiBearer.asRubyArgument(name: "api_bearer", type: nil)
+ let repoArg = RubyCommand.Argument(name: "repo", value: repo, type: nil)
+ let titleArg = RubyCommand.Argument(name: "title", value: title, type: nil)
+ let bodyArg = body.asRubyArgument(name: "body", type: nil)
+ let draftArg = draft.asRubyArgument(name: "draft", type: nil)
+ let labelsArg = labels.asRubyArgument(name: "labels", type: nil)
+ let milestoneArg = milestone.asRubyArgument(name: "milestone", type: nil)
+ let headArg = RubyCommand.Argument(name: "head", value: head, type: nil)
+ let baseArg = RubyCommand.Argument(name: "base", value: base, type: nil)
+ let apiUrlArg = RubyCommand.Argument(name: "api_url", value: apiUrl, type: nil)
+ let assigneesArg = assignees.asRubyArgument(name: "assignees", type: nil)
+ let reviewersArg = reviewers.asRubyArgument(name: "reviewers", type: nil)
+ let teamReviewersArg = teamReviewers.asRubyArgument(name: "team_reviewers", type: nil)
+ let array: [RubyCommand.Argument?] = [apiTokenArg,
+ apiBearerArg,
+ repoArg,
+ titleArg,
+ bodyArg,
+ draftArg,
+ labelsArg,
+ milestoneArg,
+ headArg,
+ baseArg,
+ apiUrlArg,
+ assigneesArg,
+ reviewersArg,
+ teamReviewersArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "create_pull_request", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
+ Package multiple build configs of a library/framework into a single xcframework
+
+ - parameters:
+ - frameworks: Frameworks to add to the target xcframework
+ - libraries: Libraries to add to the target xcframework, with their corresponding headers
+ - output: The path to write the xcframework to
+ - allowInternalDistribution: Specifies that the created xcframework contains information not suitable for public distribution
+
+ Utility for packaging multiple build configurations of a given library
+ or framework into a single xcframework.
+
+ If you want to package several frameworks just provide an array containing
+ the list of frameworks to be packaged using the :frameworks parameter.
+
+ If you want to package several libraries with their corresponding headers
+ provide a hash containing the library as the key and the directory containing
+ its headers as the value (or an empty string if there are no headers associated
+ with the provided library).
+
+ Finally specify the location of the xcframework to be generated using the :output
+ parameter.
+
+ */
+public func createXcframework(frameworks: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ libraries: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ output: String,
+ allowInternalDistribution: OptionalConfigValue<Bool> = .fastlaneDefault(false))
+{
+ let frameworksArg = frameworks.asRubyArgument(name: "frameworks", type: nil)
+ let librariesArg = libraries.asRubyArgument(name: "libraries", type: nil)
+ let outputArg = RubyCommand.Argument(name: "output", value: output, type: nil)
+ let allowInternalDistributionArg = allowInternalDistribution.asRubyArgument(name: "allow_internal_distribution", type: nil)
+ let array: [RubyCommand.Argument?] = [frameworksArg,
+ librariesArg,
+ outputArg,
+ allowInternalDistributionArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "create_xcframework", className: nil, args: args)
+ _ = runner.executeCommand(command)
+}
+
+/**
Runs `danger` for the project
- parameters:
- useBundleExec: Use bundle exec when there is a Gemfile presented
- verbose: Show more debugging information
@@ -2523,53 +3527,74 @@
- newComment: Makes Danger post a new comment instead of editing its previous one
- removePreviousComments: Makes Danger remove all previous comment and create a new one in the end of the list
- base: A branch/tag/commit to use as the base of the diff. [master|dev|stable]
- head: A branch/tag/commit to use as the head. [master|dev|stable]
- pr: Run danger on a specific pull request. e.g. "https://github.com/danger/danger/pull/518"
+ - failIfNoPr: Fail Danger execution if no PR is found
Formalize your Pull Request etiquette.
More information: [https://github.com/danger/danger](https://github.com/danger/danger).
*/
-public func danger(useBundleExec: Bool = true,
- verbose: Bool = false,
- dangerId: String? = nil,
- dangerfile: String? = nil,
- githubApiToken: String? = nil,
- failOnErrors: Bool = false,
- newComment: Bool = false,
- removePreviousComments: Bool = false,
- base: String? = nil,
- head: String? = nil,
- pr: String? = nil)
+public func danger(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ dangerId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ dangerfile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ githubApiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failOnErrors: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ newComment: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ removePreviousComments: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ base: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ head: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pr: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failIfNoPr: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "danger", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "danger_id", value: dangerId),
- RubyCommand.Argument(name: "dangerfile", value: dangerfile),
- RubyCommand.Argument(name: "github_api_token", value: githubApiToken),
- RubyCommand.Argument(name: "fail_on_errors", value: failOnErrors),
- RubyCommand.Argument(name: "new_comment", value: newComment),
- RubyCommand.Argument(name: "remove_previous_comments", value: removePreviousComments),
- RubyCommand.Argument(name: "base", value: base),
- RubyCommand.Argument(name: "head", value: head),
- RubyCommand.Argument(name: "pr", value: pr)])
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let dangerIdArg = dangerId.asRubyArgument(name: "danger_id", type: nil)
+ let dangerfileArg = dangerfile.asRubyArgument(name: "dangerfile", type: nil)
+ let githubApiTokenArg = githubApiToken.asRubyArgument(name: "github_api_token", type: nil)
+ let failOnErrorsArg = failOnErrors.asRubyArgument(name: "fail_on_errors", type: nil)
+ let newCommentArg = newComment.asRubyArgument(name: "new_comment", type: nil)
+ let removePreviousCommentsArg = removePreviousComments.asRubyArgument(name: "remove_previous_comments", type: nil)
+ let baseArg = base.asRubyArgument(name: "base", type: nil)
+ let headArg = head.asRubyArgument(name: "head", type: nil)
+ let prArg = pr.asRubyArgument(name: "pr", type: nil)
+ let failIfNoPrArg = failIfNoPr.asRubyArgument(name: "fail_if_no_pr", type: nil)
+ let array: [RubyCommand.Argument?] = [useBundleExecArg,
+ verboseArg,
+ dangerIdArg,
+ dangerfileArg,
+ githubApiTokenArg,
+ failOnErrorsArg,
+ newCommentArg,
+ removePreviousCommentsArg,
+ baseArg,
+ headArg,
+ prArg,
+ failIfNoPrArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "danger", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Print out an overview of the lane context values
*/
public func debug() {
- let command = RubyCommand(commandID: "", methodName: "debug", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "debug", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Defines a default platform to not have to specify the platform
*/
public func defaultPlatform() {
- let command = RubyCommand(commandID: "", methodName: "default_platform", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "default_platform", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Delete keychains and remove them from the search list
@@ -2578,15 +3603,21 @@
- name: Keychain name
- keychainPath: Keychain path
Keychains can be deleted after being created with `create_keychain`
*/
-public func deleteKeychain(name: String? = nil,
- keychainPath: String? = nil)
+public func deleteKeychain(name: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "delete_keychain", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath)])
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
+ let array: [RubyCommand.Argument?] = [nameArg,
+ keychainPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "delete_keychain", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `upload_to_app_store` action
@@ -2635,11 +3666,11 @@
- secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
- primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)
- primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)
- secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)
- secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)
- - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information
+ - tradeRepresentativeContactInformation: **DEPRECATED!** This is no longer used by App Store Connect - Metadata: A hash containing the trade representative contact information
- appReviewInformation: Metadata: A hash containing the review information
- appReviewAttachmentFile: Metadata: Path to the app review attachment file
- description: Metadata: The localised app description
- name: Metadata: The localised app name
- subtitle: Metadata: The localised app subtitle
@@ -2660,135 +3691,201 @@
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
This is useful when running _fastlane_ on your Continuous Integration server:
`_upload_to_app_store_(force: true)`
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.
*/
-public func deliver(apiKeyPath: Any? = deliverfile.apiKeyPath,
- apiKey: [String: Any]? = deliverfile.apiKey,
- username: Any = deliverfile.username,
- appIdentifier: Any? = deliverfile.appIdentifier,
- appVersion: Any? = deliverfile.appVersion,
- ipa: Any? = deliverfile.ipa,
- pkg: Any? = deliverfile.pkg,
- buildNumber: Any? = deliverfile.buildNumber,
- platform: Any = deliverfile.platform,
- editLive: Bool = deliverfile.editLive,
- useLiveVersion: Bool = deliverfile.useLiveVersion,
- metadataPath: Any? = deliverfile.metadataPath,
- screenshotsPath: Any? = deliverfile.screenshotsPath,
- skipBinaryUpload: Bool = deliverfile.skipBinaryUpload,
- skipScreenshots: Bool = deliverfile.skipScreenshots,
- skipMetadata: Bool = deliverfile.skipMetadata,
- skipAppVersionUpdate: Bool = deliverfile.skipAppVersionUpdate,
- force: Bool = deliverfile.force,
- overwriteScreenshots: Bool = deliverfile.overwriteScreenshots,
- submitForReview: Bool = deliverfile.submitForReview,
- rejectIfPossible: Bool = deliverfile.rejectIfPossible,
- automaticRelease: Bool? = deliverfile.automaticRelease,
- autoReleaseDate: Int? = deliverfile.autoReleaseDate,
- phasedRelease: Bool = deliverfile.phasedRelease,
- resetRatings: Bool = deliverfile.resetRatings,
- priceTier: Any? = deliverfile.priceTier,
- appRatingConfigPath: Any? = deliverfile.appRatingConfigPath,
- submissionInformation: [String: Any]? = deliverfile.submissionInformation,
- teamId: Any? = deliverfile.teamId,
- teamName: Any? = deliverfile.teamName,
- devPortalTeamId: Any? = deliverfile.devPortalTeamId,
- devPortalTeamName: Any? = deliverfile.devPortalTeamName,
- itcProvider: Any? = deliverfile.itcProvider,
- runPrecheckBeforeSubmit: Bool = deliverfile.runPrecheckBeforeSubmit,
+public func deliver(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.apiKeyPath),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.apiKey),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.username),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appIdentifier),
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appVersion),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.ipa),
+ pkg: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.pkg),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.buildNumber),
+ platform: String = deliverfile.platform,
+ editLive: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.editLive),
+ useLiveVersion: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.useLiveVersion),
+ metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.metadataPath),
+ screenshotsPath: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.screenshotsPath),
+ skipBinaryUpload: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.skipBinaryUpload),
+ skipScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.skipScreenshots),
+ skipMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.skipMetadata),
+ skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.skipAppVersionUpdate),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.force),
+ overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.overwriteScreenshots),
+ submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.submitForReview),
+ rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.rejectIfPossible),
+ automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(deliverfile.automaticRelease),
+ autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(deliverfile.autoReleaseDate),
+ phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.phasedRelease),
+ resetRatings: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.resetRatings),
+ priceTier: OptionalConfigValue<Int?> = .fastlaneDefault(deliverfile.priceTier),
+ appRatingConfigPath: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appRatingConfigPath),
+ submissionInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.submissionInformation),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.teamId),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.teamName),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.devPortalTeamId),
+ devPortalTeamName: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.devPortalTeamName),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.itcProvider),
+ runPrecheckBeforeSubmit: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.runPrecheckBeforeSubmit),
precheckDefaultRuleLevel: Any = deliverfile.precheckDefaultRuleLevel,
- individualMetadataItems: [String]? = deliverfile.individualMetadataItems,
- appIcon: Any? = deliverfile.appIcon,
- appleWatchAppIcon: Any? = deliverfile.appleWatchAppIcon,
- copyright: Any? = deliverfile.copyright,
- primaryCategory: Any? = deliverfile.primaryCategory,
- secondaryCategory: Any? = deliverfile.secondaryCategory,
- primaryFirstSubCategory: Any? = deliverfile.primaryFirstSubCategory,
- primarySecondSubCategory: Any? = deliverfile.primarySecondSubCategory,
- secondaryFirstSubCategory: Any? = deliverfile.secondaryFirstSubCategory,
- secondarySecondSubCategory: Any? = deliverfile.secondarySecondSubCategory,
- tradeRepresentativeContactInformation: [String: Any]? = deliverfile.tradeRepresentativeContactInformation,
- appReviewInformation: [String: Any]? = deliverfile.appReviewInformation,
- appReviewAttachmentFile: Any? = deliverfile.appReviewAttachmentFile,
- description: Any? = deliverfile.description,
- name: Any? = deliverfile.name,
- subtitle: [String: Any]? = deliverfile.subtitle,
- keywords: [String: Any]? = deliverfile.keywords,
- promotionalText: [String: Any]? = deliverfile.promotionalText,
- releaseNotes: Any? = deliverfile.releaseNotes,
- privacyUrl: Any? = deliverfile.privacyUrl,
- appleTvPrivacyPolicy: Any? = deliverfile.appleTvPrivacyPolicy,
- supportUrl: Any? = deliverfile.supportUrl,
- marketingUrl: Any? = deliverfile.marketingUrl,
- languages: [String]? = deliverfile.languages,
- ignoreLanguageDirectoryValidation: Bool = deliverfile.ignoreLanguageDirectoryValidation,
- precheckIncludeInAppPurchases: Bool = deliverfile.precheckIncludeInAppPurchases,
- app: Any = deliverfile.app)
+ individualMetadataItems: OptionalConfigValue<[String]?> = .fastlaneDefault(deliverfile.individualMetadataItems),
+ appIcon: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appIcon),
+ appleWatchAppIcon: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appleWatchAppIcon),
+ copyright: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.copyright),
+ primaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.primaryCategory),
+ secondaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.secondaryCategory),
+ primaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.primaryFirstSubCategory),
+ primarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.primarySecondSubCategory),
+ secondaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.secondaryFirstSubCategory),
+ secondarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.secondarySecondSubCategory),
+ tradeRepresentativeContactInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.tradeRepresentativeContactInformation),
+ appReviewInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.appReviewInformation),
+ appReviewAttachmentFile: OptionalConfigValue<String?> = .fastlaneDefault(deliverfile.appReviewAttachmentFile),
+ description: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.description),
+ name: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.name),
+ subtitle: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.subtitle),
+ keywords: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.keywords),
+ promotionalText: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.promotionalText),
+ releaseNotes: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.releaseNotes),
+ privacyUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.privacyUrl),
+ appleTvPrivacyPolicy: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.appleTvPrivacyPolicy),
+ supportUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.supportUrl),
+ marketingUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(deliverfile.marketingUrl),
+ languages: OptionalConfigValue<[String]?> = .fastlaneDefault(deliverfile.languages),
+ ignoreLanguageDirectoryValidation: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.ignoreLanguageDirectoryValidation),
+ precheckIncludeInAppPurchases: OptionalConfigValue<Bool> = .fastlaneDefault(deliverfile.precheckIncludeInAppPurchases),
+ app: OptionalConfigValue<Int?> = .fastlaneDefault(deliverfile.app))
{
- let command = RubyCommand(commandID: "", methodName: "deliver", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "pkg", value: pkg),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "edit_live", value: editLive),
- RubyCommand.Argument(name: "use_live_version", value: useLiveVersion),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath),
- RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload),
- RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots),
- RubyCommand.Argument(name: "skip_metadata", value: skipMetadata),
- RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots),
- RubyCommand.Argument(name: "submit_for_review", value: submitForReview),
- RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible),
- RubyCommand.Argument(name: "automatic_release", value: automaticRelease),
- RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate),
- RubyCommand.Argument(name: "phased_release", value: phasedRelease),
- RubyCommand.Argument(name: "reset_ratings", value: resetRatings),
- RubyCommand.Argument(name: "price_tier", value: priceTier),
- RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath),
- RubyCommand.Argument(name: "submission_information", value: submissionInformation),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit),
- RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel),
- RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems),
- RubyCommand.Argument(name: "app_icon", value: appIcon),
- RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon),
- RubyCommand.Argument(name: "copyright", value: copyright),
- RubyCommand.Argument(name: "primary_category", value: primaryCategory),
- RubyCommand.Argument(name: "secondary_category", value: secondaryCategory),
- RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory),
- RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory),
- RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory),
- RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory),
- RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation),
- RubyCommand.Argument(name: "app_review_information", value: appReviewInformation),
- RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile),
- RubyCommand.Argument(name: "description", value: description),
- RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "subtitle", value: subtitle),
- RubyCommand.Argument(name: "keywords", value: keywords),
- RubyCommand.Argument(name: "promotional_text", value: promotionalText),
- RubyCommand.Argument(name: "release_notes", value: releaseNotes),
- RubyCommand.Argument(name: "privacy_url", value: privacyUrl),
- RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy),
- RubyCommand.Argument(name: "support_url", value: supportUrl),
- RubyCommand.Argument(name: "marketing_url", value: marketingUrl),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation),
- RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases),
- RubyCommand.Argument(name: "app", value: app)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let pkgArg = pkg.asRubyArgument(name: "pkg", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let editLiveArg = editLive.asRubyArgument(name: "edit_live", type: nil)
+ let useLiveVersionArg = useLiveVersion.asRubyArgument(name: "use_live_version", type: nil)
+ let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
+ let screenshotsPathArg = screenshotsPath.asRubyArgument(name: "screenshots_path", type: nil)
+ let skipBinaryUploadArg = skipBinaryUpload.asRubyArgument(name: "skip_binary_upload", type: nil)
+ let skipScreenshotsArg = skipScreenshots.asRubyArgument(name: "skip_screenshots", type: nil)
+ let skipMetadataArg = skipMetadata.asRubyArgument(name: "skip_metadata", type: nil)
+ let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
+ let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
+ let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
+ let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
+ let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
+ let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
+ let resetRatingsArg = resetRatings.asRubyArgument(name: "reset_ratings", type: nil)
+ let priceTierArg = priceTier.asRubyArgument(name: "price_tier", type: nil)
+ let appRatingConfigPathArg = appRatingConfigPath.asRubyArgument(name: "app_rating_config_path", type: nil)
+ let submissionInformationArg = submissionInformation.asRubyArgument(name: "submission_information", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let devPortalTeamNameArg = devPortalTeamName.asRubyArgument(name: "dev_portal_team_name", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let runPrecheckBeforeSubmitArg = runPrecheckBeforeSubmit.asRubyArgument(name: "run_precheck_before_submit", type: nil)
+ let precheckDefaultRuleLevelArg = RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel, type: nil)
+ let individualMetadataItemsArg = individualMetadataItems.asRubyArgument(name: "individual_metadata_items", type: nil)
+ let appIconArg = appIcon.asRubyArgument(name: "app_icon", type: nil)
+ let appleWatchAppIconArg = appleWatchAppIcon.asRubyArgument(name: "apple_watch_app_icon", type: nil)
+ let copyrightArg = copyright.asRubyArgument(name: "copyright", type: nil)
+ let primaryCategoryArg = primaryCategory.asRubyArgument(name: "primary_category", type: nil)
+ let secondaryCategoryArg = secondaryCategory.asRubyArgument(name: "secondary_category", type: nil)
+ let primaryFirstSubCategoryArg = primaryFirstSubCategory.asRubyArgument(name: "primary_first_sub_category", type: nil)
+ let primarySecondSubCategoryArg = primarySecondSubCategory.asRubyArgument(name: "primary_second_sub_category", type: nil)
+ let secondaryFirstSubCategoryArg = secondaryFirstSubCategory.asRubyArgument(name: "secondary_first_sub_category", type: nil)
+ let secondarySecondSubCategoryArg = secondarySecondSubCategory.asRubyArgument(name: "secondary_second_sub_category", type: nil)
+ let tradeRepresentativeContactInformationArg = tradeRepresentativeContactInformation.asRubyArgument(name: "trade_representative_contact_information", type: nil)
+ let appReviewInformationArg = appReviewInformation.asRubyArgument(name: "app_review_information", type: nil)
+ let appReviewAttachmentFileArg = appReviewAttachmentFile.asRubyArgument(name: "app_review_attachment_file", type: nil)
+ let descriptionArg = description.asRubyArgument(name: "description", type: nil)
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let subtitleArg = subtitle.asRubyArgument(name: "subtitle", type: nil)
+ let keywordsArg = keywords.asRubyArgument(name: "keywords", type: nil)
+ let promotionalTextArg = promotionalText.asRubyArgument(name: "promotional_text", type: nil)
+ let releaseNotesArg = releaseNotes.asRubyArgument(name: "release_notes", type: nil)
+ let privacyUrlArg = privacyUrl.asRubyArgument(name: "privacy_url", type: nil)
+ let appleTvPrivacyPolicyArg = appleTvPrivacyPolicy.asRubyArgument(name: "apple_tv_privacy_policy", type: nil)
+ let supportUrlArg = supportUrl.asRubyArgument(name: "support_url", type: nil)
+ let marketingUrlArg = marketingUrl.asRubyArgument(name: "marketing_url", type: nil)
+ let languagesArg = languages.asRubyArgument(name: "languages", type: nil)
+ let ignoreLanguageDirectoryValidationArg = ignoreLanguageDirectoryValidation.asRubyArgument(name: "ignore_language_directory_validation", type: nil)
+ let precheckIncludeInAppPurchasesArg = precheckIncludeInAppPurchases.asRubyArgument(name: "precheck_include_in_app_purchases", type: nil)
+ let appArg = app.asRubyArgument(name: "app", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appVersionArg,
+ ipaArg,
+ pkgArg,
+ buildNumberArg,
+ platformArg,
+ editLiveArg,
+ useLiveVersionArg,
+ metadataPathArg,
+ screenshotsPathArg,
+ skipBinaryUploadArg,
+ skipScreenshotsArg,
+ skipMetadataArg,
+ skipAppVersionUpdateArg,
+ forceArg,
+ overwriteScreenshotsArg,
+ submitForReviewArg,
+ rejectIfPossibleArg,
+ automaticReleaseArg,
+ autoReleaseDateArg,
+ phasedReleaseArg,
+ resetRatingsArg,
+ priceTierArg,
+ appRatingConfigPathArg,
+ submissionInformationArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ devPortalTeamNameArg,
+ itcProviderArg,
+ runPrecheckBeforeSubmitArg,
+ precheckDefaultRuleLevelArg,
+ individualMetadataItemsArg,
+ appIconArg,
+ appleWatchAppIconArg,
+ copyrightArg,
+ primaryCategoryArg,
+ secondaryCategoryArg,
+ primaryFirstSubCategoryArg,
+ primarySecondSubCategoryArg,
+ secondaryFirstSubCategoryArg,
+ secondarySecondSubCategoryArg,
+ tradeRepresentativeContactInformationArg,
+ appReviewInformationArg,
+ appReviewAttachmentFileArg,
+ descriptionArg,
+ nameArg,
+ subtitleArg,
+ keywordsArg,
+ promotionalTextArg,
+ releaseNotesArg,
+ privacyUrlArg,
+ appleTvPrivacyPolicyArg,
+ supportUrlArg,
+ marketingUrlArg,
+ languagesArg,
+ ignoreLanguageDirectoryValidationArg,
+ precheckIncludeInAppPurchasesArg,
+ appArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "deliver", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload a new build to [DeployGate](https://deploygate.com/)
@@ -2807,27 +3904,40 @@
You can retrieve your username and API token on [your settings page](https://deploygate.com/settings).
More information about the available options can be found in the [DeployGate Push API document](https://deploygate.com/docs/api).
*/
public func deploygate(apiToken: String,
user: String,
- ipa: String? = nil,
- apk: String? = nil,
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
message: String = "No changelog provided",
- distributionKey: String? = nil,
- releaseNote: String? = nil,
- disableNotify: Bool = false,
- distributionName: String? = nil)
+ distributionKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ releaseNote: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ disableNotify: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributionName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "deploygate", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "user", value: user),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "distribution_key", value: distributionKey),
- RubyCommand.Argument(name: "release_note", value: releaseNote),
- RubyCommand.Argument(name: "disable_notify", value: disableNotify),
- RubyCommand.Argument(name: "distribution_name", value: distributionName)])
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let userArg = RubyCommand.Argument(name: "user", value: user, type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let distributionKeyArg = distributionKey.asRubyArgument(name: "distribution_key", type: nil)
+ let releaseNoteArg = releaseNote.asRubyArgument(name: "release_note", type: nil)
+ let disableNotifyArg = disableNotify.asRubyArgument(name: "disable_notify", type: nil)
+ let distributionNameArg = distributionName.asRubyArgument(name: "distribution_name", type: nil)
+ let array: [RubyCommand.Argument?] = [apiTokenArg,
+ userArg,
+ ipaArg,
+ apkArg,
+ messageArg,
+ distributionKeyArg,
+ releaseNoteArg,
+ disableNotifyArg,
+ distributionNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "deploygate", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Reads in production secrets set in a dotgpg file and puts them in ENV
@@ -2835,11 +3945,16 @@
- parameter dotgpgFile: Path to your gpg file
More information about dotgpg can be found at [https://github.com/ConradIrwin/dotgpg](https://github.com/ConradIrwin/dotgpg).
*/
public func dotgpgEnvironment(dotgpgFile: String) {
- let command = RubyCommand(commandID: "", methodName: "dotgpg_environment", className: nil, args: [RubyCommand.Argument(name: "dotgpg_file", value: dotgpgFile)])
+ let dotgpgFileArg = RubyCommand.Argument(name: "dotgpg_file", value: dotgpgFile, type: nil)
+ let array: [RubyCommand.Argument?] = [dotgpgFileArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "dotgpg_environment", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Download a file from a remote server (e.g. JSON file)
@@ -2849,15 +3964,55 @@
Specify the URL to download and get the content as a return value.
Automatically parses JSON into a Ruby data structure.
For more advanced networking code, use the Ruby functions instead: [http://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html](http://docs.ruby-lang.org/en/2.0.0/Net/HTTP.html).
*/
public func download(url: String) {
- let command = RubyCommand(commandID: "", methodName: "download", className: nil, args: [RubyCommand.Argument(name: "url", value: url)])
+ let urlArg = RubyCommand.Argument(name: "url", value: url, type: nil)
+ let array: [RubyCommand.Argument?] = [urlArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "download", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
+ Download App Privacy Details from an app in App Store Connect
+
+ - parameters:
+ - username: Your Apple ID Username for App Store Connect
+ - appIdentifier: The bundle identifier of your app
+ - teamId: The ID of your App Store Connect team if you're in multiple teams
+ - teamName: The name of your App Store Connect team if you're in multiple teams
+ - outputJsonPath: Path to the app usage data JSON file generated by interactive questions
+
+ Download App Privacy Details from an app in App Store Connect. For more detail information, view https://docs.fastlane.tools/uploading-app-privacy-details
+ */
+public func downloadAppPrivacyDetailsFromAppStore(username: String,
+ appIdentifier: String,
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputJsonPath: String = "./fastlane/app_privacy_details.json")
+{
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let outputJsonPathArg = RubyCommand.Argument(name: "output_json_path", value: outputJsonPath, type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ teamIdArg,
+ teamNameArg,
+ outputJsonPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "download_app_privacy_details_from_app_store", className: nil, args: args)
+ _ = runner.executeCommand(command)
+}
+
+/**
Download dSYM files from App Store Connect for Bitcode apps
- parameters:
- username: Your Apple ID Username for App Store Connect
- appIdentifier: The bundle identifier of your app
@@ -2883,33 +4038,49 @@
```|
>|
*/
public func downloadDsyms(username: String,
appIdentifier: String,
- teamId: Any? = nil,
- teamName: String? = nil,
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
- version: String? = nil,
- buildNumber: Any? = nil,
- minVersion: String? = nil,
- afterUploadedDate: String? = nil,
- outputDirectory: String? = nil,
- waitForDsymProcessing: Bool = false,
+ version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ minVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ afterUploadedDate: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ waitForDsymProcessing: OptionalConfigValue<Bool> = .fastlaneDefault(false),
waitTimeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "min_version", value: minVersion),
- RubyCommand.Argument(name: "after_uploaded_date", value: afterUploadedDate),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "wait_for_dsym_processing", value: waitForDsymProcessing),
- RubyCommand.Argument(name: "wait_timeout", value: waitTimeout)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let minVersionArg = minVersion.asRubyArgument(name: "min_version", type: nil)
+ let afterUploadedDateArg = afterUploadedDate.asRubyArgument(name: "after_uploaded_date", type: nil)
+ let outputDirectoryArg = outputDirectory.asRubyArgument(name: "output_directory", type: nil)
+ let waitForDsymProcessingArg = waitForDsymProcessing.asRubyArgument(name: "wait_for_dsym_processing", type: nil)
+ let waitTimeoutArg = RubyCommand.Argument(name: "wait_timeout", value: waitTimeout, type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ teamIdArg,
+ teamNameArg,
+ platformArg,
+ versionArg,
+ buildNumberArg,
+ minVersionArg,
+ afterUploadedDateArg,
+ outputDirectoryArg,
+ waitForDsymProcessingArg,
+ waitTimeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "download_dsyms", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Download metadata and binaries from Google Play (via _supply_)
@@ -2927,30 +4098,44 @@
- timeout: Timeout for read, open, and send (in seconds)
More information: https://docs.fastlane.tools/actions/download_from_play_store/
*/
public func downloadFromPlayStore(packageName: String,
- versionName: String? = nil,
+ versionName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
track: String = "production",
- metadataPath: String? = nil,
- key: String? = nil,
- issuer: String? = nil,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- rootUrl: String? = nil,
+ metadataPath: String = "./metadata",
+ key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "download_from_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "version_name", value: versionName),
- RubyCommand.Argument(name: "track", value: track),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "issuer", value: issuer),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let versionNameArg = versionName.asRubyArgument(name: "version_name", type: nil)
+ let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
+ let keyArg = key.asRubyArgument(name: "key", type: nil)
+ let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ versionNameArg,
+ trackArg,
+ metadataPathArg,
+ keyArg,
+ issuerArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "download_from_play_store", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Creates a zipped dSYM in the project root from the .xcarchive
@@ -2960,38 +4145,51 @@
- dsymPath: Path for generated dsym. Optional, default is your apps root directory
- all: Whether or not all dSYM files are to be included. Optional, default is false in which only your app dSYM is included
You can manually specify the path to the xcarchive (not needed if you use `xcodebuild`/`xcarchive` to build your archive)
*/
-public func dsymZip(archivePath: String? = nil,
- dsymPath: String? = nil,
- all: Bool = false)
+public func dsymZip(archivePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ dsymPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ all: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "dsym_zip", className: nil, args: [RubyCommand.Argument(name: "archive_path", value: archivePath),
- RubyCommand.Argument(name: "dsym_path", value: dsymPath),
- RubyCommand.Argument(name: "all", value: all)])
+ let archivePathArg = archivePath.asRubyArgument(name: "archive_path", type: nil)
+ let dsymPathArg = dsymPath.asRubyArgument(name: "dsym_path", type: nil)
+ let allArg = all.asRubyArgument(name: "all", type: nil)
+ let array: [RubyCommand.Argument?] = [archivePathArg,
+ dsymPathArg,
+ allArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "dsym_zip", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `puts` action
- parameter message: Message to be printed out
*/
-public func echo(message: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "echo", className: nil, args: [RubyCommand.Argument(name: "message", value: message)])
+public func echo(message: OptionalConfigValue<String?> = .fastlaneDefault(nil)) {
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "echo", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Raises an exception if not using `bundle exec` to run fastlane
This action will check if you are using `bundle exec` to run fastlane.
You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command.
*/
public func ensureBundleExec() {
- let command = RubyCommand(commandID: "", methodName: "ensure_bundle_exec", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "ensure_bundle_exec", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Raises an exception if the specified env vars are not set
@@ -2999,11 +4197,16 @@
- parameter envVars: The environment variables names that should be checked
This action will check if some environment variables are set.
*/
public func ensureEnvVars(envVars: [String]) {
- let command = RubyCommand(commandID: "", methodName: "ensure_env_vars", className: nil, args: [RubyCommand.Argument(name: "env_vars", value: envVars)])
+ let envVarsArg = RubyCommand.Argument(name: "env_vars", value: envVars, type: nil)
+ let array: [RubyCommand.Argument?] = [envVarsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ensure_env_vars", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Raises an exception if not on a specific git branch
@@ -3012,11 +4215,16 @@
This action will check if your git repo is checked out to a specific branch.
You may only want to make releases from a specific branch, so `ensure_git_branch` will stop a lane if it was accidentally executed on an incorrect branch.
*/
public func ensureGitBranch(branch: String = "master") {
- let command = RubyCommand(commandID: "", methodName: "ensure_git_branch", className: nil, args: [RubyCommand.Argument(name: "branch", value: branch)])
+ let branchArg = RubyCommand.Argument(name: "branch", value: branch, type: nil)
+ let array: [RubyCommand.Argument?] = [branchArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ensure_git_branch", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Raises an exception if there are uncommitted git changes
@@ -3028,17 +4236,24 @@
A sanity check to make sure you are working in a repo that is clean.
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.
Also needed as a prerequisite for some other actions like `reset_git_repo`.
*/
-public func ensureGitStatusClean(showUncommittedChanges: Bool = false,
- showDiff: Bool = false,
- ignored: String? = nil)
+public func ensureGitStatusClean(showUncommittedChanges: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ showDiff: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ ignored: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges),
- RubyCommand.Argument(name: "show_diff", value: showDiff),
- RubyCommand.Argument(name: "ignored", value: ignored)])
+ let showUncommittedChangesArg = showUncommittedChanges.asRubyArgument(name: "show_uncommitted_changes", type: nil)
+ let showDiffArg = showDiff.asRubyArgument(name: "show_diff", type: nil)
+ let ignoredArg = ignored.asRubyArgument(name: "ignored", type: nil)
+ let array: [RubyCommand.Argument?] = [showUncommittedChangesArg,
+ showDiffArg,
+ ignoredArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Ensures the given text is nowhere in the code base
@@ -3054,21 +4269,31 @@
You don't want any debug code to slip into production.
This can be used to check if there is any debug code still in your codebase or if you have things like `// TO DO` or similar.
*/
public func ensureNoDebugCode(text: String,
path: String = ".",
- extension: String? = nil,
- extensions: Any? = nil,
- exclude: String? = nil,
- excludeDirs: [String]? = nil)
+ extension: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ extensions: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ exclude: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ excludeDirs: OptionalConfigValue<[String]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "ensure_no_debug_code", className: nil, args: [RubyCommand.Argument(name: "text", value: text),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "extension", value: `extension`),
- RubyCommand.Argument(name: "extensions", value: extensions),
- RubyCommand.Argument(name: "exclude", value: exclude),
- RubyCommand.Argument(name: "exclude_dirs", value: excludeDirs)])
+ let textArg = RubyCommand.Argument(name: "text", value: text, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let extensionArg = `extension`.asRubyArgument(name: "extension", type: nil)
+ let extensionsArg = extensions.asRubyArgument(name: "extensions", type: nil)
+ let excludeArg = exclude.asRubyArgument(name: "exclude", type: nil)
+ let excludeDirsArg = excludeDirs.asRubyArgument(name: "exclude_dirs", type: nil)
+ let array: [RubyCommand.Argument?] = [textArg,
+ pathArg,
+ extensionArg,
+ extensionsArg,
+ excludeArg,
+ excludeDirsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ensure_no_debug_code", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Ensure the right version of Xcode is used
@@ -3080,15 +4305,21 @@
If building your app requires a specific version of Xcode, you can invoke this command before using gym.
For example, to ensure that a beta version of Xcode is not accidentally selected to build, which would make uploading to TestFlight fail.
You can either manually provide a specific version using `version: ` or you make use of the `.xcode-version` file.
Using the `strict` parameter, you can either verify the full set of version numbers strictly (i.e. `11.3.1`) or only a subset of them (i.e. `11.3` or `11`).
*/
-public func ensureXcodeVersion(version: String? = nil,
- strict: Bool = true)
+public func ensureXcodeVersion(version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ strict: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "ensure_xcode_version", className: nil, args: [RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "strict", value: strict)])
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let strictArg = strict.asRubyArgument(name: "strict", type: nil)
+ let array: [RubyCommand.Argument?] = [versionArg,
+ strictArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ensure_xcode_version", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Sets/gets env vars for Fastlane.swift. Don't use in ruby, use `ENV[key] = val`
@@ -3096,17 +4327,24 @@
- parameters:
- set: Set the environment variables named
- get: Get the environment variable named
- remove: Remove the environment variable named
*/
-@discardableResult public func environmentVariable(set: [String: Any]? = nil,
- get: String? = nil,
- remove: String? = nil) -> String
+@discardableResult public func environmentVariable(set: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ get: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ remove: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "environment_variable", className: nil, args: [RubyCommand.Argument(name: "set", value: set),
- RubyCommand.Argument(name: "get", value: get),
- RubyCommand.Argument(name: "remove", value: remove)])
+ let setArg = set.asRubyArgument(name: "set", type: nil)
+ let getArg = get.asRubyArgument(name: "get", type: nil)
+ let removeArg = remove.asRubyArgument(name: "remove", type: nil)
+ let array: [RubyCommand.Argument?] = [setArg,
+ getArg,
+ removeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "environment_variable", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Allows to Generate output files based on ERB templates
@@ -3119,29 +4357,38 @@
Renders an ERB template with `:placeholders` given as a hash via parameter.
If no `:destination` is set, it returns the rendered template as string.
*/
public func erb(template: String,
- destination: String? = nil,
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(nil),
placeholders: [String: Any] = [:],
- trimMode: String? = nil)
+ trimMode: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "erb", className: nil, args: [RubyCommand.Argument(name: "template", value: template),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "placeholders", value: placeholders),
- RubyCommand.Argument(name: "trim_mode", value: trimMode)])
+ let templateArg = RubyCommand.Argument(name: "template", value: template, type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let placeholdersArg = RubyCommand.Argument(name: "placeholders", value: placeholders, type: nil)
+ let trimModeArg = trimMode.asRubyArgument(name: "trim_mode", type: nil)
+ let array: [RubyCommand.Argument?] = [templateArg,
+ destinationArg,
+ placeholdersArg,
+ trimModeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "erb", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `min_fastlane_version` action
Add this to your `Fastfile` to require a certain version of _fastlane_.
Use it if you use an action that just recently came out and you need it.
*/
public func fastlaneVersion() {
- let command = RubyCommand(commandID: "", methodName: "fastlane_version", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "fastlane_version", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Send a message to a [Flock](https://flock.com/) group
@@ -3155,13 +4402,20 @@
*/
public func flock(message: String,
token: String,
baseUrl: String = "https://api.flock.co/hooks/sendMessage")
{
- let command = RubyCommand(commandID: "", methodName: "flock", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "token", value: token),
- RubyCommand.Argument(name: "base_url", value: baseUrl)])
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let tokenArg = RubyCommand.Argument(name: "token", value: token, type: nil)
+ let baseUrlArg = RubyCommand.Argument(name: "base_url", value: baseUrl, type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg,
+ tokenArg,
+ baseUrlArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "flock", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Adds device frames around all screenshots (via _frameit_)
@@ -3186,45 +4440,66 @@
- path: The path to the directory containing the screenshots
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
You can add background and titles to the framed screenshots as well.
*/
-public func frameScreenshots(white: Bool? = nil,
- silver: Bool? = nil,
- roseGold: Bool? = nil,
- gold: Bool? = nil,
- forceDeviceType: String? = nil,
- useLegacyIphone5s: Bool = false,
- useLegacyIphone6s: Bool = false,
- useLegacyIphone7: Bool = false,
- useLegacyIphonex: Bool = false,
- useLegacyIphonexr: Bool = false,
- useLegacyIphonexs: Bool = false,
- useLegacyIphonexsmax: Bool = false,
+public func frameScreenshots(white: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ silver: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ roseGold: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ gold: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ forceDeviceType: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useLegacyIphone5s: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphone6s: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphone7: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonex: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexr: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexsmax: OptionalConfigValue<Bool> = .fastlaneDefault(false),
forceOrientationBlock: ((String) -> Void)? = nil,
- debugMode: Bool = false,
- resume: Bool = false,
+ debugMode: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resume: OptionalConfigValue<Bool> = .fastlaneDefault(false),
usePlatform: String = "IOS",
path: String = "./")
{
- let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
- RubyCommand.Argument(name: "silver", value: silver),
- RubyCommand.Argument(name: "rose_gold", value: roseGold),
- RubyCommand.Argument(name: "gold", value: gold),
- RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
- RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
- RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
- RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
- RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
- RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
- RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
- RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
- RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure),
- RubyCommand.Argument(name: "debug_mode", value: debugMode),
- RubyCommand.Argument(name: "resume", value: resume),
- RubyCommand.Argument(name: "use_platform", value: usePlatform),
- RubyCommand.Argument(name: "path", value: path)])
+ let whiteArg = white.asRubyArgument(name: "white", type: nil)
+ let silverArg = silver.asRubyArgument(name: "silver", type: nil)
+ let roseGoldArg = roseGold.asRubyArgument(name: "rose_gold", type: nil)
+ let goldArg = gold.asRubyArgument(name: "gold", type: nil)
+ let forceDeviceTypeArg = forceDeviceType.asRubyArgument(name: "force_device_type", type: nil)
+ let useLegacyIphone5sArg = useLegacyIphone5s.asRubyArgument(name: "use_legacy_iphone5s", type: nil)
+ let useLegacyIphone6sArg = useLegacyIphone6s.asRubyArgument(name: "use_legacy_iphone6s", type: nil)
+ let useLegacyIphone7Arg = useLegacyIphone7.asRubyArgument(name: "use_legacy_iphone7", type: nil)
+ let useLegacyIphonexArg = useLegacyIphonex.asRubyArgument(name: "use_legacy_iphonex", type: nil)
+ let useLegacyIphonexrArg = useLegacyIphonexr.asRubyArgument(name: "use_legacy_iphonexr", type: nil)
+ let useLegacyIphonexsArg = useLegacyIphonexs.asRubyArgument(name: "use_legacy_iphonexs", type: nil)
+ let useLegacyIphonexsmaxArg = useLegacyIphonexsmax.asRubyArgument(name: "use_legacy_iphonexsmax", type: nil)
+ let forceOrientationBlockArg = RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure)
+ let debugModeArg = debugMode.asRubyArgument(name: "debug_mode", type: nil)
+ let resumeArg = resume.asRubyArgument(name: "resume", type: nil)
+ let usePlatformArg = RubyCommand.Argument(name: "use_platform", value: usePlatform, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [whiteArg,
+ silverArg,
+ roseGoldArg,
+ goldArg,
+ forceDeviceTypeArg,
+ useLegacyIphone5sArg,
+ useLegacyIphone6sArg,
+ useLegacyIphone7Arg,
+ useLegacyIphonexArg,
+ useLegacyIphonexrArg,
+ useLegacyIphonexsArg,
+ useLegacyIphonexsmaxArg,
+ forceOrientationBlockArg,
+ debugModeArg,
+ resumeArg,
+ usePlatformArg,
+ pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "frame_screenshots", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `frame_screenshots` action
@@ -3249,55 +4524,77 @@
- path: The path to the directory containing the screenshots
Uses [frameit](https://docs.fastlane.tools/actions/frameit/) to prepare perfect screenshots for the App Store, your website, QA or emails.
You can add background and titles to the framed screenshots as well.
*/
-public func frameit(white: Bool? = nil,
- silver: Bool? = nil,
- roseGold: Bool? = nil,
- gold: Bool? = nil,
- forceDeviceType: String? = nil,
- useLegacyIphone5s: Bool = false,
- useLegacyIphone6s: Bool = false,
- useLegacyIphone7: Bool = false,
- useLegacyIphonex: Bool = false,
- useLegacyIphonexr: Bool = false,
- useLegacyIphonexs: Bool = false,
- useLegacyIphonexsmax: Bool = false,
+public func frameit(white: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ silver: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ roseGold: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ gold: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ forceDeviceType: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useLegacyIphone5s: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphone6s: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphone7: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonex: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexr: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLegacyIphonexsmax: OptionalConfigValue<Bool> = .fastlaneDefault(false),
forceOrientationBlock: ((String) -> Void)? = nil,
- debugMode: Bool = false,
- resume: Bool = false,
+ debugMode: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resume: OptionalConfigValue<Bool> = .fastlaneDefault(false),
usePlatform: String = "IOS",
path: String = "./")
{
- let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: [RubyCommand.Argument(name: "white", value: white),
- RubyCommand.Argument(name: "silver", value: silver),
- RubyCommand.Argument(name: "rose_gold", value: roseGold),
- RubyCommand.Argument(name: "gold", value: gold),
- RubyCommand.Argument(name: "force_device_type", value: forceDeviceType),
- RubyCommand.Argument(name: "use_legacy_iphone5s", value: useLegacyIphone5s),
- RubyCommand.Argument(name: "use_legacy_iphone6s", value: useLegacyIphone6s),
- RubyCommand.Argument(name: "use_legacy_iphone7", value: useLegacyIphone7),
- RubyCommand.Argument(name: "use_legacy_iphonex", value: useLegacyIphonex),
- RubyCommand.Argument(name: "use_legacy_iphonexr", value: useLegacyIphonexr),
- RubyCommand.Argument(name: "use_legacy_iphonexs", value: useLegacyIphonexs),
- RubyCommand.Argument(name: "use_legacy_iphonexsmax", value: useLegacyIphonexsmax),
- RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure),
- RubyCommand.Argument(name: "debug_mode", value: debugMode),
- RubyCommand.Argument(name: "resume", value: resume),
- RubyCommand.Argument(name: "use_platform", value: usePlatform),
- RubyCommand.Argument(name: "path", value: path)])
+ let whiteArg = white.asRubyArgument(name: "white", type: nil)
+ let silverArg = silver.asRubyArgument(name: "silver", type: nil)
+ let roseGoldArg = roseGold.asRubyArgument(name: "rose_gold", type: nil)
+ let goldArg = gold.asRubyArgument(name: "gold", type: nil)
+ let forceDeviceTypeArg = forceDeviceType.asRubyArgument(name: "force_device_type", type: nil)
+ let useLegacyIphone5sArg = useLegacyIphone5s.asRubyArgument(name: "use_legacy_iphone5s", type: nil)
+ let useLegacyIphone6sArg = useLegacyIphone6s.asRubyArgument(name: "use_legacy_iphone6s", type: nil)
+ let useLegacyIphone7Arg = useLegacyIphone7.asRubyArgument(name: "use_legacy_iphone7", type: nil)
+ let useLegacyIphonexArg = useLegacyIphonex.asRubyArgument(name: "use_legacy_iphonex", type: nil)
+ let useLegacyIphonexrArg = useLegacyIphonexr.asRubyArgument(name: "use_legacy_iphonexr", type: nil)
+ let useLegacyIphonexsArg = useLegacyIphonexs.asRubyArgument(name: "use_legacy_iphonexs", type: nil)
+ let useLegacyIphonexsmaxArg = useLegacyIphonexsmax.asRubyArgument(name: "use_legacy_iphonexsmax", type: nil)
+ let forceOrientationBlockArg = RubyCommand.Argument(name: "force_orientation_block", value: forceOrientationBlock, type: .stringClosure)
+ let debugModeArg = debugMode.asRubyArgument(name: "debug_mode", type: nil)
+ let resumeArg = resume.asRubyArgument(name: "resume", type: nil)
+ let usePlatformArg = RubyCommand.Argument(name: "use_platform", value: usePlatform, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [whiteArg,
+ silverArg,
+ roseGoldArg,
+ goldArg,
+ forceDeviceTypeArg,
+ useLegacyIphone5sArg,
+ useLegacyIphone6sArg,
+ useLegacyIphone7Arg,
+ useLegacyIphonexArg,
+ useLegacyIphonexrArg,
+ useLegacyIphonexsArg,
+ useLegacyIphonexsmaxArg,
+ forceOrientationBlockArg,
+ debugModeArg,
+ resumeArg,
+ usePlatformArg,
+ pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "frameit", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs test coverage reports for your Xcode project
Generate summarized code coverage reports using [gcovr](http://gcovr.com/)
*/
public func gcovr() {
- let command = RubyCommand(commandID: "", methodName: "gcovr", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "gcovr", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Get the build number of your project
@@ -3307,15 +4604,21 @@
- hideErrorWhenVersioningDisabled: Used during `fastlane init` to hide the error message
This action will return the current build number set on your project.
You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html).
*/
-@discardableResult public func getBuildNumber(xcodeproj: String? = nil,
- hideErrorWhenVersioningDisabled: Bool = false) -> String
+@discardableResult public func getBuildNumber(xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ hideErrorWhenVersioningDisabled: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "get_build_number", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "hide_error_when_versioning_disabled", value: hideErrorWhenVersioningDisabled)])
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let hideErrorWhenVersioningDisabledArg = hideErrorWhenVersioningDisabled.asRubyArgument(name: "hide_error_when_versioning_disabled", type: nil)
+ let array: [RubyCommand.Argument?] = [xcodeprojArg,
+ hideErrorWhenVersioningDisabledArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_build_number", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Get the build number from the current repository
@@ -3326,12 +4629,17 @@
This action will get the **build number** according to what the SCM HEAD reports.
Currently supported SCMs are svn (uses root revision), git-svn (uses svn revision), git (uses short hash) and mercurial (uses short hash or revision number).
There is an option, `:use_hg_revision_number`, which allows to use mercurial revision number instead of hash.
*/
-public func getBuildNumberRepository(useHgRevisionNumber: Bool = false) {
- let command = RubyCommand(commandID: "", methodName: "get_build_number_repository", className: nil, args: [RubyCommand.Argument(name: "use_hg_revision_number", value: useHgRevisionNumber)])
+public func getBuildNumberRepository(useHgRevisionNumber: OptionalConfigValue<Bool> = .fastlaneDefault(false)) {
+ let useHgRevisionNumberArg = useHgRevisionNumber.asRubyArgument(name: "use_hg_revision_number", type: nil)
+ let array: [RubyCommand.Argument?] = [useHgRevisionNumberArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_build_number_repository", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Create new iOS code signing certificates (via _cert_)
@@ -3347,48 +4655,67 @@
- teamId: The ID of your Developer Portal team if you're in multiple teams
- teamName: The name of your Developer Portal team if you're in multiple teams
- filename: The filename of certificate to store
- outputPath: The path to a directory in which all certificates and private keys should be stored
- keychainPath: Path to a custom keychain
- - 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
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
- 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
- - platform: Set the provisioning profile's platform (ios, macos)
+ - platform: Set the provisioning profile's platform (ios, macos, tvos)
**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.
Use this action to download the latest code signing identity.
*/
-public func getCertificates(development: Bool = false,
- type: String? = nil,
- force: Bool = false,
- generateAppleCerts: Bool = true,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- teamId: String? = nil,
- teamName: String? = nil,
- filename: String? = nil,
+public func getCertificates(development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ type: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateAppleCerts: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputPath: String = ".",
keychainPath: String,
- keychainPassword: String? = nil,
- skipSetPartitionList: Bool = false,
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
platform: String = "ios")
{
- let command = RubyCommand(commandID: "", methodName: "get_certificates", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "type", value: type),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "filename", value: filename),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
- RubyCommand.Argument(name: "platform", value: platform)])
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let typeArg = type.asRubyArgument(name: "type", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let generateAppleCertsArg = generateAppleCerts.asRubyArgument(name: "generate_apple_certs", type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let keychainPathArg = RubyCommand.Argument(name: "keychain_path", value: keychainPath, type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let array: [RubyCommand.Argument?] = [developmentArg,
+ typeArg,
+ forceArg,
+ generateAppleCertsArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ filenameArg,
+ outputPathArg,
+ keychainPathArg,
+ keychainPasswordArg,
+ skipSetPartitionListArg,
+ platformArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_certificates", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will verify if a given release version is available on GitHub
@@ -3396,10 +4723,11 @@
- parameters:
- url: The path to your repo, e.g. 'KrauseFx/fastlane'
- serverUrl: The server url. e.g. 'https://your.github.server/api/v3' (Default: 'https://api.github.com')
- version: The version tag of the release to check
- apiToken: GitHub Personal Token (required for private repositories)
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
This will return all information about a release. For example:|
|
```no-highlight|
{|
@@ -3443,16 +4771,27 @@
>|
*/
public func getGithubRelease(url: String,
serverUrl: String = "https://api.github.com",
version: String,
- apiToken: String? = nil)
+ apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiBearer: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "get_github_release", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
- RubyCommand.Argument(name: "server_url", value: serverUrl),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "api_token", value: apiToken)])
+ let urlArg = RubyCommand.Argument(name: "url", value: url, type: nil)
+ let serverUrlArg = RubyCommand.Argument(name: "server_url", value: serverUrl, type: nil)
+ let versionArg = RubyCommand.Argument(name: "version", value: version, type: nil)
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let apiBearerArg = apiBearer.asRubyArgument(name: "api_bearer", type: nil)
+ let array: [RubyCommand.Argument?] = [urlArg,
+ serverUrlArg,
+ versionArg,
+ apiTokenArg,
+ apiBearerArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_github_release", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Returns value from Info.plist of your project as native Ruby data structures
@@ -3464,12 +4803,18 @@
Get a value from a plist file, which can be used to fetch the app identifier and more information about your app
*/
@discardableResult public func getInfoPlistValue(key: String,
path: String) -> String
{
- let command = RubyCommand(commandID: "", methodName: "get_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "path", value: path)])
+ let keyArg = RubyCommand.Argument(name: "key", value: key, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [keyArg,
+ pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_info_plist_value", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Returns a value from Info.plist inside a .ipa file
@@ -3483,12 +4828,18 @@
This is useful for introspecting Info.plist files for `.ipa` files that have already been built.
*/
@discardableResult public func getIpaInfoPlistValue(key: String,
ipa: String) -> String
{
- let command = RubyCommand(commandID: "", methodName: "get_ipa_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "ipa", value: ipa)])
+ let keyArg = RubyCommand.Argument(name: "key", value: key, type: nil)
+ let ipaArg = RubyCommand.Argument(name: "ipa", value: ipa, type: nil)
+ let array: [RubyCommand.Argument?] = [keyArg,
+ ipaArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_ipa_info_plist_value", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Obtain publishing rights for custom apps on Managed Google Play Store
@@ -3502,15 +4853,21 @@
If you haven't done so before, start by following the first two steps of Googles ["Get started with custom app publishing"](https://developers.google.com/android/work/play/custom-app-api/get-started) -> ["Preliminary setup"](https://developers.google.com/android/work/play/custom-app-api/get-started#preliminary_setup) instructions:
"[Enable the Google Play Custom App Publishing API](https://developers.google.com/android/work/play/custom-app-api/get-started#enable_the_google_play_custom_app_publishing_api)" and "[Create a service account](https://developers.google.com/android/work/play/custom-app-api/get-started#create_a_service_account)".
You need the "service account's private key file" to continue.
Run the action and supply the "private key file" to it as the `json_key` parameter. The command will output a URL to visit. After logging in you are redirected to a page that outputs your "Developer Account ID" - take note of that, you will need it to be able to use [`create_app_on_managed_play_store`](https://docs.fastlane.tools/actions/create_app_on_managed_play_store/).
*/
-public func getManagedPlayStorePublishingRights(jsonKey: String? = nil,
- jsonKeyData: String? = nil)
+public func getManagedPlayStorePublishingRights(jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "get_managed_play_store_publishing_rights", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData)])
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let array: [RubyCommand.Argument?] = [jsonKeyArg,
+ jsonKeyDataArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_managed_play_store_publishing_rights", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generates a provisioning profile, saving it in the current folder (via _sigh_)
@@ -3542,58 +4899,85 @@
- returns: The UUID of the profile sigh just fetched/generated
**Note**: 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 provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning.
*/
-public func getProvisioningProfile(adhoc: Bool = false,
- developerId: Bool = false,
- development: Bool = false,
- skipInstall: Bool = false,
- force: Bool = false,
- appIdentifier: String,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- teamId: String? = nil,
- teamName: String? = nil,
- provisioningName: String? = nil,
- ignoreProfilesWithDifferentName: Bool = false,
- outputPath: String = ".",
- certId: String? = nil,
- certOwnerName: String? = nil,
- filename: String? = nil,
- skipFetchProfiles: Bool = false,
- skipCertificateVerification: Bool = false,
- platform: Any = "ios",
- readonly: Bool = false,
- templateName: String? = nil,
- failOnNameTaken: Bool = false)
+@discardableResult public func getProvisioningProfile(adhoc: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ developerId: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipInstall: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ appIdentifier: String,
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ provisioningName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ignoreProfilesWithDifferentName: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputPath: String = ".",
+ certId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ certOwnerName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipFetchProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipCertificateVerification: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ platform: Any = "ios",
+ readonly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ templateName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failOnNameTaken: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "get_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
- RubyCommand.Argument(name: "developer_id", value: developerId),
- RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "skip_install", value: skipInstall),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "provisioning_name", value: provisioningName),
- RubyCommand.Argument(name: "ignore_profiles_with_different_name", value: ignoreProfilesWithDifferentName),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "cert_id", value: certId),
- RubyCommand.Argument(name: "cert_owner_name", value: certOwnerName),
- RubyCommand.Argument(name: "filename", value: filename),
- RubyCommand.Argument(name: "skip_fetch_profiles", value: skipFetchProfiles),
- RubyCommand.Argument(name: "skip_certificate_verification", value: skipCertificateVerification),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "readonly", value: readonly),
- RubyCommand.Argument(name: "template_name", value: templateName),
- RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)])
- _ = runner.executeCommand(command)
+ let adhocArg = adhoc.asRubyArgument(name: "adhoc", type: nil)
+ let developerIdArg = developerId.asRubyArgument(name: "developer_id", type: nil)
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let skipInstallArg = skipInstall.asRubyArgument(name: "skip_install", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let provisioningNameArg = provisioningName.asRubyArgument(name: "provisioning_name", type: nil)
+ let ignoreProfilesWithDifferentNameArg = ignoreProfilesWithDifferentName.asRubyArgument(name: "ignore_profiles_with_different_name", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let certIdArg = certId.asRubyArgument(name: "cert_id", type: nil)
+ let certOwnerNameArg = certOwnerName.asRubyArgument(name: "cert_owner_name", type: nil)
+ let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
+ let skipFetchProfilesArg = skipFetchProfiles.asRubyArgument(name: "skip_fetch_profiles", type: nil)
+ let skipCertificateVerificationArg = skipCertificateVerification.asRubyArgument(name: "skip_certificate_verification", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let readonlyArg = readonly.asRubyArgument(name: "readonly", type: nil)
+ let templateNameArg = templateName.asRubyArgument(name: "template_name", type: nil)
+ let failOnNameTakenArg = failOnNameTaken.asRubyArgument(name: "fail_on_name_taken", type: nil)
+ let array: [RubyCommand.Argument?] = [adhocArg,
+ developerIdArg,
+ developmentArg,
+ skipInstallArg,
+ forceArg,
+ appIdentifierArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ provisioningNameArg,
+ ignoreProfilesWithDifferentNameArg,
+ outputPathArg,
+ certIdArg,
+ certOwnerNameArg,
+ filenameArg,
+ skipFetchProfilesArg,
+ skipCertificateVerificationArg,
+ platformArg,
+ readonlyArg,
+ templateNameArg,
+ failOnNameTakenArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_provisioning_profile", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
Ensure a valid push profile is active, creating a new one if needed (via _pem_)
@@ -3623,59 +5007,84 @@
end|
)|
```|
>|
*/
-public func getPushCertificate(development: Bool = false,
- websitePush: Bool = false,
- generateP12: Bool = true,
+public func getPushCertificate(development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ websitePush: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateP12: OptionalConfigValue<Bool> = .fastlaneDefault(true),
activeDaysLimit: Int = 30,
- force: Bool = false,
- savePrivateKey: Bool = true,
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ savePrivateKey: OptionalConfigValue<Bool> = .fastlaneDefault(true),
appIdentifier: String,
username: String,
- teamId: String? = nil,
- teamName: String? = nil,
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
p12Password: String,
- pemName: String? = nil,
+ pemName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputPath: String = ".",
- newProfile: Any? = nil)
+ newProfile: ((String) -> Void)? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "get_push_certificate", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "website_push", value: websitePush),
- RubyCommand.Argument(name: "generate_p12", value: generateP12),
- RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "save_private_key", value: savePrivateKey),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "p12_password", value: p12Password),
- RubyCommand.Argument(name: "pem_name", value: pemName),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "new_profile", value: newProfile)])
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let websitePushArg = websitePush.asRubyArgument(name: "website_push", type: nil)
+ let generateP12Arg = generateP12.asRubyArgument(name: "generate_p12", type: nil)
+ let activeDaysLimitArg = RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit, type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let savePrivateKeyArg = savePrivateKey.asRubyArgument(name: "save_private_key", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let p12PasswordArg = RubyCommand.Argument(name: "p12_password", value: p12Password, type: nil)
+ let pemNameArg = pemName.asRubyArgument(name: "pem_name", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let newProfileArg = RubyCommand.Argument(name: "new_profile", value: newProfile, type: .stringClosure)
+ let array: [RubyCommand.Argument?] = [developmentArg,
+ websitePushArg,
+ generateP12Arg,
+ activeDaysLimitArg,
+ forceArg,
+ savePrivateKeyArg,
+ appIdentifierArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ p12PasswordArg,
+ pemNameArg,
+ outputPathArg,
+ newProfileArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_push_certificate", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Get the version number of your project
- parameters:
- - xcodeproj: Path to the main Xcode project to read version number from, optional. By default will use the first Xcode project found within the project root directory
+ - xcodeproj: Path to the Xcode project to read version number from, or its containing directory, optional. If ommitted, or if a directory is passed instead, it will use the first Xcode project found within the given directory, or the project root directory if none is passed
- target: Target name, optional. Will be needed if you have more than one non-test target to avoid being prompted to select one
- configuration: Configuration name, optional. Will be needed if you have altered the configurations from the default or your version number depends on the configuration selected
This action will return the current version number set on your project.
*/
-@discardableResult public func getVersionNumber(xcodeproj: String? = nil,
- target: String? = nil,
- configuration: String? = nil) -> String
+@discardableResult public func getVersionNumber(xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ target: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "get_version_number", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "target", value: target),
- RubyCommand.Argument(name: "configuration", value: configuration)])
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let targetArg = target.asRubyArgument(name: "target", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let array: [RubyCommand.Argument?] = [xcodeprojArg,
+ targetArg,
+ configurationArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "get_version_number", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Directly add the given file or all files
@@ -3683,78 +5092,123 @@
- parameters:
- path: The file(s) and path(s) you want to add
- shellEscape: Shell escapes paths (set to false if using wildcards or manually escaping spaces in :path)
- pathspec: **DEPRECATED!** Use `--path` instead - The pathspec you want to add files from
*/
-public func gitAdd(path: Any? = nil,
- shellEscape: Bool = true,
- pathspec: String? = nil)
+public func gitAdd(path: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ shellEscape: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ pathspec: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "git_add", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "shell_escape", value: shellEscape),
- RubyCommand.Argument(name: "pathspec", value: pathspec)])
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let shellEscapeArg = shellEscape.asRubyArgument(name: "shell_escape", type: nil)
+ let pathspecArg = pathspec.asRubyArgument(name: "pathspec", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ shellEscapeArg,
+ pathspecArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_add", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Returns the name of the current git branch, possibly as managed by CI ENV vars
- If no branch could be found, this action will return an empty string
+ If no branch could be found, this action will return an empty string. This is a wrapper for the internal action Actions.git_branch
*/
@discardableResult public func gitBranch() -> String {
- let command = RubyCommand(commandID: "", methodName: "git_branch", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "git_branch", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Directly commit the given file with the given message
- parameters:
- - path: The file you want to commit
+ - path: The file(s) or directory(ies) you want to commit. You can pass an array of multiple file-paths or fileglobs "*.txt" to commit all matching files. The files already staged but not specified and untracked files won't be committed
- message: The commit message that should be used
- - skipGitHooks: Set to true to pass --no-verify to git
- - allowNothingToCommit: Set to true to allow commit without any git changes
+ - skipGitHooks: Set to true to pass `--no-verify` to git
+ - allowNothingToCommit: Set to true to allow commit without any git changes in the files you want to commit
*/
-public func gitCommit(path: Any,
+public func gitCommit(path: [String],
message: String,
- skipGitHooks: Bool? = nil,
- allowNothingToCommit: Bool? = nil)
+ skipGitHooks: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ allowNothingToCommit: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "git_commit", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "skip_git_hooks", value: skipGitHooks),
- RubyCommand.Argument(name: "allow_nothing_to_commit", value: allowNothingToCommit)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let skipGitHooksArg = skipGitHooks.asRubyArgument(name: "skip_git_hooks", type: nil)
+ let allowNothingToCommitArg = allowNothingToCommit.asRubyArgument(name: "allow_nothing_to_commit", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ messageArg,
+ skipGitHooksArg,
+ allowNothingToCommitArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_commit", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Executes a simple git pull command
- parameters:
- onlyTags: Simply pull the tags, and not bring new commits to the current branch from the remote
- rebase: Rebase on top of the remote branch instead of merge
*/
-public func gitPull(onlyTags: Bool = false,
- rebase: Bool = false)
+public func gitPull(onlyTags: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rebase: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "git_pull", className: nil, args: [RubyCommand.Argument(name: "only_tags", value: onlyTags),
- RubyCommand.Argument(name: "rebase", value: rebase)])
+ let onlyTagsArg = onlyTags.asRubyArgument(name: "only_tags", type: nil)
+ let rebaseArg = rebase.asRubyArgument(name: "rebase", type: nil)
+ let array: [RubyCommand.Argument?] = [onlyTagsArg,
+ rebaseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_pull", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
- Executes a git submodule command
+ Returns the name of the current git remote default branch
+ - parameter remoteName: The remote repository to check
+
+ If no default remote branch could be found, this action will return nil. This is a wrapper for the internal action Actions.git_default_remote_branch_name
+ */
+@discardableResult public func gitRemoteBranch(remoteName: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String {
+ let remoteNameArg = remoteName.asRubyArgument(name: "remote_name", type: nil)
+ let array: [RubyCommand.Argument?] = [remoteNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_remote_branch", className: nil, args: args)
+ return runner.executeCommand(command)
+}
+
+/**
+ Executes a git submodule update command
+
- parameters:
- - recursive: Should the submodules be updated recursively
- - init: Should the submodules be initiated before update
+ - recursive: Should the submodules be updated recursively?
+ - init: Should the submodules be initiated before update?
*/
-public func gitSubmoduleUpdate(recursive: Bool = false,
- init: Bool = false)
+public func gitSubmoduleUpdate(recursive: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ init: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "git_submodule_update", className: nil, args: [RubyCommand.Argument(name: "recursive", value: recursive),
- RubyCommand.Argument(name: "init", value: `init`)])
+ let recursiveArg = recursive.asRubyArgument(name: "recursive", type: nil)
+ let initArg = `init`.asRubyArgument(name: "init", type: nil)
+ let array: [RubyCommand.Argument?] = [recursiveArg,
+ initArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_submodule_update", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Checks if the git tag with the given name exists in the current repo
@@ -3764,26 +5218,34 @@
- remote: Whether to check remote. Defaults to `false`
- remoteName: The remote to check. Defaults to `origin`
- returns: Boolean value whether the tag exists or not
*/
-public func gitTagExists(tag: String,
- remote: Bool = false,
- remoteName: String = "origin")
+@discardableResult public func gitTagExists(tag: String,
+ remote: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ remoteName: String = "origin") -> Bool
{
- let command = RubyCommand(commandID: "", methodName: "git_tag_exists", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag),
- RubyCommand.Argument(name: "remote", value: remote),
- RubyCommand.Argument(name: "remote_name", value: remoteName)])
- _ = runner.executeCommand(command)
+ let tagArg = RubyCommand.Argument(name: "tag", value: tag, type: nil)
+ let remoteArg = remote.asRubyArgument(name: "remote", type: nil)
+ let remoteNameArg = RubyCommand.Argument(name: "remote_name", value: remoteName, type: nil)
+ let array: [RubyCommand.Argument?] = [tagArg,
+ remoteArg,
+ remoteNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "git_tag_exists", className: nil, args: args)
+ return parseBool(fromString: runner.executeCommand(command))
}
/**
Call a GitHub API endpoint and get the resulting JSON response
- parameters:
- serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com')
- apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
- httpMethod: The HTTP method. e.g. GET / POST
- body: The request body in JSON or hash format
- rawBody: The request body taken verbatim instead of as JSON, useful for file uploads
- path: The endpoint path. e.g. '/repos/:owner/:repo/readme'
- url: The complete full url - used instead of path. e.g. 'https://uploads.github.com/repos/fastlane...'
@@ -3796,30 +5258,47 @@
Calls any GitHub API endpoint. You must provide your GitHub Personal token (get one from [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new)).
Out parameters provide the status code and the full response JSON if valid, otherwise the raw response body.
Documentation: [https://developer.github.com/v3](https://developer.github.com/v3).
*/
public func githubApi(serverUrl: String = "https://api.github.com",
- apiToken: String,
+ apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiBearer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
httpMethod: String = "GET",
body: [String: Any] = [:],
- rawBody: String? = nil,
- path: String? = nil,
- url: String? = nil,
+ rawBody: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ url: OptionalConfigValue<String?> = .fastlaneDefault(nil),
errorHandlers: [String: Any] = [:],
headers: [String: Any] = [:],
- secure: Bool = true)
+ secure: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "github_api", className: nil, args: [RubyCommand.Argument(name: "server_url", value: serverUrl),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "http_method", value: httpMethod),
- RubyCommand.Argument(name: "body", value: body),
- RubyCommand.Argument(name: "raw_body", value: rawBody),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "url", value: url),
- RubyCommand.Argument(name: "error_handlers", value: errorHandlers),
- RubyCommand.Argument(name: "headers", value: headers),
- RubyCommand.Argument(name: "secure", value: secure)])
+ let serverUrlArg = RubyCommand.Argument(name: "server_url", value: serverUrl, type: nil)
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let apiBearerArg = apiBearer.asRubyArgument(name: "api_bearer", type: nil)
+ let httpMethodArg = RubyCommand.Argument(name: "http_method", value: httpMethod, type: nil)
+ let bodyArg = RubyCommand.Argument(name: "body", value: body, type: nil)
+ let rawBodyArg = rawBody.asRubyArgument(name: "raw_body", type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let urlArg = url.asRubyArgument(name: "url", type: nil)
+ let errorHandlersArg = RubyCommand.Argument(name: "error_handlers", value: errorHandlers, type: nil)
+ let headersArg = RubyCommand.Argument(name: "headers", value: headers, type: nil)
+ let secureArg = secure.asRubyArgument(name: "secure", type: nil)
+ let array: [RubyCommand.Argument?] = [serverUrlArg,
+ apiTokenArg,
+ apiBearerArg,
+ httpMethodArg,
+ bodyArg,
+ rawBodyArg,
+ pathArg,
+ urlArg,
+ errorHandlersArg,
+ headersArg,
+ secureArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "github_api", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Retrieves release names for a Google Play track
@@ -3838,25 +5317,37 @@
More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/)
*/
public func googlePlayTrackReleaseNames(packageName: String,
track: String = "production",
- key: String? = nil,
- issuer: String? = nil,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- rootUrl: String? = nil,
+ key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "google_play_track_release_names", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "track", value: track),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "issuer", value: issuer),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
+ let keyArg = key.asRubyArgument(name: "key", type: nil)
+ let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ trackArg,
+ keyArg,
+ issuerArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "google_play_track_release_names", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Retrieves version codes for a Google Play track
@@ -3875,25 +5366,37 @@
More information: [https://docs.fastlane.tools/actions/supply/](https://docs.fastlane.tools/actions/supply/)
*/
public func googlePlayTrackVersionCodes(packageName: String,
track: String = "production",
- key: String? = nil,
- issuer: String? = nil,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- rootUrl: String? = nil,
+ key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "google_play_track_version_codes", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "track", value: track),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "issuer", value: issuer),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
+ let keyArg = key.asRubyArgument(name: "key", type: nil)
+ let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ trackArg,
+ keyArg,
+ issuerArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "google_play_track_version_codes", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
All gradle related actions, including building and testing your Android app
@@ -3914,35 +5417,51 @@
- returns: The output of running the gradle task
Run `./gradlew tasks` to get a list of all available gradle tasks for your project
*/
-public func gradle(task: String? = nil,
- flavor: String? = nil,
- buildType: String? = nil,
- tasks: [String]? = nil,
- flags: String? = nil,
+public func gradle(task: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ flavor: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildType: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ tasks: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ flags: OptionalConfigValue<String?> = .fastlaneDefault(nil),
projectDir: String = ".",
- gradlePath: String? = nil,
- properties: Any? = nil,
- systemProperties: Any? = nil,
+ gradlePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ properties: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ systemProperties: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
serial: String = "",
- printCommand: Bool = true,
- printCommandOutput: Bool = true)
+ printCommand: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ printCommandOutput: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "gradle", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
- RubyCommand.Argument(name: "flavor", value: flavor),
- RubyCommand.Argument(name: "build_type", value: buildType),
- RubyCommand.Argument(name: "tasks", value: tasks),
- RubyCommand.Argument(name: "flags", value: flags),
- RubyCommand.Argument(name: "project_dir", value: projectDir),
- RubyCommand.Argument(name: "gradle_path", value: gradlePath),
- RubyCommand.Argument(name: "properties", value: properties),
- RubyCommand.Argument(name: "system_properties", value: systemProperties),
- RubyCommand.Argument(name: "serial", value: serial),
- RubyCommand.Argument(name: "print_command", value: printCommand),
- RubyCommand.Argument(name: "print_command_output", value: printCommandOutput)])
+ let taskArg = task.asRubyArgument(name: "task", type: nil)
+ let flavorArg = flavor.asRubyArgument(name: "flavor", type: nil)
+ let buildTypeArg = buildType.asRubyArgument(name: "build_type", type: nil)
+ let tasksArg = tasks.asRubyArgument(name: "tasks", type: nil)
+ let flagsArg = flags.asRubyArgument(name: "flags", type: nil)
+ let projectDirArg = RubyCommand.Argument(name: "project_dir", value: projectDir, type: nil)
+ let gradlePathArg = gradlePath.asRubyArgument(name: "gradle_path", type: nil)
+ let propertiesArg = properties.asRubyArgument(name: "properties", type: nil)
+ let systemPropertiesArg = systemProperties.asRubyArgument(name: "system_properties", type: nil)
+ let serialArg = RubyCommand.Argument(name: "serial", value: serial, type: nil)
+ let printCommandArg = printCommand.asRubyArgument(name: "print_command", type: nil)
+ let printCommandOutputArg = printCommandOutput.asRubyArgument(name: "print_command_output", type: nil)
+ let array: [RubyCommand.Argument?] = [taskArg,
+ flavorArg,
+ buildTypeArg,
+ tasksArg,
+ flagsArg,
+ projectDirArg,
+ gradlePathArg,
+ propertiesArg,
+ systemPropertiesArg,
+ serialArg,
+ printCommandArg,
+ printCommandOutputArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "gradle", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `build_app` action
@@ -3959,11 +5478,11 @@
- codesigningIdentity: The name of the code signing identity to use. It has to match the name exactly. e.g. 'iPhone Distribution: SunApps GmbH'
- skipPackageIpa: Should we skip packaging the ipa?
- skipPackagePkg: Should we skip packaging the pkg?
- includeSymbols: Should the ipa file include symbols?
- includeBitcode: Should the ipa file include bitcode?
- - exportMethod: Method used to export the archive. Valid values are: app-store, ad-hoc, package, enterprise, development, developer-id
+ - exportMethod: Method used to export the archive. Valid values are: app-store, validation, ad-hoc, package, enterprise, development, developer-id and mac-application
- exportOptions: Path to an export options plist or a hash with export options. Use 'xcodebuild -help' to print the full set of available options
- exportXcargs: Pass additional arguments to xcodebuild for the package phase. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
- skipBuildArchive: Export ipa from previously built xcarchive. Uses archive_path as source
- skipArchive: After building, don't archive, effectively not including -archivePath param
- skipCodesigning: Build without codesigning
@@ -3990,114 +5509,179 @@
- xcprettyReportJson: Have xcpretty create a JSON compilation database at the provided path
- analyzeBuildTime: Analyze the project build time and store the output in 'culprits.txt' file
- xcprettyUtf: Have xcpretty use unicode encoding when reporting builds
- skipProfileDetection: Do not try to build a profile mapping from the xcodeproj. Match or a manually provided mapping should be used
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
- returns: The absolute path to the generated ipa file
More information: https://fastlane.tools/gym
*/
-public func gym(workspace: Any? = gymfile.workspace,
- project: Any? = gymfile.project,
- scheme: Any? = gymfile.scheme,
- clean: Bool = gymfile.clean,
- outputDirectory: Any = gymfile.outputDirectory,
- outputName: Any? = gymfile.outputName,
- configuration: Any? = gymfile.configuration,
- silent: Bool = gymfile.silent,
- codesigningIdentity: Any? = gymfile.codesigningIdentity,
- skipPackageIpa: Bool = gymfile.skipPackageIpa,
- skipPackagePkg: Bool = gymfile.skipPackagePkg,
- includeSymbols: Bool? = gymfile.includeSymbols,
- includeBitcode: Bool? = gymfile.includeBitcode,
- exportMethod: Any? = gymfile.exportMethod,
- exportOptions: [String: Any]? = gymfile.exportOptions,
- exportXcargs: Any? = gymfile.exportXcargs,
- skipBuildArchive: Bool? = gymfile.skipBuildArchive,
- skipArchive: Bool? = gymfile.skipArchive,
- skipCodesigning: Bool? = gymfile.skipCodesigning,
- catalystPlatform: Any? = gymfile.catalystPlatform,
- installerCertName: Any? = gymfile.installerCertName,
- buildPath: Any? = gymfile.buildPath,
- archivePath: Any? = gymfile.archivePath,
- derivedDataPath: Any? = gymfile.derivedDataPath,
- resultBundle: Bool = gymfile.resultBundle,
- resultBundlePath: Any? = gymfile.resultBundlePath,
- buildlogPath: Any = gymfile.buildlogPath,
- sdk: Any? = gymfile.sdk,
- toolchain: Any? = gymfile.toolchain,
- destination: Any? = gymfile.destination,
- exportTeamId: Any? = gymfile.exportTeamId,
- xcargs: Any? = gymfile.xcargs,
- xcconfig: Any? = gymfile.xcconfig,
- suppressXcodeOutput: Bool? = gymfile.suppressXcodeOutput,
- disableXcpretty: Bool? = gymfile.disableXcpretty,
- xcprettyTestFormat: Bool? = gymfile.xcprettyTestFormat,
- xcprettyFormatter: Any? = gymfile.xcprettyFormatter,
- xcprettyReportJunit: Any? = gymfile.xcprettyReportJunit,
- xcprettyReportHtml: Any? = gymfile.xcprettyReportHtml,
- xcprettyReportJson: Any? = gymfile.xcprettyReportJson,
- analyzeBuildTime: Bool? = gymfile.analyzeBuildTime,
- xcprettyUtf: Bool? = gymfile.xcprettyUtf,
- skipProfileDetection: Bool = gymfile.skipProfileDetection,
- clonedSourcePackagesPath: Any? = gymfile.clonedSourcePackagesPath)
+@discardableResult public func gym(workspace: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.workspace),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.project),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.scheme),
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.clean),
+ outputDirectory: String = gymfile.outputDirectory,
+ outputName: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.outputName),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.configuration),
+ silent: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.silent),
+ codesigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.codesigningIdentity),
+ skipPackageIpa: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.skipPackageIpa),
+ skipPackagePkg: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.skipPackagePkg),
+ includeSymbols: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.includeSymbols),
+ includeBitcode: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.includeBitcode),
+ exportMethod: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.exportMethod),
+ exportOptions: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(gymfile.exportOptions),
+ exportXcargs: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.exportXcargs),
+ skipBuildArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.skipBuildArchive),
+ skipArchive: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.skipArchive),
+ skipCodesigning: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.skipCodesigning),
+ catalystPlatform: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.catalystPlatform),
+ installerCertName: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.installerCertName),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.buildPath),
+ archivePath: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.archivePath),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.derivedDataPath),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.resultBundle),
+ resultBundlePath: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.resultBundlePath),
+ buildlogPath: String = gymfile.buildlogPath,
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.sdk),
+ toolchain: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.toolchain),
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.destination),
+ exportTeamId: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.exportTeamId),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcargs),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcconfig),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.suppressXcodeOutput),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.disableXcpretty),
+ xcprettyTestFormat: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.xcprettyTestFormat),
+ xcprettyFormatter: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcprettyFormatter),
+ xcprettyReportJunit: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcprettyReportJunit),
+ xcprettyReportHtml: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcprettyReportHtml),
+ xcprettyReportJson: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.xcprettyReportJson),
+ analyzeBuildTime: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.analyzeBuildTime),
+ xcprettyUtf: OptionalConfigValue<Bool?> = .fastlaneDefault(gymfile.xcprettyUtf),
+ skipProfileDetection: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.skipProfileDetection),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(gymfile.clonedSourcePackagesPath),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.skipPackageDependenciesResolution),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.disablePackageAutomaticUpdates),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(gymfile.useSystemScm)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_name", value: outputName),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "silent", value: silent),
- RubyCommand.Argument(name: "codesigning_identity", value: codesigningIdentity),
- RubyCommand.Argument(name: "skip_package_ipa", value: skipPackageIpa),
- RubyCommand.Argument(name: "skip_package_pkg", value: skipPackagePkg),
- RubyCommand.Argument(name: "include_symbols", value: includeSymbols),
- RubyCommand.Argument(name: "include_bitcode", value: includeBitcode),
- RubyCommand.Argument(name: "export_method", value: exportMethod),
- RubyCommand.Argument(name: "export_options", value: exportOptions),
- RubyCommand.Argument(name: "export_xcargs", value: exportXcargs),
- RubyCommand.Argument(name: "skip_build_archive", value: skipBuildArchive),
- RubyCommand.Argument(name: "skip_archive", value: skipArchive),
- RubyCommand.Argument(name: "skip_codesigning", value: skipCodesigning),
- RubyCommand.Argument(name: "catalyst_platform", value: catalystPlatform),
- RubyCommand.Argument(name: "installer_cert_name", value: installerCertName),
- RubyCommand.Argument(name: "build_path", value: buildPath),
- RubyCommand.Argument(name: "archive_path", value: archivePath),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "result_bundle_path", value: resultBundlePath),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "export_team_id", value: exportTeamId),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "xcpretty_test_format", value: xcprettyTestFormat),
- RubyCommand.Argument(name: "xcpretty_formatter", value: xcprettyFormatter),
- RubyCommand.Argument(name: "xcpretty_report_junit", value: xcprettyReportJunit),
- RubyCommand.Argument(name: "xcpretty_report_html", value: xcprettyReportHtml),
- RubyCommand.Argument(name: "xcpretty_report_json", value: xcprettyReportJson),
- RubyCommand.Argument(name: "analyze_build_time", value: analyzeBuildTime),
- RubyCommand.Argument(name: "xcpretty_utf", value: xcprettyUtf),
- RubyCommand.Argument(name: "skip_profile_detection", value: skipProfileDetection),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath)])
- _ = runner.executeCommand(command)
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputNameArg = outputName.asRubyArgument(name: "output_name", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let silentArg = silent.asRubyArgument(name: "silent", type: nil)
+ let codesigningIdentityArg = codesigningIdentity.asRubyArgument(name: "codesigning_identity", type: nil)
+ let skipPackageIpaArg = skipPackageIpa.asRubyArgument(name: "skip_package_ipa", type: nil)
+ let skipPackagePkgArg = skipPackagePkg.asRubyArgument(name: "skip_package_pkg", type: nil)
+ let includeSymbolsArg = includeSymbols.asRubyArgument(name: "include_symbols", type: nil)
+ let includeBitcodeArg = includeBitcode.asRubyArgument(name: "include_bitcode", type: nil)
+ let exportMethodArg = exportMethod.asRubyArgument(name: "export_method", type: nil)
+ let exportOptionsArg = exportOptions.asRubyArgument(name: "export_options", type: nil)
+ let exportXcargsArg = exportXcargs.asRubyArgument(name: "export_xcargs", type: nil)
+ let skipBuildArchiveArg = skipBuildArchive.asRubyArgument(name: "skip_build_archive", type: nil)
+ let skipArchiveArg = skipArchive.asRubyArgument(name: "skip_archive", type: nil)
+ let skipCodesigningArg = skipCodesigning.asRubyArgument(name: "skip_codesigning", type: nil)
+ let catalystPlatformArg = catalystPlatform.asRubyArgument(name: "catalyst_platform", type: nil)
+ let installerCertNameArg = installerCertName.asRubyArgument(name: "installer_cert_name", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let archivePathArg = archivePath.asRubyArgument(name: "archive_path", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let resultBundlePathArg = resultBundlePath.asRubyArgument(name: "result_bundle_path", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let toolchainArg = toolchain.asRubyArgument(name: "toolchain", type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let exportTeamIdArg = exportTeamId.asRubyArgument(name: "export_team_id", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let xcprettyTestFormatArg = xcprettyTestFormat.asRubyArgument(name: "xcpretty_test_format", type: nil)
+ let xcprettyFormatterArg = xcprettyFormatter.asRubyArgument(name: "xcpretty_formatter", type: nil)
+ let xcprettyReportJunitArg = xcprettyReportJunit.asRubyArgument(name: "xcpretty_report_junit", type: nil)
+ let xcprettyReportHtmlArg = xcprettyReportHtml.asRubyArgument(name: "xcpretty_report_html", type: nil)
+ let xcprettyReportJsonArg = xcprettyReportJson.asRubyArgument(name: "xcpretty_report_json", type: nil)
+ let analyzeBuildTimeArg = analyzeBuildTime.asRubyArgument(name: "analyze_build_time", type: nil)
+ let xcprettyUtfArg = xcprettyUtf.asRubyArgument(name: "xcpretty_utf", type: nil)
+ let skipProfileDetectionArg = skipProfileDetection.asRubyArgument(name: "skip_profile_detection", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ cleanArg,
+ outputDirectoryArg,
+ outputNameArg,
+ configurationArg,
+ silentArg,
+ codesigningIdentityArg,
+ skipPackageIpaArg,
+ skipPackagePkgArg,
+ includeSymbolsArg,
+ includeBitcodeArg,
+ exportMethodArg,
+ exportOptionsArg,
+ exportXcargsArg,
+ skipBuildArchiveArg,
+ skipArchiveArg,
+ skipCodesigningArg,
+ catalystPlatformArg,
+ installerCertNameArg,
+ buildPathArg,
+ archivePathArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ resultBundlePathArg,
+ buildlogPathArg,
+ sdkArg,
+ toolchainArg,
+ destinationArg,
+ exportTeamIdArg,
+ xcargsArg,
+ xcconfigArg,
+ suppressXcodeOutputArg,
+ disableXcprettyArg,
+ xcprettyTestFormatArg,
+ xcprettyFormatterArg,
+ xcprettyReportJunitArg,
+ xcprettyReportHtmlArg,
+ xcprettyReportJsonArg,
+ analyzeBuildTimeArg,
+ xcprettyUtfArg,
+ skipProfileDetectionArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "gym", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
This will add a hg tag to the current branch
- parameter tag: Tag to create
*/
public func hgAddTag(tag: String) {
- let command = RubyCommand(commandID: "", methodName: "hg_add_tag", className: nil, args: [RubyCommand.Argument(name: "tag", value: tag)])
+ let tagArg = RubyCommand.Argument(name: "tag", value: tag, type: nil)
+ let array: [RubyCommand.Argument?] = [tagArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "hg_add_tag", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will commit a version bump to the hg repo
@@ -4118,30 +5702,40 @@
Then commits those files to the repo.
Customize the message with the `:message` option, defaults to 'Version Bump'
If you have other uncommitted changes in your repo, this action will fail. If you started off in a clean repo, and used the _ipa_ and or _sigh_ actions, then you can use the [clean_build_artifacts](https://docs.fastlane.tools/actions/clean_build_artifacts/) action to clean those temporary files up before running this action.
*/
public func hgCommitVersionBump(message: String = "Version Bump",
- xcodeproj: String? = nil,
- force: Bool = false,
+ xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
testDirtyFiles: String = "file1, file2",
testExpectedFiles: String = "file1, file2")
{
- let command = RubyCommand(commandID: "", methodName: "hg_commit_version_bump", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "test_dirty_files", value: testDirtyFiles),
- RubyCommand.Argument(name: "test_expected_files", value: testExpectedFiles)])
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let testDirtyFilesArg = RubyCommand.Argument(name: "test_dirty_files", value: testDirtyFiles, type: nil)
+ let testExpectedFilesArg = RubyCommand.Argument(name: "test_expected_files", value: testExpectedFiles, type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg,
+ xcodeprojArg,
+ forceArg,
+ testDirtyFilesArg,
+ testExpectedFilesArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "hg_commit_version_bump", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Raises an exception if there are uncommitted hg changes
Along the same lines as the [ensure_git_status_clean](https://docs.fastlane.tools/actions/ensure_git_status_clean/) action, this is a sanity check to ensure the working mercurial repo is clean. Especially useful to put at the beginning of your Fastfile in the `before_all` block.
*/
public func hgEnsureCleanStatus() {
- let command = RubyCommand(commandID: "", methodName: "hg_ensure_clean_status", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "hg_ensure_clean_status", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will push changes to the remote hg repository
@@ -4150,15 +5744,21 @@
- force: Force push to remote
- destination: The destination to push to
The mercurial equivalent of [push_to_git_remote](https://docs.fastlane.tools/actions/push_to_git_remote/). Pushes your local commits to a remote mercurial repo. Useful when local changes such as adding a version bump commit or adding a tag are part of your lane’s actions.
*/
-public func hgPush(force: Bool = false,
+public func hgPush(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
destination: String = "")
{
- let command = RubyCommand(commandID: "", methodName: "hg_push", className: nil, args: [RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "destination", value: destination)])
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg,
+ destinationArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "hg_push", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Send a error/success message to [HipChat](https://www.hipchat.com/)
@@ -4179,30 +5779,45 @@
Send a message to **room** (by default) or a direct message to **@username** with success (green) or failure (red) status.
*/
public func hipchat(message: String = "",
channel: String,
apiToken: String,
- customColor: String? = nil,
- success: Bool = true,
+ customColor: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ success: OptionalConfigValue<Bool> = .fastlaneDefault(true),
version: String,
- notifyRoom: Bool = false,
+ notifyRoom: OptionalConfigValue<Bool> = .fastlaneDefault(false),
apiHost: String = "api.hipchat.com",
messageFormat: String = "html",
- includeHtmlHeader: Bool = true,
+ includeHtmlHeader: OptionalConfigValue<Bool> = .fastlaneDefault(true),
from: String = "fastlane")
{
- let command = RubyCommand(commandID: "", methodName: "hipchat", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "channel", value: channel),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "custom_color", value: customColor),
- RubyCommand.Argument(name: "success", value: success),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "notify_room", value: notifyRoom),
- RubyCommand.Argument(name: "api_host", value: apiHost),
- RubyCommand.Argument(name: "message_format", value: messageFormat),
- RubyCommand.Argument(name: "include_html_header", value: includeHtmlHeader),
- RubyCommand.Argument(name: "from", value: from)])
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let channelArg = RubyCommand.Argument(name: "channel", value: channel, type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let customColorArg = customColor.asRubyArgument(name: "custom_color", type: nil)
+ let successArg = success.asRubyArgument(name: "success", type: nil)
+ let versionArg = RubyCommand.Argument(name: "version", value: version, type: nil)
+ let notifyRoomArg = notifyRoom.asRubyArgument(name: "notify_room", type: nil)
+ let apiHostArg = RubyCommand.Argument(name: "api_host", value: apiHost, type: nil)
+ let messageFormatArg = RubyCommand.Argument(name: "message_format", value: messageFormat, type: nil)
+ let includeHtmlHeaderArg = includeHtmlHeader.asRubyArgument(name: "include_html_header", type: nil)
+ let fromArg = RubyCommand.Argument(name: "from", value: from, type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg,
+ channelArg,
+ apiTokenArg,
+ customColorArg,
+ successArg,
+ versionArg,
+ notifyRoomArg,
+ apiHostArg,
+ messageFormatArg,
+ includeHtmlHeaderArg,
+ fromArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "hipchat", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Refer to [App Center](https://github.com/Microsoft/fastlane-plugin-appcenter/)
@@ -4240,65 +5855,96 @@
Please migrate over to [App Center](https://github.com/Microsoft/fastlane-plugin-appcenter/)
Symbols will also be uploaded automatically if a `app.dSYM.zip` file is found next to `app.ipa`. In case it is located in a different place you can specify the path explicitly in the `:dsym` parameter.
More information about the available options can be found in the [HockeyApp Docs](http://support.hockeyapp.net/kb/api/api-versions#upload-version).
*/
-public func hockey(apk: String? = nil,
+public func hockey(apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
apiToken: String,
- ipa: String? = nil,
- dsym: String? = nil,
- createUpdate: Bool = false,
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ createUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
notes: String = "No changelog given",
notify: String = "1",
status: String = "2",
createStatus: String = "2",
notesType: String = "1",
releaseType: String = "0",
mandatory: String = "0",
- teams: String? = nil,
- users: String? = nil,
- tags: String? = nil,
- bundleShortVersion: String? = nil,
- bundleVersion: String? = nil,
- publicIdentifier: String? = nil,
- commitSha: String? = nil,
- repositoryUrl: String? = nil,
- buildServerUrl: String? = nil,
- uploadDsymOnly: Bool = false,
- ownerId: String? = nil,
+ teams: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ users: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ tags: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleShortVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ publicIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ commitSha: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ repositoryUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildServerUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ uploadDsymOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ ownerId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
strategy: String = "add",
- timeout: Int? = nil,
- bypassCdn: Bool = false,
+ timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ bypassCdn: OptionalConfigValue<Bool> = .fastlaneDefault(false),
dsaSignature: String = "")
{
- let command = RubyCommand(commandID: "", methodName: "hockey", className: nil, args: [RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "dsym", value: dsym),
- RubyCommand.Argument(name: "create_update", value: createUpdate),
- RubyCommand.Argument(name: "notes", value: notes),
- RubyCommand.Argument(name: "notify", value: notify),
- RubyCommand.Argument(name: "status", value: status),
- RubyCommand.Argument(name: "create_status", value: createStatus),
- RubyCommand.Argument(name: "notes_type", value: notesType),
- RubyCommand.Argument(name: "release_type", value: releaseType),
- RubyCommand.Argument(name: "mandatory", value: mandatory),
- RubyCommand.Argument(name: "teams", value: teams),
- RubyCommand.Argument(name: "users", value: users),
- RubyCommand.Argument(name: "tags", value: tags),
- RubyCommand.Argument(name: "bundle_short_version", value: bundleShortVersion),
- RubyCommand.Argument(name: "bundle_version", value: bundleVersion),
- RubyCommand.Argument(name: "public_identifier", value: publicIdentifier),
- RubyCommand.Argument(name: "commit_sha", value: commitSha),
- RubyCommand.Argument(name: "repository_url", value: repositoryUrl),
- RubyCommand.Argument(name: "build_server_url", value: buildServerUrl),
- RubyCommand.Argument(name: "upload_dsym_only", value: uploadDsymOnly),
- RubyCommand.Argument(name: "owner_id", value: ownerId),
- RubyCommand.Argument(name: "strategy", value: strategy),
- RubyCommand.Argument(name: "timeout", value: timeout),
- RubyCommand.Argument(name: "bypass_cdn", value: bypassCdn),
- RubyCommand.Argument(name: "dsa_signature", value: dsaSignature)])
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let dsymArg = dsym.asRubyArgument(name: "dsym", type: nil)
+ let createUpdateArg = createUpdate.asRubyArgument(name: "create_update", type: nil)
+ let notesArg = RubyCommand.Argument(name: "notes", value: notes, type: nil)
+ let notifyArg = RubyCommand.Argument(name: "notify", value: notify, type: nil)
+ let statusArg = RubyCommand.Argument(name: "status", value: status, type: nil)
+ let createStatusArg = RubyCommand.Argument(name: "create_status", value: createStatus, type: nil)
+ let notesTypeArg = RubyCommand.Argument(name: "notes_type", value: notesType, type: nil)
+ let releaseTypeArg = RubyCommand.Argument(name: "release_type", value: releaseType, type: nil)
+ let mandatoryArg = RubyCommand.Argument(name: "mandatory", value: mandatory, type: nil)
+ let teamsArg = teams.asRubyArgument(name: "teams", type: nil)
+ let usersArg = users.asRubyArgument(name: "users", type: nil)
+ let tagsArg = tags.asRubyArgument(name: "tags", type: nil)
+ let bundleShortVersionArg = bundleShortVersion.asRubyArgument(name: "bundle_short_version", type: nil)
+ let bundleVersionArg = bundleVersion.asRubyArgument(name: "bundle_version", type: nil)
+ let publicIdentifierArg = publicIdentifier.asRubyArgument(name: "public_identifier", type: nil)
+ let commitShaArg = commitSha.asRubyArgument(name: "commit_sha", type: nil)
+ let repositoryUrlArg = repositoryUrl.asRubyArgument(name: "repository_url", type: nil)
+ let buildServerUrlArg = buildServerUrl.asRubyArgument(name: "build_server_url", type: nil)
+ let uploadDsymOnlyArg = uploadDsymOnly.asRubyArgument(name: "upload_dsym_only", type: nil)
+ let ownerIdArg = ownerId.asRubyArgument(name: "owner_id", type: nil)
+ let strategyArg = RubyCommand.Argument(name: "strategy", value: strategy, type: nil)
+ let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
+ let bypassCdnArg = bypassCdn.asRubyArgument(name: "bypass_cdn", type: nil)
+ let dsaSignatureArg = RubyCommand.Argument(name: "dsa_signature", value: dsaSignature, type: nil)
+ let array: [RubyCommand.Argument?] = [apkArg,
+ apiTokenArg,
+ ipaArg,
+ dsymArg,
+ createUpdateArg,
+ notesArg,
+ notifyArg,
+ statusArg,
+ createStatusArg,
+ notesTypeArg,
+ releaseTypeArg,
+ mandatoryArg,
+ teamsArg,
+ usersArg,
+ tagsArg,
+ bundleShortVersionArg,
+ bundleVersionArg,
+ publicIdentifierArg,
+ commitShaArg,
+ repositoryUrlArg,
+ buildServerUrlArg,
+ uploadDsymOnlyArg,
+ ownerIdArg,
+ strategyArg,
+ timeoutArg,
+ bypassCdnArg,
+ dsaSignatureArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "hockey", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Connect to the [IFTTT Maker Channel](https://ifttt.com/maker)
@@ -4312,19 +5958,28 @@
Connect to the IFTTT [Maker Channel](https://ifttt.com/maker). An IFTTT Recipe has two components: a Trigger and an Action. In this case, the Trigger will fire every time the Maker Channel receives a web request (made by this _fastlane_ action) to notify it of an event. The Action can be anything that IFTTT supports: email, SMS, etc.
*/
public func ifttt(apiKey: String,
eventName: String,
- value1: String? = nil,
- value2: String? = nil,
- value3: String? = nil)
+ value1: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ value2: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ value3: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "ifttt", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "event_name", value: eventName),
- RubyCommand.Argument(name: "value1", value: value1),
- RubyCommand.Argument(name: "value2", value: value2),
- RubyCommand.Argument(name: "value3", value: value3)])
+ let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
+ let eventNameArg = RubyCommand.Argument(name: "event_name", value: eventName, type: nil)
+ let value1Arg = value1.asRubyArgument(name: "value1", type: nil)
+ let value2Arg = value2.asRubyArgument(name: "value2", type: nil)
+ let value3Arg = value3.asRubyArgument(name: "value3", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyArg,
+ eventNameArg,
+ value1Arg,
+ value2Arg,
+ value3Arg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ifttt", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Import certificate from inputfile into a keychain
@@ -4338,39 +5993,59 @@
- logOutput: If output should be logged to the console
Import certificates (and private keys) into the current default keychain. Use the `create_keychain` action to create a new keychain.
*/
public func importCertificate(certificatePath: String,
- certificatePassword: String? = nil,
+ certificatePassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
keychainName: String,
- keychainPath: String? = nil,
- keychainPassword: String? = nil,
- logOutput: Bool = false)
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ logOutput: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "import_certificate", className: nil, args: [RubyCommand.Argument(name: "certificate_path", value: certificatePath),
- RubyCommand.Argument(name: "certificate_password", value: certificatePassword),
- RubyCommand.Argument(name: "keychain_name", value: keychainName),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "log_output", value: logOutput)])
+ let certificatePathArg = RubyCommand.Argument(name: "certificate_path", value: certificatePath, type: nil)
+ let certificatePasswordArg = certificatePassword.asRubyArgument(name: "certificate_password", type: nil)
+ let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let logOutputArg = logOutput.asRubyArgument(name: "log_output", type: nil)
+ let array: [RubyCommand.Argument?] = [certificatePathArg,
+ certificatePasswordArg,
+ keychainNameArg,
+ keychainPathArg,
+ keychainPasswordArg,
+ logOutputArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "import_certificate", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Increment the build number of your project
- parameters:
- buildNumber: Change to a specific version. When you provide this parameter, Apple Generic Versioning does not have to be enabled
+ - skipInfoPlist: Don't update Info.plist files when updating the build version
- xcodeproj: optional, you must specify the path to your main Xcode project if it is not in the project root directory
- returns: The new build number
*/
-@discardableResult public func incrementBuildNumber(buildNumber: Any? = nil,
- xcodeproj: String? = nil) -> String
+@discardableResult public func incrementBuildNumber(buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipInfoPlist: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "increment_build_number", className: nil, args: [RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let skipInfoPlistArg = skipInfoPlist.asRubyArgument(name: "skip_info_plist", type: nil)
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let array: [RubyCommand.Argument?] = [buildNumberArg,
+ skipInfoPlistArg,
+ xcodeprojArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "increment_build_number", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Increment the version number of your project
@@ -4384,16 +6059,23 @@
This action will increment the version number.
You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html).
*/
@discardableResult public func incrementVersionNumber(bumpType: String = "bump",
- versionNumber: String? = nil,
- xcodeproj: String? = nil) -> String
+ versionNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: [RubyCommand.Argument(name: "bump_type", value: bumpType),
- RubyCommand.Argument(name: "version_number", value: versionNumber),
- RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
+ let bumpTypeArg = RubyCommand.Argument(name: "bump_type", value: bumpType, type: nil)
+ let versionNumberArg = versionNumber.asRubyArgument(name: "version_number", type: nil)
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let array: [RubyCommand.Argument?] = [bumpTypeArg,
+ versionNumberArg,
+ xcodeprojArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Installs an .ipa file on a connected iOS-device via usb or wifi
@@ -4404,19 +6086,27 @@
- skipWifi: Do not search for devices via WiFi
- ipa: The IPA file to put on the device
Installs the ipa on the device. If no id is given, the first found iOS device will be used. Works via USB or Wi-Fi. This requires `ios-deploy` to be installed. Please have a look at [ios-deploy](https://github.com/ios-control/ios-deploy). To quickly install it, use `npm -g i ios-deploy`
*/
-public func installOnDevice(extra: String? = nil,
- deviceId: String? = nil,
- skipWifi: Any? = nil,
- ipa: String? = nil)
+public func installOnDevice(extra: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ deviceId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipWifi: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "install_on_device", className: nil, args: [RubyCommand.Argument(name: "extra", value: extra),
- RubyCommand.Argument(name: "device_id", value: deviceId),
- RubyCommand.Argument(name: "skip_wifi", value: skipWifi),
- RubyCommand.Argument(name: "ipa", value: ipa)])
+ let extraArg = extra.asRubyArgument(name: "extra", type: nil)
+ let deviceIdArg = deviceId.asRubyArgument(name: "device_id", type: nil)
+ let skipWifiArg = skipWifi.asRubyArgument(name: "skip_wifi", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let array: [RubyCommand.Argument?] = [extraArg,
+ deviceIdArg,
+ skipWifiArg,
+ ipaArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "install_on_device", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Install provisioning profile from path
@@ -4425,27 +6115,38 @@
- returns: The absolute path to the installed provisioning profile
Install provisioning profile from path for current user
*/
-public func installProvisioningProfile(path: String) {
- let command = RubyCommand(commandID: "", methodName: "install_provisioning_profile", className: nil, args: [RubyCommand.Argument(name: "path", value: path)])
- _ = runner.executeCommand(command)
+@discardableResult public func installProvisioningProfile(path: String) -> String {
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "install_provisioning_profile", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
Install an Xcode plugin for the current user
- parameters:
- url: URL for Xcode plugin ZIP file
- github: GitHub repository URL for Xcode plugin
*/
public func installXcodePlugin(url: String,
- github: String? = nil)
+ github: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "install_xcode_plugin", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
- RubyCommand.Argument(name: "github", value: github)])
+ let urlArg = RubyCommand.Argument(name: "url", value: url, type: nil)
+ let githubArg = github.asRubyArgument(name: "github", type: nil)
+ let array: [RubyCommand.Argument?] = [urlArg,
+ githubArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "install_xcode_plugin", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload a new build to [Installr](http://installrapp.com/)
@@ -4457,19 +6158,28 @@
- notify: Groups to notify (e.g. 'dev,qa')
- add: Groups to add (e.g. 'exec,ops')
*/
public func installr(apiToken: String,
ipa: String,
- notes: String? = nil,
- notify: String? = nil,
- add: String? = nil)
+ notes: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ notify: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ add: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "installr", className: nil, args: [RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "notes", value: notes),
- RubyCommand.Argument(name: "notify", value: notify),
- RubyCommand.Argument(name: "add", value: add)])
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let ipaArg = RubyCommand.Argument(name: "ipa", value: ipa, type: nil)
+ let notesArg = notes.asRubyArgument(name: "notes", type: nil)
+ let notifyArg = notify.asRubyArgument(name: "notify", type: nil)
+ let addArg = add.asRubyArgument(name: "add", type: nil)
+ let array: [RubyCommand.Argument?] = [apiTokenArg,
+ ipaArg,
+ notesArg,
+ notifyArg,
+ addArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "installr", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Easily build and sign your app using shenzhen
@@ -4487,105 +6197,153 @@
- sdk: Use SDK as the name or path of the base SDK when building the project
- ipa: Specify the name of the .ipa file to generate (including file extension)
- xcconfig: Use an extra XCCONFIG file to build the app
- xcargs: Pass additional arguments to xcodebuild when building the app. Be sure to quote multiple args
*/
-public func ipa(workspace: String? = nil,
- project: String? = nil,
- configuration: String? = nil,
- scheme: String? = nil,
- clean: Any? = nil,
- archive: Any? = nil,
- destination: String? = nil,
- embed: String? = nil,
- identity: String? = nil,
- sdk: String? = nil,
- ipa: String? = nil,
- xcconfig: String? = nil,
- xcargs: String? = nil)
+public func ipa(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ archive: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ destination: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ embed: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ identity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "ipa", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "archive", value: archive),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "embed", value: embed),
- RubyCommand.Argument(name: "identity", value: identity),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "xcargs", value: xcargs)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let archiveArg = archive.asRubyArgument(name: "archive", type: nil)
+ let destinationArg = destination.asRubyArgument(name: "destination", type: nil)
+ let embedArg = embed.asRubyArgument(name: "embed", type: nil)
+ let identityArg = identity.asRubyArgument(name: "identity", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ configurationArg,
+ schemeArg,
+ cleanArg,
+ archiveArg,
+ destinationArg,
+ embedArg,
+ identityArg,
+ sdkArg,
+ ipaArg,
+ xcconfigArg,
+ xcargsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ipa", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Is the current run being executed on a CI system, like Jenkins or Travis
The return value of this method is true if fastlane is currently executed on Travis, Jenkins, Circle or a similar CI service
*/
@discardableResult public func isCi() -> Bool {
- let command = RubyCommand(commandID: "", methodName: "is_ci", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "is_ci", className: nil, args: args)
return parseBool(fromString: runner.executeCommand(command))
}
/**
Generate docs using Jazzy
- - parameter config: Path to jazzy config file
+ - parameters:
+ - config: Path to jazzy config file
+ - moduleVersion: Version string to use as part of the the default docs title and inside the docset
*/
-public func jazzy(config: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "jazzy", className: nil, args: [RubyCommand.Argument(name: "config", value: config)])
+public func jazzy(config: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ moduleVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil))
+{
+ let configArg = config.asRubyArgument(name: "config", type: nil)
+ let moduleVersionArg = moduleVersion.asRubyArgument(name: "module_version", type: nil)
+ let array: [RubyCommand.Argument?] = [configArg,
+ moduleVersionArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "jazzy", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
- Leave a comment on JIRA tickets
+ Leave a comment on a Jira ticket
- - parameters:
- - url: URL for Jira instance
- - contextPath: Appends to the url (ex: "/jira")
- - username: Username for JIRA instance
- - password: Password for Jira
- - ticketId: Ticket ID for Jira, i.e. IOS-123
- - commentText: Text to add to the ticket as a comment
+ - parameters:
+ - url: URL for Jira instance
+ - contextPath: Appends to the url (ex: "/jira")
+ - username: Username for Jira instance
+ - password: Password or API token for Jira
+ - ticketId: Ticket ID for Jira, i.e. IOS-123
+ - commentText: Text to add to the ticket as a comment
+ - failOnError: Should an error adding the Jira comment cause a failure?
+
+ - returns: A hash containing all relevant information of the Jira comment
+ Access Jira comment 'id', 'author', 'body', and more
*/
-public func jira(url: String,
- contextPath: String = "",
- username: String,
- password: String,
- ticketId: String,
- commentText: String)
+@discardableResult public func jira(url: String,
+ contextPath: String = "",
+ username: String,
+ password: String,
+ ticketId: String,
+ commentText: String,
+ failOnError: OptionalConfigValue<Bool> = .fastlaneDefault(true)) -> [String: Any]
{
- let command = RubyCommand(commandID: "", methodName: "jira", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
- RubyCommand.Argument(name: "context_path", value: contextPath),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "ticket_id", value: ticketId),
- RubyCommand.Argument(name: "comment_text", value: commentText)])
- _ = runner.executeCommand(command)
+ let urlArg = RubyCommand.Argument(name: "url", value: url, type: nil)
+ let contextPathArg = RubyCommand.Argument(name: "context_path", value: contextPath, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let passwordArg = RubyCommand.Argument(name: "password", value: password, type: nil)
+ let ticketIdArg = RubyCommand.Argument(name: "ticket_id", value: ticketId, type: nil)
+ let commentTextArg = RubyCommand.Argument(name: "comment_text", value: commentText, type: nil)
+ let failOnErrorArg = failOnError.asRubyArgument(name: "fail_on_error", type: nil)
+ let array: [RubyCommand.Argument?] = [urlArg,
+ contextPathArg,
+ usernameArg,
+ passwordArg,
+ ticketIdArg,
+ commentTextArg,
+ failOnErrorArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "jira", className: nil, args: args)
+ return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Access lane context values
Access the fastlane lane context values.
More information about how the lane context works: [https://docs.fastlane.tools/advanced/#lane-context](https://docs.fastlane.tools/advanced/#lane-context).
*/
@discardableResult public func laneContext() -> [String: Any] {
- let command = RubyCommand(commandID: "", methodName: "lane_context", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "lane_context", className: nil, args: args)
return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Return last git commit hash, abbreviated commit hash, commit message and author
- returns: Returns the following dict: {commit_hash: "commit hash", abbreviated_commit_hash: "abbreviated commit hash" author: "Author", author_email: "author email", message: "commit message"}. Example: {:message=>"message", :author=>"author", :author_email=>"author_email", :commit_hash=>"commit_hash", :abbreviated_commit_hash=>"short_hash"}
*/
@discardableResult public func lastGitCommit() -> [String: String] {
- let command = RubyCommand(commandID: "", methodName: "last_git_commit", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "last_git_commit", className: nil, args: args)
return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Get the most recent git tag
@@ -4593,12 +6351,17 @@
- parameter pattern: Pattern to filter tags when looking for last one. Limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, * at the end is implied
If you are using this action on a **shallow clone**, *the default with some CI systems like Bamboo*, you need to ensure that you have also pulled all the git tags appropriately. Assuming your git repo has the correct remote set you can issue `sh('git fetch --tags')`.
Pattern parameter allows you to filter to a subset of tags.
*/
-@discardableResult public func lastGitTag(pattern: String? = nil) -> String {
- let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: [RubyCommand.Argument(name: "pattern", value: pattern)])
+@discardableResult public func lastGitTag(pattern: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String {
+ let patternArg = pattern.asRubyArgument(name: "pattern", type: nil)
+ let array: [RubyCommand.Argument?] = [patternArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "last_git_tag", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Fetches most recent build number from TestFlight
@@ -4618,31 +6381,45 @@
- returns: Integer representation of the latest build number uploaded to TestFlight. Example: 2
Provides a way to have `increment_build_number` be based on the latest build you uploaded to iTC.
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.
*/
-@discardableResult public func latestTestflightBuildNumber(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- live: Bool = false,
+@discardableResult public func latestTestflightBuildNumber(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ live: OptionalConfigValue<Bool> = .fastlaneDefault(false),
appIdentifier: String,
- username: String,
- version: String? = nil,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
initialBuildNumber: Int = 1,
- teamId: Any? = nil,
- teamName: String? = nil) -> Int
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> Int
{
- let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "live", value: live),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let liveArg = live.asRubyArgument(name: "live", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let initialBuildNumberArg = RubyCommand.Argument(name: "initial_build_number", value: initialBuildNumber, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ liveArg,
+ appIdentifierArg,
+ usernameArg,
+ versionArg,
+ platformArg,
+ initialBuildNumberArg,
+ teamIdArg,
+ teamNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "latest_testflight_build_number", className: nil, args: args)
return parseInt(fromString: runner.executeCommand(command))
}
/**
Generates coverage data using lcov
@@ -4656,14 +6433,22 @@
public func lcov(projectName: String,
scheme: String,
arch: String = "i386",
outputDir: String = "coverage_reports")
{
- let command = RubyCommand(commandID: "", methodName: "lcov", className: nil, args: [RubyCommand.Argument(name: "project_name", value: projectName),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "arch", value: arch),
- RubyCommand.Argument(name: "output_dir", value: outputDir)])
+ let projectNameArg = RubyCommand.Argument(name: "project_name", value: projectName, type: nil)
+ let schemeArg = RubyCommand.Argument(name: "scheme", value: scheme, type: nil)
+ let archArg = RubyCommand.Argument(name: "arch", value: arch, type: nil)
+ let outputDirArg = RubyCommand.Argument(name: "output_dir", value: outputDir, type: nil)
+ let array: [RubyCommand.Argument?] = [projectNameArg,
+ schemeArg,
+ archArg,
+ outputDirArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "lcov", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Send a success/error message to an email group
@@ -4684,43 +6469,63 @@
- templatePath: Mail HTML template
- replyTo: Mail Reply to
- attachment: Mail Attachment filenames, either an array or just one string
- customPlaceholders: Placeholders for template given as a hash
*/
-public func mailgun(mailgunSandboxDomain: String? = nil,
- mailgunSandboxPostmaster: String? = nil,
- mailgunApikey: String? = nil,
+public func mailgun(mailgunSandboxDomain: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ mailgunSandboxPostmaster: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ mailgunApikey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
postmaster: String,
apikey: String,
to: String,
from: String = "Mailgun Sandbox",
message: String,
subject: String = "fastlane build",
- success: Bool = true,
+ success: OptionalConfigValue<Bool> = .fastlaneDefault(true),
appLink: String,
- ciBuildLink: String? = nil,
- templatePath: String? = nil,
- replyTo: String? = nil,
- attachment: Any? = nil,
+ ciBuildLink: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ templatePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ replyTo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ attachment: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
customPlaceholders: [String: Any] = [:])
{
- let command = RubyCommand(commandID: "", methodName: "mailgun", className: nil, args: [RubyCommand.Argument(name: "mailgun_sandbox_domain", value: mailgunSandboxDomain),
- RubyCommand.Argument(name: "mailgun_sandbox_postmaster", value: mailgunSandboxPostmaster),
- RubyCommand.Argument(name: "mailgun_apikey", value: mailgunApikey),
- RubyCommand.Argument(name: "postmaster", value: postmaster),
- RubyCommand.Argument(name: "apikey", value: apikey),
- RubyCommand.Argument(name: "to", value: to),
- RubyCommand.Argument(name: "from", value: from),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "subject", value: subject),
- RubyCommand.Argument(name: "success", value: success),
- RubyCommand.Argument(name: "app_link", value: appLink),
- RubyCommand.Argument(name: "ci_build_link", value: ciBuildLink),
- RubyCommand.Argument(name: "template_path", value: templatePath),
- RubyCommand.Argument(name: "reply_to", value: replyTo),
- RubyCommand.Argument(name: "attachment", value: attachment),
- RubyCommand.Argument(name: "custom_placeholders", value: customPlaceholders)])
+ let mailgunSandboxDomainArg = mailgunSandboxDomain.asRubyArgument(name: "mailgun_sandbox_domain", type: nil)
+ let mailgunSandboxPostmasterArg = mailgunSandboxPostmaster.asRubyArgument(name: "mailgun_sandbox_postmaster", type: nil)
+ let mailgunApikeyArg = mailgunApikey.asRubyArgument(name: "mailgun_apikey", type: nil)
+ let postmasterArg = RubyCommand.Argument(name: "postmaster", value: postmaster, type: nil)
+ let apikeyArg = RubyCommand.Argument(name: "apikey", value: apikey, type: nil)
+ let toArg = RubyCommand.Argument(name: "to", value: to, type: nil)
+ let fromArg = RubyCommand.Argument(name: "from", value: from, type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let subjectArg = RubyCommand.Argument(name: "subject", value: subject, type: nil)
+ let successArg = success.asRubyArgument(name: "success", type: nil)
+ let appLinkArg = RubyCommand.Argument(name: "app_link", value: appLink, type: nil)
+ let ciBuildLinkArg = ciBuildLink.asRubyArgument(name: "ci_build_link", type: nil)
+ let templatePathArg = templatePath.asRubyArgument(name: "template_path", type: nil)
+ let replyToArg = replyTo.asRubyArgument(name: "reply_to", type: nil)
+ let attachmentArg = attachment.asRubyArgument(name: "attachment", type: nil)
+ let customPlaceholdersArg = RubyCommand.Argument(name: "custom_placeholders", value: customPlaceholders, type: nil)
+ let array: [RubyCommand.Argument?] = [mailgunSandboxDomainArg,
+ mailgunSandboxPostmasterArg,
+ mailgunApikeyArg,
+ postmasterArg,
+ apikeyArg,
+ toArg,
+ fromArg,
+ messageArg,
+ subjectArg,
+ successArg,
+ appLinkArg,
+ ciBuildLinkArg,
+ templatePathArg,
+ replyToArg,
+ attachmentArg,
+ customPlaceholdersArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "mailgun", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generate a changelog using the Changes section from the current Jenkins build
@@ -4730,22 +6535,28 @@
- includeCommitBody: Include the commit body along with the summary
This is useful when deploying automated builds. The changelog from Jenkins lists all the commit messages since the last build.
*/
public func makeChangelogFromJenkins(fallbackChangelog: String = "",
- includeCommitBody: Bool = true)
+ includeCommitBody: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "make_changelog_from_jenkins", className: nil, args: [RubyCommand.Argument(name: "fallback_changelog", value: fallbackChangelog),
- RubyCommand.Argument(name: "include_commit_body", value: includeCommitBody)])
+ let fallbackChangelogArg = RubyCommand.Argument(name: "fallback_changelog", value: fallbackChangelog, type: nil)
+ let includeCommitBodyArg = includeCommitBody.asRubyArgument(name: "include_commit_body", type: nil)
+ let array: [RubyCommand.Argument?] = [fallbackChangelogArg,
+ includeCommitBodyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "make_changelog_from_jenkins", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `sync_code_signing` action
- parameters:
- - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
- additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
- readonly: Only fetch existing certificates and profiles, don't generate new ones
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
- skipProvisioningProfiles: Skip syncing provisioning profiles
- appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
@@ -4771,11 +6582,11 @@
- s3AccessKey: S3 access key
- s3SecretAccessKey: S3 secret access key
- s3Bucket: Name of the S3 bucket
- s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
- keychainName: Keychain the items should be imported to
- - 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
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
- force: Renew the provisioning profiles every time you run match
- forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
- skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
- skipDocs: Skip generation of a README.md for the created git repository
- platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
@@ -4788,136 +6599,389 @@
- 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
- verbose: Print out extra information and all commands
More information: https://docs.fastlane.tools/actions/match/
*/
-public func match(type: Any = matchfile.type,
- additionalCertTypes: [String]? = matchfile.additionalCertTypes,
- readonly: Bool = matchfile.readonly,
- generateAppleCerts: Bool = matchfile.generateAppleCerts,
- skipProvisioningProfiles: Bool = matchfile.skipProvisioningProfiles,
+public func match(type: String = matchfile.type,
+ additionalCertTypes: OptionalConfigValue<[String]?> = .fastlaneDefault(matchfile.additionalCertTypes),
+ readonly: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.readonly),
+ generateAppleCerts: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.generateAppleCerts),
+ skipProvisioningProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipProvisioningProfiles),
appIdentifier: [String] = matchfile.appIdentifier,
- apiKeyPath: Any? = matchfile.apiKeyPath,
- apiKey: [String: Any]? = matchfile.apiKey,
- username: Any? = matchfile.username,
- teamId: Any? = matchfile.teamId,
- teamName: Any? = matchfile.teamName,
- storageMode: Any = matchfile.storageMode,
- gitUrl: Any = matchfile.gitUrl,
- gitBranch: Any = matchfile.gitBranch,
- gitFullName: Any? = matchfile.gitFullName,
- gitUserEmail: Any? = matchfile.gitUserEmail,
- shallowClone: Bool = matchfile.shallowClone,
- cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly,
- gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization,
- gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization,
- gitPrivateKey: Any? = matchfile.gitPrivateKey,
- googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
- googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
- googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
- s3Region: Any? = matchfile.s3Region,
- s3AccessKey: Any? = matchfile.s3AccessKey,
- s3SecretAccessKey: Any? = matchfile.s3SecretAccessKey,
- s3Bucket: Any? = matchfile.s3Bucket,
- s3ObjectPrefix: Any? = matchfile.s3ObjectPrefix,
- keychainName: Any = matchfile.keychainName,
- keychainPassword: Any? = matchfile.keychainPassword,
- force: Bool = matchfile.force,
- forceForNewDevices: Bool = matchfile.forceForNewDevices,
- skipConfirmation: Bool = matchfile.skipConfirmation,
- skipDocs: Bool = matchfile.skipDocs,
- platform: Any = matchfile.platform,
- deriveCatalystAppIdentifier: Bool = matchfile.deriveCatalystAppIdentifier,
- templateName: Any? = matchfile.templateName,
- profileName: Any? = matchfile.profileName,
- failOnNameTaken: Bool = matchfile.failOnNameTaken,
- skipCertificateMatching: Bool = matchfile.skipCertificateMatching,
- outputPath: Any? = matchfile.outputPath,
- skipSetPartitionList: Bool = matchfile.skipSetPartitionList,
- verbose: Bool = matchfile.verbose)
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.apiKeyPath),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(matchfile.apiKey),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.username),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.teamId),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.teamName),
+ storageMode: String = matchfile.storageMode,
+ gitUrl: String = matchfile.gitUrl,
+ gitBranch: String = matchfile.gitBranch,
+ gitFullName: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitFullName),
+ gitUserEmail: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitUserEmail),
+ shallowClone: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.shallowClone),
+ cloneBranchDirectly: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.cloneBranchDirectly),
+ gitBasicAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitBasicAuthorization),
+ gitBearerAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitBearerAuthorization),
+ gitPrivateKey: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.gitPrivateKey),
+ googleCloudBucketName: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.googleCloudBucketName),
+ googleCloudKeysFile: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.googleCloudKeysFile),
+ googleCloudProjectId: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.googleCloudProjectId),
+ s3Region: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3Region),
+ s3AccessKey: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3AccessKey),
+ s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3SecretAccessKey),
+ s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3Bucket),
+ s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.s3ObjectPrefix),
+ keychainName: String = matchfile.keychainName,
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.keychainPassword),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.force),
+ forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.forceForNewDevices),
+ skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipConfirmation),
+ skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipDocs),
+ platform: String = matchfile.platform,
+ deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.deriveCatalystAppIdentifier),
+ templateName: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.templateName),
+ profileName: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.profileName),
+ failOnNameTaken: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.failOnNameTaken),
+ skipCertificateMatching: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipCertificateMatching),
+ outputPath: OptionalConfigValue<String?> = .fastlaneDefault(matchfile.outputPath),
+ skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.skipSetPartitionList),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(matchfile.verbose))
{
- let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
- RubyCommand.Argument(name: "additional_cert_types", value: additionalCertTypes),
- RubyCommand.Argument(name: "readonly", value: readonly),
- RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
- RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "storage_mode", value: storageMode),
- RubyCommand.Argument(name: "git_url", value: gitUrl),
- RubyCommand.Argument(name: "git_branch", value: gitBranch),
- RubyCommand.Argument(name: "git_full_name", value: gitFullName),
- RubyCommand.Argument(name: "git_user_email", value: gitUserEmail),
- RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
- RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
- RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
- RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
- RubyCommand.Argument(name: "git_private_key", value: gitPrivateKey),
- RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
- RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
- RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
- RubyCommand.Argument(name: "s3_region", value: s3Region),
- RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
- RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
- RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
- RubyCommand.Argument(name: "s3_object_prefix", value: s3ObjectPrefix),
- RubyCommand.Argument(name: "keychain_name", value: keychainName),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "force_for_new_devices", value: forceForNewDevices),
- RubyCommand.Argument(name: "skip_confirmation", value: skipConfirmation),
- RubyCommand.Argument(name: "skip_docs", value: skipDocs),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "derive_catalyst_app_identifier", value: deriveCatalystAppIdentifier),
- RubyCommand.Argument(name: "template_name", value: templateName),
- RubyCommand.Argument(name: "profile_name", value: profileName),
- RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
- RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
- RubyCommand.Argument(name: "verbose", value: verbose)])
+ let typeArg = RubyCommand.Argument(name: "type", value: type, type: nil)
+ let additionalCertTypesArg = additionalCertTypes.asRubyArgument(name: "additional_cert_types", type: nil)
+ let readonlyArg = readonly.asRubyArgument(name: "readonly", type: nil)
+ let generateAppleCertsArg = generateAppleCerts.asRubyArgument(name: "generate_apple_certs", type: nil)
+ let skipProvisioningProfilesArg = skipProvisioningProfiles.asRubyArgument(name: "skip_provisioning_profiles", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let storageModeArg = RubyCommand.Argument(name: "storage_mode", value: storageMode, type: nil)
+ let gitUrlArg = RubyCommand.Argument(name: "git_url", value: gitUrl, type: nil)
+ let gitBranchArg = RubyCommand.Argument(name: "git_branch", value: gitBranch, type: nil)
+ let gitFullNameArg = gitFullName.asRubyArgument(name: "git_full_name", type: nil)
+ let gitUserEmailArg = gitUserEmail.asRubyArgument(name: "git_user_email", type: nil)
+ let shallowCloneArg = shallowClone.asRubyArgument(name: "shallow_clone", type: nil)
+ let cloneBranchDirectlyArg = cloneBranchDirectly.asRubyArgument(name: "clone_branch_directly", type: nil)
+ let gitBasicAuthorizationArg = gitBasicAuthorization.asRubyArgument(name: "git_basic_authorization", type: nil)
+ let gitBearerAuthorizationArg = gitBearerAuthorization.asRubyArgument(name: "git_bearer_authorization", type: nil)
+ let gitPrivateKeyArg = gitPrivateKey.asRubyArgument(name: "git_private_key", type: nil)
+ let googleCloudBucketNameArg = googleCloudBucketName.asRubyArgument(name: "google_cloud_bucket_name", type: nil)
+ let googleCloudKeysFileArg = googleCloudKeysFile.asRubyArgument(name: "google_cloud_keys_file", type: nil)
+ let googleCloudProjectIdArg = googleCloudProjectId.asRubyArgument(name: "google_cloud_project_id", type: nil)
+ let s3RegionArg = s3Region.asRubyArgument(name: "s3_region", type: nil)
+ let s3AccessKeyArg = s3AccessKey.asRubyArgument(name: "s3_access_key", type: nil)
+ let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
+ let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
+ let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
+ let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
+ let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
+ let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
+ let templateNameArg = templateName.asRubyArgument(name: "template_name", type: nil)
+ let profileNameArg = profileName.asRubyArgument(name: "profile_name", type: nil)
+ let failOnNameTakenArg = failOnNameTaken.asRubyArgument(name: "fail_on_name_taken", type: nil)
+ let skipCertificateMatchingArg = skipCertificateMatching.asRubyArgument(name: "skip_certificate_matching", type: nil)
+ let outputPathArg = outputPath.asRubyArgument(name: "output_path", type: nil)
+ let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let array: [RubyCommand.Argument?] = [typeArg,
+ additionalCertTypesArg,
+ readonlyArg,
+ generateAppleCertsArg,
+ skipProvisioningProfilesArg,
+ appIdentifierArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ storageModeArg,
+ gitUrlArg,
+ gitBranchArg,
+ gitFullNameArg,
+ gitUserEmailArg,
+ shallowCloneArg,
+ cloneBranchDirectlyArg,
+ gitBasicAuthorizationArg,
+ gitBearerAuthorizationArg,
+ gitPrivateKeyArg,
+ googleCloudBucketNameArg,
+ googleCloudKeysFileArg,
+ googleCloudProjectIdArg,
+ s3RegionArg,
+ s3AccessKeyArg,
+ s3SecretAccessKeyArg,
+ s3BucketArg,
+ s3ObjectPrefixArg,
+ keychainNameArg,
+ keychainPasswordArg,
+ forceArg,
+ forceForNewDevicesArg,
+ skipConfirmationArg,
+ skipDocsArg,
+ platformArg,
+ deriveCatalystAppIdentifierArg,
+ templateNameArg,
+ profileNameArg,
+ failOnNameTakenArg,
+ skipCertificateMatchingArg,
+ outputPathArg,
+ skipSetPartitionListArg,
+ verboseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "match", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
+ Easily nuke your certificate and provisioning profiles (via _match_)
+
+ - parameters:
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
+ - additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
+ - readonly: Only fetch existing certificates and profiles, don't generate new ones
+ - generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
+ - skipProvisioningProfiles: Skip syncing provisioning profiles
+ - appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
+ - 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)
+ - 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)
+ - username: Your Apple ID Username
+ - teamId: The ID of your Developer Portal team if you're in multiple teams
+ - teamName: The name of your Developer Portal team if you're in multiple teams
+ - storageMode: Define where you want to store your certificates
+ - gitUrl: URL to the git repo containing all the certificates
+ - gitBranch: Specific git branch to use
+ - gitFullName: git user full name to commit
+ - gitUserEmail: git user email to commit
+ - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
+ - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
+ - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
+ - 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
+ - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
+ - googleCloudKeysFile: Path to the gc_keys.json file
+ - googleCloudProjectId: ID of the Google Cloud project to use for authentication
+ - s3Region: Name of the S3 region
+ - s3AccessKey: S3 access key
+ - s3SecretAccessKey: S3 secret access key
+ - s3Bucket: Name of the S3 bucket
+ - s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
+ - keychainName: Keychain the items should be imported to
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
+ - force: Renew the provisioning profiles every time you run match
+ - forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
+ - skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
+ - skipDocs: Skip generation of a README.md for the created git repository
+ - platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
+ - deriveCatalystAppIdentifier: Enable this if you have the Mac Catalyst capability enabled and your project was created with Xcode 11.3 or earlier. Prepends 'maccatalyst.' to the app identifier for the provisioning profile mapping
+ - 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")
+ - profileName: A custom name for the provisioning profile. This will replace the default provisioning profile name if specified
+ - 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
+ - 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
+ - outputPath: Path in which to export certificates, key and profile
+ - 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
+ - verbose: Print out extra information and all commands
+
+ Use the match_nuke action to revoke your certificates and provisioning profiles.
+ Don't worry, apps that are already available in the App Store / TestFlight will still work.
+ Builds distributed via Ad Hoc or Enterprise will be disabled after nuking your account, so you'll have to re-upload a new build.
+ After clearing your account you'll start from a clean state, and you can run match to generate your certificates and profiles again.
+ More information: https://docs.fastlane.tools/actions/match/
+ */
+public func matchNuke(type: String = "development",
+ additionalCertTypes: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ readonly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateAppleCerts: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ skipProvisioningProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ appIdentifier: [String],
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ storageMode: String = "git",
+ gitUrl: String,
+ gitBranch: String = "master",
+ gitFullName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitUserEmail: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ shallowClone: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ cloneBranchDirectly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ gitBasicAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitBearerAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitPrivateKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudBucketName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudKeysFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudProjectId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3Region: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3AccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ keychainName: String = "login.keychain",
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ platform: String = "ios",
+ deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ templateName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failOnNameTaken: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipCertificateMatching: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false))
+{
+ let typeArg = RubyCommand.Argument(name: "type", value: type, type: nil)
+ let additionalCertTypesArg = additionalCertTypes.asRubyArgument(name: "additional_cert_types", type: nil)
+ let readonlyArg = readonly.asRubyArgument(name: "readonly", type: nil)
+ let generateAppleCertsArg = generateAppleCerts.asRubyArgument(name: "generate_apple_certs", type: nil)
+ let skipProvisioningProfilesArg = skipProvisioningProfiles.asRubyArgument(name: "skip_provisioning_profiles", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let storageModeArg = RubyCommand.Argument(name: "storage_mode", value: storageMode, type: nil)
+ let gitUrlArg = RubyCommand.Argument(name: "git_url", value: gitUrl, type: nil)
+ let gitBranchArg = RubyCommand.Argument(name: "git_branch", value: gitBranch, type: nil)
+ let gitFullNameArg = gitFullName.asRubyArgument(name: "git_full_name", type: nil)
+ let gitUserEmailArg = gitUserEmail.asRubyArgument(name: "git_user_email", type: nil)
+ let shallowCloneArg = shallowClone.asRubyArgument(name: "shallow_clone", type: nil)
+ let cloneBranchDirectlyArg = cloneBranchDirectly.asRubyArgument(name: "clone_branch_directly", type: nil)
+ let gitBasicAuthorizationArg = gitBasicAuthorization.asRubyArgument(name: "git_basic_authorization", type: nil)
+ let gitBearerAuthorizationArg = gitBearerAuthorization.asRubyArgument(name: "git_bearer_authorization", type: nil)
+ let gitPrivateKeyArg = gitPrivateKey.asRubyArgument(name: "git_private_key", type: nil)
+ let googleCloudBucketNameArg = googleCloudBucketName.asRubyArgument(name: "google_cloud_bucket_name", type: nil)
+ let googleCloudKeysFileArg = googleCloudKeysFile.asRubyArgument(name: "google_cloud_keys_file", type: nil)
+ let googleCloudProjectIdArg = googleCloudProjectId.asRubyArgument(name: "google_cloud_project_id", type: nil)
+ let s3RegionArg = s3Region.asRubyArgument(name: "s3_region", type: nil)
+ let s3AccessKeyArg = s3AccessKey.asRubyArgument(name: "s3_access_key", type: nil)
+ let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
+ let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
+ let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
+ let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
+ let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
+ let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
+ let templateNameArg = templateName.asRubyArgument(name: "template_name", type: nil)
+ let profileNameArg = profileName.asRubyArgument(name: "profile_name", type: nil)
+ let failOnNameTakenArg = failOnNameTaken.asRubyArgument(name: "fail_on_name_taken", type: nil)
+ let skipCertificateMatchingArg = skipCertificateMatching.asRubyArgument(name: "skip_certificate_matching", type: nil)
+ let outputPathArg = outputPath.asRubyArgument(name: "output_path", type: nil)
+ let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let array: [RubyCommand.Argument?] = [typeArg,
+ additionalCertTypesArg,
+ readonlyArg,
+ generateAppleCertsArg,
+ skipProvisioningProfilesArg,
+ appIdentifierArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ storageModeArg,
+ gitUrlArg,
+ gitBranchArg,
+ gitFullNameArg,
+ gitUserEmailArg,
+ shallowCloneArg,
+ cloneBranchDirectlyArg,
+ gitBasicAuthorizationArg,
+ gitBearerAuthorizationArg,
+ gitPrivateKeyArg,
+ googleCloudBucketNameArg,
+ googleCloudKeysFileArg,
+ googleCloudProjectIdArg,
+ s3RegionArg,
+ s3AccessKeyArg,
+ s3SecretAccessKeyArg,
+ s3BucketArg,
+ s3ObjectPrefixArg,
+ keychainNameArg,
+ keychainPasswordArg,
+ forceArg,
+ forceForNewDevicesArg,
+ skipConfirmationArg,
+ skipDocsArg,
+ platformArg,
+ deriveCatalystAppIdentifierArg,
+ templateNameArg,
+ profileNameArg,
+ failOnNameTakenArg,
+ skipCertificateMatchingArg,
+ outputPathArg,
+ skipSetPartitionListArg,
+ verboseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "match_nuke", className: nil, args: args)
+ _ = runner.executeCommand(command)
+}
+
+/**
Verifies the minimum fastlane version required
Add this to your `Fastfile` to require a certain version of _fastlane_.
Use it if you use an action that just recently came out and you need it.
*/
public func minFastlaneVersion() {
- let command = RubyCommand(commandID: "", methodName: "min_fastlane_version", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "min_fastlane_version", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Modifies the services of the app created on Developer Portal
- parameters:
- username: Your Apple ID Username
- appIdentifier: App Identifier (Bundle ID, e.g. com.krausefx.app)
- - services: Array with Spaceship App Services (e.g. access_wifi: (on|off)(:on|:off)(true|false), app_group: (on|off)(:on|:off)(true|false), apple_pay: (on|off)(:on|:off)(true|false), associated_domains: (on|off)(:on|:off)(true|false), auto_fill_credential: (on|off)(:on|:off)(true|false), data_protection: (complete|unlessopen|untilfirstauth)(:on|:off)(true|false), game_center: (on|off)(:on|:off)(true|false), health_kit: (on|off)(:on|:off)(true|false), home_kit: (on|off)(:on|:off)(true|false), hotspot: (on|off)(:on|:off)(true|false), icloud: (legacy|cloudkit)(:on|:off)(true|false), in_app_purchase: (on|off)(:on|:off)(true|false), inter_app_audio: (on|off)(:on|:off)(true|false), multipath: (on|off)(:on|:off)(true|false), network_extension: (on|off)(:on|:off)(true|false), nfc_tag_reading: (on|off)(:on|:off)(true|false), personal_vpn: (on|off)(:on|:off)(true|false), passbook: (on|off)(:on|:off)(true|false), push_notification: (on|off)(:on|:off)(true|false), siri_kit: (on|off)(:on|:off)(true|false), vpn_configuration: (on|off)(:on|:off)(true|false), wallet: (on|off)(:on|:off)(true|false), wireless_accessory: (on|off)(:on|:off)(true|false))
+ - services: Array with Spaceship App Services (e.g. access_wifi: (on|off)(:on|:off)(true|false), app_attest: (on|off)(:on|:off)(true|false), app_group: (on|off)(:on|:off)(true|false), apple_pay: (on|off)(:on|:off)(true|false), associated_domains: (on|off)(:on|:off)(true|false), auto_fill_credential: (on|off)(:on|:off)(true|false), class_kit: (on|off)(:on|:off)(true|false), icloud: (legacy|cloudkit)(:on|:off)(true|false), custom_network_protocol: (on|off)(:on|:off)(true|false), data_protection: (complete|unlessopen|untilfirstauth)(:on|:off)(true|false), extended_virtual_address_space: (on|off)(:on|:off)(true|false), family_controls: (on|off)(:on|:off)(true|false), file_provider_testing_mode: (on|off)(:on|:off)(true|false), fonts: (on|off)(:on|:off)(true|false), game_center: (ios|mac)(:on|:off)(true|false), health_kit: (on|off)(:on|:off)(true|false), hls_interstitial_preview: (on|off)(:on|:off)(true|false), home_kit: (on|off)(:on|:off)(true|false), hotspot: (on|off)(:on|:off)(true|false), in_app_purchase: (on|off)(:on|:off)(true|false), inter_app_audio: (on|off)(:on|:off)(true|false), low_latency_hls: (on|off)(:on|:off)(true|false), managed_associated_domains: (on|off)(:on|:off)(true|false), maps: (on|off)(:on|:off)(true|false), multipath: (on|off)(:on|:off)(true|false), network_extension: (on|off)(:on|:off)(true|false), nfc_tag_reading: (on|off)(:on|:off)(true|false), personal_vpn: (on|off)(:on|:off)(true|false), passbook: (on|off)(:on|:off)(true|false), push_notification: (on|off)(:on|:off)(true|false), sign_in_with_apple: (on)(:on|:off)(true|false), siri_kit: (on|off)(:on|:off)(true|false), system_extension: (on|off)(:on|:off)(true|false), user_management: (on|off)(:on|:off)(true|false), vpn_configuration: (on|off)(:on|:off)(true|false), wallet: (on|off)(:on|:off)(true|false), wireless_accessory: (on|off)(:on|:off)(true|false), car_play_audio_app: (on|off)(:on|:off)(true|false), car_play_messaging_app: (on|off)(:on|:off)(true|false), car_play_navigation_app: (on|off)(:on|:off)(true|false), car_play_voip_calling_app: (on|off)(:on|:off)(true|false), critical_alerts: (on|off)(:on|:off)(true|false), hotspot_helper: (on|off)(:on|:off)(true|false), driver_kit: (on|off)(:on|:off)(true|false), driver_kit_endpoint_security: (on|off)(:on|:off)(true|false), driver_kit_family_hid_device: (on|off)(:on|:off)(true|false), driver_kit_family_networking: (on|off)(:on|:off)(true|false), driver_kit_family_serial: (on|off)(:on|:off)(true|false), driver_kit_hid_event_service: (on|off)(:on|:off)(true|false), driver_kit_transport_hid: (on|off)(:on|:off)(true|false), multitasking_camera_access: (on|off)(:on|:off)(true|false), sf_universal_link_api: (on|off)(:on|:off)(true|false), vp9_decoder: (on|off)(:on|:off)(true|false), music_kit: (on|off)(:on|:off)(true|false), shazam_kit: (on|off)(:on|:off)(true|false), communication_notifications: (on|off)(:on|:off)(true|false), group_activities: (on|off)(:on|:off)(true|false), health_kit_estimate_recalibration: (on|off)(:on|:off)(true|false), time_sensitive_notifications: (on|off)(:on|:off)(true|false))
- teamId: The ID of your Developer Portal team if you're in multiple teams
- teamName: The name of your Developer Portal team if you're in multiple teams
The options are the same as `:enable_services` in the [produce action](https://docs.fastlane.tools/actions/produce/#parameters_1)
*/
public func modifyServices(username: String,
appIdentifier: String,
services: [String: Any] = [:],
- teamId: String? = nil,
- teamName: String? = nil)
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "modify_services", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "services", value: services),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let servicesArg = RubyCommand.Argument(name: "services", value: services, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ servicesArg,
+ teamIdArg,
+ teamNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "modify_services", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload a file to [Sonatype Nexus platform](https://www.sonatype.com)
@@ -4944,40 +7008,61 @@
public func nexusUpload(file: String,
repoId: String,
repoGroupId: String,
repoProjectName: String,
repoProjectVersion: String,
- repoClassifier: String? = nil,
+ repoClassifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
endpoint: String,
mountPath: String = "/nexus",
username: String,
password: String,
- sslVerify: Bool = true,
+ sslVerify: OptionalConfigValue<Bool> = .fastlaneDefault(true),
nexusVersion: Int = 2,
- verbose: Bool = false,
- proxyUsername: String? = nil,
- proxyPassword: String? = nil,
- proxyAddress: String? = nil,
- proxyPort: String? = nil)
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ proxyUsername: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyAddress: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPort: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "nexus_upload", className: nil, args: [RubyCommand.Argument(name: "file", value: file),
- RubyCommand.Argument(name: "repo_id", value: repoId),
- RubyCommand.Argument(name: "repo_group_id", value: repoGroupId),
- RubyCommand.Argument(name: "repo_project_name", value: repoProjectName),
- RubyCommand.Argument(name: "repo_project_version", value: repoProjectVersion),
- RubyCommand.Argument(name: "repo_classifier", value: repoClassifier),
- RubyCommand.Argument(name: "endpoint", value: endpoint),
- RubyCommand.Argument(name: "mount_path", value: mountPath),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "ssl_verify", value: sslVerify),
- RubyCommand.Argument(name: "nexus_version", value: nexusVersion),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "proxy_username", value: proxyUsername),
- RubyCommand.Argument(name: "proxy_password", value: proxyPassword),
- RubyCommand.Argument(name: "proxy_address", value: proxyAddress),
- RubyCommand.Argument(name: "proxy_port", value: proxyPort)])
+ let fileArg = RubyCommand.Argument(name: "file", value: file, type: nil)
+ let repoIdArg = RubyCommand.Argument(name: "repo_id", value: repoId, type: nil)
+ let repoGroupIdArg = RubyCommand.Argument(name: "repo_group_id", value: repoGroupId, type: nil)
+ let repoProjectNameArg = RubyCommand.Argument(name: "repo_project_name", value: repoProjectName, type: nil)
+ let repoProjectVersionArg = RubyCommand.Argument(name: "repo_project_version", value: repoProjectVersion, type: nil)
+ let repoClassifierArg = repoClassifier.asRubyArgument(name: "repo_classifier", type: nil)
+ let endpointArg = RubyCommand.Argument(name: "endpoint", value: endpoint, type: nil)
+ let mountPathArg = RubyCommand.Argument(name: "mount_path", value: mountPath, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let passwordArg = RubyCommand.Argument(name: "password", value: password, type: nil)
+ let sslVerifyArg = sslVerify.asRubyArgument(name: "ssl_verify", type: nil)
+ let nexusVersionArg = RubyCommand.Argument(name: "nexus_version", value: nexusVersion, type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let proxyUsernameArg = proxyUsername.asRubyArgument(name: "proxy_username", type: nil)
+ let proxyPasswordArg = proxyPassword.asRubyArgument(name: "proxy_password", type: nil)
+ let proxyAddressArg = proxyAddress.asRubyArgument(name: "proxy_address", type: nil)
+ let proxyPortArg = proxyPort.asRubyArgument(name: "proxy_port", type: nil)
+ let array: [RubyCommand.Argument?] = [fileArg,
+ repoIdArg,
+ repoGroupIdArg,
+ repoProjectNameArg,
+ repoProjectVersionArg,
+ repoClassifierArg,
+ endpointArg,
+ mountPathArg,
+ usernameArg,
+ passwordArg,
+ sslVerifyArg,
+ nexusVersionArg,
+ verboseArg,
+ proxyUsernameArg,
+ proxyPasswordArg,
+ proxyAddressArg,
+ proxyPortArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "nexus_upload", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Notarizes a macOS app
@@ -4988,26 +7073,41 @@
- bundleId: Bundle identifier to uniquely identify the package
- username: Apple ID username
- ascProvider: Provider short name for accounts associated with multiple providers
- printLog: Whether to print notarization log file, listing issues on failure and warnings on success
- verbose: Whether to log requests
+ - apiKeyPath: Path to AppStore Connect API key
*/
public func notarize(package: String,
- tryEarlyStapling: Bool = false,
- bundleId: String? = nil,
- username: String,
- ascProvider: String? = nil,
- printLog: Bool = false,
- verbose: Bool = false)
+ tryEarlyStapling: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ bundleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ascProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ printLog: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "notarize", className: nil, args: [RubyCommand.Argument(name: "package", value: package),
- RubyCommand.Argument(name: "try_early_stapling", value: tryEarlyStapling),
- RubyCommand.Argument(name: "bundle_id", value: bundleId),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "asc_provider", value: ascProvider),
- RubyCommand.Argument(name: "print_log", value: printLog),
- RubyCommand.Argument(name: "verbose", value: verbose)])
+ let packageArg = RubyCommand.Argument(name: "package", value: package, type: nil)
+ let tryEarlyStaplingArg = tryEarlyStapling.asRubyArgument(name: "try_early_stapling", type: nil)
+ let bundleIdArg = bundleId.asRubyArgument(name: "bundle_id", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let ascProviderArg = ascProvider.asRubyArgument(name: "asc_provider", type: nil)
+ let printLogArg = printLog.asRubyArgument(name: "print_log", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let array: [RubyCommand.Argument?] = [packageArg,
+ tryEarlyStaplingArg,
+ bundleIdArg,
+ usernameArg,
+ ascProviderArg,
+ printLogArg,
+ verboseArg,
+ apiKeyPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "notarize", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Display a macOS notification with custom message and title
@@ -5022,36 +7122,50 @@
- contentImage: The URL of an image to display attached to the notification (Mavericks+ only)
- open: URL of the resource to be opened when the notification is clicked
- execute: Shell command to run when the notification is clicked
*/
public func notification(title: String = "fastlane",
- subtitle: String? = nil,
+ subtitle: OptionalConfigValue<String?> = .fastlaneDefault(nil),
message: String,
- sound: String? = nil,
- activate: String? = nil,
- appIcon: String? = nil,
- contentImage: String? = nil,
- open: String? = nil,
- execute: String? = nil)
+ sound: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ activate: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIcon: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ contentImage: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ open: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ execute: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "notification", className: nil, args: [RubyCommand.Argument(name: "title", value: title),
- RubyCommand.Argument(name: "subtitle", value: subtitle),
- RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "sound", value: sound),
- RubyCommand.Argument(name: "activate", value: activate),
- RubyCommand.Argument(name: "app_icon", value: appIcon),
- RubyCommand.Argument(name: "content_image", value: contentImage),
- RubyCommand.Argument(name: "open", value: open),
- RubyCommand.Argument(name: "execute", value: execute)])
+ let titleArg = RubyCommand.Argument(name: "title", value: title, type: nil)
+ let subtitleArg = subtitle.asRubyArgument(name: "subtitle", type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let soundArg = sound.asRubyArgument(name: "sound", type: nil)
+ let activateArg = activate.asRubyArgument(name: "activate", type: nil)
+ let appIconArg = appIcon.asRubyArgument(name: "app_icon", type: nil)
+ let contentImageArg = contentImage.asRubyArgument(name: "content_image", type: nil)
+ let openArg = open.asRubyArgument(name: "open", type: nil)
+ let executeArg = execute.asRubyArgument(name: "execute", type: nil)
+ let array: [RubyCommand.Argument?] = [titleArg,
+ subtitleArg,
+ messageArg,
+ soundArg,
+ activateArg,
+ appIconArg,
+ contentImageArg,
+ openArg,
+ executeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "notification", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Shows a macOS notification - use `notification` instead
*/
public func notify() {
- let command = RubyCommand(commandID: "", methodName: "notify", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "notify", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Return the number of commits in current git branch
@@ -5060,22 +7174,27 @@
- returns: The total number of all commits in current git branch
You can use this action to get the number of commits of this branch. This is useful if you want to set the build number to the number of commits. See `fastlane actions number_of_commits` for more details.
*/
-@discardableResult public func numberOfCommits(all: Any? = nil) -> Int {
- let command = RubyCommand(commandID: "", methodName: "number_of_commits", className: nil, args: [RubyCommand.Argument(name: "all", value: all)])
+@discardableResult public func numberOfCommits(all: OptionalConfigValue<Bool?> = .fastlaneDefault(nil)) -> Int {
+ let allArg = all.asRubyArgument(name: "all", type: nil)
+ let array: [RubyCommand.Argument?] = [allArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "number_of_commits", className: nil, args: args)
return parseInt(fromString: runner.executeCommand(command))
}
/**
Lints implementation files with OCLint
- parameters:
- oclintPath: The path to oclint binary
- compileCommands: The json compilation database, use xctool reporter 'json-compilation-database'
- - selectReqex: Select all files matching this reqex
+ - selectReqex: **DEPRECATED!** Use `:select_regex` instead - Select all files matching this reqex
- selectRegex: Select all files matching this regex
- excludeRegex: Exclude all files matching this regex
- reportType: The type of the report (default: html)
- reportPath: The reports file path
- listEnabledRules: List enabled rules
@@ -5093,47 +7212,70 @@
Run the static analyzer tool [OCLint](http://oclint.org) for your project. You need to have a `compile_commands.json` file in your _fastlane_ directory or pass a path to your file.
*/
public func oclint(oclintPath: String = "oclint",
compileCommands: String = "compile_commands.json",
- selectReqex: Any? = nil,
- selectRegex: Any? = nil,
- excludeRegex: Any? = nil,
+ selectReqex: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ selectRegex: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ excludeRegex: OptionalConfigValue<String?> = .fastlaneDefault(nil),
reportType: String = "html",
- reportPath: String? = nil,
- listEnabledRules: Bool = false,
- rc: String? = nil,
- thresholds: Any? = nil,
- enableRules: Any? = nil,
- disableRules: Any? = nil,
- maxPriority1: Any? = nil,
- maxPriority2: Any? = nil,
- maxPriority3: Any? = nil,
- enableClangStaticAnalyzer: Bool = false,
- enableGlobalAnalysis: Bool = false,
- allowDuplicatedViolations: Bool = false,
- extraArg: String? = nil)
+ reportPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ listEnabledRules: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rc: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ thresholds: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ enableRules: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ disableRules: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ maxPriority1: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ maxPriority2: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ maxPriority3: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ enableClangStaticAnalyzer: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ enableGlobalAnalysis: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ allowDuplicatedViolations: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ extraArg: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "oclint", className: nil, args: [RubyCommand.Argument(name: "oclint_path", value: oclintPath),
- RubyCommand.Argument(name: "compile_commands", value: compileCommands),
- RubyCommand.Argument(name: "select_reqex", value: selectReqex),
- RubyCommand.Argument(name: "select_regex", value: selectRegex),
- RubyCommand.Argument(name: "exclude_regex", value: excludeRegex),
- RubyCommand.Argument(name: "report_type", value: reportType),
- RubyCommand.Argument(name: "report_path", value: reportPath),
- RubyCommand.Argument(name: "list_enabled_rules", value: listEnabledRules),
- RubyCommand.Argument(name: "rc", value: rc),
- RubyCommand.Argument(name: "thresholds", value: thresholds),
- RubyCommand.Argument(name: "enable_rules", value: enableRules),
- RubyCommand.Argument(name: "disable_rules", value: disableRules),
- RubyCommand.Argument(name: "max_priority_1", value: maxPriority1),
- RubyCommand.Argument(name: "max_priority_2", value: maxPriority2),
- RubyCommand.Argument(name: "max_priority_3", value: maxPriority3),
- RubyCommand.Argument(name: "enable_clang_static_analyzer", value: enableClangStaticAnalyzer),
- RubyCommand.Argument(name: "enable_global_analysis", value: enableGlobalAnalysis),
- RubyCommand.Argument(name: "allow_duplicated_violations", value: allowDuplicatedViolations),
- RubyCommand.Argument(name: "extra_arg", value: extraArg)])
+ let oclintPathArg = RubyCommand.Argument(name: "oclint_path", value: oclintPath, type: nil)
+ let compileCommandsArg = RubyCommand.Argument(name: "compile_commands", value: compileCommands, type: nil)
+ let selectReqexArg = selectReqex.asRubyArgument(name: "select_reqex", type: nil)
+ let selectRegexArg = selectRegex.asRubyArgument(name: "select_regex", type: nil)
+ let excludeRegexArg = excludeRegex.asRubyArgument(name: "exclude_regex", type: nil)
+ let reportTypeArg = RubyCommand.Argument(name: "report_type", value: reportType, type: nil)
+ let reportPathArg = reportPath.asRubyArgument(name: "report_path", type: nil)
+ let listEnabledRulesArg = listEnabledRules.asRubyArgument(name: "list_enabled_rules", type: nil)
+ let rcArg = rc.asRubyArgument(name: "rc", type: nil)
+ let thresholdsArg = thresholds.asRubyArgument(name: "thresholds", type: nil)
+ let enableRulesArg = enableRules.asRubyArgument(name: "enable_rules", type: nil)
+ let disableRulesArg = disableRules.asRubyArgument(name: "disable_rules", type: nil)
+ let maxPriority1Arg = maxPriority1.asRubyArgument(name: "max_priority_1", type: nil)
+ let maxPriority2Arg = maxPriority2.asRubyArgument(name: "max_priority_2", type: nil)
+ let maxPriority3Arg = maxPriority3.asRubyArgument(name: "max_priority_3", type: nil)
+ let enableClangStaticAnalyzerArg = enableClangStaticAnalyzer.asRubyArgument(name: "enable_clang_static_analyzer", type: nil)
+ let enableGlobalAnalysisArg = enableGlobalAnalysis.asRubyArgument(name: "enable_global_analysis", type: nil)
+ let allowDuplicatedViolationsArg = allowDuplicatedViolations.asRubyArgument(name: "allow_duplicated_violations", type: nil)
+ let extraArgArg = extraArg.asRubyArgument(name: "extra_arg", type: nil)
+ let array: [RubyCommand.Argument?] = [oclintPathArg,
+ compileCommandsArg,
+ selectReqexArg,
+ selectRegexArg,
+ excludeRegexArg,
+ reportTypeArg,
+ reportPathArg,
+ listEnabledRulesArg,
+ rcArg,
+ thresholdsArg,
+ enableRulesArg,
+ disableRulesArg,
+ maxPriority1Arg,
+ maxPriority2Arg,
+ maxPriority3Arg,
+ enableClangStaticAnalyzerArg,
+ enableGlobalAnalysisArg,
+ allowDuplicatedViolationsArg,
+ extraArgArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "oclint", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Create or update a new [OneSignal](https://onesignal.com/) application
@@ -5145,40 +7287,57 @@
- androidToken: ANDROID GCM KEY
- androidGcmSenderId: GCM SENDER ID
- apnsP12: APNS P12 File (in .p12 format)
- apnsP12Password: APNS P12 password
- apnsEnv: APNS environment
+ - organizationId: OneSignal Organization ID
You can use this action to automatically create or update a OneSignal application. You can also upload a `.p12` with password, a GCM key, or both.
*/
-public func onesignal(appId: String? = nil,
+public func onesignal(appId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
authToken: String,
- appName: String? = nil,
- androidToken: String? = nil,
- androidGcmSenderId: String? = nil,
- apnsP12: String? = nil,
- apnsP12Password: String? = nil,
- apnsEnv: String = "production")
+ appName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ androidToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ androidGcmSenderId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apnsP12: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apnsP12Password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apnsEnv: String = "production",
+ organizationId: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "onesignal", className: nil, args: [RubyCommand.Argument(name: "app_id", value: appId),
- RubyCommand.Argument(name: "auth_token", value: authToken),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "android_token", value: androidToken),
- RubyCommand.Argument(name: "android_gcm_sender_id", value: androidGcmSenderId),
- RubyCommand.Argument(name: "apns_p12", value: apnsP12),
- RubyCommand.Argument(name: "apns_p12_password", value: apnsP12Password),
- RubyCommand.Argument(name: "apns_env", value: apnsEnv)])
+ let appIdArg = appId.asRubyArgument(name: "app_id", type: nil)
+ let authTokenArg = RubyCommand.Argument(name: "auth_token", value: authToken, type: nil)
+ let appNameArg = appName.asRubyArgument(name: "app_name", type: nil)
+ let androidTokenArg = androidToken.asRubyArgument(name: "android_token", type: nil)
+ let androidGcmSenderIdArg = androidGcmSenderId.asRubyArgument(name: "android_gcm_sender_id", type: nil)
+ let apnsP12Arg = apnsP12.asRubyArgument(name: "apns_p12", type: nil)
+ let apnsP12PasswordArg = apnsP12Password.asRubyArgument(name: "apns_p12_password", type: nil)
+ let apnsEnvArg = RubyCommand.Argument(name: "apns_env", value: apnsEnv, type: nil)
+ let organizationIdArg = organizationId.asRubyArgument(name: "organization_id", type: nil)
+ let array: [RubyCommand.Argument?] = [appIdArg,
+ authTokenArg,
+ appNameArg,
+ androidTokenArg,
+ androidGcmSenderIdArg,
+ apnsP12Arg,
+ apnsP12PasswordArg,
+ apnsEnvArg,
+ organizationIdArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "onesignal", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will prevent reports from being uploaded when _fastlane_ crashes
_fastlane_ doesn't have crash reporting any more. Feel free to remove `opt_out_crash_reporting` from your Fastfile.
*/
public func optOutCrashReporting() {
- let command = RubyCommand(commandID: "", methodName: "opt_out_crash_reporting", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "opt_out_crash_reporting", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will stop uploading the information which actions were run
@@ -5186,11 +7345,12 @@
By default, _fastlane_ will track what actions are being used. No personal/sensitive information is recorded.
Learn more at [https://docs.fastlane.tools/#metrics](https://docs.fastlane.tools/#metrics).
Add `opt_out_usage` at the top of your Fastfile to disable metrics collection.
*/
public func optOutUsage() {
- let command = RubyCommand(commandID: "", methodName: "opt_out_usage", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "opt_out_usage", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `get_push_certificate` action
@@ -5221,39 +7381,57 @@
end|
)|
```|
>|
*/
-public func pem(development: Bool = false,
- websitePush: Bool = false,
- generateP12: Bool = true,
+public func pem(development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ websitePush: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateP12: OptionalConfigValue<Bool> = .fastlaneDefault(true),
activeDaysLimit: Int = 30,
- force: Bool = false,
- savePrivateKey: Bool = true,
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ savePrivateKey: OptionalConfigValue<Bool> = .fastlaneDefault(true),
appIdentifier: String,
username: String,
- teamId: String? = nil,
- teamName: String? = nil,
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
p12Password: String,
- pemName: String? = nil,
+ pemName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputPath: String = ".",
- newProfile: Any? = nil)
+ newProfile: ((String) -> Void)? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "pem", className: nil, args: [RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "website_push", value: websitePush),
- RubyCommand.Argument(name: "generate_p12", value: generateP12),
- RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "save_private_key", value: savePrivateKey),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "p12_password", value: p12Password),
- RubyCommand.Argument(name: "pem_name", value: pemName),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "new_profile", value: newProfile)])
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let websitePushArg = websitePush.asRubyArgument(name: "website_push", type: nil)
+ let generateP12Arg = generateP12.asRubyArgument(name: "generate_p12", type: nil)
+ let activeDaysLimitArg = RubyCommand.Argument(name: "active_days_limit", value: activeDaysLimit, type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let savePrivateKeyArg = savePrivateKey.asRubyArgument(name: "save_private_key", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let p12PasswordArg = RubyCommand.Argument(name: "p12_password", value: p12Password, type: nil)
+ let pemNameArg = pemName.asRubyArgument(name: "pem_name", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let newProfileArg = RubyCommand.Argument(name: "new_profile", value: newProfile, type: .stringClosure)
+ let array: [RubyCommand.Argument?] = [developmentArg,
+ websitePushArg,
+ generateP12Arg,
+ activeDaysLimitArg,
+ forceArg,
+ savePrivateKeyArg,
+ appIdentifierArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ p12PasswordArg,
+ pemNameArg,
+ outputPathArg,
+ newProfileArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "pem", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `upload_to_testflight` action
@@ -5276,104 +7454,148 @@
- skipSubmission: Skip the distributing action of pilot and only upload the ipa file
- skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
- updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
- distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
- usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
- - distributeExternal: Should the build be distributed to external testers?
- - notifyExternalTesters: Should notify external testers?
+ - distributeExternal: Should the build be distributed to external testers? If set to true, use of `groups` option is required
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
- appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
- buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
- expirePreviousBuilds: Should expire previous builds?
- firstName: The tester's first name
- lastName: The tester's last name
- email: The tester's email
- testersFilePath: Path to a CSV file of testers
- - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"`
+ - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
- teamId: The ID of your App Store Connect team if you're in multiple teams
- teamName: The name of your App Store Connect team if you're in multiple teams
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
+ - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
- waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
- rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
More details can be found on https://docs.fastlane.tools/actions/pilot/.
This integration will only do the TestFlight upload.
*/
-public func pilot(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- appIdentifier: String? = nil,
+public func pilot(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appPlatform: String = "ios",
- appleId: String? = nil,
- ipa: String? = nil,
- demoAccountRequired: Bool = false,
- betaAppReviewInfo: [String: Any]? = nil,
- localizedAppInfo: [String: Any]? = nil,
- betaAppDescription: String? = nil,
- betaAppFeedbackEmail: String? = nil,
- localizedBuildInfo: [String: Any]? = nil,
- changelog: String? = nil,
- skipSubmission: Bool = false,
- skipWaitingForBuildProcessing: Bool = false,
- updateBuildInfoOnUpload: Bool = false,
- distributeOnly: Bool = false,
- usesNonExemptEncryption: Bool = false,
- distributeExternal: Bool = false,
- notifyExternalTesters: Bool = true,
- appVersion: String? = nil,
- buildNumber: String? = nil,
- expirePreviousBuilds: Bool = false,
- firstName: String? = nil,
- lastName: String? = nil,
- email: String? = nil,
+ appleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ demoAccountRequired: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ betaAppReviewInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ localizedAppInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ betaAppDescription: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ betaAppFeedbackEmail: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ localizedBuildInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ changelog: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSubmission: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipWaitingForBuildProcessing: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ updateBuildInfoOnUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ usesNonExemptEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeExternal: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ notifyExternalTesters: Any? = nil,
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ expirePreviousBuilds: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ firstName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ lastName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ email: OptionalConfigValue<String?> = .fastlaneDefault(nil),
testersFilePath: String = "./testers.csv",
- groups: [String]? = nil,
+ groups: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
teamId: Any? = nil,
- teamName: String? = nil,
- devPortalTeamId: String? = nil,
- itcProvider: String? = nil,
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
waitProcessingInterval: Int = 30,
- waitForUploadedBuild: Bool = false,
- rejectBuildWaitingForReview: Bool = false)
+ waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "pilot", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_platform", value: appPlatform),
- RubyCommand.Argument(name: "apple_id", value: appleId),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired),
- RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo),
- RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo),
- RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription),
- RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail),
- RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo),
- RubyCommand.Argument(name: "changelog", value: changelog),
- RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
- RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
- RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
- RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
- RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
- RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
- RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds),
- RubyCommand.Argument(name: "first_name", value: firstName),
- RubyCommand.Argument(name: "last_name", value: lastName),
- RubyCommand.Argument(name: "email", value: email),
- RubyCommand.Argument(name: "testers_file_path", value: testersFilePath),
- RubyCommand.Argument(name: "groups", value: groups),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval),
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
- RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appPlatformArg = RubyCommand.Argument(name: "app_platform", value: appPlatform, type: nil)
+ let appleIdArg = appleId.asRubyArgument(name: "apple_id", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let demoAccountRequiredArg = demoAccountRequired.asRubyArgument(name: "demo_account_required", type: nil)
+ let betaAppReviewInfoArg = betaAppReviewInfo.asRubyArgument(name: "beta_app_review_info", type: nil)
+ let localizedAppInfoArg = localizedAppInfo.asRubyArgument(name: "localized_app_info", type: nil)
+ let betaAppDescriptionArg = betaAppDescription.asRubyArgument(name: "beta_app_description", type: nil)
+ let betaAppFeedbackEmailArg = betaAppFeedbackEmail.asRubyArgument(name: "beta_app_feedback_email", type: nil)
+ let localizedBuildInfoArg = localizedBuildInfo.asRubyArgument(name: "localized_build_info", type: nil)
+ let changelogArg = changelog.asRubyArgument(name: "changelog", type: nil)
+ let skipSubmissionArg = skipSubmission.asRubyArgument(name: "skip_submission", type: nil)
+ let skipWaitingForBuildProcessingArg = skipWaitingForBuildProcessing.asRubyArgument(name: "skip_waiting_for_build_processing", type: nil)
+ let updateBuildInfoOnUploadArg = updateBuildInfoOnUpload.asRubyArgument(name: "update_build_info_on_upload", type: nil)
+ let distributeOnlyArg = distributeOnly.asRubyArgument(name: "distribute_only", type: nil)
+ let usesNonExemptEncryptionArg = usesNonExemptEncryption.asRubyArgument(name: "uses_non_exempt_encryption", type: nil)
+ let distributeExternalArg = distributeExternal.asRubyArgument(name: "distribute_external", type: nil)
+ let notifyExternalTestersArg = RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters, type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let expirePreviousBuildsArg = expirePreviousBuilds.asRubyArgument(name: "expire_previous_builds", type: nil)
+ let firstNameArg = firstName.asRubyArgument(name: "first_name", type: nil)
+ let lastNameArg = lastName.asRubyArgument(name: "last_name", type: nil)
+ let emailArg = email.asRubyArgument(name: "email", type: nil)
+ let testersFilePathArg = RubyCommand.Argument(name: "testers_file_path", value: testersFilePath, type: nil)
+ let groupsArg = groups.asRubyArgument(name: "groups", type: nil)
+ let teamIdArg = RubyCommand.Argument(name: "team_id", value: teamId, type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let waitProcessingIntervalArg = RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval, type: nil)
+ let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
+ let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
+ let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appPlatformArg,
+ appleIdArg,
+ ipaArg,
+ demoAccountRequiredArg,
+ betaAppReviewInfoArg,
+ localizedAppInfoArg,
+ betaAppDescriptionArg,
+ betaAppFeedbackEmailArg,
+ localizedBuildInfoArg,
+ changelogArg,
+ skipSubmissionArg,
+ skipWaitingForBuildProcessingArg,
+ updateBuildInfoOnUploadArg,
+ distributeOnlyArg,
+ usesNonExemptEncryptionArg,
+ distributeExternalArg,
+ notifyExternalTestersArg,
+ appVersionArg,
+ buildNumberArg,
+ expirePreviousBuildsArg,
+ firstNameArg,
+ lastNameArg,
+ emailArg,
+ testersFilePathArg,
+ groupsArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ itcProviderArg,
+ waitProcessingIntervalArg,
+ waitProcessingTimeoutDurationArg,
+ waitForUploadedBuildArg,
+ rejectBuildWaitingForReviewArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "pilot", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
[31mNo description provided[0m
@@ -5385,13 +7607,20 @@
*/
public func pluginScores(outputPath: String,
templatePath: String,
cachePath: String)
{
- let command = RubyCommand(commandID: "", methodName: "plugin_scores", className: nil, args: [RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "template_path", value: templatePath),
- RubyCommand.Argument(name: "cache_path", value: cachePath)])
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let templatePathArg = RubyCommand.Argument(name: "template_path", value: templatePath, type: nil)
+ let cachePathArg = RubyCommand.Argument(name: "cache_path", value: cachePath, type: nil)
+ let array: [RubyCommand.Argument?] = [outputPathArg,
+ templatePathArg,
+ cachePathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "plugin_scores", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Pod lib lint
@@ -5418,51 +7647,75 @@
- skipTests: Lint skips building and running tests during validation (available since cocoapods >= 1.3)
- analyze: Validate with the Xcode Static Analysis tool (available since cocoapods >= 1.6.1)
Test the syntax of your Podfile by linting the pod against the files of its directory
*/
-public func podLibLint(useBundleExec: Bool = true,
- podspec: String? = nil,
- verbose: Bool? = nil,
- allowWarnings: Bool? = nil,
- sources: [String]? = nil,
- subspec: String? = nil,
- includePodspecs: String? = nil,
- externalPodspecs: String? = nil,
- swiftVersion: String? = nil,
- useLibraries: Bool = false,
- useModularHeaders: Bool = false,
- failFast: Bool = false,
- private: Bool = false,
- quick: Bool = false,
- noClean: Bool = false,
- noSubspecs: Bool = false,
- platforms: String? = nil,
- skipImportValidation: Bool = false,
- skipTests: Bool = false,
- analyze: Bool = false)
+public func podLibLint(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ podspec: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ allowWarnings: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ sources: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ subspec: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ includePodspecs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ externalPodspecs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ swiftVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useLibraries: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useModularHeaders: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ failFast: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ private: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ quick: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noClean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noSubspecs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ platforms: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipImportValidation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipTests: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ analyze: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "pod_lib_lint", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "podspec", value: podspec),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "allow_warnings", value: allowWarnings),
- RubyCommand.Argument(name: "sources", value: sources),
- RubyCommand.Argument(name: "subspec", value: subspec),
- RubyCommand.Argument(name: "include_podspecs", value: includePodspecs),
- RubyCommand.Argument(name: "external_podspecs", value: externalPodspecs),
- RubyCommand.Argument(name: "swift_version", value: swiftVersion),
- RubyCommand.Argument(name: "use_libraries", value: useLibraries),
- RubyCommand.Argument(name: "use_modular_headers", value: useModularHeaders),
- RubyCommand.Argument(name: "fail_fast", value: failFast),
- RubyCommand.Argument(name: "private", value: `private`),
- RubyCommand.Argument(name: "quick", value: quick),
- RubyCommand.Argument(name: "no_clean", value: noClean),
- RubyCommand.Argument(name: "no_subspecs", value: noSubspecs),
- RubyCommand.Argument(name: "platforms", value: platforms),
- RubyCommand.Argument(name: "skip_import_validation", value: skipImportValidation),
- RubyCommand.Argument(name: "skip_tests", value: skipTests),
- RubyCommand.Argument(name: "analyze", value: analyze)])
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let podspecArg = podspec.asRubyArgument(name: "podspec", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let allowWarningsArg = allowWarnings.asRubyArgument(name: "allow_warnings", type: nil)
+ let sourcesArg = sources.asRubyArgument(name: "sources", type: nil)
+ let subspecArg = subspec.asRubyArgument(name: "subspec", type: nil)
+ let includePodspecsArg = includePodspecs.asRubyArgument(name: "include_podspecs", type: nil)
+ let externalPodspecsArg = externalPodspecs.asRubyArgument(name: "external_podspecs", type: nil)
+ let swiftVersionArg = swiftVersion.asRubyArgument(name: "swift_version", type: nil)
+ let useLibrariesArg = useLibraries.asRubyArgument(name: "use_libraries", type: nil)
+ let useModularHeadersArg = useModularHeaders.asRubyArgument(name: "use_modular_headers", type: nil)
+ let failFastArg = failFast.asRubyArgument(name: "fail_fast", type: nil)
+ let privateArg = `private`.asRubyArgument(name: "private", type: nil)
+ let quickArg = quick.asRubyArgument(name: "quick", type: nil)
+ let noCleanArg = noClean.asRubyArgument(name: "no_clean", type: nil)
+ let noSubspecsArg = noSubspecs.asRubyArgument(name: "no_subspecs", type: nil)
+ let platformsArg = platforms.asRubyArgument(name: "platforms", type: nil)
+ let skipImportValidationArg = skipImportValidation.asRubyArgument(name: "skip_import_validation", type: nil)
+ let skipTestsArg = skipTests.asRubyArgument(name: "skip_tests", type: nil)
+ let analyzeArg = analyze.asRubyArgument(name: "analyze", type: nil)
+ let array: [RubyCommand.Argument?] = [useBundleExecArg,
+ podspecArg,
+ verboseArg,
+ allowWarningsArg,
+ sourcesArg,
+ subspecArg,
+ includePodspecsArg,
+ externalPodspecsArg,
+ swiftVersionArg,
+ useLibrariesArg,
+ useModularHeadersArg,
+ failFastArg,
+ privateArg,
+ quickArg,
+ noCleanArg,
+ noSubspecsArg,
+ platformsArg,
+ skipImportValidationArg,
+ skipTestsArg,
+ analyzeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "pod_lib_lint", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Push a Podspec to Trunk or a private repository
@@ -5475,39 +7728,59 @@
- useLibraries: Allow lint to use static libraries to install the spec
- sources: The sources of repos you want the pod spec to lint with, separated by commas
- swiftVersion: The SWIFT_VERSION that should be used to lint the spec. This takes precedence over a .swift-version file
- skipImportValidation: Lint skips validating that the pod can be imported
- skipTests: Lint skips building and running tests during validation
+ - useJson: Convert the podspec to JSON before pushing it to the repo
- verbose: Show more debugging information
- useModularHeaders: Use modular headers option during validation
- synchronous: If validation depends on other recently pushed pods, synchronize
*/
-public func podPush(useBundleExec: Bool = false,
- path: String? = nil,
- repo: String? = nil,
- allowWarnings: Bool? = nil,
- useLibraries: Bool? = nil,
- sources: [String]? = nil,
- swiftVersion: String? = nil,
- skipImportValidation: Bool? = nil,
- skipTests: Bool? = nil,
- verbose: Bool = false,
- useModularHeaders: Bool? = nil,
- synchronous: Bool? = nil)
+public func podPush(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ repo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ allowWarnings: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useLibraries: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ sources: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ swiftVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipImportValidation: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ skipTests: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useJson: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useModularHeaders: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ synchronous: OptionalConfigValue<Bool?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "pod_push", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "repo", value: repo),
- RubyCommand.Argument(name: "allow_warnings", value: allowWarnings),
- RubyCommand.Argument(name: "use_libraries", value: useLibraries),
- RubyCommand.Argument(name: "sources", value: sources),
- RubyCommand.Argument(name: "swift_version", value: swiftVersion),
- RubyCommand.Argument(name: "skip_import_validation", value: skipImportValidation),
- RubyCommand.Argument(name: "skip_tests", value: skipTests),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "use_modular_headers", value: useModularHeaders),
- RubyCommand.Argument(name: "synchronous", value: synchronous)])
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let repoArg = repo.asRubyArgument(name: "repo", type: nil)
+ let allowWarningsArg = allowWarnings.asRubyArgument(name: "allow_warnings", type: nil)
+ let useLibrariesArg = useLibraries.asRubyArgument(name: "use_libraries", type: nil)
+ let sourcesArg = sources.asRubyArgument(name: "sources", type: nil)
+ let swiftVersionArg = swiftVersion.asRubyArgument(name: "swift_version", type: nil)
+ let skipImportValidationArg = skipImportValidation.asRubyArgument(name: "skip_import_validation", type: nil)
+ let skipTestsArg = skipTests.asRubyArgument(name: "skip_tests", type: nil)
+ let useJsonArg = useJson.asRubyArgument(name: "use_json", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let useModularHeadersArg = useModularHeaders.asRubyArgument(name: "use_modular_headers", type: nil)
+ let synchronousArg = synchronous.asRubyArgument(name: "synchronous", type: nil)
+ let array: [RubyCommand.Argument?] = [useBundleExecArg,
+ pathArg,
+ repoArg,
+ allowWarningsArg,
+ useLibrariesArg,
+ sourcesArg,
+ swiftVersionArg,
+ skipImportValidationArg,
+ skipTestsArg,
+ useJsonArg,
+ verboseArg,
+ useModularHeadersArg,
+ synchronousArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "pod_push", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Creates or updates an item within your Podio app
@@ -5529,19 +7802,30 @@
clientSecret: String,
appId: String,
appToken: String,
identifyingField: String,
identifyingValue: String,
- otherFields: [String: Any]? = nil)
+ otherFields: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "podio_item", className: nil, args: [RubyCommand.Argument(name: "client_id", value: clientId),
- RubyCommand.Argument(name: "client_secret", value: clientSecret),
- RubyCommand.Argument(name: "app_id", value: appId),
- RubyCommand.Argument(name: "app_token", value: appToken),
- RubyCommand.Argument(name: "identifying_field", value: identifyingField),
- RubyCommand.Argument(name: "identifying_value", value: identifyingValue),
- RubyCommand.Argument(name: "other_fields", value: otherFields)])
+ let clientIdArg = RubyCommand.Argument(name: "client_id", value: clientId, type: nil)
+ let clientSecretArg = RubyCommand.Argument(name: "client_secret", value: clientSecret, type: nil)
+ let appIdArg = RubyCommand.Argument(name: "app_id", value: appId, type: nil)
+ let appTokenArg = RubyCommand.Argument(name: "app_token", value: appToken, type: nil)
+ let identifyingFieldArg = RubyCommand.Argument(name: "identifying_field", value: identifyingField, type: nil)
+ let identifyingValueArg = RubyCommand.Argument(name: "identifying_value", value: identifyingValue, type: nil)
+ let otherFieldsArg = otherFields.asRubyArgument(name: "other_fields", type: nil)
+ let array: [RubyCommand.Argument?] = [clientIdArg,
+ clientSecretArg,
+ appIdArg,
+ appTokenArg,
+ identifyingFieldArg,
+ identifyingValueArg,
+ otherFieldsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "podio_item", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `check_app_store_metadata` action
@@ -5554,47 +7838,70 @@
- teamId: The ID of your App Store Connect team if you're in multiple teams
- teamName: The name of your App Store Connect team if you're in multiple teams
- platform: The platform to use (optional)
- defaultRuleLevel: The default rule level unless otherwise configured
- includeInAppPurchases: Should check in-app purchases?
+ - useLive: Should force check live app?
- freeStuffInIap: using text indicating that your IAP is free
- returns: true if precheck passes, else, false
More information: https://fastlane.tools/precheck
*/
-public func precheck(apiKeyPath: Any? = precheckfile.apiKeyPath,
- apiKey: [String: Any]? = precheckfile.apiKey,
- appIdentifier: Any = precheckfile.appIdentifier,
- username: Any = precheckfile.username,
- teamId: Any? = precheckfile.teamId,
- teamName: Any? = precheckfile.teamName,
- platform: Any = precheckfile.platform,
- defaultRuleLevel: Any = precheckfile.defaultRuleLevel,
- includeInAppPurchases: Bool = precheckfile.includeInAppPurchases,
- freeStuffInIap: Any? = precheckfile.freeStuffInIap)
+@discardableResult public func precheck(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(precheckfile.apiKeyPath),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(precheckfile.apiKey),
+ appIdentifier: String = precheckfile.appIdentifier,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(precheckfile.username),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(precheckfile.teamId),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(precheckfile.teamName),
+ platform: String = precheckfile.platform,
+ defaultRuleLevel: Any = precheckfile.defaultRuleLevel,
+ includeInAppPurchases: OptionalConfigValue<Bool> = .fastlaneDefault(precheckfile.includeInAppPurchases),
+ useLive: OptionalConfigValue<Bool> = .fastlaneDefault(precheckfile.useLive),
+ freeStuffInIap: Any? = precheckfile.freeStuffInIap) -> Bool
{
- let command = RubyCommand(commandID: "", methodName: "precheck", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel),
- RubyCommand.Argument(name: "include_in_app_purchases", value: includeInAppPurchases),
- RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap)])
- _ = runner.executeCommand(command)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let defaultRuleLevelArg = RubyCommand.Argument(name: "default_rule_level", value: defaultRuleLevel, type: nil)
+ let includeInAppPurchasesArg = includeInAppPurchases.asRubyArgument(name: "include_in_app_purchases", type: nil)
+ let useLiveArg = useLive.asRubyArgument(name: "use_live", type: nil)
+ let freeStuffInIapArg = RubyCommand.Argument(name: "free_stuff_in_iap", value: freeStuffInIap, type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ appIdentifierArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ platformArg,
+ defaultRuleLevelArg,
+ includeInAppPurchasesArg,
+ useLiveArg,
+ freeStuffInIapArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "precheck", className: nil, args: args)
+ return parseBool(fromString: runner.executeCommand(command))
}
/**
Alias for the `puts` action
- parameter message: Message to be printed out
*/
-public func println(message: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "println", className: nil, args: [RubyCommand.Argument(name: "message", value: message)])
+public func println(message: OptionalConfigValue<String?> = .fastlaneDefault(nil)) {
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "println", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `create_app_online` action
@@ -5607,15 +7914,15 @@
- appVersion: Initial version number (e.g. '1.0')
- sku: SKU Number (e.g. '1234')
- platform: The platform to use (optional)
- platforms: The platforms to use (optional)
- language: Primary Language (e.g. 'en-US', 'fr-FR')
- - companyName: The name of your company. Only required if it's the first app you create
+ - companyName: The name of your company. It's used to set company name on App Store Connect team's app pages. Only required if it's the first app you create
- skipItc: Skip the creation of the app on App Store Connect
- itcUsers: Array of App Store Connect users. If provided, you can limit access to this newly created app for users with the App Manager, Developer, Marketer or Sales roles
- enabledFeatures: **DEPRECATED!** Please use `enable_services` instead - Array with Spaceship App Services
- - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), data_protection: (complete|unlessopen|untilfirstauth), game_center: (on|off), health_kit: (on|off), home_kit: (on|off), hotspot: (on|off), icloud: (legacy|cloudkit), in_app_purchase: (on|off), inter_app_audio: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), siri_kit: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off))
+ - enableServices: Array with Spaceship App Services (e.g. access_wifi: (on|off), app_attest: (on|off), app_group: (on|off), apple_pay: (on|off), associated_domains: (on|off), auto_fill_credential: (on|off), class_kit: (on|off), icloud: (legacy|cloudkit), custom_network_protocol: (on|off), data_protection: (complete|unlessopen|untilfirstauth), extended_virtual_address_space: (on|off), family_controls: (on|off), file_provider_testing_mode: (on|off), fonts: (on|off), game_center: (ios|mac), health_kit: (on|off), hls_interstitial_preview: (on|off), home_kit: (on|off), hotspot: (on|off), in_app_purchase: (on|off), inter_app_audio: (on|off), low_latency_hls: (on|off), managed_associated_domains: (on|off), maps: (on|off), multipath: (on|off), network_extension: (on|off), nfc_tag_reading: (on|off), personal_vpn: (on|off), passbook: (on|off), push_notification: (on|off), sign_in_with_apple: (on), siri_kit: (on|off), system_extension: (on|off), user_management: (on|off), vpn_configuration: (on|off), wallet: (on|off), wireless_accessory: (on|off), car_play_audio_app: (on|off), car_play_messaging_app: (on|off), car_play_navigation_app: (on|off), car_play_voip_calling_app: (on|off), critical_alerts: (on|off), hotspot_helper: (on|off), driver_kit: (on|off), driver_kit_endpoint_security: (on|off), driver_kit_family_hid_device: (on|off), driver_kit_family_networking: (on|off), driver_kit_family_serial: (on|off), driver_kit_hid_event_service: (on|off), driver_kit_transport_hid: (on|off), multitasking_camera_access: (on|off), sf_universal_link_api: (on|off), vp9_decoder: (on|off), music_kit: (on|off), shazam_kit: (on|off), communication_notifications: (on|off), group_activities: (on|off), health_kit_estimate_recalibration: (on|off), time_sensitive_notifications: (on|off))
- skipDevcenter: Skip the creation of the app on the Apple Developer Portal
- teamId: The ID of your Developer Portal team if you're in multiple teams
- teamName: The name of your Developer Portal team if you're in multiple teams
- itcTeamId: The ID of your App Store Connect team if you're in multiple teams
- itcTeamName: The name of your App Store Connect team if you're in multiple teams
@@ -5624,47 +7931,70 @@
If the app already exists, `create_app_online` will not do anything.
For more information about _produce_, visit its documentation page: [https://docs.fastlane.tools/actions/produce/](https://docs.fastlane.tools/actions/produce/).
*/
public func produce(username: String,
appIdentifier: String,
- bundleIdentifierSuffix: String? = nil,
+ bundleIdentifierSuffix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appName: String,
- appVersion: String? = nil,
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
sku: String,
platform: String = "ios",
- platforms: [String]? = nil,
+ platforms: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
language: String = "English",
- companyName: String? = nil,
- skipItc: Bool = false,
- itcUsers: [String]? = nil,
+ companyName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipItc: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ itcUsers: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
enabledFeatures: [String: Any] = [:],
enableServices: [String: Any] = [:],
- skipDevcenter: Bool = false,
- teamId: String? = nil,
- teamName: String? = nil,
+ skipDevcenter: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
itcTeamId: Any? = nil,
- itcTeamName: String? = nil)
+ itcTeamName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "produce", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "bundle_identifier_suffix", value: bundleIdentifierSuffix),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "sku", value: sku),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "platforms", value: platforms),
- RubyCommand.Argument(name: "language", value: language),
- RubyCommand.Argument(name: "company_name", value: companyName),
- RubyCommand.Argument(name: "skip_itc", value: skipItc),
- RubyCommand.Argument(name: "itc_users", value: itcUsers),
- RubyCommand.Argument(name: "enabled_features", value: enabledFeatures),
- RubyCommand.Argument(name: "enable_services", value: enableServices),
- RubyCommand.Argument(name: "skip_devcenter", value: skipDevcenter),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "itc_team_id", value: itcTeamId),
- RubyCommand.Argument(name: "itc_team_name", value: itcTeamName)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let bundleIdentifierSuffixArg = bundleIdentifierSuffix.asRubyArgument(name: "bundle_identifier_suffix", type: nil)
+ let appNameArg = RubyCommand.Argument(name: "app_name", value: appName, type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let skuArg = RubyCommand.Argument(name: "sku", value: sku, type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let platformsArg = platforms.asRubyArgument(name: "platforms", type: nil)
+ let languageArg = RubyCommand.Argument(name: "language", value: language, type: nil)
+ let companyNameArg = companyName.asRubyArgument(name: "company_name", type: nil)
+ let skipItcArg = skipItc.asRubyArgument(name: "skip_itc", type: nil)
+ let itcUsersArg = itcUsers.asRubyArgument(name: "itc_users", type: nil)
+ let enabledFeaturesArg = RubyCommand.Argument(name: "enabled_features", value: enabledFeatures, type: nil)
+ let enableServicesArg = RubyCommand.Argument(name: "enable_services", value: enableServices, type: nil)
+ let skipDevcenterArg = skipDevcenter.asRubyArgument(name: "skip_devcenter", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let itcTeamIdArg = RubyCommand.Argument(name: "itc_team_id", value: itcTeamId, type: nil)
+ let itcTeamNameArg = itcTeamName.asRubyArgument(name: "itc_team_name", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ bundleIdentifierSuffixArg,
+ appNameArg,
+ appVersionArg,
+ skuArg,
+ platformArg,
+ platformsArg,
+ languageArg,
+ companyNameArg,
+ skipItcArg,
+ itcUsersArg,
+ enabledFeaturesArg,
+ enableServicesArg,
+ skipDevcenterArg,
+ teamIdArg,
+ teamNameArg,
+ itcTeamIdArg,
+ itcTeamNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "produce", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Ask the user for a value or for confirmation
@@ -5680,19 +8010,28 @@
When this is executed on a CI service, the passed `ci_input` value will be returned.
This action also supports multi-line inputs using the `multi_line_end_keyword` option.
*/
@discardableResult public func prompt(text: String = "Please enter some text: ",
ciInput: String = "",
- boolean: Bool = false,
- secureText: Bool = false,
- multiLineEndKeyword: String? = nil) -> String
+ boolean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ secureText: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ multiLineEndKeyword: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "prompt", className: nil, args: [RubyCommand.Argument(name: "text", value: text),
- RubyCommand.Argument(name: "ci_input", value: ciInput),
- RubyCommand.Argument(name: "boolean", value: boolean),
- RubyCommand.Argument(name: "secure_text", value: secureText),
- RubyCommand.Argument(name: "multi_line_end_keyword", value: multiLineEndKeyword)])
+ let textArg = RubyCommand.Argument(name: "text", value: text, type: nil)
+ let ciInputArg = RubyCommand.Argument(name: "ci_input", value: ciInput, type: nil)
+ let booleanArg = boolean.asRubyArgument(name: "boolean", type: nil)
+ let secureTextArg = secureText.asRubyArgument(name: "secure_text", type: nil)
+ let multiLineEndKeywordArg = multiLineEndKeyword.asRubyArgument(name: "multi_line_end_keyword", type: nil)
+ let array: [RubyCommand.Argument?] = [textArg,
+ ciInputArg,
+ booleanArg,
+ secureTextArg,
+ multiLineEndKeywordArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "prompt", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Push local tags to the remote - this will only push tags
@@ -5702,17 +8041,24 @@
- remote: The remote to push tags to
- tag: The tag to push to remote
If you only want to push the tags and nothing else, you can use the `push_git_tags` action
*/
-public func pushGitTags(force: Bool = false,
+public func pushGitTags(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
remote: String = "origin",
- tag: String? = nil)
+ tag: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "push_git_tags", className: nil, args: [RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "remote", value: remote),
- RubyCommand.Argument(name: "tag", value: tag)])
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let remoteArg = RubyCommand.Argument(name: "remote", value: remote, type: nil)
+ let tagArg = tag.asRubyArgument(name: "tag", type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg,
+ remoteArg,
+ tagArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "push_git_tags", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Push local changes to the remote branch
@@ -5724,41 +8070,62 @@
- forceWithLease: Force push with lease to remote
- tags: Whether tags are pushed to remote
- remote: The remote to push to
- noVerify: Whether or not to use --no-verify
- setUpstream: Whether or not to use --set-upstream
+ - pushOptions: Array of strings to be passed using the '--push-option' option
Lets you push your local commits to a remote git repo. Useful if you make local changes such as adding a version bump commit (using `commit_version_bump`) or a git tag (using 'add_git_tag') on a CI server, and you want to push those changes back to your canonical/main repo.
If this is a new branch, use the `set_upstream` option to set the remote branch as upstream.
*/
-public func pushToGitRemote(localBranch: String? = nil,
- remoteBranch: String? = nil,
- force: Bool = false,
- forceWithLease: Bool = false,
- tags: Bool = true,
+public func pushToGitRemote(localBranch: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ remoteBranch: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ forceWithLease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ tags: OptionalConfigValue<Bool> = .fastlaneDefault(true),
remote: String = "origin",
- noVerify: Bool = false,
- setUpstream: Bool = false)
+ noVerify: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ setUpstream: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ pushOptions: [String] = [])
{
- let command = RubyCommand(commandID: "", methodName: "push_to_git_remote", className: nil, args: [RubyCommand.Argument(name: "local_branch", value: localBranch),
- RubyCommand.Argument(name: "remote_branch", value: remoteBranch),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "force_with_lease", value: forceWithLease),
- RubyCommand.Argument(name: "tags", value: tags),
- RubyCommand.Argument(name: "remote", value: remote),
- RubyCommand.Argument(name: "no_verify", value: noVerify),
- RubyCommand.Argument(name: "set_upstream", value: setUpstream)])
+ let localBranchArg = localBranch.asRubyArgument(name: "local_branch", type: nil)
+ let remoteBranchArg = remoteBranch.asRubyArgument(name: "remote_branch", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let forceWithLeaseArg = forceWithLease.asRubyArgument(name: "force_with_lease", type: nil)
+ let tagsArg = tags.asRubyArgument(name: "tags", type: nil)
+ let remoteArg = RubyCommand.Argument(name: "remote", value: remote, type: nil)
+ let noVerifyArg = noVerify.asRubyArgument(name: "no_verify", type: nil)
+ let setUpstreamArg = setUpstream.asRubyArgument(name: "set_upstream", type: nil)
+ let pushOptionsArg = RubyCommand.Argument(name: "push_options", value: pushOptions, type: nil)
+ let array: [RubyCommand.Argument?] = [localBranchArg,
+ remoteBranchArg,
+ forceArg,
+ forceWithLeaseArg,
+ tagsArg,
+ remoteArg,
+ noVerifyArg,
+ setUpstreamArg,
+ pushOptionsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "push_to_git_remote", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Prints out the given text
- parameter message: Message to be printed out
*/
-public func puts(message: String? = nil) {
- let command = RubyCommand(commandID: "", methodName: "puts", className: nil, args: [RubyCommand.Argument(name: "message", value: message)])
+public func puts(message: OptionalConfigValue<String?> = .fastlaneDefault(nil)) {
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "puts", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Loads a CocoaPods spec as JSON
@@ -5769,21 +8136,31 @@
Loads the specified (or the first found) podspec in the folder as JSON, so that you can inspect its `version`, `files` etc.
This can be useful when basing your release process on the version string only stored in one place - in the podspec.
As one of the first steps you'd read the podspec and its version and the rest of the workflow can use that version string (when e.g. creating a new git tag or a GitHub Release).
*/
@discardableResult public func readPodspec(path: String) -> [String: String] {
- let command = RubyCommand(commandID: "", methodName: "read_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "read_podspec", className: nil, args: args)
return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Recreate not shared Xcode project schemes
- parameter project: The Xcode project
*/
public func recreateSchemes(project: String) {
- let command = RubyCommand(commandID: "", methodName: "recreate_schemes", className: nil, args: [RubyCommand.Argument(name: "project", value: project)])
+ let projectArg = RubyCommand.Argument(name: "project", value: project, type: nil)
+ let array: [RubyCommand.Argument?] = [projectArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "recreate_schemes", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Registers a new device to the Apple Dev Portal
@@ -5803,24 +8180,36 @@
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.
*/
@discardableResult public func registerDevice(name: String,
platform: String = "ios",
udid: String,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- teamId: String? = nil,
- teamName: String? = nil,
- username: String? = nil) -> String
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: [RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "udid", value: udid),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "username", value: username)])
+ let nameArg = RubyCommand.Argument(name: "name", value: name, type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let udidArg = RubyCommand.Argument(name: "udid", value: udid, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let array: [RubyCommand.Argument?] = [nameArg,
+ platformArg,
+ udidArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ teamIdArg,
+ teamNameArg,
+ usernameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "register_device", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Registers new devices to the Apple Dev Portal
@@ -5837,27 +8226,39 @@
This will register iOS/Mac devices with the Developer Portal so that you can include them in your provisioning profiles.
This is an optimistic action, in that it will only ever add new devices to the member center, and never remove devices. If a device which has already been registered within the member center is not passed to this action, it will be left alone in the member center and continue to work.
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, or by setting the env variable `ENV['DELIVER_USER']`.
*/
-public func registerDevices(devices: [String: Any]? = nil,
- devicesFile: String? = nil,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- teamId: String? = nil,
- teamName: String? = nil,
- username: String,
+public func registerDevices(devices: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ devicesFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios")
{
- let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: [RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "devices_file", value: devicesFile),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "platform", value: platform)])
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let devicesFileArg = devicesFile.asRubyArgument(name: "devices_file", type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let array: [RubyCommand.Argument?] = [devicesArg,
+ devicesFileArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ teamIdArg,
+ teamNameArg,
+ usernameArg,
+ platformArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "register_devices", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Resets git repo to a clean state by discarding uncommitted changes
@@ -5874,36 +8275,51 @@
It's a pretty drastic action so it comes with a sort of safety latch. It will only proceed with the reset if this condition is met:|
|
>- You have called the `ensure_git_status_clean` action prior to calling this action. This ensures that your repo started off in a clean state, so the only things that will get destroyed by this action are files that are created as a byproduct of the fastlane run.|
>|
*/
-public func resetGitRepo(files: Any? = nil,
- force: Bool = false,
- skipClean: Bool = false,
- disregardGitignore: Bool = true,
- exclude: Any? = nil)
+public func resetGitRepo(files: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipClean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disregardGitignore: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ exclude: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "reset_git_repo", className: nil, args: [RubyCommand.Argument(name: "files", value: files),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "skip_clean", value: skipClean),
- RubyCommand.Argument(name: "disregard_gitignore", value: disregardGitignore),
- RubyCommand.Argument(name: "exclude", value: exclude)])
+ let filesArg = files.asRubyArgument(name: "files", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let skipCleanArg = skipClean.asRubyArgument(name: "skip_clean", type: nil)
+ let disregardGitignoreArg = disregardGitignore.asRubyArgument(name: "disregard_gitignore", type: nil)
+ let excludeArg = exclude.asRubyArgument(name: "exclude", type: nil)
+ let array: [RubyCommand.Argument?] = [filesArg,
+ forceArg,
+ skipCleanArg,
+ disregardGitignoreArg,
+ excludeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "reset_git_repo", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Shutdown and reset running simulators
- parameters:
- ios: **DEPRECATED!** Use `:os_versions` instead - Which OS versions of Simulators you want to reset content and settings, this does not remove/recreate the simulators
- osVersions: Which OS versions of Simulators you want to reset content and settings, this does not remove/recreate the simulators
*/
-public func resetSimulatorContents(ios: [String]? = nil,
- osVersions: [String]? = nil)
+public func resetSimulatorContents(ios: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ osVersions: OptionalConfigValue<[String]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "reset_simulator_contents", className: nil, args: [RubyCommand.Argument(name: "ios", value: ios),
- RubyCommand.Argument(name: "os_versions", value: osVersions)])
+ let iosArg = ios.asRubyArgument(name: "ios", type: nil)
+ let osVersionsArg = osVersions.asRubyArgument(name: "os_versions", type: nil)
+ let array: [RubyCommand.Argument?] = [iosArg,
+ osVersionsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "reset_simulator_contents", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Codesign an existing ipa file
@@ -5921,59 +8337,81 @@
- useAppEntitlements: Extract app bundle codesigning entitlements and combine with entitlements from new provisioning profile
- keychainPath: Provide a path to a keychain file that should be used by `/usr/bin/codesign`
*/
public func resign(ipa: String,
signingIdentity: String,
- entitlements: String? = nil,
- provisioningProfile: Any,
- version: String? = nil,
- displayName: String? = nil,
- shortVersion: String? = nil,
- bundleVersion: String? = nil,
- bundleId: String? = nil,
- useAppEntitlements: Any? = nil,
- keychainPath: String? = nil)
+ entitlements: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ provisioningProfile: String,
+ version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ displayName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ shortVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useAppEntitlements: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "resign", className: nil, args: [RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "signing_identity", value: signingIdentity),
- RubyCommand.Argument(name: "entitlements", value: entitlements),
- RubyCommand.Argument(name: "provisioning_profile", value: provisioningProfile),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "display_name", value: displayName),
- RubyCommand.Argument(name: "short_version", value: shortVersion),
- RubyCommand.Argument(name: "bundle_version", value: bundleVersion),
- RubyCommand.Argument(name: "bundle_id", value: bundleId),
- RubyCommand.Argument(name: "use_app_entitlements", value: useAppEntitlements),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath)])
+ let ipaArg = RubyCommand.Argument(name: "ipa", value: ipa, type: nil)
+ let signingIdentityArg = RubyCommand.Argument(name: "signing_identity", value: signingIdentity, type: nil)
+ let entitlementsArg = entitlements.asRubyArgument(name: "entitlements", type: nil)
+ let provisioningProfileArg = RubyCommand.Argument(name: "provisioning_profile", value: provisioningProfile, type: nil)
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let displayNameArg = displayName.asRubyArgument(name: "display_name", type: nil)
+ let shortVersionArg = shortVersion.asRubyArgument(name: "short_version", type: nil)
+ let bundleVersionArg = bundleVersion.asRubyArgument(name: "bundle_version", type: nil)
+ let bundleIdArg = bundleId.asRubyArgument(name: "bundle_id", type: nil)
+ let useAppEntitlementsArg = useAppEntitlements.asRubyArgument(name: "use_app_entitlements", type: nil)
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
+ let array: [RubyCommand.Argument?] = [ipaArg,
+ signingIdentityArg,
+ entitlementsArg,
+ provisioningProfileArg,
+ versionArg,
+ displayNameArg,
+ shortVersionArg,
+ bundleVersionArg,
+ bundleIdArg,
+ useAppEntitlementsArg,
+ keychainPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "resign", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action restore your file that was backuped with the `backup_file` action
- parameter path: Original file name you want to restore
*/
public func restoreFile(path: String) {
- let command = RubyCommand(commandID: "", methodName: "restore_file", className: nil, args: [RubyCommand.Argument(name: "path", value: path)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "restore_file", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Outputs ascii-art for a rocket 🚀
Print an ascii Rocket :rocket:. Useful after using _crashlytics_ or _pilot_ to indicate that your new build has been shipped to outer-space.
*/
@discardableResult public func rocket() -> String {
- let command = RubyCommand(commandID: "", methodName: "rocket", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "rocket", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Run tests using rspec
*/
public func rspec() {
- let command = RubyCommand(commandID: "", methodName: "rspec", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "rspec", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Rsync files from :source to :destination
@@ -5987,32 +8425,41 @@
*/
public func rsync(extra: String = "-av",
source: String,
destination: String)
{
- let command = RubyCommand(commandID: "", methodName: "rsync", className: nil, args: [RubyCommand.Argument(name: "extra", value: extra),
- RubyCommand.Argument(name: "source", value: source),
- RubyCommand.Argument(name: "destination", value: destination)])
+ let extraArg = RubyCommand.Argument(name: "extra", value: extra, type: nil)
+ let sourceArg = RubyCommand.Argument(name: "source", value: source, type: nil)
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
+ let array: [RubyCommand.Argument?] = [extraArg,
+ sourceArg,
+ destinationArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "rsync", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs the code style checks
*/
public func rubocop() {
- let command = RubyCommand(commandID: "", methodName: "rubocop", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "rubocop", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Verifies the minimum ruby version required
Add this to your `Fastfile` to require a certain version of _ruby_.
Put it at the top of your `Fastfile` to ensure that _fastlane_ is executed appropriately.
*/
public func rubyVersion() {
- let command = RubyCommand(commandID: "", methodName: "ruby_version", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "ruby_version", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Easily run tests of your iOS app (via _scan_)
@@ -6022,10 +8469,11 @@
- project: Path to the project file
- scheme: The project's scheme. Make sure it's marked as `Shared`
- device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
- devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
- skipDetectDevices: Should skip auto detecting of devices if none were specified
+ - ensureDevicesFound: Should fail if devices not found
- forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
- resetSimulator: Enabling this option will automatically erase the simulator before running the application
- disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
- prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
- reinstallApp: Enabling this option will automatically uninstall the application before running it
@@ -6052,10 +8500,11 @@
- suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
- formatter: A custom xcpretty formatter to use
- xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
- derivedDataPath: The directory where build products and other derived data will go
- shouldZipBuildProducts: Should zip the derived data build products and place in output path?
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
- resultBundle: Should an Xcode result bundle be generated in the output directory
- useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
- concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
- maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations
- disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing
@@ -6074,145 +8523,242 @@
- slackUseWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false)
- slackUsername: Overrides the webhook's username property if slack_use_webhook_configured_username_and_icon is false
- slackIconUrl: Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false
- skipSlack: Don't publish to slack, even when an URL is given
- slackOnlyOnFailure: Only post on Slack if the tests fail
+ - slackDefaultPayloads: Specifies default payloads to include in Slack messages. For more info visit https://docs.fastlane.tools/actions/slack
- destination: Use only if you're a pro, use the other options instead
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
- customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
- xcodebuildCommand: Allows for override of the default `xcodebuild` command
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
+ - numberOfRetries: The number of times a test can fail before scan should stop retrying
- failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
More information: https://docs.fastlane.tools/actions/scan/
*/
-public func runTests(workspace: String? = nil,
- project: String? = nil,
- scheme: String? = nil,
- device: String? = nil,
- devices: [String]? = nil,
- skipDetectDevices: Bool = false,
- forceQuitSimulator: Bool = false,
- resetSimulator: Bool = false,
- disableSlideToType: Bool = true,
- prelaunchSimulator: Bool? = nil,
- reinstallApp: Bool = false,
- appIdentifier: String? = nil,
+public func runTests(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ device: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devices: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ skipDetectDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ ensureDevicesFound: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ forceQuitSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resetSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disableSlideToType: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ prelaunchSimulator: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
onlyTesting: Any? = nil,
skipTesting: Any? = nil,
- testplan: String? = nil,
+ testplan: OptionalConfigValue<String?> = .fastlaneDefault(nil),
onlyTestConfigurations: Any? = nil,
skipTestConfigurations: Any? = nil,
- xctestrun: String? = nil,
+ xctestrun: OptionalConfigValue<String?> = .fastlaneDefault(nil),
toolchain: Any? = nil,
- clean: Bool = false,
- codeCoverage: Bool? = nil,
- addressSanitizer: Bool? = nil,
- threadSanitizer: Bool? = nil,
- openReport: Bool = false,
- disableXcpretty: Bool? = nil,
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ codeCoverage: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ addressSanitizer: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ threadSanitizer: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ openReport: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
outputDirectory: String = "./test_output",
- outputStyle: String? = nil,
+ outputStyle: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputTypes: String = "html,junit",
- outputFiles: String? = nil,
+ outputFiles: OptionalConfigValue<String?> = .fastlaneDefault(nil),
buildlogPath: String = "~/Library/Logs/scan",
- includeSimulatorLogs: Bool = false,
- suppressXcodeOutput: Bool? = nil,
- formatter: String? = nil,
- xcprettyArgs: String? = nil,
- derivedDataPath: String? = nil,
- shouldZipBuildProducts: Bool = false,
- resultBundle: Bool = false,
- useClangReportName: Bool = false,
- concurrentWorkers: Int? = nil,
- maxConcurrentSimulators: Int? = nil,
- disableConcurrentTesting: Bool = false,
- skipBuild: Bool = false,
- testWithoutBuilding: Bool? = nil,
- buildForTesting: Bool? = nil,
- sdk: String? = nil,
- configuration: String? = nil,
- xcargs: String? = nil,
- xcconfig: String? = nil,
- appName: String? = nil,
- deploymentTargetVersion: String? = nil,
- slackUrl: String? = nil,
- slackChannel: String? = nil,
- slackMessage: String? = nil,
- slackUseWebhookConfiguredUsernameAndIcon: Bool = false,
+ includeSimulatorLogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ formatter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ shouldZipBuildProducts: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputXctestrun: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useClangReportName: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ concurrentWorkers: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ maxConcurrentSimulators: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ disableConcurrentTesting: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ testWithoutBuilding: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ buildForTesting: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ deploymentTargetVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ slackUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ slackChannel: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ slackMessage: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ slackUseWebhookConfiguredUsernameAndIcon: OptionalConfigValue<Bool> = .fastlaneDefault(false),
slackUsername: String = "fastlane",
slackIconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png",
- skipSlack: Bool = false,
- slackOnlyOnFailure: Bool = false,
+ skipSlack: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ slackOnlyOnFailure: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ slackDefaultPayloads: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
destination: Any? = nil,
- customReportFileName: String? = nil,
+ catalystPlatform: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ customReportFileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
xcodebuildCommand: String = "env NSUnbufferedIO=YES xcodebuild",
- clonedSourcePackagesPath: String? = nil,
- failBuild: Bool = true)
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ numberOfRetries: Int = 0,
+ failBuild: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "run_tests", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "device", value: device),
- RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
- RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
- RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
- RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
- RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "only_testing", value: onlyTesting),
- RubyCommand.Argument(name: "skip_testing", value: skipTesting),
- RubyCommand.Argument(name: "testplan", value: testplan),
- RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations),
- RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations),
- RubyCommand.Argument(name: "xctestrun", value: xctestrun),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "code_coverage", value: codeCoverage),
- RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer),
- RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer),
- RubyCommand.Argument(name: "open_report", value: openReport),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_style", value: outputStyle),
- RubyCommand.Argument(name: "output_types", value: outputTypes),
- RubyCommand.Argument(name: "output_files", value: outputFiles),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "include_simulator_logs", value: includeSimulatorLogs),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "formatter", value: formatter),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
- RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
- RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators),
- RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting),
- RubyCommand.Argument(name: "skip_build", value: skipBuild),
- RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
- RubyCommand.Argument(name: "build_for_testing", value: buildForTesting),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
- RubyCommand.Argument(name: "slack_url", value: slackUrl),
- RubyCommand.Argument(name: "slack_channel", value: slackChannel),
- RubyCommand.Argument(name: "slack_message", value: slackMessage),
- RubyCommand.Argument(name: "slack_use_webhook_configured_username_and_icon", value: slackUseWebhookConfiguredUsernameAndIcon),
- RubyCommand.Argument(name: "slack_username", value: slackUsername),
- RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl),
- RubyCommand.Argument(name: "skip_slack", value: skipSlack),
- RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
- RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
- RubyCommand.Argument(name: "fail_build", value: failBuild)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let deviceArg = device.asRubyArgument(name: "device", type: nil)
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let skipDetectDevicesArg = skipDetectDevices.asRubyArgument(name: "skip_detect_devices", type: nil)
+ let ensureDevicesFoundArg = ensureDevicesFound.asRubyArgument(name: "ensure_devices_found", type: nil)
+ let forceQuitSimulatorArg = forceQuitSimulator.asRubyArgument(name: "force_quit_simulator", type: nil)
+ let resetSimulatorArg = resetSimulator.asRubyArgument(name: "reset_simulator", type: nil)
+ let disableSlideToTypeArg = disableSlideToType.asRubyArgument(name: "disable_slide_to_type", type: nil)
+ let prelaunchSimulatorArg = prelaunchSimulator.asRubyArgument(name: "prelaunch_simulator", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
+ let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
+ let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
+ let onlyTestConfigurationsArg = RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations, type: nil)
+ let skipTestConfigurationsArg = RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations, type: nil)
+ let xctestrunArg = xctestrun.asRubyArgument(name: "xctestrun", type: nil)
+ let toolchainArg = RubyCommand.Argument(name: "toolchain", value: toolchain, type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let codeCoverageArg = codeCoverage.asRubyArgument(name: "code_coverage", type: nil)
+ let addressSanitizerArg = addressSanitizer.asRubyArgument(name: "address_sanitizer", type: nil)
+ let threadSanitizerArg = threadSanitizer.asRubyArgument(name: "thread_sanitizer", type: nil)
+ let openReportArg = openReport.asRubyArgument(name: "open_report", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputStyleArg = outputStyle.asRubyArgument(name: "output_style", type: nil)
+ let outputTypesArg = RubyCommand.Argument(name: "output_types", value: outputTypes, type: nil)
+ let outputFilesArg = outputFiles.asRubyArgument(name: "output_files", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let includeSimulatorLogsArg = includeSimulatorLogs.asRubyArgument(name: "include_simulator_logs", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let formatterArg = formatter.asRubyArgument(name: "formatter", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let shouldZipBuildProductsArg = shouldZipBuildProducts.asRubyArgument(name: "should_zip_build_products", type: nil)
+ let outputXctestrunArg = outputXctestrun.asRubyArgument(name: "output_xctestrun", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let useClangReportNameArg = useClangReportName.asRubyArgument(name: "use_clang_report_name", type: nil)
+ let concurrentWorkersArg = concurrentWorkers.asRubyArgument(name: "concurrent_workers", type: nil)
+ let maxConcurrentSimulatorsArg = maxConcurrentSimulators.asRubyArgument(name: "max_concurrent_simulators", type: nil)
+ let disableConcurrentTestingArg = disableConcurrentTesting.asRubyArgument(name: "disable_concurrent_testing", type: nil)
+ let skipBuildArg = skipBuild.asRubyArgument(name: "skip_build", type: nil)
+ let testWithoutBuildingArg = testWithoutBuilding.asRubyArgument(name: "test_without_building", type: nil)
+ let buildForTestingArg = buildForTesting.asRubyArgument(name: "build_for_testing", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let appNameArg = appName.asRubyArgument(name: "app_name", type: nil)
+ let deploymentTargetVersionArg = deploymentTargetVersion.asRubyArgument(name: "deployment_target_version", type: nil)
+ let slackUrlArg = slackUrl.asRubyArgument(name: "slack_url", type: nil)
+ let slackChannelArg = slackChannel.asRubyArgument(name: "slack_channel", type: nil)
+ let slackMessageArg = slackMessage.asRubyArgument(name: "slack_message", type: nil)
+ let slackUseWebhookConfiguredUsernameAndIconArg = slackUseWebhookConfiguredUsernameAndIcon.asRubyArgument(name: "slack_use_webhook_configured_username_and_icon", type: nil)
+ let slackUsernameArg = RubyCommand.Argument(name: "slack_username", value: slackUsername, type: nil)
+ let slackIconUrlArg = RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl, type: nil)
+ let skipSlackArg = skipSlack.asRubyArgument(name: "skip_slack", type: nil)
+ let slackOnlyOnFailureArg = slackOnlyOnFailure.asRubyArgument(name: "slack_only_on_failure", type: nil)
+ let slackDefaultPayloadsArg = slackDefaultPayloads.asRubyArgument(name: "slack_default_payloads", type: nil)
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
+ let catalystPlatformArg = catalystPlatform.asRubyArgument(name: "catalyst_platform", type: nil)
+ let customReportFileNameArg = customReportFileName.asRubyArgument(name: "custom_report_file_name", type: nil)
+ let xcodebuildCommandArg = RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand, type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let numberOfRetriesArg = RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries, type: nil)
+ let failBuildArg = failBuild.asRubyArgument(name: "fail_build", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ deviceArg,
+ devicesArg,
+ skipDetectDevicesArg,
+ ensureDevicesFoundArg,
+ forceQuitSimulatorArg,
+ resetSimulatorArg,
+ disableSlideToTypeArg,
+ prelaunchSimulatorArg,
+ reinstallAppArg,
+ appIdentifierArg,
+ onlyTestingArg,
+ skipTestingArg,
+ testplanArg,
+ onlyTestConfigurationsArg,
+ skipTestConfigurationsArg,
+ xctestrunArg,
+ toolchainArg,
+ cleanArg,
+ codeCoverageArg,
+ addressSanitizerArg,
+ threadSanitizerArg,
+ openReportArg,
+ disableXcprettyArg,
+ outputDirectoryArg,
+ outputStyleArg,
+ outputTypesArg,
+ outputFilesArg,
+ buildlogPathArg,
+ includeSimulatorLogsArg,
+ suppressXcodeOutputArg,
+ formatterArg,
+ xcprettyArgsArg,
+ derivedDataPathArg,
+ shouldZipBuildProductsArg,
+ outputXctestrunArg,
+ resultBundleArg,
+ useClangReportNameArg,
+ concurrentWorkersArg,
+ maxConcurrentSimulatorsArg,
+ disableConcurrentTestingArg,
+ skipBuildArg,
+ testWithoutBuildingArg,
+ buildForTestingArg,
+ sdkArg,
+ configurationArg,
+ xcargsArg,
+ xcconfigArg,
+ appNameArg,
+ deploymentTargetVersionArg,
+ slackUrlArg,
+ slackChannelArg,
+ slackMessageArg,
+ slackUseWebhookConfiguredUsernameAndIconArg,
+ slackUsernameArg,
+ slackIconUrlArg,
+ skipSlackArg,
+ slackOnlyOnFailureArg,
+ slackDefaultPayloadsArg,
+ destinationArg,
+ catalystPlatformArg,
+ customReportFileNameArg,
+ xcodebuildCommandArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg,
+ numberOfRetriesArg,
+ failBuildArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "run_tests", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Generates a plist file and uploads all to AWS S3
@@ -6237,58 +8783,84 @@
Upload a new build to Amazon S3 to distribute the build to beta testers.
Works for both Ad Hoc and Enterprise signed applications. This step will generate the necessary HTML, plist, and version files for you.
It is recommended to **not** store the AWS access keys in the `Fastfile`. The uploaded `version.json` file provides an easy way for apps to poll if a new update is available.
*/
-public func s3(ipa: String? = nil,
- dsym: String? = nil,
- uploadMetadata: Bool = true,
- plistTemplatePath: String? = nil,
- plistFileName: String? = nil,
- htmlTemplatePath: String? = nil,
- htmlFileName: String? = nil,
- versionTemplatePath: String? = nil,
- versionFileName: String? = nil,
- accessKey: String? = nil,
- secretAccessKey: String? = nil,
- bucket: String? = nil,
- region: String? = nil,
+public func s3(ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ uploadMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ plistTemplatePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ plistFileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ htmlTemplatePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ htmlFileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versionTemplatePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versionFileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ accessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bucket: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ region: OptionalConfigValue<String?> = .fastlaneDefault(nil),
path: String = "v{CFBundleShortVersionString}_b{CFBundleVersion}/",
- source: String? = nil,
+ source: OptionalConfigValue<String?> = .fastlaneDefault(nil),
acl: String = "public_read")
{
- let command = RubyCommand(commandID: "", methodName: "s3", className: nil, args: [RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "dsym", value: dsym),
- RubyCommand.Argument(name: "upload_metadata", value: uploadMetadata),
- RubyCommand.Argument(name: "plist_template_path", value: plistTemplatePath),
- RubyCommand.Argument(name: "plist_file_name", value: plistFileName),
- RubyCommand.Argument(name: "html_template_path", value: htmlTemplatePath),
- RubyCommand.Argument(name: "html_file_name", value: htmlFileName),
- RubyCommand.Argument(name: "version_template_path", value: versionTemplatePath),
- RubyCommand.Argument(name: "version_file_name", value: versionFileName),
- RubyCommand.Argument(name: "access_key", value: accessKey),
- RubyCommand.Argument(name: "secret_access_key", value: secretAccessKey),
- RubyCommand.Argument(name: "bucket", value: bucket),
- RubyCommand.Argument(name: "region", value: region),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "source", value: source),
- RubyCommand.Argument(name: "acl", value: acl)])
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let dsymArg = dsym.asRubyArgument(name: "dsym", type: nil)
+ let uploadMetadataArg = uploadMetadata.asRubyArgument(name: "upload_metadata", type: nil)
+ let plistTemplatePathArg = plistTemplatePath.asRubyArgument(name: "plist_template_path", type: nil)
+ let plistFileNameArg = plistFileName.asRubyArgument(name: "plist_file_name", type: nil)
+ let htmlTemplatePathArg = htmlTemplatePath.asRubyArgument(name: "html_template_path", type: nil)
+ let htmlFileNameArg = htmlFileName.asRubyArgument(name: "html_file_name", type: nil)
+ let versionTemplatePathArg = versionTemplatePath.asRubyArgument(name: "version_template_path", type: nil)
+ let versionFileNameArg = versionFileName.asRubyArgument(name: "version_file_name", type: nil)
+ let accessKeyArg = accessKey.asRubyArgument(name: "access_key", type: nil)
+ let secretAccessKeyArg = secretAccessKey.asRubyArgument(name: "secret_access_key", type: nil)
+ let bucketArg = bucket.asRubyArgument(name: "bucket", type: nil)
+ let regionArg = region.asRubyArgument(name: "region", type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let sourceArg = source.asRubyArgument(name: "source", type: nil)
+ let aclArg = RubyCommand.Argument(name: "acl", value: acl, type: nil)
+ let array: [RubyCommand.Argument?] = [ipaArg,
+ dsymArg,
+ uploadMetadataArg,
+ plistTemplatePathArg,
+ plistFileNameArg,
+ htmlTemplatePathArg,
+ htmlFileNameArg,
+ versionTemplatePathArg,
+ versionFileNameArg,
+ accessKeyArg,
+ secretAccessKeyArg,
+ bucketArg,
+ regionArg,
+ pathArg,
+ sourceArg,
+ aclArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "s3", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action speaks the given text out loud
- parameters:
- text: Text to be spoken out loud (as string or array of strings)
- mute: If say should be muted with text printed out
*/
-public func say(text: Any,
- mute: Bool = false)
+public func say(text: [String],
+ mute: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "say", className: nil, args: [RubyCommand.Argument(name: "text", value: text),
- RubyCommand.Argument(name: "mute", value: mute)])
+ let textArg = RubyCommand.Argument(name: "text", value: text, type: nil)
+ let muteArg = mute.asRubyArgument(name: "mute", type: nil)
+ let array: [RubyCommand.Argument?] = [textArg,
+ muteArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "say", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `run_tests` action
@@ -6298,10 +8870,11 @@
- project: Path to the project file
- scheme: The project's scheme. Make sure it's marked as `Shared`
- device: The name of the simulator type you want to run tests on (e.g. 'iPhone 6')
- devices: Array of devices to run the tests on (e.g. ['iPhone 6', 'iPad Air'])
- skipDetectDevices: Should skip auto detecting of devices if none were specified
+ - ensureDevicesFound: Should fail if devices not found
- forceQuitSimulator: Enabling this option will automatically killall Simulator processes before the run
- resetSimulator: Enabling this option will automatically erase the simulator before running the application
- disableSlideToType: Enabling this option will disable the simulator from showing the 'Slide to type' prompt
- prelaunchSimulator: Enabling this option will launch the first simulator prior to calling any xcodebuild command
- reinstallApp: Enabling this option will automatically uninstall the application before running it
@@ -6328,10 +8901,11 @@
- suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
- formatter: A custom xcpretty formatter to use
- xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf')
- derivedDataPath: The directory where build products and other derived data will go
- shouldZipBuildProducts: Should zip the derived data build products and place in output path?
+ - outputXctestrun: Should provide additional copy of .xctestrun file (settings.xctestrun) and place in output path?
- resultBundle: Should an Xcode result bundle be generated in the output directory
- useClangReportName: Generate the json compilation database with clang naming convention (compile_commands.json)
- concurrentWorkers: Specify the exact number of test runners that will be spawned during parallel testing. Equivalent to -parallel-testing-worker-count
- maxConcurrentSimulators: Constrain the number of simulator devices on which to test concurrently. Equivalent to -maximum-concurrent-test-simulator-destinations
- disableConcurrentTesting: Do not run test bundles in parallel on the specified destinations. Testing will occur on each destination serially. Equivalent to -disable-concurrent-testing
@@ -6350,145 +8924,242 @@
- slackUseWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false)
- slackUsername: Overrides the webhook's username property if slack_use_webhook_configured_username_and_icon is false
- slackIconUrl: Overrides the webhook's image property if slack_use_webhook_configured_username_and_icon is false
- skipSlack: Don't publish to slack, even when an URL is given
- slackOnlyOnFailure: Only post on Slack if the tests fail
+ - slackDefaultPayloads: Specifies default payloads to include in Slack messages. For more info visit https://docs.fastlane.tools/actions/slack
- destination: Use only if you're a pro, use the other options instead
+ - catalystPlatform: Platform to build when using a Catalyst enabled app. Valid values are: ios, macos
- customReportFileName: **DEPRECATED!** Use `--output_files` instead - Sets custom full report file name when generating a single report
- xcodebuildCommand: Allows for override of the default `xcodebuild` command
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
+ - useSystemScm: Lets xcodebuild use system's scm configuration
+ - numberOfRetries: The number of times a test can fail before scan should stop retrying
- failBuild: Should this step stop the build if the tests fail? Set this to false if you're using trainer
More information: https://docs.fastlane.tools/actions/scan/
*/
-public func scan(workspace: Any? = scanfile.workspace,
- project: Any? = scanfile.project,
- scheme: Any? = scanfile.scheme,
- device: Any? = scanfile.device,
- devices: [String]? = scanfile.devices,
- skipDetectDevices: Bool = scanfile.skipDetectDevices,
- forceQuitSimulator: Bool = scanfile.forceQuitSimulator,
- resetSimulator: Bool = scanfile.resetSimulator,
- disableSlideToType: Bool = scanfile.disableSlideToType,
- prelaunchSimulator: Bool? = scanfile.prelaunchSimulator,
- reinstallApp: Bool = scanfile.reinstallApp,
- appIdentifier: Any? = scanfile.appIdentifier,
+public func scan(workspace: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.workspace),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.project),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.scheme),
+ device: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.device),
+ devices: OptionalConfigValue<[String]?> = .fastlaneDefault(scanfile.devices),
+ skipDetectDevices: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.skipDetectDevices),
+ ensureDevicesFound: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.ensureDevicesFound),
+ forceQuitSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.forceQuitSimulator),
+ resetSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.resetSimulator),
+ disableSlideToType: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.disableSlideToType),
+ prelaunchSimulator: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.prelaunchSimulator),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.reinstallApp),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.appIdentifier),
onlyTesting: Any? = scanfile.onlyTesting,
skipTesting: Any? = scanfile.skipTesting,
- testplan: Any? = scanfile.testplan,
+ testplan: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.testplan),
onlyTestConfigurations: Any? = scanfile.onlyTestConfigurations,
skipTestConfigurations: Any? = scanfile.skipTestConfigurations,
- xctestrun: Any? = scanfile.xctestrun,
+ xctestrun: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.xctestrun),
toolchain: Any? = scanfile.toolchain,
- clean: Bool = scanfile.clean,
- codeCoverage: Bool? = scanfile.codeCoverage,
- addressSanitizer: Bool? = scanfile.addressSanitizer,
- threadSanitizer: Bool? = scanfile.threadSanitizer,
- openReport: Bool = scanfile.openReport,
- disableXcpretty: Bool? = scanfile.disableXcpretty,
- outputDirectory: Any = scanfile.outputDirectory,
- outputStyle: Any? = scanfile.outputStyle,
- outputTypes: Any = scanfile.outputTypes,
- outputFiles: Any? = scanfile.outputFiles,
- buildlogPath: Any = scanfile.buildlogPath,
- includeSimulatorLogs: Bool = scanfile.includeSimulatorLogs,
- suppressXcodeOutput: Bool? = scanfile.suppressXcodeOutput,
- formatter: Any? = scanfile.formatter,
- xcprettyArgs: Any? = scanfile.xcprettyArgs,
- derivedDataPath: Any? = scanfile.derivedDataPath,
- shouldZipBuildProducts: Bool = scanfile.shouldZipBuildProducts,
- resultBundle: Bool = scanfile.resultBundle,
- useClangReportName: Bool = scanfile.useClangReportName,
- concurrentWorkers: Int? = scanfile.concurrentWorkers,
- maxConcurrentSimulators: Int? = scanfile.maxConcurrentSimulators,
- disableConcurrentTesting: Bool = scanfile.disableConcurrentTesting,
- skipBuild: Bool = scanfile.skipBuild,
- testWithoutBuilding: Bool? = scanfile.testWithoutBuilding,
- buildForTesting: Bool? = scanfile.buildForTesting,
- sdk: Any? = scanfile.sdk,
- configuration: Any? = scanfile.configuration,
- xcargs: Any? = scanfile.xcargs,
- xcconfig: Any? = scanfile.xcconfig,
- appName: Any? = scanfile.appName,
- deploymentTargetVersion: Any? = scanfile.deploymentTargetVersion,
- slackUrl: Any? = scanfile.slackUrl,
- slackChannel: Any? = scanfile.slackChannel,
- slackMessage: Any? = scanfile.slackMessage,
- slackUseWebhookConfiguredUsernameAndIcon: Bool = scanfile.slackUseWebhookConfiguredUsernameAndIcon,
- slackUsername: Any = scanfile.slackUsername,
- slackIconUrl: Any = scanfile.slackIconUrl,
- skipSlack: Bool = scanfile.skipSlack,
- slackOnlyOnFailure: Bool = scanfile.slackOnlyOnFailure,
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.clean),
+ codeCoverage: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.codeCoverage),
+ addressSanitizer: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.addressSanitizer),
+ threadSanitizer: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.threadSanitizer),
+ openReport: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.openReport),
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.disableXcpretty),
+ outputDirectory: String = scanfile.outputDirectory,
+ outputStyle: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.outputStyle),
+ outputTypes: String = scanfile.outputTypes,
+ outputFiles: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.outputFiles),
+ buildlogPath: String = scanfile.buildlogPath,
+ includeSimulatorLogs: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.includeSimulatorLogs),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.suppressXcodeOutput),
+ formatter: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.formatter),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.xcprettyArgs),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.derivedDataPath),
+ shouldZipBuildProducts: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.shouldZipBuildProducts),
+ outputXctestrun: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.outputXctestrun),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.resultBundle),
+ useClangReportName: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.useClangReportName),
+ concurrentWorkers: OptionalConfigValue<Int?> = .fastlaneDefault(scanfile.concurrentWorkers),
+ maxConcurrentSimulators: OptionalConfigValue<Int?> = .fastlaneDefault(scanfile.maxConcurrentSimulators),
+ disableConcurrentTesting: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.disableConcurrentTesting),
+ skipBuild: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.skipBuild),
+ testWithoutBuilding: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.testWithoutBuilding),
+ buildForTesting: OptionalConfigValue<Bool?> = .fastlaneDefault(scanfile.buildForTesting),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.sdk),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.configuration),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.xcargs),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.xcconfig),
+ appName: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.appName),
+ deploymentTargetVersion: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.deploymentTargetVersion),
+ slackUrl: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.slackUrl),
+ slackChannel: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.slackChannel),
+ slackMessage: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.slackMessage),
+ slackUseWebhookConfiguredUsernameAndIcon: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.slackUseWebhookConfiguredUsernameAndIcon),
+ slackUsername: String = scanfile.slackUsername,
+ slackIconUrl: String = scanfile.slackIconUrl,
+ skipSlack: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.skipSlack),
+ slackOnlyOnFailure: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.slackOnlyOnFailure),
+ slackDefaultPayloads: OptionalConfigValue<[String]?> = .fastlaneDefault(scanfile.slackDefaultPayloads),
destination: Any? = scanfile.destination,
- customReportFileName: Any? = scanfile.customReportFileName,
- xcodebuildCommand: Any = scanfile.xcodebuildCommand,
- clonedSourcePackagesPath: Any? = scanfile.clonedSourcePackagesPath,
- failBuild: Bool = scanfile.failBuild)
+ catalystPlatform: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.catalystPlatform),
+ customReportFileName: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.customReportFileName),
+ xcodebuildCommand: String = scanfile.xcodebuildCommand,
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(scanfile.clonedSourcePackagesPath),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.skipPackageDependenciesResolution),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.disablePackageAutomaticUpdates),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.useSystemScm),
+ numberOfRetries: Int = scanfile.numberOfRetries,
+ failBuild: OptionalConfigValue<Bool> = .fastlaneDefault(scanfile.failBuild))
{
- let command = RubyCommand(commandID: "", methodName: "scan", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "device", value: device),
- RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "skip_detect_devices", value: skipDetectDevices),
- RubyCommand.Argument(name: "force_quit_simulator", value: forceQuitSimulator),
- RubyCommand.Argument(name: "reset_simulator", value: resetSimulator),
- RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
- RubyCommand.Argument(name: "prelaunch_simulator", value: prelaunchSimulator),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "only_testing", value: onlyTesting),
- RubyCommand.Argument(name: "skip_testing", value: skipTesting),
- RubyCommand.Argument(name: "testplan", value: testplan),
- RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations),
- RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations),
- RubyCommand.Argument(name: "xctestrun", value: xctestrun),
- RubyCommand.Argument(name: "toolchain", value: toolchain),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "code_coverage", value: codeCoverage),
- RubyCommand.Argument(name: "address_sanitizer", value: addressSanitizer),
- RubyCommand.Argument(name: "thread_sanitizer", value: threadSanitizer),
- RubyCommand.Argument(name: "open_report", value: openReport),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_style", value: outputStyle),
- RubyCommand.Argument(name: "output_types", value: outputTypes),
- RubyCommand.Argument(name: "output_files", value: outputFiles),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "include_simulator_logs", value: includeSimulatorLogs),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput),
- RubyCommand.Argument(name: "formatter", value: formatter),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "should_zip_build_products", value: shouldZipBuildProducts),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "use_clang_report_name", value: useClangReportName),
- RubyCommand.Argument(name: "concurrent_workers", value: concurrentWorkers),
- RubyCommand.Argument(name: "max_concurrent_simulators", value: maxConcurrentSimulators),
- RubyCommand.Argument(name: "disable_concurrent_testing", value: disableConcurrentTesting),
- RubyCommand.Argument(name: "skip_build", value: skipBuild),
- RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
- RubyCommand.Argument(name: "build_for_testing", value: buildForTesting),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
- RubyCommand.Argument(name: "slack_url", value: slackUrl),
- RubyCommand.Argument(name: "slack_channel", value: slackChannel),
- RubyCommand.Argument(name: "slack_message", value: slackMessage),
- RubyCommand.Argument(name: "slack_use_webhook_configured_username_and_icon", value: slackUseWebhookConfiguredUsernameAndIcon),
- RubyCommand.Argument(name: "slack_username", value: slackUsername),
- RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl),
- RubyCommand.Argument(name: "skip_slack", value: skipSlack),
- RubyCommand.Argument(name: "slack_only_on_failure", value: slackOnlyOnFailure),
- RubyCommand.Argument(name: "destination", value: destination),
- RubyCommand.Argument(name: "custom_report_file_name", value: customReportFileName),
- RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
- RubyCommand.Argument(name: "fail_build", value: failBuild)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let deviceArg = device.asRubyArgument(name: "device", type: nil)
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let skipDetectDevicesArg = skipDetectDevices.asRubyArgument(name: "skip_detect_devices", type: nil)
+ let ensureDevicesFoundArg = ensureDevicesFound.asRubyArgument(name: "ensure_devices_found", type: nil)
+ let forceQuitSimulatorArg = forceQuitSimulator.asRubyArgument(name: "force_quit_simulator", type: nil)
+ let resetSimulatorArg = resetSimulator.asRubyArgument(name: "reset_simulator", type: nil)
+ let disableSlideToTypeArg = disableSlideToType.asRubyArgument(name: "disable_slide_to_type", type: nil)
+ let prelaunchSimulatorArg = prelaunchSimulator.asRubyArgument(name: "prelaunch_simulator", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
+ let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
+ let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
+ let onlyTestConfigurationsArg = RubyCommand.Argument(name: "only_test_configurations", value: onlyTestConfigurations, type: nil)
+ let skipTestConfigurationsArg = RubyCommand.Argument(name: "skip_test_configurations", value: skipTestConfigurations, type: nil)
+ let xctestrunArg = xctestrun.asRubyArgument(name: "xctestrun", type: nil)
+ let toolchainArg = RubyCommand.Argument(name: "toolchain", value: toolchain, type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let codeCoverageArg = codeCoverage.asRubyArgument(name: "code_coverage", type: nil)
+ let addressSanitizerArg = addressSanitizer.asRubyArgument(name: "address_sanitizer", type: nil)
+ let threadSanitizerArg = threadSanitizer.asRubyArgument(name: "thread_sanitizer", type: nil)
+ let openReportArg = openReport.asRubyArgument(name: "open_report", type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputStyleArg = outputStyle.asRubyArgument(name: "output_style", type: nil)
+ let outputTypesArg = RubyCommand.Argument(name: "output_types", value: outputTypes, type: nil)
+ let outputFilesArg = outputFiles.asRubyArgument(name: "output_files", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let includeSimulatorLogsArg = includeSimulatorLogs.asRubyArgument(name: "include_simulator_logs", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let formatterArg = formatter.asRubyArgument(name: "formatter", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let shouldZipBuildProductsArg = shouldZipBuildProducts.asRubyArgument(name: "should_zip_build_products", type: nil)
+ let outputXctestrunArg = outputXctestrun.asRubyArgument(name: "output_xctestrun", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let useClangReportNameArg = useClangReportName.asRubyArgument(name: "use_clang_report_name", type: nil)
+ let concurrentWorkersArg = concurrentWorkers.asRubyArgument(name: "concurrent_workers", type: nil)
+ let maxConcurrentSimulatorsArg = maxConcurrentSimulators.asRubyArgument(name: "max_concurrent_simulators", type: nil)
+ let disableConcurrentTestingArg = disableConcurrentTesting.asRubyArgument(name: "disable_concurrent_testing", type: nil)
+ let skipBuildArg = skipBuild.asRubyArgument(name: "skip_build", type: nil)
+ let testWithoutBuildingArg = testWithoutBuilding.asRubyArgument(name: "test_without_building", type: nil)
+ let buildForTestingArg = buildForTesting.asRubyArgument(name: "build_for_testing", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let appNameArg = appName.asRubyArgument(name: "app_name", type: nil)
+ let deploymentTargetVersionArg = deploymentTargetVersion.asRubyArgument(name: "deployment_target_version", type: nil)
+ let slackUrlArg = slackUrl.asRubyArgument(name: "slack_url", type: nil)
+ let slackChannelArg = slackChannel.asRubyArgument(name: "slack_channel", type: nil)
+ let slackMessageArg = slackMessage.asRubyArgument(name: "slack_message", type: nil)
+ let slackUseWebhookConfiguredUsernameAndIconArg = slackUseWebhookConfiguredUsernameAndIcon.asRubyArgument(name: "slack_use_webhook_configured_username_and_icon", type: nil)
+ let slackUsernameArg = RubyCommand.Argument(name: "slack_username", value: slackUsername, type: nil)
+ let slackIconUrlArg = RubyCommand.Argument(name: "slack_icon_url", value: slackIconUrl, type: nil)
+ let skipSlackArg = skipSlack.asRubyArgument(name: "skip_slack", type: nil)
+ let slackOnlyOnFailureArg = slackOnlyOnFailure.asRubyArgument(name: "slack_only_on_failure", type: nil)
+ let slackDefaultPayloadsArg = slackDefaultPayloads.asRubyArgument(name: "slack_default_payloads", type: nil)
+ let destinationArg = RubyCommand.Argument(name: "destination", value: destination, type: nil)
+ let catalystPlatformArg = catalystPlatform.asRubyArgument(name: "catalyst_platform", type: nil)
+ let customReportFileNameArg = customReportFileName.asRubyArgument(name: "custom_report_file_name", type: nil)
+ let xcodebuildCommandArg = RubyCommand.Argument(name: "xcodebuild_command", value: xcodebuildCommand, type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let numberOfRetriesArg = RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries, type: nil)
+ let failBuildArg = failBuild.asRubyArgument(name: "fail_build", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ deviceArg,
+ devicesArg,
+ skipDetectDevicesArg,
+ ensureDevicesFoundArg,
+ forceQuitSimulatorArg,
+ resetSimulatorArg,
+ disableSlideToTypeArg,
+ prelaunchSimulatorArg,
+ reinstallAppArg,
+ appIdentifierArg,
+ onlyTestingArg,
+ skipTestingArg,
+ testplanArg,
+ onlyTestConfigurationsArg,
+ skipTestConfigurationsArg,
+ xctestrunArg,
+ toolchainArg,
+ cleanArg,
+ codeCoverageArg,
+ addressSanitizerArg,
+ threadSanitizerArg,
+ openReportArg,
+ disableXcprettyArg,
+ outputDirectoryArg,
+ outputStyleArg,
+ outputTypesArg,
+ outputFilesArg,
+ buildlogPathArg,
+ includeSimulatorLogsArg,
+ suppressXcodeOutputArg,
+ formatterArg,
+ xcprettyArgsArg,
+ derivedDataPathArg,
+ shouldZipBuildProductsArg,
+ outputXctestrunArg,
+ resultBundleArg,
+ useClangReportNameArg,
+ concurrentWorkersArg,
+ maxConcurrentSimulatorsArg,
+ disableConcurrentTestingArg,
+ skipBuildArg,
+ testWithoutBuildingArg,
+ buildForTestingArg,
+ sdkArg,
+ configurationArg,
+ xcargsArg,
+ xcconfigArg,
+ appNameArg,
+ deploymentTargetVersionArg,
+ slackUrlArg,
+ slackChannelArg,
+ slackMessageArg,
+ slackUseWebhookConfiguredUsernameAndIconArg,
+ slackUsernameArg,
+ slackIconUrlArg,
+ skipSlackArg,
+ slackOnlyOnFailureArg,
+ slackDefaultPayloadsArg,
+ destinationArg,
+ catalystPlatformArg,
+ customReportFileNameArg,
+ xcodebuildCommandArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ useSystemScmArg,
+ numberOfRetriesArg,
+ failBuildArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "scan", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Transfer files via SCP
@@ -6500,97 +9171,133 @@
- port: Port
- upload: Upload
- download: Download
*/
public func scp(username: String,
- password: String? = nil,
+ password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
host: String,
port: String = "22",
- upload: [String: Any]? = nil,
- download: [String: Any]? = nil)
+ upload: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ download: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "scp", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "host", value: host),
- RubyCommand.Argument(name: "port", value: port),
- RubyCommand.Argument(name: "upload", value: upload),
- RubyCommand.Argument(name: "download", value: download)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let passwordArg = password.asRubyArgument(name: "password", type: nil)
+ let hostArg = RubyCommand.Argument(name: "host", value: host, type: nil)
+ let portArg = RubyCommand.Argument(name: "port", value: port, type: nil)
+ let uploadArg = upload.asRubyArgument(name: "upload", type: nil)
+ let downloadArg = download.asRubyArgument(name: "download", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ passwordArg,
+ hostArg,
+ portArg,
+ uploadArg,
+ downloadArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "scp", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `capture_android_screenshots` action
- parameters:
- androidHome: Path to the root of your Android SDK installation, e.g. ~/tools/android-sdk-macosx
- - buildToolsVersion: The Android build tools version to use, e.g. '23.0.2'
+ - buildToolsVersion: **DEPRECATED!** The Android build tools version to use, e.g. '23.0.2'
- locales: A list of locales which should be used
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running screengrab
- outputDirectory: The directory where to store the screenshots
- skipOpenSummary: Don't open the summary after running _screengrab_
- appPackageName: The package name of the app under test (e.g. com.yourcompany.yourapp)
- testsPackageName: The package name of the tests bundle (e.g. com.yourcompany.yourapp.test)
- useTestsInPackages: Only run tests in these Java packages
- useTestsInClasses: Only run tests in these Java classes
- launchArguments: Additional launch arguments
- testInstrumentationRunner: The fully qualified class name of your test instrumentation runner
- - endingLocale: Return the device to this locale after running tests
- - useAdbRoot: Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
+ - endingLocale: **DEPRECATED!** Return the device to this locale after running tests
+ - useAdbRoot: **DEPRECATED!** Restarts the adb daemon using `adb root` to allow access to screenshots directories on device. Use if getting 'Permission denied' errors
- appApkPath: The path to the APK for the app under test
- testsApkPath: The path to the APK for the the tests bundle
- specificDevice: Use the device or emulator with the given serial number or qualifier
- deviceType: Type of device used for screenshots. Matches Google Play Types (phone, sevenInch, tenInch, tv, wear)
- exitOnTestFailure: Whether or not to exit Screengrab on test failure. Exiting on failure will not copy sceenshots to local machine nor open sceenshots summary
- reinstallApp: Enabling this option will automatically uninstall the application before running it
- useTimestampSuffix: Add timestamp suffix to screenshot filename
- adbHost: Configure the host used by adb to connect, allows running on remote devices farm
*/
-public func screengrab(androidHome: Any? = screengrabfile.androidHome,
- buildToolsVersion: Any? = screengrabfile.buildToolsVersion,
+public func screengrab(androidHome: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.androidHome),
+ buildToolsVersion: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.buildToolsVersion),
locales: [String] = screengrabfile.locales,
- clearPreviousScreenshots: Bool = screengrabfile.clearPreviousScreenshots,
- outputDirectory: Any = screengrabfile.outputDirectory,
- skipOpenSummary: Bool = screengrabfile.skipOpenSummary,
- appPackageName: Any = screengrabfile.appPackageName,
- testsPackageName: Any? = screengrabfile.testsPackageName,
- useTestsInPackages: [String]? = screengrabfile.useTestsInPackages,
- useTestsInClasses: [String]? = screengrabfile.useTestsInClasses,
- launchArguments: [String]? = screengrabfile.launchArguments,
- testInstrumentationRunner: Any = screengrabfile.testInstrumentationRunner,
- endingLocale: Any = screengrabfile.endingLocale,
- useAdbRoot: Bool = screengrabfile.useAdbRoot,
- appApkPath: Any? = screengrabfile.appApkPath,
- testsApkPath: Any? = screengrabfile.testsApkPath,
- specificDevice: Any? = screengrabfile.specificDevice,
- deviceType: Any = screengrabfile.deviceType,
- exitOnTestFailure: Bool = screengrabfile.exitOnTestFailure,
- reinstallApp: Bool = screengrabfile.reinstallApp,
- useTimestampSuffix: Bool = screengrabfile.useTimestampSuffix,
- adbHost: Any? = screengrabfile.adbHost)
+ clearPreviousScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.clearPreviousScreenshots),
+ outputDirectory: String = screengrabfile.outputDirectory,
+ skipOpenSummary: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.skipOpenSummary),
+ appPackageName: String = screengrabfile.appPackageName,
+ testsPackageName: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.testsPackageName),
+ useTestsInPackages: OptionalConfigValue<[String]?> = .fastlaneDefault(screengrabfile.useTestsInPackages),
+ useTestsInClasses: OptionalConfigValue<[String]?> = .fastlaneDefault(screengrabfile.useTestsInClasses),
+ launchArguments: OptionalConfigValue<[String]?> = .fastlaneDefault(screengrabfile.launchArguments),
+ testInstrumentationRunner: String = screengrabfile.testInstrumentationRunner,
+ endingLocale: String = screengrabfile.endingLocale,
+ useAdbRoot: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.useAdbRoot),
+ appApkPath: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.appApkPath),
+ testsApkPath: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.testsApkPath),
+ specificDevice: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.specificDevice),
+ deviceType: String = screengrabfile.deviceType,
+ exitOnTestFailure: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.exitOnTestFailure),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.reinstallApp),
+ useTimestampSuffix: OptionalConfigValue<Bool> = .fastlaneDefault(screengrabfile.useTimestampSuffix),
+ adbHost: OptionalConfigValue<String?> = .fastlaneDefault(screengrabfile.adbHost))
{
- let command = RubyCommand(commandID: "", methodName: "screengrab", className: nil, args: [RubyCommand.Argument(name: "android_home", value: androidHome),
- RubyCommand.Argument(name: "build_tools_version", value: buildToolsVersion),
- RubyCommand.Argument(name: "locales", value: locales),
- RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary),
- RubyCommand.Argument(name: "app_package_name", value: appPackageName),
- RubyCommand.Argument(name: "tests_package_name", value: testsPackageName),
- RubyCommand.Argument(name: "use_tests_in_packages", value: useTestsInPackages),
- RubyCommand.Argument(name: "use_tests_in_classes", value: useTestsInClasses),
- RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
- RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner),
- RubyCommand.Argument(name: "ending_locale", value: endingLocale),
- RubyCommand.Argument(name: "use_adb_root", value: useAdbRoot),
- RubyCommand.Argument(name: "app_apk_path", value: appApkPath),
- RubyCommand.Argument(name: "tests_apk_path", value: testsApkPath),
- RubyCommand.Argument(name: "specific_device", value: specificDevice),
- RubyCommand.Argument(name: "device_type", value: deviceType),
- RubyCommand.Argument(name: "exit_on_test_failure", value: exitOnTestFailure),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "use_timestamp_suffix", value: useTimestampSuffix),
- RubyCommand.Argument(name: "adb_host", value: adbHost)])
+ let androidHomeArg = androidHome.asRubyArgument(name: "android_home", type: nil)
+ let buildToolsVersionArg = buildToolsVersion.asRubyArgument(name: "build_tools_version", type: nil)
+ let localesArg = RubyCommand.Argument(name: "locales", value: locales, type: nil)
+ let clearPreviousScreenshotsArg = clearPreviousScreenshots.asRubyArgument(name: "clear_previous_screenshots", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let skipOpenSummaryArg = skipOpenSummary.asRubyArgument(name: "skip_open_summary", type: nil)
+ let appPackageNameArg = RubyCommand.Argument(name: "app_package_name", value: appPackageName, type: nil)
+ let testsPackageNameArg = testsPackageName.asRubyArgument(name: "tests_package_name", type: nil)
+ let useTestsInPackagesArg = useTestsInPackages.asRubyArgument(name: "use_tests_in_packages", type: nil)
+ let useTestsInClassesArg = useTestsInClasses.asRubyArgument(name: "use_tests_in_classes", type: nil)
+ let launchArgumentsArg = launchArguments.asRubyArgument(name: "launch_arguments", type: nil)
+ let testInstrumentationRunnerArg = RubyCommand.Argument(name: "test_instrumentation_runner", value: testInstrumentationRunner, type: nil)
+ let endingLocaleArg = RubyCommand.Argument(name: "ending_locale", value: endingLocale, type: nil)
+ let useAdbRootArg = useAdbRoot.asRubyArgument(name: "use_adb_root", type: nil)
+ let appApkPathArg = appApkPath.asRubyArgument(name: "app_apk_path", type: nil)
+ let testsApkPathArg = testsApkPath.asRubyArgument(name: "tests_apk_path", type: nil)
+ let specificDeviceArg = specificDevice.asRubyArgument(name: "specific_device", type: nil)
+ let deviceTypeArg = RubyCommand.Argument(name: "device_type", value: deviceType, type: nil)
+ let exitOnTestFailureArg = exitOnTestFailure.asRubyArgument(name: "exit_on_test_failure", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let useTimestampSuffixArg = useTimestampSuffix.asRubyArgument(name: "use_timestamp_suffix", type: nil)
+ let adbHostArg = adbHost.asRubyArgument(name: "adb_host", type: nil)
+ let array: [RubyCommand.Argument?] = [androidHomeArg,
+ buildToolsVersionArg,
+ localesArg,
+ clearPreviousScreenshotsArg,
+ outputDirectoryArg,
+ skipOpenSummaryArg,
+ appPackageNameArg,
+ testsPackageNameArg,
+ useTestsInPackagesArg,
+ useTestsInClassesArg,
+ launchArgumentsArg,
+ testInstrumentationRunnerArg,
+ endingLocaleArg,
+ useAdbRootArg,
+ appApkPathArg,
+ testsApkPathArg,
+ specificDeviceArg,
+ deviceTypeArg,
+ exitOnTestFailureArg,
+ reinstallAppArg,
+ useTimestampSuffixArg,
+ adbHostArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "screengrab", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Set the build number from the current repository
@@ -6601,15 +9308,21 @@
This action will set the **build number** according to what the SCM HEAD reports.
Currently supported SCMs are svn (uses root revision), git-svn (uses svn revision) and git (uses short hash) and mercurial (uses short hash or revision number).
There is an option, `:use_hg_revision_number`, which allows to use mercurial revision number instead of hash.
*/
-public func setBuildNumberRepository(useHgRevisionNumber: Bool = false,
- xcodeproj: String? = nil)
+public func setBuildNumberRepository(useHgRevisionNumber: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "set_build_number_repository", className: nil, args: [RubyCommand.Argument(name: "use_hg_revision_number", value: useHgRevisionNumber),
- RubyCommand.Argument(name: "xcodeproj", value: xcodeproj)])
+ let useHgRevisionNumberArg = useHgRevisionNumber.asRubyArgument(name: "use_hg_revision_number", type: nil)
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let array: [RubyCommand.Argument?] = [useHgRevisionNumberArg,
+ xcodeprojArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "set_build_number_repository", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Set the changelog for all languages on App Store Connect
@@ -6627,39 +9340,53 @@
This is useful if you have only one changelog for all languages.
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.
Defining the version is optional. _fastlane_ will try to automatically detect it if you don't provide one.
*/
-public func setChangelog(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
+public func setChangelog(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
appIdentifier: String,
- username: String? = nil,
- version: String? = nil,
- changelog: String? = nil,
- teamId: Any? = nil,
- teamName: String? = nil,
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ version: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ changelog: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios")
{
- let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "changelog", value: changelog),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "platform", value: platform)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let versionArg = version.asRubyArgument(name: "version", type: nil)
+ let changelogArg = changelog.asRubyArgument(name: "changelog", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ appIdentifierArg,
+ usernameArg,
+ versionArg,
+ changelogArg,
+ teamIdArg,
+ teamNameArg,
+ platformArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "set_changelog", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This will create a new release on GitHub and upload assets for it
- parameters:
- repositoryName: The path to your repo, e.g. 'fastlane/fastlane'
- serverUrl: The server url. e.g. 'https://your.internal.github.host/api/v3' (Default: 'https://api.github.com')
- apiToken: Personal API Token for GitHub - generate one at https://github.com/settings/tokens
+ - apiBearer: Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable
- tagName: Pass in the tag name
- name: Name of this release
- commitish: Specifies the commitish value that determines where the Git tag is created from. Can be any branch or commit SHA. Unused if the Git tag already exists. Default: the repository's default branch (usually master)
- description: Description of this release
- isDraft: Whether the release should be marked as draft
@@ -6673,29 +9400,46 @@
If the tag doesn't exist, one will be created on the commit or branch passed in as commitish.
Out parameters provide the release's id, which can be used for later editing and the release HTML link to GitHub. You can also specify a list of assets to be uploaded to the release with the `:upload_assets` parameter.
*/
@discardableResult public func setGithubRelease(repositoryName: String,
serverUrl: String = "https://api.github.com",
- apiToken: String,
+ apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiBearer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
tagName: String,
- name: String? = nil,
- commitish: String? = nil,
- description: String? = nil,
- isDraft: Bool = false,
- isPrerelease: Bool = false,
- uploadAssets: [String]? = nil) -> [String: Any]
+ name: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ commitish: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ description: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ isDraft: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ isPrerelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ uploadAssets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil)) -> [String: Any]
{
- let command = RubyCommand(commandID: "", methodName: "set_github_release", className: nil, args: [RubyCommand.Argument(name: "repository_name", value: repositoryName),
- RubyCommand.Argument(name: "server_url", value: serverUrl),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "tag_name", value: tagName),
- RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "commitish", value: commitish),
- RubyCommand.Argument(name: "description", value: description),
- RubyCommand.Argument(name: "is_draft", value: isDraft),
- RubyCommand.Argument(name: "is_prerelease", value: isPrerelease),
- RubyCommand.Argument(name: "upload_assets", value: uploadAssets)])
+ let repositoryNameArg = RubyCommand.Argument(name: "repository_name", value: repositoryName, type: nil)
+ let serverUrlArg = RubyCommand.Argument(name: "server_url", value: serverUrl, type: nil)
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let apiBearerArg = apiBearer.asRubyArgument(name: "api_bearer", type: nil)
+ let tagNameArg = RubyCommand.Argument(name: "tag_name", value: tagName, type: nil)
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let commitishArg = commitish.asRubyArgument(name: "commitish", type: nil)
+ let descriptionArg = description.asRubyArgument(name: "description", type: nil)
+ let isDraftArg = isDraft.asRubyArgument(name: "is_draft", type: nil)
+ let isPrereleaseArg = isPrerelease.asRubyArgument(name: "is_prerelease", type: nil)
+ let uploadAssetsArg = uploadAssets.asRubyArgument(name: "upload_assets", type: nil)
+ let array: [RubyCommand.Argument?] = [repositoryNameArg,
+ serverUrlArg,
+ apiTokenArg,
+ apiBearerArg,
+ tagNameArg,
+ nameArg,
+ commitishArg,
+ descriptionArg,
+ isDraftArg,
+ isPrereleaseArg,
+ uploadAssetsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "set_github_release", className: nil, args: args)
return parseDictionary(fromString: runner.executeCommand(command))
}
/**
Sets value to Info.plist of your project as native Ruby data structures
@@ -6706,20 +9450,29 @@
- value: Value to setup
- path: Path to plist file you want to update
- outputFileName: Path to the output file you want to generate
*/
public func setInfoPlistValue(key: String,
- subkey: String? = nil,
- value: Any,
+ subkey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ value: String,
path: String,
- outputFileName: String? = nil)
+ outputFileName: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "set_info_plist_value", className: nil, args: [RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "subkey", value: subkey),
- RubyCommand.Argument(name: "value", value: value),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "output_file_name", value: outputFileName)])
+ let keyArg = RubyCommand.Argument(name: "key", value: key, type: nil)
+ let subkeyArg = subkey.asRubyArgument(name: "subkey", type: nil)
+ let valueArg = RubyCommand.Argument(name: "value", value: value, type: nil)
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let outputFileNameArg = outputFileName.asRubyArgument(name: "output_file_name", type: nil)
+ let array: [RubyCommand.Argument?] = [keyArg,
+ subkeyArg,
+ valueArg,
+ pathArg,
+ outputFileNameArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "set_info_plist_value", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Sets a value for a key with cocoapods-keys
@@ -6730,19 +9483,27 @@
- value: The value to be saved with cocoapods-keys
- project: The project name
Adds a key to [cocoapods-keys](https://github.com/orta/cocoapods-keys)
*/
-public func setPodKey(useBundleExec: Bool = true,
+public func setPodKey(useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(true),
key: String,
value: String,
- project: String? = nil)
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "set_pod_key", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "value", value: value),
- RubyCommand.Argument(name: "project", value: project)])
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let keyArg = RubyCommand.Argument(name: "key", value: key, type: nil)
+ let valueArg = RubyCommand.Argument(name: "value", value: value, type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let array: [RubyCommand.Argument?] = [useBundleExecArg,
+ keyArg,
+ valueArg,
+ projectArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "set_pod_key", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Setup the keychain and match to work with CI
@@ -6755,15 +9516,21 @@
- Switches match to `readonly` mode to not create new profiles/cert on CI|
- Sets up log and test result paths to be easily collectible|
>|
This action helps with CI integration. Add this to the top of your Fastfile if you use CI.
*/
-public func setupCi(force: Bool = false,
- provider: String? = nil)
+public func setupCi(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ provider: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "setup_ci", className: nil, args: [RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "provider", value: provider)])
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let providerArg = provider.asRubyArgument(name: "provider", type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg,
+ providerArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "setup_ci", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Setup the keychain and match to work with CircleCI
@@ -6774,22 +9541,27 @@
- Switches match to `readonly` mode to not create new profiles/cert on CI|
- Sets up log and test result paths to be easily collectible|
>|
This action helps with CircleCI integration. Add this to the top of your Fastfile if you use CircleCI.
*/
-public func setupCircleCi(force: Bool = false) {
- let command = RubyCommand(commandID: "", methodName: "setup_circle_ci", className: nil, args: [RubyCommand.Argument(name: "force", value: force)])
+public func setupCircleCi(force: OptionalConfigValue<Bool> = .fastlaneDefault(false)) {
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "setup_circle_ci", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Setup xcodebuild, gym and scan for easier Jenkins integration
- parameters:
- force: Force setup, even if not executed by Jenkins
- unlockKeychain: Unlocks keychain
- - addKeychainToSearchList: Add to keychain search list
+ - addKeychainToSearchList: Add to keychain search list, valid values are true, false, :add, and :replace
- setDefaultKeychain: Set keychain as default
- keychainPath: Path to keychain
- keychainPassword: Keychain password
- setCodeSigningIdentity: Set code signing identity from CODE_SIGNING_IDENTITY environment
- codeSigningIdentity: Code signing identity
@@ -6807,33 +9579,48 @@
This action helps with Jenkins integration. Creates own derived data for each job. All build results like IPA files and archives will be stored in the `./output` directory.
The action also works with [Keychains and Provisioning Profiles Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Keychains+and+Provisioning+Profiles+Plugin), the selected keychain will be automatically unlocked and the selected code signing identity will be used.
[Match](https://docs.fastlane.tools/actions/match/) will be also set up to use the unlocked keychain and set in read-only mode, if its environment variables were not yet defined.
By default this action will only work when _fastlane_ is executed on a CI system.
*/
-public func setupJenkins(force: Bool = false,
- unlockKeychain: Bool = true,
- addKeychainToSearchList: Any = "replace",
- setDefaultKeychain: Bool = true,
- keychainPath: String? = nil,
+public func setupJenkins(force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ unlockKeychain: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ addKeychainToSearchList: String = "replace",
+ setDefaultKeychain: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ keychainPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
keychainPassword: String,
- setCodeSigningIdentity: Bool = true,
- codeSigningIdentity: String? = nil,
+ setCodeSigningIdentity: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ codeSigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputDirectory: String = "./output",
derivedDataPath: String = "./derivedData",
- resultBundle: Bool = true)
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "setup_jenkins", className: nil, args: [RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "unlock_keychain", value: unlockKeychain),
- RubyCommand.Argument(name: "add_keychain_to_search_list", value: addKeychainToSearchList),
- RubyCommand.Argument(name: "set_default_keychain", value: setDefaultKeychain),
- RubyCommand.Argument(name: "keychain_path", value: keychainPath),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "set_code_signing_identity", value: setCodeSigningIdentity),
- RubyCommand.Argument(name: "code_signing_identity", value: codeSigningIdentity),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle)])
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let unlockKeychainArg = unlockKeychain.asRubyArgument(name: "unlock_keychain", type: nil)
+ let addKeychainToSearchListArg = RubyCommand.Argument(name: "add_keychain_to_search_list", value: addKeychainToSearchList, type: nil)
+ let setDefaultKeychainArg = setDefaultKeychain.asRubyArgument(name: "set_default_keychain", type: nil)
+ let keychainPathArg = keychainPath.asRubyArgument(name: "keychain_path", type: nil)
+ let keychainPasswordArg = RubyCommand.Argument(name: "keychain_password", value: keychainPassword, type: nil)
+ let setCodeSigningIdentityArg = setCodeSigningIdentity.asRubyArgument(name: "set_code_signing_identity", type: nil)
+ let codeSigningIdentityArg = codeSigningIdentity.asRubyArgument(name: "code_signing_identity", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let derivedDataPathArg = RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath, type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg,
+ unlockKeychainArg,
+ addKeychainToSearchListArg,
+ setDefaultKeychainArg,
+ keychainPathArg,
+ keychainPasswordArg,
+ setCodeSigningIdentityArg,
+ codeSigningIdentityArg,
+ outputDirectoryArg,
+ derivedDataPathArg,
+ resultBundleArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "setup_jenkins", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Setup the keychain and match to work with Travis CI
@@ -6843,12 +9630,17 @@
- Creates a new temporary keychain for use with match|
- Switches match to `readonly` mode to not create new profiles/cert on CI|
>|
This action helps with Travis integration. Add this to the top of your Fastfile if you use Travis.
*/
-public func setupTravis(force: Bool = false) {
- let command = RubyCommand(commandID: "", methodName: "setup_travis", className: nil, args: [RubyCommand.Argument(name: "force", value: force)])
+public func setupTravis(force: OptionalConfigValue<Bool> = .fastlaneDefault(false)) {
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let array: [RubyCommand.Argument?] = [forceArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "setup_travis", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs a shell command
@@ -6862,16 +9654,23 @@
Allows running an arbitrary shell command.
Be aware of a specific behavior of `sh` action with regard to the working directory. For details, refer to [Advanced](https://docs.fastlane.tools/advanced/#directory-behavior).
*/
@discardableResult public func sh(command: String,
- log: Bool = true,
+ log: OptionalConfigValue<Bool> = .fastlaneDefault(true),
errorCallback: ((String) -> Void)? = nil) -> String
{
- let command = RubyCommand(commandID: "", methodName: "sh", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
- RubyCommand.Argument(name: "log", value: log),
- RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure)])
+ let commandArg = RubyCommand.Argument(name: "command", value: command, type: nil)
+ let logArg = log.asRubyArgument(name: "log", type: nil)
+ let errorCallbackArg = RubyCommand.Argument(name: "error_callback", value: errorCallback, type: .stringClosure)
+ let array: [RubyCommand.Argument?] = [commandArg,
+ logArg,
+ errorCallbackArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "sh", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Alias for the `get_provisioning_profile` action
@@ -6903,67 +9702,95 @@
- returns: The UUID of the profile sigh just fetched/generated
**Note**: 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 provisioning profiles. Use _sigh_ directly only if you want full control over what's going on and know more about codesigning.
*/
-public func sigh(adhoc: Bool = false,
- developerId: Bool = false,
- development: Bool = false,
- skipInstall: Bool = false,
- force: Bool = false,
- appIdentifier: String,
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- teamId: String? = nil,
- teamName: String? = nil,
- provisioningName: String? = nil,
- ignoreProfilesWithDifferentName: Bool = false,
- outputPath: String = ".",
- certId: String? = nil,
- certOwnerName: String? = nil,
- filename: String? = nil,
- skipFetchProfiles: Bool = false,
- skipCertificateVerification: Bool = false,
- platform: Any = "ios",
- readonly: Bool = false,
- templateName: String? = nil,
- failOnNameTaken: Bool = false)
+@discardableResult public func sigh(adhoc: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ developerId: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ development: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipInstall: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ appIdentifier: String,
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ provisioningName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ignoreProfilesWithDifferentName: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputPath: String = ".",
+ certId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ certOwnerName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ filename: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipFetchProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipCertificateVerification: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ platform: Any = "ios",
+ readonly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ templateName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failOnNameTaken: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "sigh", className: nil, args: [RubyCommand.Argument(name: "adhoc", value: adhoc),
- RubyCommand.Argument(name: "developer_id", value: developerId),
- RubyCommand.Argument(name: "development", value: development),
- RubyCommand.Argument(name: "skip_install", value: skipInstall),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "provisioning_name", value: provisioningName),
- RubyCommand.Argument(name: "ignore_profiles_with_different_name", value: ignoreProfilesWithDifferentName),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "cert_id", value: certId),
- RubyCommand.Argument(name: "cert_owner_name", value: certOwnerName),
- RubyCommand.Argument(name: "filename", value: filename),
- RubyCommand.Argument(name: "skip_fetch_profiles", value: skipFetchProfiles),
- RubyCommand.Argument(name: "skip_certificate_verification", value: skipCertificateVerification),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "readonly", value: readonly),
- RubyCommand.Argument(name: "template_name", value: templateName),
- RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken)])
- _ = runner.executeCommand(command)
+ let adhocArg = adhoc.asRubyArgument(name: "adhoc", type: nil)
+ let developerIdArg = developerId.asRubyArgument(name: "developer_id", type: nil)
+ let developmentArg = development.asRubyArgument(name: "development", type: nil)
+ let skipInstallArg = skipInstall.asRubyArgument(name: "skip_install", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let provisioningNameArg = provisioningName.asRubyArgument(name: "provisioning_name", type: nil)
+ let ignoreProfilesWithDifferentNameArg = ignoreProfilesWithDifferentName.asRubyArgument(name: "ignore_profiles_with_different_name", type: nil)
+ let outputPathArg = RubyCommand.Argument(name: "output_path", value: outputPath, type: nil)
+ let certIdArg = certId.asRubyArgument(name: "cert_id", type: nil)
+ let certOwnerNameArg = certOwnerName.asRubyArgument(name: "cert_owner_name", type: nil)
+ let filenameArg = filename.asRubyArgument(name: "filename", type: nil)
+ let skipFetchProfilesArg = skipFetchProfiles.asRubyArgument(name: "skip_fetch_profiles", type: nil)
+ let skipCertificateVerificationArg = skipCertificateVerification.asRubyArgument(name: "skip_certificate_verification", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let readonlyArg = readonly.asRubyArgument(name: "readonly", type: nil)
+ let templateNameArg = templateName.asRubyArgument(name: "template_name", type: nil)
+ let failOnNameTakenArg = failOnNameTaken.asRubyArgument(name: "fail_on_name_taken", type: nil)
+ let array: [RubyCommand.Argument?] = [adhocArg,
+ developerIdArg,
+ developmentArg,
+ skipInstallArg,
+ forceArg,
+ appIdentifierArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ provisioningNameArg,
+ ignoreProfilesWithDifferentNameArg,
+ outputPathArg,
+ certIdArg,
+ certOwnerNameArg,
+ filenameArg,
+ skipFetchProfilesArg,
+ skipCertificateVerificationArg,
+ platformArg,
+ readonlyArg,
+ templateNameArg,
+ failOnNameTakenArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "sigh", className: nil, args: args)
+ return runner.executeCommand(command)
}
/**
Skip the creation of the fastlane/README.md file when running fastlane
Tell _fastlane_ to not automatically create a `fastlane/README.md` when running _fastlane_. You can always trigger the creation of this file manually by running `fastlane docs`.
*/
public func skipDocs() {
- let command = RubyCommand(commandID: "", methodName: "skip_docs", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "skip_docs", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Send a success/error message to your [Slack](https://slack.com) group
@@ -6975,63 +9802,82 @@
- useWebhookConfiguredUsernameAndIcon: Use webhook's default username and icon settings? (true/false)
- slackUrl: Create an Incoming WebHook for your Slack group
- username: Overrides the webhook's username property if use_webhook_configured_username_and_icon is false
- iconUrl: Overrides the webhook's image property if use_webhook_configured_username_and_icon is false
- payload: Add additional information to this post. payload must be a hash containing any key with any value
- - defaultPayloads: Remove some of the default payloads. More information about the available payloads on GitHub
+ - defaultPayloads: Specifies default payloads to include. Pass an empty array to suppress all the default payloads
- attachmentProperties: Merge additional properties in the slack attachment, see https://api.slack.com/docs/attachments
- success: Was this build successful? (true/false)
- failOnError: Should an error sending the slack notification cause a failure? (true/false)
- linkNames: Find and link channel names and usernames (true/false)
Create an Incoming WebHook and export this as `SLACK_URL`. Can send a message to **#channel** (by default), a direct message to **@username** or a message to a private group **group** with success (green) or failure (red) status.
*/
-public func slack(message: String? = nil,
- pretext: String? = nil,
- channel: String? = nil,
- useWebhookConfiguredUsernameAndIcon: Bool = false,
+public func slack(message: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pretext: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ channel: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ useWebhookConfiguredUsernameAndIcon: OptionalConfigValue<Bool> = .fastlaneDefault(false),
slackUrl: String,
username: String = "fastlane",
iconUrl: String = "https://fastlane.tools/assets/img/fastlane_icon.png",
payload: [String: Any] = [:],
- defaultPayloads: [String]? = nil,
+ defaultPayloads: [String] = ["lane", "test_result", "git_branch", "git_author", "last_git_commit", "last_git_commit_hash"],
attachmentProperties: [String: Any] = [:],
- success: Bool = true,
- failOnError: Bool = true,
- linkNames: Bool = false)
+ success: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ failOnError: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ linkNames: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "slack", className: nil, args: [RubyCommand.Argument(name: "message", value: message),
- RubyCommand.Argument(name: "pretext", value: pretext),
- RubyCommand.Argument(name: "channel", value: channel),
- RubyCommand.Argument(name: "use_webhook_configured_username_and_icon", value: useWebhookConfiguredUsernameAndIcon),
- RubyCommand.Argument(name: "slack_url", value: slackUrl),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "icon_url", value: iconUrl),
- RubyCommand.Argument(name: "payload", value: payload),
- RubyCommand.Argument(name: "default_payloads", value: defaultPayloads),
- RubyCommand.Argument(name: "attachment_properties", value: attachmentProperties),
- RubyCommand.Argument(name: "success", value: success),
- RubyCommand.Argument(name: "fail_on_error", value: failOnError),
- RubyCommand.Argument(name: "link_names", value: linkNames)])
+ let messageArg = message.asRubyArgument(name: "message", type: nil)
+ let pretextArg = pretext.asRubyArgument(name: "pretext", type: nil)
+ let channelArg = channel.asRubyArgument(name: "channel", type: nil)
+ let useWebhookConfiguredUsernameAndIconArg = useWebhookConfiguredUsernameAndIcon.asRubyArgument(name: "use_webhook_configured_username_and_icon", type: nil)
+ let slackUrlArg = RubyCommand.Argument(name: "slack_url", value: slackUrl, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let iconUrlArg = RubyCommand.Argument(name: "icon_url", value: iconUrl, type: nil)
+ let payloadArg = RubyCommand.Argument(name: "payload", value: payload, type: nil)
+ let defaultPayloadsArg = RubyCommand.Argument(name: "default_payloads", value: defaultPayloads, type: nil)
+ let attachmentPropertiesArg = RubyCommand.Argument(name: "attachment_properties", value: attachmentProperties, type: nil)
+ let successArg = success.asRubyArgument(name: "success", type: nil)
+ let failOnErrorArg = failOnError.asRubyArgument(name: "fail_on_error", type: nil)
+ let linkNamesArg = linkNames.asRubyArgument(name: "link_names", type: nil)
+ let array: [RubyCommand.Argument?] = [messageArg,
+ pretextArg,
+ channelArg,
+ useWebhookConfiguredUsernameAndIconArg,
+ slackUrlArg,
+ usernameArg,
+ iconUrlArg,
+ payloadArg,
+ defaultPayloadsArg,
+ attachmentPropertiesArg,
+ successArg,
+ failOnErrorArg,
+ linkNamesArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "slack", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Show a train of the fastlane progress
- returns: A string that is being sent to slack
*/
public func slackTrain() {
- let command = RubyCommand(commandID: "", methodName: "slack_train", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "slack_train", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
*/
public func slackTrainCrash() {
- let command = RubyCommand(commandID: "", methodName: "slack_train_crash", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "slack_train_crash", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Show a train of the fastlane progress
@@ -7043,16 +9889,24 @@
- reverseDirection: Pass true if you want the train to go from left to right
*/
public func slackTrainStart(distance: Int = 5,
train: String = "🚝",
rail: String = "=",
- reverseDirection: Bool = false)
+ reverseDirection: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "slack_train_start", className: nil, args: [RubyCommand.Argument(name: "distance", value: distance),
- RubyCommand.Argument(name: "train", value: train),
- RubyCommand.Argument(name: "rail", value: rail),
- RubyCommand.Argument(name: "reverse_direction", value: reverseDirection)])
+ let distanceArg = RubyCommand.Argument(name: "distance", value: distance, type: nil)
+ let trainArg = RubyCommand.Argument(name: "train", value: train, type: nil)
+ let railArg = RubyCommand.Argument(name: "rail", value: rail, type: nil)
+ let reverseDirectionArg = reverseDirection.asRubyArgument(name: "reverse_direction", type: nil)
+ let array: [RubyCommand.Argument?] = [distanceArg,
+ trainArg,
+ railArg,
+ reverseDirectionArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "slack_train_start", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Use slather to generate a code coverage report
@@ -7091,73 +9945,108 @@
- decimals: The amount of decimals to use for % coverage reporting
Slather works with multiple code coverage formats, including Xcode 7 code coverage.
Slather is available at [https://github.com/SlatherOrg/slather](https://github.com/SlatherOrg/slather).
*/
-public func slather(buildDirectory: String? = nil,
- proj: String? = nil,
- workspace: String? = nil,
- scheme: String? = nil,
- configuration: String? = nil,
- inputFormat: String? = nil,
- buildkite: Bool? = nil,
- teamcity: Bool? = nil,
- jenkins: Bool? = nil,
- travis: Bool? = nil,
- travisPro: Bool? = nil,
- circleci: Bool? = nil,
- coveralls: Bool? = nil,
- simpleOutput: Bool? = nil,
- gutterJson: Bool? = nil,
- coberturaXml: Bool? = nil,
- sonarqubeXml: Bool? = nil,
- llvmCov: Any? = nil,
- json: Bool? = nil,
- html: Bool? = nil,
- show: Bool = false,
- sourceDirectory: String? = nil,
- outputDirectory: String? = nil,
- ignore: [String]? = nil,
- verbose: Bool? = nil,
- useBundleExec: Bool = false,
- binaryBasename: Bool = false,
- binaryFile: [String]? = nil,
- arch: String? = nil,
- sourceFiles: Bool = false,
- decimals: Bool = false)
+public func slather(buildDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ inputFormat: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildkite: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ teamcity: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ jenkins: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ travis: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ travisPro: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ circleci: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ coveralls: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ simpleOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ gutterJson: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ coberturaXml: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ sonarqubeXml: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ llvmCov: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ json: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ html: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ show: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ sourceDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ignore: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ useBundleExec: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ binaryBasename: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ binaryFile: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ arch: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sourceFiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ decimals: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "slather", className: nil, args: [RubyCommand.Argument(name: "build_directory", value: buildDirectory),
- RubyCommand.Argument(name: "proj", value: proj),
- RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "input_format", value: inputFormat),
- RubyCommand.Argument(name: "buildkite", value: buildkite),
- RubyCommand.Argument(name: "teamcity", value: teamcity),
- RubyCommand.Argument(name: "jenkins", value: jenkins),
- RubyCommand.Argument(name: "travis", value: travis),
- RubyCommand.Argument(name: "travis_pro", value: travisPro),
- RubyCommand.Argument(name: "circleci", value: circleci),
- RubyCommand.Argument(name: "coveralls", value: coveralls),
- RubyCommand.Argument(name: "simple_output", value: simpleOutput),
- RubyCommand.Argument(name: "gutter_json", value: gutterJson),
- RubyCommand.Argument(name: "cobertura_xml", value: coberturaXml),
- RubyCommand.Argument(name: "sonarqube_xml", value: sonarqubeXml),
- RubyCommand.Argument(name: "llvm_cov", value: llvmCov),
- RubyCommand.Argument(name: "json", value: json),
- RubyCommand.Argument(name: "html", value: html),
- RubyCommand.Argument(name: "show", value: show),
- RubyCommand.Argument(name: "source_directory", value: sourceDirectory),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "ignore", value: ignore),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
- RubyCommand.Argument(name: "binary_basename", value: binaryBasename),
- RubyCommand.Argument(name: "binary_file", value: binaryFile),
- RubyCommand.Argument(name: "arch", value: arch),
- RubyCommand.Argument(name: "source_files", value: sourceFiles),
- RubyCommand.Argument(name: "decimals", value: decimals)])
+ let buildDirectoryArg = buildDirectory.asRubyArgument(name: "build_directory", type: nil)
+ let projArg = proj.asRubyArgument(name: "proj", type: nil)
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let inputFormatArg = inputFormat.asRubyArgument(name: "input_format", type: nil)
+ let buildkiteArg = buildkite.asRubyArgument(name: "buildkite", type: nil)
+ let teamcityArg = teamcity.asRubyArgument(name: "teamcity", type: nil)
+ let jenkinsArg = jenkins.asRubyArgument(name: "jenkins", type: nil)
+ let travisArg = travis.asRubyArgument(name: "travis", type: nil)
+ let travisProArg = travisPro.asRubyArgument(name: "travis_pro", type: nil)
+ let circleciArg = circleci.asRubyArgument(name: "circleci", type: nil)
+ let coverallsArg = coveralls.asRubyArgument(name: "coveralls", type: nil)
+ let simpleOutputArg = simpleOutput.asRubyArgument(name: "simple_output", type: nil)
+ let gutterJsonArg = gutterJson.asRubyArgument(name: "gutter_json", type: nil)
+ let coberturaXmlArg = coberturaXml.asRubyArgument(name: "cobertura_xml", type: nil)
+ let sonarqubeXmlArg = sonarqubeXml.asRubyArgument(name: "sonarqube_xml", type: nil)
+ let llvmCovArg = llvmCov.asRubyArgument(name: "llvm_cov", type: nil)
+ let jsonArg = json.asRubyArgument(name: "json", type: nil)
+ let htmlArg = html.asRubyArgument(name: "html", type: nil)
+ let showArg = show.asRubyArgument(name: "show", type: nil)
+ let sourceDirectoryArg = sourceDirectory.asRubyArgument(name: "source_directory", type: nil)
+ let outputDirectoryArg = outputDirectory.asRubyArgument(name: "output_directory", type: nil)
+ let ignoreArg = ignore.asRubyArgument(name: "ignore", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let useBundleExecArg = useBundleExec.asRubyArgument(name: "use_bundle_exec", type: nil)
+ let binaryBasenameArg = binaryBasename.asRubyArgument(name: "binary_basename", type: nil)
+ let binaryFileArg = binaryFile.asRubyArgument(name: "binary_file", type: nil)
+ let archArg = arch.asRubyArgument(name: "arch", type: nil)
+ let sourceFilesArg = sourceFiles.asRubyArgument(name: "source_files", type: nil)
+ let decimalsArg = decimals.asRubyArgument(name: "decimals", type: nil)
+ let array: [RubyCommand.Argument?] = [buildDirectoryArg,
+ projArg,
+ workspaceArg,
+ schemeArg,
+ configurationArg,
+ inputFormatArg,
+ buildkiteArg,
+ teamcityArg,
+ jenkinsArg,
+ travisArg,
+ travisProArg,
+ circleciArg,
+ coverallsArg,
+ simpleOutputArg,
+ gutterJsonArg,
+ coberturaXmlArg,
+ sonarqubeXmlArg,
+ llvmCovArg,
+ jsonArg,
+ htmlArg,
+ showArg,
+ sourceDirectoryArg,
+ outputDirectoryArg,
+ ignoreArg,
+ verboseArg,
+ useBundleExecArg,
+ binaryBasenameArg,
+ binaryFileArg,
+ archArg,
+ sourceFilesArg,
+ decimalsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "slather", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `capture_ios_screenshots` action
@@ -7177,11 +10066,12 @@
- skipHelperVersionCheck: Do not check for most recent SnapshotHelper code
- clearPreviousScreenshots: Enabling this option will automatically clear previously generated screenshots before running snapshot
- reinstallApp: Enabling this option will automatically uninstall the application before running it
- eraseSimulator: Enabling this option will automatically erase the simulator before running the application
- headless: Enabling this option will prevent displaying the simulator window
- - overrideStatusBar: Enabling this option wil automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBar: Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception
+ - overrideStatusBarArguments: Fully customize the status bar by setting each option here. See `xcrun simctl status_bar --help`
- localizeSimulator: Enabling this option will configure the Simulator's system language
- darkMode: Enabling this option will configure the Simulator to be in dark mode (false for light, true for dark)
- appIdentifier: The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)
- addPhotos: A list of photos that should be added to the simulator before running the application
- addVideos: A list of videos that should be added to the simulator before running the application
@@ -7200,105 +10090,168 @@
- testTargetName: The name of the target you want to test (if you desire to override the Target Application from Xcode)
- namespaceLogFiles: Separate the log files per device and per language
- concurrentSimulators: Take snapshots on multiple simulators concurrently. Note: This option is only applicable when running against Xcode 9
- disableSlideToType: Disable the simulator from showing the 'Slide to type' prompt
- clonedSourcePackagesPath: Sets a custom path for Swift Package Manager dependencies
+ - skipPackageDependenciesResolution: Skips resolution of Swift Package Manager dependencies
+ - disablePackageAutomaticUpdates: Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
- testplan: The testplan associated with the scheme that should be used for testing
- onlyTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to run
- skipTesting: Array of strings matching Test Bundle/Test Suite/Test Cases to skip
- disableXcpretty: Disable xcpretty formatting of build
- suppressXcodeOutput: Suppress the output of xcodebuild to stdout. Output is still saved in buildlog_path
+ - useSystemScm: Lets xcodebuild use system's scm configuration
*/
-public func snapshot(workspace: Any? = snapshotfile.workspace,
- project: Any? = snapshotfile.project,
- xcargs: Any? = snapshotfile.xcargs,
- xcconfig: Any? = snapshotfile.xcconfig,
- devices: [String]? = snapshotfile.devices,
+public func snapshot(workspace: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.workspace),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.project),
+ xcargs: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.xcargs),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.xcconfig),
+ devices: OptionalConfigValue<[String]?> = .fastlaneDefault(snapshotfile.devices),
languages: [String] = snapshotfile.languages,
launchArguments: [String] = snapshotfile.launchArguments,
- outputDirectory: Any = snapshotfile.outputDirectory,
- outputSimulatorLogs: Bool = snapshotfile.outputSimulatorLogs,
- iosVersion: Any? = snapshotfile.iosVersion,
- skipOpenSummary: Bool = snapshotfile.skipOpenSummary,
- skipHelperVersionCheck: Bool = snapshotfile.skipHelperVersionCheck,
- clearPreviousScreenshots: Bool = snapshotfile.clearPreviousScreenshots,
- reinstallApp: Bool = snapshotfile.reinstallApp,
- eraseSimulator: Bool = snapshotfile.eraseSimulator,
- headless: Bool = snapshotfile.headless,
- overrideStatusBar: Bool = snapshotfile.overrideStatusBar,
- localizeSimulator: Bool = snapshotfile.localizeSimulator,
- darkMode: Bool? = snapshotfile.darkMode,
- appIdentifier: Any? = snapshotfile.appIdentifier,
- addPhotos: [String]? = snapshotfile.addPhotos,
- addVideos: [String]? = snapshotfile.addVideos,
- htmlTemplate: Any? = snapshotfile.htmlTemplate,
- buildlogPath: Any = snapshotfile.buildlogPath,
- clean: Bool = snapshotfile.clean,
- testWithoutBuilding: Bool? = snapshotfile.testWithoutBuilding,
- configuration: Any? = snapshotfile.configuration,
- xcprettyArgs: Any? = snapshotfile.xcprettyArgs,
- sdk: Any? = snapshotfile.sdk,
- scheme: Any? = snapshotfile.scheme,
+ outputDirectory: String = snapshotfile.outputDirectory,
+ outputSimulatorLogs: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.outputSimulatorLogs),
+ iosVersion: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.iosVersion),
+ skipOpenSummary: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.skipOpenSummary),
+ skipHelperVersionCheck: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.skipHelperVersionCheck),
+ clearPreviousScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.clearPreviousScreenshots),
+ reinstallApp: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.reinstallApp),
+ eraseSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.eraseSimulator),
+ headless: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.headless),
+ overrideStatusBar: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.overrideStatusBar),
+ overrideStatusBarArguments: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.overrideStatusBarArguments),
+ localizeSimulator: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.localizeSimulator),
+ darkMode: OptionalConfigValue<Bool?> = .fastlaneDefault(snapshotfile.darkMode),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.appIdentifier),
+ addPhotos: OptionalConfigValue<[String]?> = .fastlaneDefault(snapshotfile.addPhotos),
+ addVideos: OptionalConfigValue<[String]?> = .fastlaneDefault(snapshotfile.addVideos),
+ htmlTemplate: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.htmlTemplate),
+ buildlogPath: String = snapshotfile.buildlogPath,
+ clean: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.clean),
+ testWithoutBuilding: OptionalConfigValue<Bool?> = .fastlaneDefault(snapshotfile.testWithoutBuilding),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.configuration),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.xcprettyArgs),
+ sdk: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.sdk),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.scheme),
numberOfRetries: Int = snapshotfile.numberOfRetries,
- stopAfterFirstError: Bool = snapshotfile.stopAfterFirstError,
- derivedDataPath: Any? = snapshotfile.derivedDataPath,
- resultBundle: Bool = snapshotfile.resultBundle,
- testTargetName: Any? = snapshotfile.testTargetName,
+ stopAfterFirstError: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.stopAfterFirstError),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.derivedDataPath),
+ resultBundle: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.resultBundle),
+ testTargetName: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.testTargetName),
namespaceLogFiles: Any? = snapshotfile.namespaceLogFiles,
- concurrentSimulators: Bool = snapshotfile.concurrentSimulators,
- disableSlideToType: Bool = snapshotfile.disableSlideToType,
- clonedSourcePackagesPath: Any? = snapshotfile.clonedSourcePackagesPath,
- testplan: Any? = snapshotfile.testplan,
+ concurrentSimulators: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.concurrentSimulators),
+ disableSlideToType: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.disableSlideToType),
+ clonedSourcePackagesPath: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.clonedSourcePackagesPath),
+ skipPackageDependenciesResolution: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.skipPackageDependenciesResolution),
+ disablePackageAutomaticUpdates: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.disablePackageAutomaticUpdates),
+ testplan: OptionalConfigValue<String?> = .fastlaneDefault(snapshotfile.testplan),
onlyTesting: Any? = snapshotfile.onlyTesting,
skipTesting: Any? = snapshotfile.skipTesting,
- disableXcpretty: Bool? = snapshotfile.disableXcpretty,
- suppressXcodeOutput: Bool? = snapshotfile.suppressXcodeOutput)
+ disableXcpretty: OptionalConfigValue<Bool?> = .fastlaneDefault(snapshotfile.disableXcpretty),
+ suppressXcodeOutput: OptionalConfigValue<Bool?> = .fastlaneDefault(snapshotfile.suppressXcodeOutput),
+ useSystemScm: OptionalConfigValue<Bool> = .fastlaneDefault(snapshotfile.useSystemScm))
{
- let command = RubyCommand(commandID: "", methodName: "snapshot", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "xcargs", value: xcargs),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "devices", value: devices),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "launch_arguments", value: launchArguments),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "output_simulator_logs", value: outputSimulatorLogs),
- RubyCommand.Argument(name: "ios_version", value: iosVersion),
- RubyCommand.Argument(name: "skip_open_summary", value: skipOpenSummary),
- RubyCommand.Argument(name: "skip_helper_version_check", value: skipHelperVersionCheck),
- RubyCommand.Argument(name: "clear_previous_screenshots", value: clearPreviousScreenshots),
- RubyCommand.Argument(name: "reinstall_app", value: reinstallApp),
- RubyCommand.Argument(name: "erase_simulator", value: eraseSimulator),
- RubyCommand.Argument(name: "headless", value: headless),
- RubyCommand.Argument(name: "override_status_bar", value: overrideStatusBar),
- RubyCommand.Argument(name: "localize_simulator", value: localizeSimulator),
- RubyCommand.Argument(name: "dark_mode", value: darkMode),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "add_photos", value: addPhotos),
- RubyCommand.Argument(name: "add_videos", value: addVideos),
- RubyCommand.Argument(name: "html_template", value: htmlTemplate),
- RubyCommand.Argument(name: "buildlog_path", value: buildlogPath),
- RubyCommand.Argument(name: "clean", value: clean),
- RubyCommand.Argument(name: "test_without_building", value: testWithoutBuilding),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "sdk", value: sdk),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
- RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "result_bundle", value: resultBundle),
- RubyCommand.Argument(name: "test_target_name", value: testTargetName),
- RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
- RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators),
- RubyCommand.Argument(name: "disable_slide_to_type", value: disableSlideToType),
- RubyCommand.Argument(name: "cloned_source_packages_path", value: clonedSourcePackagesPath),
- RubyCommand.Argument(name: "testplan", value: testplan),
- RubyCommand.Argument(name: "only_testing", value: onlyTesting),
- RubyCommand.Argument(name: "skip_testing", value: skipTesting),
- RubyCommand.Argument(name: "disable_xcpretty", value: disableXcpretty),
- RubyCommand.Argument(name: "suppress_xcode_output", value: suppressXcodeOutput)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let xcargsArg = xcargs.asRubyArgument(name: "xcargs", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let devicesArg = devices.asRubyArgument(name: "devices", type: nil)
+ let languagesArg = RubyCommand.Argument(name: "languages", value: languages, type: nil)
+ let launchArgumentsArg = RubyCommand.Argument(name: "launch_arguments", value: launchArguments, type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let outputSimulatorLogsArg = outputSimulatorLogs.asRubyArgument(name: "output_simulator_logs", type: nil)
+ let iosVersionArg = iosVersion.asRubyArgument(name: "ios_version", type: nil)
+ let skipOpenSummaryArg = skipOpenSummary.asRubyArgument(name: "skip_open_summary", type: nil)
+ let skipHelperVersionCheckArg = skipHelperVersionCheck.asRubyArgument(name: "skip_helper_version_check", type: nil)
+ let clearPreviousScreenshotsArg = clearPreviousScreenshots.asRubyArgument(name: "clear_previous_screenshots", type: nil)
+ let reinstallAppArg = reinstallApp.asRubyArgument(name: "reinstall_app", type: nil)
+ let eraseSimulatorArg = eraseSimulator.asRubyArgument(name: "erase_simulator", type: nil)
+ let headlessArg = headless.asRubyArgument(name: "headless", type: nil)
+ let overrideStatusBarArg = overrideStatusBar.asRubyArgument(name: "override_status_bar", type: nil)
+ let overrideStatusBarArgumentsArg = overrideStatusBarArguments.asRubyArgument(name: "override_status_bar_arguments", type: nil)
+ let localizeSimulatorArg = localizeSimulator.asRubyArgument(name: "localize_simulator", type: nil)
+ let darkModeArg = darkMode.asRubyArgument(name: "dark_mode", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let addPhotosArg = addPhotos.asRubyArgument(name: "add_photos", type: nil)
+ let addVideosArg = addVideos.asRubyArgument(name: "add_videos", type: nil)
+ let htmlTemplateArg = htmlTemplate.asRubyArgument(name: "html_template", type: nil)
+ let buildlogPathArg = RubyCommand.Argument(name: "buildlog_path", value: buildlogPath, type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let testWithoutBuildingArg = testWithoutBuilding.asRubyArgument(name: "test_without_building", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let sdkArg = sdk.asRubyArgument(name: "sdk", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let numberOfRetriesArg = RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries, type: nil)
+ let stopAfterFirstErrorArg = stopAfterFirstError.asRubyArgument(name: "stop_after_first_error", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let resultBundleArg = resultBundle.asRubyArgument(name: "result_bundle", type: nil)
+ let testTargetNameArg = testTargetName.asRubyArgument(name: "test_target_name", type: nil)
+ let namespaceLogFilesArg = RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles, type: nil)
+ let concurrentSimulatorsArg = concurrentSimulators.asRubyArgument(name: "concurrent_simulators", type: nil)
+ let disableSlideToTypeArg = disableSlideToType.asRubyArgument(name: "disable_slide_to_type", type: nil)
+ let clonedSourcePackagesPathArg = clonedSourcePackagesPath.asRubyArgument(name: "cloned_source_packages_path", type: nil)
+ let skipPackageDependenciesResolutionArg = skipPackageDependenciesResolution.asRubyArgument(name: "skip_package_dependencies_resolution", type: nil)
+ let disablePackageAutomaticUpdatesArg = disablePackageAutomaticUpdates.asRubyArgument(name: "disable_package_automatic_updates", type: nil)
+ let testplanArg = testplan.asRubyArgument(name: "testplan", type: nil)
+ let onlyTestingArg = RubyCommand.Argument(name: "only_testing", value: onlyTesting, type: nil)
+ let skipTestingArg = RubyCommand.Argument(name: "skip_testing", value: skipTesting, type: nil)
+ let disableXcprettyArg = disableXcpretty.asRubyArgument(name: "disable_xcpretty", type: nil)
+ let suppressXcodeOutputArg = suppressXcodeOutput.asRubyArgument(name: "suppress_xcode_output", type: nil)
+ let useSystemScmArg = useSystemScm.asRubyArgument(name: "use_system_scm", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ xcargsArg,
+ xcconfigArg,
+ devicesArg,
+ languagesArg,
+ launchArgumentsArg,
+ outputDirectoryArg,
+ outputSimulatorLogsArg,
+ iosVersionArg,
+ skipOpenSummaryArg,
+ skipHelperVersionCheckArg,
+ clearPreviousScreenshotsArg,
+ reinstallAppArg,
+ eraseSimulatorArg,
+ headlessArg,
+ overrideStatusBarArg,
+ overrideStatusBarArgumentsArg,
+ localizeSimulatorArg,
+ darkModeArg,
+ appIdentifierArg,
+ addPhotosArg,
+ addVideosArg,
+ htmlTemplateArg,
+ buildlogPathArg,
+ cleanArg,
+ testWithoutBuildingArg,
+ configurationArg,
+ xcprettyArgsArg,
+ sdkArg,
+ schemeArg,
+ numberOfRetriesArg,
+ stopAfterFirstErrorArg,
+ derivedDataPathArg,
+ resultBundleArg,
+ testTargetNameArg,
+ namespaceLogFilesArg,
+ concurrentSimulatorsArg,
+ disableSlideToTypeArg,
+ clonedSourcePackagesPathArg,
+ skipPackageDependenciesResolutionArg,
+ disablePackageAutomaticUpdatesArg,
+ testplanArg,
+ onlyTestingArg,
+ skipTestingArg,
+ disableXcprettyArg,
+ suppressXcodeOutputArg,
+ useSystemScmArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "snapshot", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Invokes sonar-scanner to programmatically run SonarQube analysis
@@ -7324,47 +10277,136 @@
- returns: The exit code of the sonar-scanner binary
See [http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner](http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner) for details.
It can process unit test results if formatted as junit report as shown in [xctest](https://docs.fastlane.tools/actions/xctest/) action. It can also integrate coverage reports in Cobertura format, which can be transformed into by the [slather](https://docs.fastlane.tools/actions/slather/) action.
*/
-public func sonar(projectConfigurationPath: String? = nil,
- projectKey: String? = nil,
- projectName: String? = nil,
- projectVersion: String? = nil,
- sourcesPath: String? = nil,
- exclusions: String? = nil,
- projectLanguage: String? = nil,
- sourceEncoding: String? = nil,
- sonarRunnerArgs: String? = nil,
- sonarLogin: String? = nil,
- sonarUrl: String? = nil,
- sonarOrganization: String? = nil,
- branchName: String? = nil,
- pullRequestBranch: String? = nil,
- pullRequestBase: String? = nil,
- pullRequestKey: String? = nil)
+public func sonar(projectConfigurationPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ projectKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ projectName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ projectVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sourcesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ exclusions: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ projectLanguage: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sourceEncoding: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sonarRunnerArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sonarLogin: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sonarUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sonarOrganization: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ branchName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pullRequestBranch: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pullRequestBase: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pullRequestKey: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "sonar", className: nil, args: [RubyCommand.Argument(name: "project_configuration_path", value: projectConfigurationPath),
- RubyCommand.Argument(name: "project_key", value: projectKey),
- RubyCommand.Argument(name: "project_name", value: projectName),
- RubyCommand.Argument(name: "project_version", value: projectVersion),
- RubyCommand.Argument(name: "sources_path", value: sourcesPath),
- RubyCommand.Argument(name: "exclusions", value: exclusions),
- RubyCommand.Argument(name: "project_language", value: projectLanguage),
- RubyCommand.Argument(name: "source_encoding", value: sourceEncoding),
- RubyCommand.Argument(name: "sonar_runner_args", value: sonarRunnerArgs),
- RubyCommand.Argument(name: "sonar_login", value: sonarLogin),
- RubyCommand.Argument(name: "sonar_url", value: sonarUrl),
- RubyCommand.Argument(name: "sonar_organization", value: sonarOrganization),
- RubyCommand.Argument(name: "branch_name", value: branchName),
- RubyCommand.Argument(name: "pull_request_branch", value: pullRequestBranch),
- RubyCommand.Argument(name: "pull_request_base", value: pullRequestBase),
- RubyCommand.Argument(name: "pull_request_key", value: pullRequestKey)])
+ let projectConfigurationPathArg = projectConfigurationPath.asRubyArgument(name: "project_configuration_path", type: nil)
+ let projectKeyArg = projectKey.asRubyArgument(name: "project_key", type: nil)
+ let projectNameArg = projectName.asRubyArgument(name: "project_name", type: nil)
+ let projectVersionArg = projectVersion.asRubyArgument(name: "project_version", type: nil)
+ let sourcesPathArg = sourcesPath.asRubyArgument(name: "sources_path", type: nil)
+ let exclusionsArg = exclusions.asRubyArgument(name: "exclusions", type: nil)
+ let projectLanguageArg = projectLanguage.asRubyArgument(name: "project_language", type: nil)
+ let sourceEncodingArg = sourceEncoding.asRubyArgument(name: "source_encoding", type: nil)
+ let sonarRunnerArgsArg = sonarRunnerArgs.asRubyArgument(name: "sonar_runner_args", type: nil)
+ let sonarLoginArg = sonarLogin.asRubyArgument(name: "sonar_login", type: nil)
+ let sonarUrlArg = sonarUrl.asRubyArgument(name: "sonar_url", type: nil)
+ let sonarOrganizationArg = sonarOrganization.asRubyArgument(name: "sonar_organization", type: nil)
+ let branchNameArg = branchName.asRubyArgument(name: "branch_name", type: nil)
+ let pullRequestBranchArg = pullRequestBranch.asRubyArgument(name: "pull_request_branch", type: nil)
+ let pullRequestBaseArg = pullRequestBase.asRubyArgument(name: "pull_request_base", type: nil)
+ let pullRequestKeyArg = pullRequestKey.asRubyArgument(name: "pull_request_key", type: nil)
+ let array: [RubyCommand.Argument?] = [projectConfigurationPathArg,
+ projectKeyArg,
+ projectNameArg,
+ projectVersionArg,
+ sourcesPathArg,
+ exclusionsArg,
+ projectLanguageArg,
+ sourceEncodingArg,
+ sonarRunnerArgsArg,
+ sonarLoginArg,
+ sonarUrlArg,
+ sonarOrganizationArg,
+ branchNameArg,
+ pullRequestBranchArg,
+ pullRequestBaseArg,
+ pullRequestKeyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "sonar", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
+ Generate docs using SourceDocs
+
+ - parameters:
+ - allModules: Generate documentation for all modules in a Swift package
+ - spmModule: Generate documentation for Swift Package Manager module
+ - moduleName: Generate documentation for a Swift module
+ - linkBeginning: The text to begin links with
+ - linkEnding: The text to end links with (default: .md)
+ - outputFolder: Output directory to clean (default: Documentation/Reference)
+ - minAcl: Access level to include in documentation [private, fileprivate, internal, public, open] (default: public)
+ - moduleNamePath: Include the module name as part of the output folder path
+ - clean: Delete output folder before generating documentation
+ - collapsible: Put methods, properties and enum cases inside collapsible blocks
+ - tableOfContents: Generate a table of contents with properties and methods for each type
+ - reproducible: Generate documentation that is reproducible: only depends on the sources
+ - scheme: Create documentation for specific scheme
+ - sdkPlatform: Create documentation for specific sdk platform
+ */
+public func sourcedocs(allModules: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ spmModule: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ moduleName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ linkBeginning: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ linkEnding: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputFolder: String,
+ minAcl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ moduleNamePath: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ clean: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ collapsible: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ tableOfContents: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ reproducible: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sdkPlatform: OptionalConfigValue<String?> = .fastlaneDefault(nil))
+{
+ let allModulesArg = allModules.asRubyArgument(name: "all_modules", type: nil)
+ let spmModuleArg = spmModule.asRubyArgument(name: "spm_module", type: nil)
+ let moduleNameArg = moduleName.asRubyArgument(name: "module_name", type: nil)
+ let linkBeginningArg = linkBeginning.asRubyArgument(name: "link_beginning", type: nil)
+ let linkEndingArg = linkEnding.asRubyArgument(name: "link_ending", type: nil)
+ let outputFolderArg = RubyCommand.Argument(name: "output_folder", value: outputFolder, type: nil)
+ let minAclArg = minAcl.asRubyArgument(name: "min_acl", type: nil)
+ let moduleNamePathArg = moduleNamePath.asRubyArgument(name: "module_name_path", type: nil)
+ let cleanArg = clean.asRubyArgument(name: "clean", type: nil)
+ let collapsibleArg = collapsible.asRubyArgument(name: "collapsible", type: nil)
+ let tableOfContentsArg = tableOfContents.asRubyArgument(name: "table_of_contents", type: nil)
+ let reproducibleArg = reproducible.asRubyArgument(name: "reproducible", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let sdkPlatformArg = sdkPlatform.asRubyArgument(name: "sdk_platform", type: nil)
+ let array: [RubyCommand.Argument?] = [allModulesArg,
+ spmModuleArg,
+ moduleNameArg,
+ linkBeginningArg,
+ linkEndingArg,
+ outputFolderArg,
+ minAclArg,
+ moduleNamePathArg,
+ cleanArg,
+ collapsibleArg,
+ tableOfContentsArg,
+ reproducibleArg,
+ schemeArg,
+ sdkPlatformArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "sourcedocs", className: nil, args: args)
+ _ = runner.executeCommand(command)
+}
+
+/**
Find, print, and copy Spaceship logs
- parameters:
- latest: Finds only the latest Spaceshop log file if set to true, otherwise returns all
- printContents: Prints the contents of the found Spaceship log file(s)
@@ -7372,31 +10414,45 @@
- copyToPath: Copies the found Spaceship log file(s) to a directory
- copyToClipboard: Copies the contents of the found Spaceship log file(s) to the clipboard
- returns: The array of Spaceship logs
*/
-public func spaceshipLogs(latest: Bool = true,
- printContents: Bool = false,
- printPaths: Bool = false,
- copyToPath: String? = nil,
- copyToClipboard: Bool = false)
+@discardableResult public func spaceshipLogs(latest: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ printContents: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ printPaths: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ copyToPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ copyToClipboard: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> [String]
{
- let command = RubyCommand(commandID: "", methodName: "spaceship_logs", className: nil, args: [RubyCommand.Argument(name: "latest", value: latest),
- RubyCommand.Argument(name: "print_contents", value: printContents),
- RubyCommand.Argument(name: "print_paths", value: printPaths),
- RubyCommand.Argument(name: "copy_to_path", value: copyToPath),
- RubyCommand.Argument(name: "copy_to_clipboard", value: copyToClipboard)])
- _ = runner.executeCommand(command)
+ let latestArg = latest.asRubyArgument(name: "latest", type: nil)
+ let printContentsArg = printContents.asRubyArgument(name: "print_contents", type: nil)
+ let printPathsArg = printPaths.asRubyArgument(name: "print_paths", type: nil)
+ let copyToPathArg = copyToPath.asRubyArgument(name: "copy_to_path", type: nil)
+ let copyToClipboardArg = copyToClipboard.asRubyArgument(name: "copy_to_clipboard", type: nil)
+ let array: [RubyCommand.Argument?] = [latestArg,
+ printContentsArg,
+ printPathsArg,
+ copyToPathArg,
+ copyToClipboardArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "spaceship_logs", className: nil, args: args)
+ return parseArray(fromString: runner.executeCommand(command))
}
/**
Print out Spaceship stats from this session (number of request to each domain)
- parameter printRequestLogs: Print all URLs requested
*/
-public func spaceshipStats(printRequestLogs: Bool = false) {
- let command = RubyCommand(commandID: "", methodName: "spaceship_stats", className: nil, args: [RubyCommand.Argument(name: "print_request_logs", value: printRequestLogs)])
+public func spaceshipStats(printRequestLogs: OptionalConfigValue<Bool> = .fastlaneDefault(false)) {
+ let printRequestLogsArg = printRequestLogs.asRubyArgument(name: "print_request_logs", type: nil)
+ let array: [RubyCommand.Argument?] = [printRequestLogsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "spaceship_stats", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload dSYM file to [Splunk MINT](https://mint.splunk.com/)
@@ -7410,65 +10466,95 @@
- proxyUsername: Proxy username
- proxyPassword: Proxy password
- proxyAddress: Proxy address
- proxyPort: Proxy port
*/
-public func splunkmint(dsym: String? = nil,
+public func splunkmint(dsym: OptionalConfigValue<String?> = .fastlaneDefault(nil),
apiKey: String,
apiToken: String,
- verbose: Bool = false,
- uploadProgress: Bool = false,
- proxyUsername: String? = nil,
- proxyPassword: String? = nil,
- proxyAddress: String? = nil,
- proxyPort: String? = nil)
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ uploadProgress: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ proxyUsername: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyAddress: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ proxyPort: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "splunkmint", className: nil, args: [RubyCommand.Argument(name: "dsym", value: dsym),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "upload_progress", value: uploadProgress),
- RubyCommand.Argument(name: "proxy_username", value: proxyUsername),
- RubyCommand.Argument(name: "proxy_password", value: proxyPassword),
- RubyCommand.Argument(name: "proxy_address", value: proxyAddress),
- RubyCommand.Argument(name: "proxy_port", value: proxyPort)])
+ let dsymArg = dsym.asRubyArgument(name: "dsym", type: nil)
+ let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let uploadProgressArg = uploadProgress.asRubyArgument(name: "upload_progress", type: nil)
+ let proxyUsernameArg = proxyUsername.asRubyArgument(name: "proxy_username", type: nil)
+ let proxyPasswordArg = proxyPassword.asRubyArgument(name: "proxy_password", type: nil)
+ let proxyAddressArg = proxyAddress.asRubyArgument(name: "proxy_address", type: nil)
+ let proxyPortArg = proxyPort.asRubyArgument(name: "proxy_port", type: nil)
+ let array: [RubyCommand.Argument?] = [dsymArg,
+ apiKeyArg,
+ apiTokenArg,
+ verboseArg,
+ uploadProgressArg,
+ proxyUsernameArg,
+ proxyPasswordArg,
+ proxyAddressArg,
+ proxyPortArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "splunkmint", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs Swift Package Manager on your project
- parameters:
- command: The swift command (one of: build, test, clean, reset, update, resolve, generate-xcodeproj, init)
+ - enableCodeCoverage: Enables code coverage for the generated Xcode project when using the 'generate-xcodeproj' and the 'test' command
- buildPath: Specify build/cache directory [default: ./.build]
- packagePath: Change working directory before any other operation
- xcconfig: Use xcconfig file to override swift package generate-xcodeproj defaults
- configuration: Build with configuration (debug|release) [default: debug]
- disableSandbox: Disable using the sandbox when executing subprocesses
- xcprettyOutput: Specifies the output type for xcpretty. eg. 'test', or 'simple'
- xcprettyArgs: Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also
- verbose: Increase verbosity of informational output
*/
public func spm(command: String = "build",
- buildPath: String? = nil,
- packagePath: String? = nil,
- xcconfig: String? = nil,
- configuration: String? = nil,
- disableSandbox: Bool = false,
- xcprettyOutput: String? = nil,
- xcprettyArgs: String? = nil,
- verbose: Bool = false)
+ enableCodeCoverage: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ packagePath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ disableSandbox: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ xcprettyOutput: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcprettyArgs: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: [RubyCommand.Argument(name: "command", value: command),
- RubyCommand.Argument(name: "build_path", value: buildPath),
- RubyCommand.Argument(name: "package_path", value: packagePath),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "disable_sandbox", value: disableSandbox),
- RubyCommand.Argument(name: "xcpretty_output", value: xcprettyOutput),
- RubyCommand.Argument(name: "xcpretty_args", value: xcprettyArgs),
- RubyCommand.Argument(name: "verbose", value: verbose)])
+ let commandArg = RubyCommand.Argument(name: "command", value: command, type: nil)
+ let enableCodeCoverageArg = enableCodeCoverage.asRubyArgument(name: "enable_code_coverage", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let packagePathArg = packagePath.asRubyArgument(name: "package_path", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let disableSandboxArg = disableSandbox.asRubyArgument(name: "disable_sandbox", type: nil)
+ let xcprettyOutputArg = xcprettyOutput.asRubyArgument(name: "xcpretty_output", type: nil)
+ let xcprettyArgsArg = xcprettyArgs.asRubyArgument(name: "xcpretty_args", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let array: [RubyCommand.Argument?] = [commandArg,
+ enableCodeCoverageArg,
+ buildPathArg,
+ packagePathArg,
+ xcconfigArg,
+ configurationArg,
+ disableSandboxArg,
+ xcprettyOutputArg,
+ xcprettyArgsArg,
+ verboseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "spm", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Allows remote command execution using ssh
@@ -7482,22 +10568,32 @@
- log: Log commands and output
Lets you execute remote commands via ssh using username/password or ssh-agent. If one of the commands in command-array returns non 0, it fails.
*/
public func ssh(username: String,
- password: String? = nil,
+ password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
host: String,
port: String = "22",
- commands: [String]? = nil,
- log: Bool = true)
+ commands: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ log: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "ssh", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "host", value: host),
- RubyCommand.Argument(name: "port", value: port),
- RubyCommand.Argument(name: "commands", value: commands),
- RubyCommand.Argument(name: "log", value: log)])
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let passwordArg = password.asRubyArgument(name: "password", type: nil)
+ let hostArg = RubyCommand.Argument(name: "host", value: host, type: nil)
+ let portArg = RubyCommand.Argument(name: "port", value: port, type: nil)
+ let commandsArg = commands.asRubyArgument(name: "commands", type: nil)
+ let logArg = log.asRubyArgument(name: "log", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ passwordArg,
+ hostArg,
+ portArg,
+ commandsArg,
+ logArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "ssh", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `upload_to_play_store` action
@@ -7506,11 +10602,11 @@
- packageName: The package name of the application to use
- versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml
- versionCode: Version code (used when updating rollout or promoting specific versions)
- releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
- track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
- - rollout: The percentage of the user fraction when uploading to the rollout track
+ - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
- metadataPath: Path to the directory containing the metadata files
- key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google
- issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account)
- jsonKey: The path to a file containing service account JSON, used to authenticate with Google
- jsonKeyData: The raw service account JSON data used to authenticate with Google
@@ -7524,12 +10620,12 @@
- skipUploadChangelogs: Whether to skip uploading changelogs
- skipUploadImages: Whether to skip uploading images, screenshots not included
- skipUploadScreenshots: Whether to skip uploading SCREENSHOTS
- trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal
- validateOnly: Only validate changes with Google Play rather than actually publish
- - mapping: Path to the mapping file to upload
- - mappingPaths: An array of paths to mapping files to upload
+ - mapping: Path to the mapping file to upload (mapping.txt or native-debug-symbols.zip alike)
+ - mappingPaths: An array of paths to mapping files to upload (mapping.txt or native-debug-symbols.zip alike)
- rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
- checkSupersededTracks: **DEPRECATED!** Google Play does this automatically now - Check the other tracks for superseded versions and disable them
- timeout: Timeout for read, open, and send (in seconds)
- deactivateOnPromote: **DEPRECATED!** Google Play does this automatically now - When promoting to a new track, deactivate the binary in the origin track
- versionCodesToRetain: An array of version codes to retain when publishing a new APK
@@ -7541,141 +10637,199 @@
- ackBundleInstallationWarning: Must be set to true if the bundle installation may trigger a warning on user devices (e.g can only be downloaded over wifi). Typically this is required for bundles over 150MB
More information: https://docs.fastlane.tools/actions/supply/
*/
public func supply(packageName: String,
- versionName: String? = nil,
- versionCode: Int? = nil,
+ versionName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versionCode: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
releaseStatus: String = "completed",
track: String = "production",
- rollout: String? = nil,
- metadataPath: String? = nil,
- key: String? = nil,
- issuer: String? = nil,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- apk: String? = nil,
- apkPaths: [String]? = nil,
- aab: String? = nil,
- aabPaths: [String]? = nil,
- skipUploadApk: Bool = false,
- skipUploadAab: Bool = false,
- skipUploadMetadata: Bool = false,
- skipUploadChangelogs: Bool = false,
- skipUploadImages: Bool = false,
- skipUploadScreenshots: Bool = false,
- trackPromoteTo: String? = nil,
- validateOnly: Bool = false,
- mapping: String? = nil,
- mappingPaths: [String]? = nil,
- rootUrl: String? = nil,
- checkSupersededTracks: Bool = false,
+ rollout: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ metadataPath: String = "./metadata",
+ key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apkPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ aab: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ aabPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ skipUploadApk: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadAab: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadChangelogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadImages: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ trackPromoteTo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ validateOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ mapping: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ mappingPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ checkSupersededTracks: OptionalConfigValue<Bool> = .fastlaneDefault(false),
timeout: Int = 300,
- deactivateOnPromote: Bool = true,
- versionCodesToRetain: [String]? = nil,
- inAppUpdatePriority: Int? = nil,
- obbMainReferencesVersion: String? = nil,
- obbMainFileSize: String? = nil,
- obbPatchReferencesVersion: String? = nil,
- obbPatchFileSize: String? = nil,
- ackBundleInstallationWarning: Bool = false)
+ deactivateOnPromote: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ versionCodesToRetain: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ inAppUpdatePriority: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ obbMainReferencesVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbMainFileSize: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbPatchReferencesVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbPatchFileSize: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ackBundleInstallationWarning: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "supply", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "version_name", value: versionName),
- RubyCommand.Argument(name: "version_code", value: versionCode),
- RubyCommand.Argument(name: "release_status", value: releaseStatus),
- RubyCommand.Argument(name: "track", value: track),
- RubyCommand.Argument(name: "rollout", value: rollout),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "issuer", value: issuer),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "apk_paths", value: apkPaths),
- RubyCommand.Argument(name: "aab", value: aab),
- RubyCommand.Argument(name: "aab_paths", value: aabPaths),
- RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk),
- RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab),
- RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata),
- RubyCommand.Argument(name: "skip_upload_changelogs", value: skipUploadChangelogs),
- RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages),
- RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots),
- RubyCommand.Argument(name: "track_promote_to", value: trackPromoteTo),
- RubyCommand.Argument(name: "validate_only", value: validateOnly),
- RubyCommand.Argument(name: "mapping", value: mapping),
- RubyCommand.Argument(name: "mapping_paths", value: mappingPaths),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
- RubyCommand.Argument(name: "timeout", value: timeout),
- RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote),
- RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain),
- RubyCommand.Argument(name: "in_app_update_priority", value: inAppUpdatePriority),
- RubyCommand.Argument(name: "obb_main_references_version", value: obbMainReferencesVersion),
- RubyCommand.Argument(name: "obb_main_file_size", value: obbMainFileSize),
- RubyCommand.Argument(name: "obb_patch_references_version", value: obbPatchReferencesVersion),
- RubyCommand.Argument(name: "obb_patch_file_size", value: obbPatchFileSize),
- RubyCommand.Argument(name: "ack_bundle_installation_warning", value: ackBundleInstallationWarning)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let versionNameArg = versionName.asRubyArgument(name: "version_name", type: nil)
+ let versionCodeArg = versionCode.asRubyArgument(name: "version_code", type: nil)
+ let releaseStatusArg = RubyCommand.Argument(name: "release_status", value: releaseStatus, type: nil)
+ let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
+ let rolloutArg = rollout.asRubyArgument(name: "rollout", type: nil)
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
+ let keyArg = key.asRubyArgument(name: "key", type: nil)
+ let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let apkPathsArg = apkPaths.asRubyArgument(name: "apk_paths", type: nil)
+ let aabArg = aab.asRubyArgument(name: "aab", type: nil)
+ let aabPathsArg = aabPaths.asRubyArgument(name: "aab_paths", type: nil)
+ let skipUploadApkArg = skipUploadApk.asRubyArgument(name: "skip_upload_apk", type: nil)
+ let skipUploadAabArg = skipUploadAab.asRubyArgument(name: "skip_upload_aab", type: nil)
+ let skipUploadMetadataArg = skipUploadMetadata.asRubyArgument(name: "skip_upload_metadata", type: nil)
+ let skipUploadChangelogsArg = skipUploadChangelogs.asRubyArgument(name: "skip_upload_changelogs", type: nil)
+ let skipUploadImagesArg = skipUploadImages.asRubyArgument(name: "skip_upload_images", type: nil)
+ let skipUploadScreenshotsArg = skipUploadScreenshots.asRubyArgument(name: "skip_upload_screenshots", type: nil)
+ let trackPromoteToArg = trackPromoteTo.asRubyArgument(name: "track_promote_to", type: nil)
+ let validateOnlyArg = validateOnly.asRubyArgument(name: "validate_only", type: nil)
+ let mappingArg = mapping.asRubyArgument(name: "mapping", type: nil)
+ let mappingPathsArg = mappingPaths.asRubyArgument(name: "mapping_paths", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let checkSupersededTracksArg = checkSupersededTracks.asRubyArgument(name: "check_superseded_tracks", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let deactivateOnPromoteArg = deactivateOnPromote.asRubyArgument(name: "deactivate_on_promote", type: nil)
+ let versionCodesToRetainArg = versionCodesToRetain.asRubyArgument(name: "version_codes_to_retain", type: nil)
+ let inAppUpdatePriorityArg = inAppUpdatePriority.asRubyArgument(name: "in_app_update_priority", type: nil)
+ let obbMainReferencesVersionArg = obbMainReferencesVersion.asRubyArgument(name: "obb_main_references_version", type: nil)
+ let obbMainFileSizeArg = obbMainFileSize.asRubyArgument(name: "obb_main_file_size", type: nil)
+ let obbPatchReferencesVersionArg = obbPatchReferencesVersion.asRubyArgument(name: "obb_patch_references_version", type: nil)
+ let obbPatchFileSizeArg = obbPatchFileSize.asRubyArgument(name: "obb_patch_file_size", type: nil)
+ let ackBundleInstallationWarningArg = ackBundleInstallationWarning.asRubyArgument(name: "ack_bundle_installation_warning", type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ versionNameArg,
+ versionCodeArg,
+ releaseStatusArg,
+ trackArg,
+ rolloutArg,
+ metadataPathArg,
+ keyArg,
+ issuerArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ apkArg,
+ apkPathsArg,
+ aabArg,
+ aabPathsArg,
+ skipUploadApkArg,
+ skipUploadAabArg,
+ skipUploadMetadataArg,
+ skipUploadChangelogsArg,
+ skipUploadImagesArg,
+ skipUploadScreenshotsArg,
+ trackPromoteToArg,
+ validateOnlyArg,
+ mappingArg,
+ mappingPathsArg,
+ rootUrlArg,
+ checkSupersededTracksArg,
+ timeoutArg,
+ deactivateOnPromoteArg,
+ versionCodesToRetainArg,
+ inAppUpdatePriorityArg,
+ obbMainReferencesVersionArg,
+ obbMainFileSizeArg,
+ obbPatchReferencesVersionArg,
+ obbPatchFileSizeArg,
+ ackBundleInstallationWarningArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "supply", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Run swift code validation using SwiftLint
- parameters:
- - mode: SwiftLint mode: :lint, :autocorrect or :analyze
+ - mode: SwiftLint mode: :lint, :fix, :autocorrect or :analyze
- path: Specify path to lint
- outputFile: Path to output SwiftLint result
- configFile: Custom configuration file of SwiftLint
- strict: Fail on warnings? (true/false)
- files: List of files to process
- ignoreExitStatus: Ignore the exit status of the SwiftLint command, so that serious violations don't fail the build (true/false)
- raiseIfSwiftlintError: Raises an error if swiftlint fails, so you can fail CI/CD jobs if necessary (true/false)
- - reporter: Choose output reporter. Available: xcode, json, csv, checkstyle, junit, html, emoji, sonarqube, markdown, github-actions-logging
+ - reporter: Choose output reporter. Available: xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging
- quiet: Don't print status logs like 'Linting <file>' & 'Done linting'
- executable: Path to the `swiftlint` executable on your machine
- format: Format code when mode is :autocorrect
- noCache: Ignore the cache when mode is :autocorrect or :lint
- compilerLogPath: Compiler log path when mode is :analyze
*/
-public func swiftlint(mode: Any = "lint",
- path: String? = nil,
- outputFile: String? = nil,
- configFile: String? = nil,
- strict: Bool = false,
- files: Any? = nil,
- ignoreExitStatus: Bool = false,
- raiseIfSwiftlintError: Bool = false,
- reporter: String? = nil,
- quiet: Bool = false,
- executable: String? = nil,
- format: Bool = false,
- noCache: Bool = false,
- compilerLogPath: String? = nil)
+public func swiftlint(mode: String = "lint",
+ path: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ strict: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ files: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ ignoreExitStatus: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ raiseIfSwiftlintError: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ reporter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ quiet: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ executable: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ format: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ noCache: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ compilerLogPath: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "swiftlint", className: nil, args: [RubyCommand.Argument(name: "mode", value: mode),
- RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "output_file", value: outputFile),
- RubyCommand.Argument(name: "config_file", value: configFile),
- RubyCommand.Argument(name: "strict", value: strict),
- RubyCommand.Argument(name: "files", value: files),
- RubyCommand.Argument(name: "ignore_exit_status", value: ignoreExitStatus),
- RubyCommand.Argument(name: "raise_if_swiftlint_error", value: raiseIfSwiftlintError),
- RubyCommand.Argument(name: "reporter", value: reporter),
- RubyCommand.Argument(name: "quiet", value: quiet),
- RubyCommand.Argument(name: "executable", value: executable),
- RubyCommand.Argument(name: "format", value: format),
- RubyCommand.Argument(name: "no_cache", value: noCache),
- RubyCommand.Argument(name: "compiler_log_path", value: compilerLogPath)])
+ let modeArg = RubyCommand.Argument(name: "mode", value: mode, type: nil)
+ let pathArg = path.asRubyArgument(name: "path", type: nil)
+ let outputFileArg = outputFile.asRubyArgument(name: "output_file", type: nil)
+ let configFileArg = configFile.asRubyArgument(name: "config_file", type: nil)
+ let strictArg = strict.asRubyArgument(name: "strict", type: nil)
+ let filesArg = files.asRubyArgument(name: "files", type: nil)
+ let ignoreExitStatusArg = ignoreExitStatus.asRubyArgument(name: "ignore_exit_status", type: nil)
+ let raiseIfSwiftlintErrorArg = raiseIfSwiftlintError.asRubyArgument(name: "raise_if_swiftlint_error", type: nil)
+ let reporterArg = reporter.asRubyArgument(name: "reporter", type: nil)
+ let quietArg = quiet.asRubyArgument(name: "quiet", type: nil)
+ let executableArg = executable.asRubyArgument(name: "executable", type: nil)
+ let formatArg = format.asRubyArgument(name: "format", type: nil)
+ let noCacheArg = noCache.asRubyArgument(name: "no_cache", type: nil)
+ let compilerLogPathArg = compilerLogPath.asRubyArgument(name: "compiler_log_path", type: nil)
+ let array: [RubyCommand.Argument?] = [modeArg,
+ pathArg,
+ outputFileArg,
+ configFileArg,
+ strictArg,
+ filesArg,
+ ignoreExitStatusArg,
+ raiseIfSwiftlintErrorArg,
+ reporterArg,
+ quietArg,
+ executableArg,
+ formatArg,
+ noCacheArg,
+ compilerLogPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "swiftlint", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Easily sync your certificates and profiles across your team (via _match_)
- parameters:
- - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id
+ - type: Define the profile type, can be appstore, adhoc, development, enterprise, developer_id, mac_installer_distribution
- additionalCertTypes: Create additional cert types needed for macOS installers (valid values: mac_installer_distribution, developer_id_installer)
- readonly: Only fetch existing certificates and profiles, don't generate new ones
- generateAppleCerts: Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)
- skipProvisioningProfiles: Skip syncing provisioning profiles
- appIdentifier: The bundle identifier(s) of your app (comma-separated string or array of strings)
@@ -7701,11 +10855,11 @@
- s3AccessKey: S3 access key
- s3SecretAccessKey: S3 secret access key
- s3Bucket: Name of the S3 bucket
- s3ObjectPrefix: Prefix to be used on all objects uploaded to S3
- keychainName: Keychain the items should be imported to
- - 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
+ - keychainPassword: This might be required the first time you access certificates on a new mac. For the login/default keychain this is your macOS account password
- force: Renew the provisioning profiles every time you run match
- forceForNewDevices: Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
- skipConfirmation: Disables confirmation prompts during nuke, answering them with yes
- skipDocs: Skip generation of a README.md for the created git repository
- platform: Set the provisioning profile's platform to work with (i.e. ios, tvos, macos, catalyst)
@@ -7719,114 +10873,164 @@
- verbose: Print out extra information and all commands
More information: https://docs.fastlane.tools/actions/match/
*/
public func syncCodeSigning(type: String = "development",
- additionalCertTypes: [String]? = nil,
- readonly: Bool = false,
- generateAppleCerts: Bool = true,
- skipProvisioningProfiles: Bool = false,
+ additionalCertTypes: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ readonly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ generateAppleCerts: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ skipProvisioningProfiles: OptionalConfigValue<Bool> = .fastlaneDefault(false),
appIdentifier: [String],
- apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String? = nil,
- teamId: String? = nil,
- teamName: String? = nil,
+ apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
storageMode: String = "git",
gitUrl: String,
gitBranch: String = "master",
- gitFullName: String? = nil,
- gitUserEmail: String? = nil,
- shallowClone: Bool = false,
- cloneBranchDirectly: Bool = false,
- gitBasicAuthorization: String? = nil,
- gitBearerAuthorization: String? = nil,
- gitPrivateKey: String? = nil,
- googleCloudBucketName: String? = nil,
- googleCloudKeysFile: String? = nil,
- googleCloudProjectId: String? = nil,
- s3Region: String? = nil,
- s3AccessKey: String? = nil,
- s3SecretAccessKey: String? = nil,
- s3Bucket: String? = nil,
- s3ObjectPrefix: String? = nil,
+ gitFullName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitUserEmail: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ shallowClone: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ cloneBranchDirectly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ gitBasicAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitBearerAuthorization: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gitPrivateKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudBucketName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudKeysFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ googleCloudProjectId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3Region: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3AccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3SecretAccessKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3Bucket: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ s3ObjectPrefix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
keychainName: String = "login.keychain",
- keychainPassword: String? = nil,
- force: Bool = false,
- forceForNewDevices: Bool = false,
- skipConfirmation: Bool = false,
- skipDocs: Bool = false,
+ keychainPassword: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ forceForNewDevices: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipConfirmation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipDocs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
platform: String = "ios",
- deriveCatalystAppIdentifier: Bool = false,
- templateName: String? = nil,
- profileName: String? = nil,
- failOnNameTaken: Bool = false,
- skipCertificateMatching: Bool = false,
- outputPath: String? = nil,
- skipSetPartitionList: Bool = false,
- verbose: Bool = false)
+ deriveCatalystAppIdentifier: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ templateName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ failOnNameTaken: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipCertificateMatching: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ outputPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSetPartitionList: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: [RubyCommand.Argument(name: "type", value: type),
- RubyCommand.Argument(name: "additional_cert_types", value: additionalCertTypes),
- RubyCommand.Argument(name: "readonly", value: readonly),
- RubyCommand.Argument(name: "generate_apple_certs", value: generateAppleCerts),
- RubyCommand.Argument(name: "skip_provisioning_profiles", value: skipProvisioningProfiles),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "storage_mode", value: storageMode),
- RubyCommand.Argument(name: "git_url", value: gitUrl),
- RubyCommand.Argument(name: "git_branch", value: gitBranch),
- RubyCommand.Argument(name: "git_full_name", value: gitFullName),
- RubyCommand.Argument(name: "git_user_email", value: gitUserEmail),
- RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
- RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
- RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
- RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
- RubyCommand.Argument(name: "git_private_key", value: gitPrivateKey),
- RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
- RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
- RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
- RubyCommand.Argument(name: "s3_region", value: s3Region),
- RubyCommand.Argument(name: "s3_access_key", value: s3AccessKey),
- RubyCommand.Argument(name: "s3_secret_access_key", value: s3SecretAccessKey),
- RubyCommand.Argument(name: "s3_bucket", value: s3Bucket),
- RubyCommand.Argument(name: "s3_object_prefix", value: s3ObjectPrefix),
- RubyCommand.Argument(name: "keychain_name", value: keychainName),
- RubyCommand.Argument(name: "keychain_password", value: keychainPassword),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "force_for_new_devices", value: forceForNewDevices),
- RubyCommand.Argument(name: "skip_confirmation", value: skipConfirmation),
- RubyCommand.Argument(name: "skip_docs", value: skipDocs),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "derive_catalyst_app_identifier", value: deriveCatalystAppIdentifier),
- RubyCommand.Argument(name: "template_name", value: templateName),
- RubyCommand.Argument(name: "profile_name", value: profileName),
- RubyCommand.Argument(name: "fail_on_name_taken", value: failOnNameTaken),
- RubyCommand.Argument(name: "skip_certificate_matching", value: skipCertificateMatching),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "skip_set_partition_list", value: skipSetPartitionList),
- RubyCommand.Argument(name: "verbose", value: verbose)])
+ let typeArg = RubyCommand.Argument(name: "type", value: type, type: nil)
+ let additionalCertTypesArg = additionalCertTypes.asRubyArgument(name: "additional_cert_types", type: nil)
+ let readonlyArg = readonly.asRubyArgument(name: "readonly", type: nil)
+ let generateAppleCertsArg = generateAppleCerts.asRubyArgument(name: "generate_apple_certs", type: nil)
+ let skipProvisioningProfilesArg = skipProvisioningProfiles.asRubyArgument(name: "skip_provisioning_profiles", type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let storageModeArg = RubyCommand.Argument(name: "storage_mode", value: storageMode, type: nil)
+ let gitUrlArg = RubyCommand.Argument(name: "git_url", value: gitUrl, type: nil)
+ let gitBranchArg = RubyCommand.Argument(name: "git_branch", value: gitBranch, type: nil)
+ let gitFullNameArg = gitFullName.asRubyArgument(name: "git_full_name", type: nil)
+ let gitUserEmailArg = gitUserEmail.asRubyArgument(name: "git_user_email", type: nil)
+ let shallowCloneArg = shallowClone.asRubyArgument(name: "shallow_clone", type: nil)
+ let cloneBranchDirectlyArg = cloneBranchDirectly.asRubyArgument(name: "clone_branch_directly", type: nil)
+ let gitBasicAuthorizationArg = gitBasicAuthorization.asRubyArgument(name: "git_basic_authorization", type: nil)
+ let gitBearerAuthorizationArg = gitBearerAuthorization.asRubyArgument(name: "git_bearer_authorization", type: nil)
+ let gitPrivateKeyArg = gitPrivateKey.asRubyArgument(name: "git_private_key", type: nil)
+ let googleCloudBucketNameArg = googleCloudBucketName.asRubyArgument(name: "google_cloud_bucket_name", type: nil)
+ let googleCloudKeysFileArg = googleCloudKeysFile.asRubyArgument(name: "google_cloud_keys_file", type: nil)
+ let googleCloudProjectIdArg = googleCloudProjectId.asRubyArgument(name: "google_cloud_project_id", type: nil)
+ let s3RegionArg = s3Region.asRubyArgument(name: "s3_region", type: nil)
+ let s3AccessKeyArg = s3AccessKey.asRubyArgument(name: "s3_access_key", type: nil)
+ let s3SecretAccessKeyArg = s3SecretAccessKey.asRubyArgument(name: "s3_secret_access_key", type: nil)
+ let s3BucketArg = s3Bucket.asRubyArgument(name: "s3_bucket", type: nil)
+ let s3ObjectPrefixArg = s3ObjectPrefix.asRubyArgument(name: "s3_object_prefix", type: nil)
+ let keychainNameArg = RubyCommand.Argument(name: "keychain_name", value: keychainName, type: nil)
+ let keychainPasswordArg = keychainPassword.asRubyArgument(name: "keychain_password", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let forceForNewDevicesArg = forceForNewDevices.asRubyArgument(name: "force_for_new_devices", type: nil)
+ let skipConfirmationArg = skipConfirmation.asRubyArgument(name: "skip_confirmation", type: nil)
+ let skipDocsArg = skipDocs.asRubyArgument(name: "skip_docs", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let deriveCatalystAppIdentifierArg = deriveCatalystAppIdentifier.asRubyArgument(name: "derive_catalyst_app_identifier", type: nil)
+ let templateNameArg = templateName.asRubyArgument(name: "template_name", type: nil)
+ let profileNameArg = profileName.asRubyArgument(name: "profile_name", type: nil)
+ let failOnNameTakenArg = failOnNameTaken.asRubyArgument(name: "fail_on_name_taken", type: nil)
+ let skipCertificateMatchingArg = skipCertificateMatching.asRubyArgument(name: "skip_certificate_matching", type: nil)
+ let outputPathArg = outputPath.asRubyArgument(name: "output_path", type: nil)
+ let skipSetPartitionListArg = skipSetPartitionList.asRubyArgument(name: "skip_set_partition_list", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let array: [RubyCommand.Argument?] = [typeArg,
+ additionalCertTypesArg,
+ readonlyArg,
+ generateAppleCertsArg,
+ skipProvisioningProfilesArg,
+ appIdentifierArg,
+ apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ teamIdArg,
+ teamNameArg,
+ storageModeArg,
+ gitUrlArg,
+ gitBranchArg,
+ gitFullNameArg,
+ gitUserEmailArg,
+ shallowCloneArg,
+ cloneBranchDirectlyArg,
+ gitBasicAuthorizationArg,
+ gitBearerAuthorizationArg,
+ gitPrivateKeyArg,
+ googleCloudBucketNameArg,
+ googleCloudKeysFileArg,
+ googleCloudProjectIdArg,
+ s3RegionArg,
+ s3AccessKeyArg,
+ s3SecretAccessKeyArg,
+ s3BucketArg,
+ s3ObjectPrefixArg,
+ keychainNameArg,
+ keychainPasswordArg,
+ forceArg,
+ forceForNewDevicesArg,
+ skipConfirmationArg,
+ skipDocsArg,
+ platformArg,
+ deriveCatalystAppIdentifierArg,
+ templateNameArg,
+ profileNameArg,
+ failOnNameTakenArg,
+ skipCertificateMatchingArg,
+ outputPathArg,
+ skipSetPartitionListArg,
+ verboseArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "sync_code_signing", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Specify the Team ID you want to use for the Apple Developer Portal
*/
public func teamId() {
- let command = RubyCommand(commandID: "", methodName: "team_id", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "team_id", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Set a team to use by its name
*/
public func teamName() {
- let command = RubyCommand(commandID: "", methodName: "team_name", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "team_name", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload a new build to [TestFairy](https://www.testfairy.com/)
@@ -7847,36 +11051,53 @@
- timeout: Request timeout in seconds
You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
*/
public func testfairy(apiKey: String,
- ipa: String? = nil,
- apk: String? = nil,
- symbolsFile: String? = nil,
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ symbolsFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
uploadUrl: String = "https://upload.testfairy.com",
testersGroups: [String] = [],
metrics: [String] = [],
comment: String = "No comment provided",
autoUpdate: String = "off",
notify: String = "off",
options: [String] = [],
custom: String = "",
- timeout: Int? = nil)
+ timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "testfairy", className: nil, args: [RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "symbols_file", value: symbolsFile),
- RubyCommand.Argument(name: "upload_url", value: uploadUrl),
- RubyCommand.Argument(name: "testers_groups", value: testersGroups),
- RubyCommand.Argument(name: "metrics", value: metrics),
- RubyCommand.Argument(name: "comment", value: comment),
- RubyCommand.Argument(name: "auto_update", value: autoUpdate),
- RubyCommand.Argument(name: "notify", value: notify),
- RubyCommand.Argument(name: "options", value: options),
- RubyCommand.Argument(name: "custom", value: custom),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let symbolsFileArg = symbolsFile.asRubyArgument(name: "symbols_file", type: nil)
+ let uploadUrlArg = RubyCommand.Argument(name: "upload_url", value: uploadUrl, type: nil)
+ let testersGroupsArg = RubyCommand.Argument(name: "testers_groups", value: testersGroups, type: nil)
+ let metricsArg = RubyCommand.Argument(name: "metrics", value: metrics, type: nil)
+ let commentArg = RubyCommand.Argument(name: "comment", value: comment, type: nil)
+ let autoUpdateArg = RubyCommand.Argument(name: "auto_update", value: autoUpdate, type: nil)
+ let notifyArg = RubyCommand.Argument(name: "notify", value: notify, type: nil)
+ let optionsArg = RubyCommand.Argument(name: "options", value: options, type: nil)
+ let customArg = RubyCommand.Argument(name: "custom", value: custom, type: nil)
+ let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyArg,
+ ipaArg,
+ apkArg,
+ symbolsFileArg,
+ uploadUrlArg,
+ testersGroupsArg,
+ metricsArg,
+ commentArg,
+ autoUpdateArg,
+ notifyArg,
+ optionsArg,
+ customArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "testfairy", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Alias for the `upload_to_testflight` action
@@ -7899,104 +11120,148 @@
- skipSubmission: Skip the distributing action of pilot and only upload the ipa file
- skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
- updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
- distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
- usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
- - distributeExternal: Should the build be distributed to external testers?
- - notifyExternalTesters: Should notify external testers?
+ - distributeExternal: Should the build be distributed to external testers? If set to true, use of `groups` option is required
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
- appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
- buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
- expirePreviousBuilds: Should expire previous builds?
- firstName: The tester's first name
- lastName: The tester's last name
- email: The tester's email
- testersFilePath: Path to a CSV file of testers
- - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"`
+ - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
- teamId: The ID of your App Store Connect team if you're in multiple teams
- teamName: The name of your App Store Connect team if you're in multiple teams
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
+ - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
- waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
- rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
More details can be found on https://docs.fastlane.tools/actions/pilot/.
This integration will only do the TestFlight upload.
*/
-public func testflight(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- appIdentifier: String? = nil,
+public func testflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appPlatform: String = "ios",
- appleId: String? = nil,
- ipa: String? = nil,
- demoAccountRequired: Bool = false,
- betaAppReviewInfo: [String: Any]? = nil,
- localizedAppInfo: [String: Any]? = nil,
- betaAppDescription: String? = nil,
- betaAppFeedbackEmail: String? = nil,
- localizedBuildInfo: [String: Any]? = nil,
- changelog: String? = nil,
- skipSubmission: Bool = false,
- skipWaitingForBuildProcessing: Bool = false,
- updateBuildInfoOnUpload: Bool = false,
- distributeOnly: Bool = false,
- usesNonExemptEncryption: Bool = false,
- distributeExternal: Bool = false,
- notifyExternalTesters: Bool = true,
- appVersion: String? = nil,
- buildNumber: String? = nil,
- expirePreviousBuilds: Bool = false,
- firstName: String? = nil,
- lastName: String? = nil,
- email: String? = nil,
+ appleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ demoAccountRequired: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ betaAppReviewInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ localizedAppInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ betaAppDescription: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ betaAppFeedbackEmail: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ localizedBuildInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ changelog: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSubmission: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipWaitingForBuildProcessing: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ updateBuildInfoOnUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ usesNonExemptEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeExternal: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ notifyExternalTesters: Any? = nil,
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ expirePreviousBuilds: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ firstName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ lastName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ email: OptionalConfigValue<String?> = .fastlaneDefault(nil),
testersFilePath: String = "./testers.csv",
- groups: [String]? = nil,
+ groups: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
teamId: Any? = nil,
- teamName: String? = nil,
- devPortalTeamId: String? = nil,
- itcProvider: String? = nil,
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
waitProcessingInterval: Int = 30,
- waitForUploadedBuild: Bool = false,
- rejectBuildWaitingForReview: Bool = false)
+ waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "testflight", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_platform", value: appPlatform),
- RubyCommand.Argument(name: "apple_id", value: appleId),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired),
- RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo),
- RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo),
- RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription),
- RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail),
- RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo),
- RubyCommand.Argument(name: "changelog", value: changelog),
- RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
- RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
- RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
- RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
- RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
- RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
- RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds),
- RubyCommand.Argument(name: "first_name", value: firstName),
- RubyCommand.Argument(name: "last_name", value: lastName),
- RubyCommand.Argument(name: "email", value: email),
- RubyCommand.Argument(name: "testers_file_path", value: testersFilePath),
- RubyCommand.Argument(name: "groups", value: groups),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval),
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
- RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appPlatformArg = RubyCommand.Argument(name: "app_platform", value: appPlatform, type: nil)
+ let appleIdArg = appleId.asRubyArgument(name: "apple_id", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let demoAccountRequiredArg = demoAccountRequired.asRubyArgument(name: "demo_account_required", type: nil)
+ let betaAppReviewInfoArg = betaAppReviewInfo.asRubyArgument(name: "beta_app_review_info", type: nil)
+ let localizedAppInfoArg = localizedAppInfo.asRubyArgument(name: "localized_app_info", type: nil)
+ let betaAppDescriptionArg = betaAppDescription.asRubyArgument(name: "beta_app_description", type: nil)
+ let betaAppFeedbackEmailArg = betaAppFeedbackEmail.asRubyArgument(name: "beta_app_feedback_email", type: nil)
+ let localizedBuildInfoArg = localizedBuildInfo.asRubyArgument(name: "localized_build_info", type: nil)
+ let changelogArg = changelog.asRubyArgument(name: "changelog", type: nil)
+ let skipSubmissionArg = skipSubmission.asRubyArgument(name: "skip_submission", type: nil)
+ let skipWaitingForBuildProcessingArg = skipWaitingForBuildProcessing.asRubyArgument(name: "skip_waiting_for_build_processing", type: nil)
+ let updateBuildInfoOnUploadArg = updateBuildInfoOnUpload.asRubyArgument(name: "update_build_info_on_upload", type: nil)
+ let distributeOnlyArg = distributeOnly.asRubyArgument(name: "distribute_only", type: nil)
+ let usesNonExemptEncryptionArg = usesNonExemptEncryption.asRubyArgument(name: "uses_non_exempt_encryption", type: nil)
+ let distributeExternalArg = distributeExternal.asRubyArgument(name: "distribute_external", type: nil)
+ let notifyExternalTestersArg = RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters, type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let expirePreviousBuildsArg = expirePreviousBuilds.asRubyArgument(name: "expire_previous_builds", type: nil)
+ let firstNameArg = firstName.asRubyArgument(name: "first_name", type: nil)
+ let lastNameArg = lastName.asRubyArgument(name: "last_name", type: nil)
+ let emailArg = email.asRubyArgument(name: "email", type: nil)
+ let testersFilePathArg = RubyCommand.Argument(name: "testers_file_path", value: testersFilePath, type: nil)
+ let groupsArg = groups.asRubyArgument(name: "groups", type: nil)
+ let teamIdArg = RubyCommand.Argument(name: "team_id", value: teamId, type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let waitProcessingIntervalArg = RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval, type: nil)
+ let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
+ let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
+ let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appPlatformArg,
+ appleIdArg,
+ ipaArg,
+ demoAccountRequiredArg,
+ betaAppReviewInfoArg,
+ localizedAppInfoArg,
+ betaAppDescriptionArg,
+ betaAppFeedbackEmailArg,
+ localizedBuildInfoArg,
+ changelogArg,
+ skipSubmissionArg,
+ skipWaitingForBuildProcessingArg,
+ updateBuildInfoOnUploadArg,
+ distributeOnlyArg,
+ usesNonExemptEncryptionArg,
+ distributeExternalArg,
+ notifyExternalTestersArg,
+ appVersionArg,
+ buildNumberArg,
+ expirePreviousBuildsArg,
+ firstNameArg,
+ lastNameArg,
+ emailArg,
+ testersFilePathArg,
+ groupsArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ itcProviderArg,
+ waitProcessingIntervalArg,
+ waitProcessingTimeoutDurationArg,
+ waitForUploadedBuildArg,
+ rejectBuildWaitingForReviewArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "testflight", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload a new build to [Tryouts](https://tryouts.io/)
@@ -8013,22 +11278,33 @@
More information: [http://tryouts.readthedocs.org/en/latest/releases.html#create-release](http://tryouts.readthedocs.org/en/latest/releases.html#create-release)
*/
public func tryouts(appId: String,
apiToken: String,
buildFile: String,
- notes: String? = nil,
- notesPath: String? = nil,
+ notes: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ notesPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
notify: Int = 1,
status: Int = 2)
{
- let command = RubyCommand(commandID: "", methodName: "tryouts", className: nil, args: [RubyCommand.Argument(name: "app_id", value: appId),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "build_file", value: buildFile),
- RubyCommand.Argument(name: "notes", value: notes),
- RubyCommand.Argument(name: "notes_path", value: notesPath),
- RubyCommand.Argument(name: "notify", value: notify),
- RubyCommand.Argument(name: "status", value: status)])
+ let appIdArg = RubyCommand.Argument(name: "app_id", value: appId, type: nil)
+ let apiTokenArg = RubyCommand.Argument(name: "api_token", value: apiToken, type: nil)
+ let buildFileArg = RubyCommand.Argument(name: "build_file", value: buildFile, type: nil)
+ let notesArg = notes.asRubyArgument(name: "notes", type: nil)
+ let notesPathArg = notesPath.asRubyArgument(name: "notes_path", type: nil)
+ let notifyArg = RubyCommand.Argument(name: "notify", value: notify, type: nil)
+ let statusArg = RubyCommand.Argument(name: "status", value: status, type: nil)
+ let array: [RubyCommand.Argument?] = [appIdArg,
+ apiTokenArg,
+ buildFileArg,
+ notesArg,
+ notesPathArg,
+ notifyArg,
+ statusArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "tryouts", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Post a tweet on [Twitter.com](https://twitter.com)
@@ -8046,47 +11322,65 @@
consumerSecret: String,
accessToken: String,
accessTokenSecret: String,
message: String)
{
- let command = RubyCommand(commandID: "", methodName: "twitter", className: nil, args: [RubyCommand.Argument(name: "consumer_key", value: consumerKey),
- RubyCommand.Argument(name: "consumer_secret", value: consumerSecret),
- RubyCommand.Argument(name: "access_token", value: accessToken),
- RubyCommand.Argument(name: "access_token_secret", value: accessTokenSecret),
- RubyCommand.Argument(name: "message", value: message)])
+ let consumerKeyArg = RubyCommand.Argument(name: "consumer_key", value: consumerKey, type: nil)
+ let consumerSecretArg = RubyCommand.Argument(name: "consumer_secret", value: consumerSecret, type: nil)
+ let accessTokenArg = RubyCommand.Argument(name: "access_token", value: accessToken, type: nil)
+ let accessTokenSecretArg = RubyCommand.Argument(name: "access_token_secret", value: accessTokenSecret, type: nil)
+ let messageArg = RubyCommand.Argument(name: "message", value: message, type: nil)
+ let array: [RubyCommand.Argument?] = [consumerKeyArg,
+ consumerSecretArg,
+ accessTokenArg,
+ accessTokenSecretArg,
+ messageArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "twitter", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Post a message to [Typetalk](https://www.typetalk.com/)
*/
public func typetalk() {
- let command = RubyCommand(commandID: "", methodName: "typetalk", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "typetalk", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Unlock a keychain
- parameters:
- path: Path to the keychain file
- password: Keychain password
- - addToSearchList: Add to keychain search list
+ - addToSearchList: Add to keychain search list, valid values are true, false, :add, and :replace
- setDefault: Set as default keychain
Unlocks the given keychain file and adds it to the keychain search list.
Keychains can be replaced with `add_to_search_list: :replace`.
*/
public func unlockKeychain(path: String = "login",
password: String,
- addToSearchList: Bool = true,
- setDefault: Bool = false)
+ addToSearchList: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ setDefault: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "unlock_keychain", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "add_to_search_list", value: addToSearchList),
- RubyCommand.Argument(name: "set_default", value: setDefault)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let passwordArg = RubyCommand.Argument(name: "password", value: password, type: nil)
+ let addToSearchListArg = addToSearchList.asRubyArgument(name: "add_to_search_list", type: nil)
+ let setDefaultArg = setDefault.asRubyArgument(name: "set_default", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ passwordArg,
+ addToSearchListArg,
+ setDefaultArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "unlock_keychain", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action changes the app group identifiers in the entitlements file
@@ -8096,14 +11390,20 @@
- appGroupIdentifiers: An Array of unique identifiers for the app groups. Eg. ['group.com.test.testapp']
Updates the App Group Identifiers in the given Entitlements file, so you can have app groups for the app store build and app groups for an enterprise build.
*/
public func updateAppGroupIdentifiers(entitlementsFile: String,
- appGroupIdentifiers: Any)
+ appGroupIdentifiers: [String])
{
- let command = RubyCommand(commandID: "", methodName: "update_app_group_identifiers", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile),
- RubyCommand.Argument(name: "app_group_identifiers", value: appGroupIdentifiers)])
+ let entitlementsFileArg = RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile, type: nil)
+ let appGroupIdentifiersArg = RubyCommand.Argument(name: "app_group_identifiers", value: appGroupIdentifiers, type: nil)
+ let array: [RubyCommand.Argument?] = [entitlementsFileArg,
+ appGroupIdentifiersArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_app_group_identifiers", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Update the project's bundle identifier
@@ -8117,13 +11417,20 @@
*/
public func updateAppIdentifier(xcodeproj: String,
plistPath: String,
appIdentifier: String)
{
- let command = RubyCommand(commandID: "", methodName: "update_app_identifier", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "plist_path", value: plistPath),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier)])
+ let xcodeprojArg = RubyCommand.Argument(name: "xcodeproj", value: xcodeproj, type: nil)
+ let plistPathArg = RubyCommand.Argument(name: "plist_path", value: plistPath, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let array: [RubyCommand.Argument?] = [xcodeprojArg,
+ plistPathArg,
+ appIdentifierArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_app_identifier", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Configures Xcode's Codesigning options
@@ -8131,39 +11438,52 @@
- parameters:
- path: Path to your Xcode project
- useAutomaticSigning: Defines if project should use automatic signing
- teamId: Team ID, is used when upgrading project
- targets: Specify targets you want to toggle the signing mech. (default to all targets)
- - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all targets)
+ - buildConfigurations: Specify build_configurations you want to toggle the signing mech. (default to all configurations)
- codeSignIdentity: Code signing identity type (iPhone Developer, iPhone Distribution)
- profileName: Provisioning profile name to use for code signing
- profileUuid: Provisioning profile UUID to use for code signing
- bundleIdentifier: Application Product Bundle Identifier
- returns: The current status (boolean) of codesigning after modification
Configures Xcode's Codesigning options of all targets in the project
*/
public func updateCodeSigningSettings(path: String,
- useAutomaticSigning: Bool = false,
- teamId: String? = nil,
- targets: [String]? = nil,
- buildConfigurations: [String]? = nil,
- codeSignIdentity: String? = nil,
- profileName: String? = nil,
- profileUuid: String? = nil,
- bundleIdentifier: String? = nil)
+ useAutomaticSigning: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ targets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ buildConfigurations: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ codeSignIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ profileUuid: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "update_code_signing_settings", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "use_automatic_signing", value: useAutomaticSigning),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "targets", value: targets),
- RubyCommand.Argument(name: "build_configurations", value: buildConfigurations),
- RubyCommand.Argument(name: "code_sign_identity", value: codeSignIdentity),
- RubyCommand.Argument(name: "profile_name", value: profileName),
- RubyCommand.Argument(name: "profile_uuid", value: profileUuid),
- RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let useAutomaticSigningArg = useAutomaticSigning.asRubyArgument(name: "use_automatic_signing", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let targetsArg = targets.asRubyArgument(name: "targets", type: nil)
+ let buildConfigurationsArg = buildConfigurations.asRubyArgument(name: "build_configurations", type: nil)
+ let codeSignIdentityArg = codeSignIdentity.asRubyArgument(name: "code_sign_identity", type: nil)
+ let profileNameArg = profileName.asRubyArgument(name: "profile_name", type: nil)
+ let profileUuidArg = profileUuid.asRubyArgument(name: "profile_uuid", type: nil)
+ let bundleIdentifierArg = bundleIdentifier.asRubyArgument(name: "bundle_identifier", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ useAutomaticSigningArg,
+ teamIdArg,
+ targetsArg,
+ buildConfigurationsArg,
+ codeSignIdentityArg,
+ profileNameArg,
+ profileUuidArg,
+ bundleIdentifierArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_code_signing_settings", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Makes sure fastlane-tools are up-to-date when running fastlane
@@ -8185,15 +11505,21 @@
>|
After the above changes, restart your terminal, then run `mkdir $GEM_HOME` to create the new gem directory. After this, you're good to go!
Recommended usage of the `update_fastlane` action is at the top inside of the `before_all` block, before running any other action.
*/
-public func updateFastlane(noUpdate: Bool = false,
- nightly: Bool = false)
+public func updateFastlane(noUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ nightly: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: [RubyCommand.Argument(name: "no_update", value: noUpdate),
- RubyCommand.Argument(name: "nightly", value: nightly)])
+ let noUpdateArg = noUpdate.asRubyArgument(name: "no_update", type: nil)
+ let nightlyArg = nightly.asRubyArgument(name: "nightly", type: nil)
+ let array: [RubyCommand.Argument?] = [noUpdateArg,
+ nightlyArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_fastlane", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action changes the iCloud container identifiers in the entitlements file
@@ -8205,12 +11531,18 @@
Updates the iCloud Container Identifiers in the given Entitlements file, so you can use different iCloud containers for different builds like Adhoc, App Store, etc.
*/
public func updateIcloudContainerIdentifiers(entitlementsFile: String,
icloudContainerIdentifiers: Any)
{
- let command = RubyCommand(commandID: "", methodName: "update_icloud_container_identifiers", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile),
- RubyCommand.Argument(name: "icloud_container_identifiers", value: icloudContainerIdentifiers)])
+ let entitlementsFileArg = RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile, type: nil)
+ let icloudContainerIdentifiersArg = RubyCommand.Argument(name: "icloud_container_identifiers", value: icloudContainerIdentifiers, type: nil)
+ let array: [RubyCommand.Argument?] = [entitlementsFileArg,
+ icloudContainerIdentifiersArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_icloud_container_identifiers", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Update a Info.plist file with bundle identifier and display name
@@ -8223,23 +11555,33 @@
- displayName: The Display Name of your app
- block: A block to process plist with custom logic
This action allows you to modify your `Info.plist` file before building. This may be useful if you want a separate build for alpha, beta or nightly builds, but don't want a separate target.
*/
-public func updateInfoPlist(xcodeproj: String? = nil,
- plistPath: String? = nil,
- scheme: String? = nil,
- appIdentifier: String? = nil,
- displayName: String? = nil,
+public func updateInfoPlist(xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ plistPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ displayName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
block: Any? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "update_info_plist", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "plist_path", value: plistPath),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "display_name", value: displayName),
- RubyCommand.Argument(name: "block", value: block)])
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let plistPathArg = plistPath.asRubyArgument(name: "plist_path", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let displayNameArg = displayName.asRubyArgument(name: "display_name", type: nil)
+ let blockArg = RubyCommand.Argument(name: "block", value: block, type: nil)
+ let array: [RubyCommand.Argument?] = [xcodeprojArg,
+ plistPathArg,
+ schemeArg,
+ appIdentifierArg,
+ displayNameArg,
+ blockArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_info_plist", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
This action changes the keychain access groups in the entitlements file
@@ -8251,12 +11593,18 @@
Updates the Keychain Group Access Groups in the given Entitlements file, so you can have keychain access groups for the app store build and keychain access groups for an enterprise build.
*/
public func updateKeychainAccessGroups(entitlementsFile: String,
identifiers: Any)
{
- let command = RubyCommand(commandID: "", methodName: "update_keychain_access_groups", className: nil, args: [RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile),
- RubyCommand.Argument(name: "identifiers", value: identifiers)])
+ let entitlementsFileArg = RubyCommand.Argument(name: "entitlements_file", value: entitlementsFile, type: nil)
+ let identifiersArg = RubyCommand.Argument(name: "identifiers", value: identifiers, type: nil)
+ let array: [RubyCommand.Argument?] = [entitlementsFileArg,
+ identifiersArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_keychain_access_groups", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Update a plist file
@@ -8265,15 +11613,21 @@
- plistPath: Path to plist file
- block: A block to process plist with custom logic
This action allows you to modify any value inside any `plist` file.
*/
-public func updatePlist(plistPath: String? = nil,
+public func updatePlist(plistPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
block: Any)
{
- let command = RubyCommand(commandID: "", methodName: "update_plist", className: nil, args: [RubyCommand.Argument(name: "plist_path", value: plistPath),
- RubyCommand.Argument(name: "block", value: block)])
+ let plistPathArg = plistPath.asRubyArgument(name: "plist_path", type: nil)
+ let blockArg = RubyCommand.Argument(name: "block", value: block, type: nil)
+ let array: [RubyCommand.Argument?] = [plistPathArg,
+ blockArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_plist", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Updated code signing settings from 'Automatic' to a specific profile
@@ -8282,16 +11636,23 @@
- path: Path to your Xcode project
- udid: **DEPRECATED!** Use `:uuid` instead
- uuid: The UUID of the provisioning profile you want to use
*/
public func updateProjectCodeSigning(path: String,
- udid: String? = nil,
+ udid: OptionalConfigValue<String?> = .fastlaneDefault(nil),
uuid: String)
{
- let command = RubyCommand(commandID: "", methodName: "update_project_code_signing", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "udid", value: udid),
- RubyCommand.Argument(name: "uuid", value: uuid)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let udidArg = udid.asRubyArgument(name: "udid", type: nil)
+ let uuidArg = RubyCommand.Argument(name: "uuid", value: uuid, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ udidArg,
+ uuidArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_project_code_signing", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Update projects code signing settings from your provisioning profile
@@ -8310,25 +11671,36 @@
The `:target_filter` value can be used to only update code signing for the specified targets.
The `:build_configuration` value can be used to only update code signing for the specified build configurations of the targets passing through the `:target_filter`.
Example usage is the WatchKit Extension or WatchKit App, where you need separate provisioning profiles.
Example: `update_project_provisioning(xcodeproj: "..", target_filter: ".*WatchKit App.*")`.
*/
-public func updateProjectProvisioning(xcodeproj: String? = nil,
+public func updateProjectProvisioning(xcodeproj: OptionalConfigValue<String?> = .fastlaneDefault(nil),
profile: String,
targetFilter: Any? = nil,
- buildConfigurationFilter: String? = nil,
+ buildConfigurationFilter: OptionalConfigValue<String?> = .fastlaneDefault(nil),
buildConfiguration: Any? = nil,
certificate: String = "/tmp/AppleIncRootCertificate.cer",
- codeSigningIdentity: String? = nil)
+ codeSigningIdentity: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "update_project_provisioning", className: nil, args: [RubyCommand.Argument(name: "xcodeproj", value: xcodeproj),
- RubyCommand.Argument(name: "profile", value: profile),
- RubyCommand.Argument(name: "target_filter", value: targetFilter),
- RubyCommand.Argument(name: "build_configuration_filter", value: buildConfigurationFilter),
- RubyCommand.Argument(name: "build_configuration", value: buildConfiguration),
- RubyCommand.Argument(name: "certificate", value: certificate),
- RubyCommand.Argument(name: "code_signing_identity", value: codeSigningIdentity)])
+ let xcodeprojArg = xcodeproj.asRubyArgument(name: "xcodeproj", type: nil)
+ let profileArg = RubyCommand.Argument(name: "profile", value: profile, type: nil)
+ let targetFilterArg = RubyCommand.Argument(name: "target_filter", value: targetFilter, type: nil)
+ let buildConfigurationFilterArg = buildConfigurationFilter.asRubyArgument(name: "build_configuration_filter", type: nil)
+ let buildConfigurationArg = RubyCommand.Argument(name: "build_configuration", value: buildConfiguration, type: nil)
+ let certificateArg = RubyCommand.Argument(name: "certificate", value: certificate, type: nil)
+ let codeSigningIdentityArg = codeSigningIdentity.asRubyArgument(name: "code_signing_identity", type: nil)
+ let array: [RubyCommand.Argument?] = [xcodeprojArg,
+ profileArg,
+ targetFilterArg,
+ buildConfigurationFilterArg,
+ buildConfigurationArg,
+ certificateArg,
+ codeSigningIdentityArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_project_provisioning", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Update Xcode Development Team ID
@@ -8339,16 +11711,23 @@
- teamid: The Team ID you want to use
This action updates the Developer Team ID of your Xcode project.
*/
public func updateProjectTeam(path: String,
- targets: [String]? = nil,
+ targets: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
teamid: String)
{
- let command = RubyCommand(commandID: "", methodName: "update_project_team", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "targets", value: targets),
- RubyCommand.Argument(name: "teamid", value: teamid)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let targetsArg = targets.asRubyArgument(name: "targets", type: nil)
+ let teamidArg = RubyCommand.Argument(name: "teamid", value: teamid, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ targetsArg,
+ teamidArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_project_team", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Set [Urban Airship](https://www.urbanairship.com/) plist configuration values
@@ -8362,22 +11741,32 @@
- detectProvisioningMode: Automatically detect provisioning mode
This action updates the `AirshipConfig.plist` needed to configure the Urban Airship SDK at runtime, allowing keys and secrets to easily be set for the Enterprise and Production versions of the application.
*/
public func updateUrbanAirshipConfiguration(plistPath: String,
- developmentAppKey: String? = nil,
- developmentAppSecret: String? = nil,
- productionAppKey: String? = nil,
- productionAppSecret: String? = nil,
- detectProvisioningMode: Bool? = nil)
+ developmentAppKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ developmentAppSecret: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ productionAppKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ productionAppSecret: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ detectProvisioningMode: OptionalConfigValue<Bool?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "update_urban_airship_configuration", className: nil, args: [RubyCommand.Argument(name: "plist_path", value: plistPath),
- RubyCommand.Argument(name: "development_app_key", value: developmentAppKey),
- RubyCommand.Argument(name: "development_app_secret", value: developmentAppSecret),
- RubyCommand.Argument(name: "production_app_key", value: productionAppKey),
- RubyCommand.Argument(name: "production_app_secret", value: productionAppSecret),
- RubyCommand.Argument(name: "detect_provisioning_mode", value: detectProvisioningMode)])
+ let plistPathArg = RubyCommand.Argument(name: "plist_path", value: plistPath, type: nil)
+ let developmentAppKeyArg = developmentAppKey.asRubyArgument(name: "development_app_key", type: nil)
+ let developmentAppSecretArg = developmentAppSecret.asRubyArgument(name: "development_app_secret", type: nil)
+ let productionAppKeyArg = productionAppKey.asRubyArgument(name: "production_app_key", type: nil)
+ let productionAppSecretArg = productionAppSecret.asRubyArgument(name: "production_app_secret", type: nil)
+ let detectProvisioningModeArg = detectProvisioningMode.asRubyArgument(name: "detect_provisioning_mode", type: nil)
+ let array: [RubyCommand.Argument?] = [plistPathArg,
+ developmentAppKeyArg,
+ developmentAppSecretArg,
+ productionAppKeyArg,
+ productionAppSecretArg,
+ detectProvisioningModeArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_urban_airship_configuration", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Updates the URL schemes in the given Info.plist
@@ -8392,17 +11781,75 @@
*/
public func updateUrlSchemes(path: String,
urlSchemes: Any? = nil,
updateUrlSchemes: Any? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "update_url_schemes", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "url_schemes", value: urlSchemes),
- RubyCommand.Argument(name: "update_url_schemes", value: updateUrlSchemes)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let urlSchemesArg = RubyCommand.Argument(name: "url_schemes", value: urlSchemes, type: nil)
+ let updateUrlSchemesArg = RubyCommand.Argument(name: "update_url_schemes", value: updateUrlSchemes, type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ urlSchemesArg,
+ updateUrlSchemesArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "update_url_schemes", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
+ Upload App Privacy Details for an app in App Store Connect
+
+ - parameters:
+ - username: Your Apple ID Username for App Store Connect
+ - appIdentifier: The bundle identifier of your app
+ - teamId: The ID of your App Store Connect team if you're in multiple teams
+ - teamName: The name of your App Store Connect team if you're in multiple teams
+ - jsonPath: Path to the app usage data JSON
+ - outputJsonPath: Path to the app usage data JSON file generated by interactive questions
+ - skipJsonFileSaving: Whether to skip the saving of the JSON file
+ - skipUpload: Whether to skip the upload and only create the JSON file with interactive questions
+ - skipPublish: Whether to skip the publishing
+
+ Upload App Privacy Details for an app in App Store Connect. For more detail information, view https://docs.fastlane.tools/uploading-app-privacy-details
+ */
+public func uploadAppPrivacyDetailsToAppStore(username: String,
+ appIdentifier: String,
+ teamId: Any? = nil,
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ outputJsonPath: String = "./fastlane/app_privacy_details.json",
+ skipJsonFileSaving: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipPublish: OptionalConfigValue<Bool> = .fastlaneDefault(false))
+{
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let appIdentifierArg = RubyCommand.Argument(name: "app_identifier", value: appIdentifier, type: nil)
+ let teamIdArg = RubyCommand.Argument(name: "team_id", value: teamId, type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let jsonPathArg = jsonPath.asRubyArgument(name: "json_path", type: nil)
+ let outputJsonPathArg = RubyCommand.Argument(name: "output_json_path", value: outputJsonPath, type: nil)
+ let skipJsonFileSavingArg = skipJsonFileSaving.asRubyArgument(name: "skip_json_file_saving", type: nil)
+ let skipUploadArg = skipUpload.asRubyArgument(name: "skip_upload", type: nil)
+ let skipPublishArg = skipPublish.asRubyArgument(name: "skip_publish", type: nil)
+ let array: [RubyCommand.Argument?] = [usernameArg,
+ appIdentifierArg,
+ teamIdArg,
+ teamNameArg,
+ jsonPathArg,
+ outputJsonPathArg,
+ skipJsonFileSavingArg,
+ skipUploadArg,
+ skipPublishArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_app_privacy_details_to_app_store", className: nil, args: args)
+ _ = runner.executeCommand(command)
+}
+
+/**
Upload dSYM symbolication files to Crashlytics
- parameters:
- dsymPath: Path to the DSYM file or zip to upload
- dsymPaths: Paths to the DSYM files or zips to upload
@@ -8415,28 +11862,41 @@
- debug: Enable debug mode for upload-symbols
This action allows you to upload symbolication files to Crashlytics. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode. This action will not fail the build if one of the uploads failed. The reason for that is that sometimes some of dSYM files are invalid, and we don't want them to fail the complete build.
*/
public func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji2.dSYM",
- dsymPaths: [String]? = nil,
- apiToken: String? = nil,
- gspPath: String? = nil,
- appId: String? = nil,
- binaryPath: String? = nil,
+ dsymPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ apiToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ gspPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ binaryPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
dsymWorkerThreads: Int = 1,
- debug: Bool = false)
+ debug: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_crashlytics", className: nil, args: [RubyCommand.Argument(name: "dsym_path", value: dsymPath),
- RubyCommand.Argument(name: "dsym_paths", value: dsymPaths),
- RubyCommand.Argument(name: "api_token", value: apiToken),
- RubyCommand.Argument(name: "gsp_path", value: gspPath),
- RubyCommand.Argument(name: "app_id", value: appId),
- RubyCommand.Argument(name: "binary_path", value: binaryPath),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "dsym_worker_threads", value: dsymWorkerThreads),
- RubyCommand.Argument(name: "debug", value: debug)])
+ let dsymPathArg = RubyCommand.Argument(name: "dsym_path", value: dsymPath, type: nil)
+ let dsymPathsArg = dsymPaths.asRubyArgument(name: "dsym_paths", type: nil)
+ let apiTokenArg = apiToken.asRubyArgument(name: "api_token", type: nil)
+ let gspPathArg = gspPath.asRubyArgument(name: "gsp_path", type: nil)
+ let appIdArg = appId.asRubyArgument(name: "app_id", type: nil)
+ let binaryPathArg = binaryPath.asRubyArgument(name: "binary_path", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let dsymWorkerThreadsArg = RubyCommand.Argument(name: "dsym_worker_threads", value: dsymWorkerThreads, type: nil)
+ let debugArg = debug.asRubyArgument(name: "debug", type: nil)
+ let array: [RubyCommand.Argument?] = [dsymPathArg,
+ dsymPathsArg,
+ apiTokenArg,
+ gspPathArg,
+ appIdArg,
+ binaryPathArg,
+ platformArg,
+ dsymWorkerThreadsArg,
+ debugArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_crashlytics", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload dSYM symbolication files to Sentry
@@ -8453,24 +11913,35 @@
- returns: The uploaded dSYM path(s)
This action allows you to upload symbolication files to Sentry. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode.
*/
public func uploadSymbolsToSentry(apiHost: String = "https://app.getsentry.com/api/0",
- apiKey: String? = nil,
- authToken: String? = nil,
+ apiKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ authToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
orgSlug: String,
projectSlug: String,
- dsymPath: String? = nil,
+ dsymPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
dsymPaths: Any? = nil)
{
- let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_sentry", className: nil, args: [RubyCommand.Argument(name: "api_host", value: apiHost),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "auth_token", value: authToken),
- RubyCommand.Argument(name: "org_slug", value: orgSlug),
- RubyCommand.Argument(name: "project_slug", value: projectSlug),
- RubyCommand.Argument(name: "dsym_path", value: dsymPath),
- RubyCommand.Argument(name: "dsym_paths", value: dsymPaths)])
+ let apiHostArg = RubyCommand.Argument(name: "api_host", value: apiHost, type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let authTokenArg = authToken.asRubyArgument(name: "auth_token", type: nil)
+ let orgSlugArg = RubyCommand.Argument(name: "org_slug", value: orgSlug, type: nil)
+ let projectSlugArg = RubyCommand.Argument(name: "project_slug", value: projectSlug, type: nil)
+ let dsymPathArg = dsymPath.asRubyArgument(name: "dsym_path", type: nil)
+ let dsymPathsArg = RubyCommand.Argument(name: "dsym_paths", value: dsymPaths, type: nil)
+ let array: [RubyCommand.Argument?] = [apiHostArg,
+ apiKeyArg,
+ authTokenArg,
+ orgSlugArg,
+ projectSlugArg,
+ dsymPathArg,
+ dsymPathsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_sentry", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload metadata and binary to App Store Connect (via _deliver_)
@@ -8519,11 +11990,11 @@
- secondaryCategory: Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
- primaryFirstSubCategory: Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)
- primarySecondSubCategory: Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)
- secondaryFirstSubCategory: Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)
- secondarySecondSubCategory: Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)
- - tradeRepresentativeContactInformation: Metadata: A hash containing the trade representative contact information
+ - tradeRepresentativeContactInformation: **DEPRECATED!** This is no longer used by App Store Connect - Metadata: A hash containing the trade representative contact information
- appReviewInformation: Metadata: A hash containing the review information
- appReviewAttachmentFile: Metadata: Path to the app review attachment file
- description: Metadata: The localised app description
- name: Metadata: The localised app name
- subtitle: Metadata: The localised app subtitle
@@ -8544,135 +12015,201 @@
If you don't want to verify an HTML preview for App Store builds, use the `:force` option.
This is useful when running _fastlane_ on your Continuous Integration server:
`_upload_to_app_store_(force: true)`
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.
*/
-public func uploadToAppStore(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- appIdentifier: String? = nil,
- appVersion: String? = nil,
- ipa: String? = nil,
- pkg: String? = nil,
- buildNumber: String? = nil,
+public func uploadToAppStore(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ pkg: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
platform: String = "ios",
- editLive: Bool = false,
- useLiveVersion: Bool = false,
- metadataPath: String? = nil,
- screenshotsPath: String? = nil,
- skipBinaryUpload: Bool = false,
- skipScreenshots: Bool = false,
- skipMetadata: Bool = false,
- skipAppVersionUpdate: Bool = false,
- force: Bool = false,
- overwriteScreenshots: Bool = false,
- submitForReview: Bool = false,
- rejectIfPossible: Bool = false,
- automaticRelease: Bool? = nil,
- autoReleaseDate: Int? = nil,
- phasedRelease: Bool = false,
- resetRatings: Bool = false,
- priceTier: Any? = nil,
- appRatingConfigPath: String? = nil,
- submissionInformation: [String: Any]? = nil,
- teamId: Any? = nil,
- teamName: String? = nil,
- devPortalTeamId: String? = nil,
- devPortalTeamName: String? = nil,
- itcProvider: String? = nil,
- runPrecheckBeforeSubmit: Bool = true,
- precheckDefaultRuleLevel: Any = "warn",
- individualMetadataItems: [String]? = nil,
- appIcon: String? = nil,
- appleWatchAppIcon: String? = nil,
- copyright: String? = nil,
- primaryCategory: String? = nil,
- secondaryCategory: String? = nil,
- primaryFirstSubCategory: String? = nil,
- primarySecondSubCategory: String? = nil,
- secondaryFirstSubCategory: String? = nil,
- secondarySecondSubCategory: String? = nil,
- tradeRepresentativeContactInformation: [String: Any]? = nil,
- appReviewInformation: [String: Any]? = nil,
- appReviewAttachmentFile: String? = nil,
- description: Any? = nil,
- name: Any? = nil,
- subtitle: [String: Any]? = nil,
- keywords: [String: Any]? = nil,
- promotionalText: [String: Any]? = nil,
- releaseNotes: Any? = nil,
- privacyUrl: Any? = nil,
- appleTvPrivacyPolicy: Any? = nil,
- supportUrl: Any? = nil,
- marketingUrl: Any? = nil,
- languages: [String]? = nil,
- ignoreLanguageDirectoryValidation: Bool = false,
- precheckIncludeInAppPurchases: Bool = true,
- app: Any)
+ editLive: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ useLiveVersion: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ metadataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ screenshotsPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipBinaryUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipAppVersionUpdate: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ force: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ overwriteScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ submitForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rejectIfPossible: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ automaticRelease: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ autoReleaseDate: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ phasedRelease: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ resetRatings: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ priceTier: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ appRatingConfigPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ submissionInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ runPrecheckBeforeSubmit: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ precheckDefaultRuleLevel: String = "warn",
+ individualMetadataItems: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ appIcon: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appleWatchAppIcon: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ copyright: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondaryCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ primarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondaryFirstSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ secondarySecondSubCategory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ tradeRepresentativeContactInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appReviewInformation: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appReviewAttachmentFile: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ description: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ name: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ subtitle: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ keywords: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ promotionalText: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ releaseNotes: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ privacyUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ appleTvPrivacyPolicy: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ supportUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ marketingUrl: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ languages: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ ignoreLanguageDirectoryValidation: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ precheckIncludeInAppPurchases: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ app: OptionalConfigValue<Int?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "upload_to_app_store", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "pkg", value: pkg),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "platform", value: platform),
- RubyCommand.Argument(name: "edit_live", value: editLive),
- RubyCommand.Argument(name: "use_live_version", value: useLiveVersion),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "screenshots_path", value: screenshotsPath),
- RubyCommand.Argument(name: "skip_binary_upload", value: skipBinaryUpload),
- RubyCommand.Argument(name: "skip_screenshots", value: skipScreenshots),
- RubyCommand.Argument(name: "skip_metadata", value: skipMetadata),
- RubyCommand.Argument(name: "skip_app_version_update", value: skipAppVersionUpdate),
- RubyCommand.Argument(name: "force", value: force),
- RubyCommand.Argument(name: "overwrite_screenshots", value: overwriteScreenshots),
- RubyCommand.Argument(name: "submit_for_review", value: submitForReview),
- RubyCommand.Argument(name: "reject_if_possible", value: rejectIfPossible),
- RubyCommand.Argument(name: "automatic_release", value: automaticRelease),
- RubyCommand.Argument(name: "auto_release_date", value: autoReleaseDate),
- RubyCommand.Argument(name: "phased_release", value: phasedRelease),
- RubyCommand.Argument(name: "reset_ratings", value: resetRatings),
- RubyCommand.Argument(name: "price_tier", value: priceTier),
- RubyCommand.Argument(name: "app_rating_config_path", value: appRatingConfigPath),
- RubyCommand.Argument(name: "submission_information", value: submissionInformation),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "dev_portal_team_name", value: devPortalTeamName),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "run_precheck_before_submit", value: runPrecheckBeforeSubmit),
- RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel),
- RubyCommand.Argument(name: "individual_metadata_items", value: individualMetadataItems),
- RubyCommand.Argument(name: "app_icon", value: appIcon),
- RubyCommand.Argument(name: "apple_watch_app_icon", value: appleWatchAppIcon),
- RubyCommand.Argument(name: "copyright", value: copyright),
- RubyCommand.Argument(name: "primary_category", value: primaryCategory),
- RubyCommand.Argument(name: "secondary_category", value: secondaryCategory),
- RubyCommand.Argument(name: "primary_first_sub_category", value: primaryFirstSubCategory),
- RubyCommand.Argument(name: "primary_second_sub_category", value: primarySecondSubCategory),
- RubyCommand.Argument(name: "secondary_first_sub_category", value: secondaryFirstSubCategory),
- RubyCommand.Argument(name: "secondary_second_sub_category", value: secondarySecondSubCategory),
- RubyCommand.Argument(name: "trade_representative_contact_information", value: tradeRepresentativeContactInformation),
- RubyCommand.Argument(name: "app_review_information", value: appReviewInformation),
- RubyCommand.Argument(name: "app_review_attachment_file", value: appReviewAttachmentFile),
- RubyCommand.Argument(name: "description", value: description),
- RubyCommand.Argument(name: "name", value: name),
- RubyCommand.Argument(name: "subtitle", value: subtitle),
- RubyCommand.Argument(name: "keywords", value: keywords),
- RubyCommand.Argument(name: "promotional_text", value: promotionalText),
- RubyCommand.Argument(name: "release_notes", value: releaseNotes),
- RubyCommand.Argument(name: "privacy_url", value: privacyUrl),
- RubyCommand.Argument(name: "apple_tv_privacy_policy", value: appleTvPrivacyPolicy),
- RubyCommand.Argument(name: "support_url", value: supportUrl),
- RubyCommand.Argument(name: "marketing_url", value: marketingUrl),
- RubyCommand.Argument(name: "languages", value: languages),
- RubyCommand.Argument(name: "ignore_language_directory_validation", value: ignoreLanguageDirectoryValidation),
- RubyCommand.Argument(name: "precheck_include_in_app_purchases", value: precheckIncludeInAppPurchases),
- RubyCommand.Argument(name: "app", value: app)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let pkgArg = pkg.asRubyArgument(name: "pkg", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
+ let editLiveArg = editLive.asRubyArgument(name: "edit_live", type: nil)
+ let useLiveVersionArg = useLiveVersion.asRubyArgument(name: "use_live_version", type: nil)
+ let metadataPathArg = metadataPath.asRubyArgument(name: "metadata_path", type: nil)
+ let screenshotsPathArg = screenshotsPath.asRubyArgument(name: "screenshots_path", type: nil)
+ let skipBinaryUploadArg = skipBinaryUpload.asRubyArgument(name: "skip_binary_upload", type: nil)
+ let skipScreenshotsArg = skipScreenshots.asRubyArgument(name: "skip_screenshots", type: nil)
+ let skipMetadataArg = skipMetadata.asRubyArgument(name: "skip_metadata", type: nil)
+ let skipAppVersionUpdateArg = skipAppVersionUpdate.asRubyArgument(name: "skip_app_version_update", type: nil)
+ let forceArg = force.asRubyArgument(name: "force", type: nil)
+ let overwriteScreenshotsArg = overwriteScreenshots.asRubyArgument(name: "overwrite_screenshots", type: nil)
+ let submitForReviewArg = submitForReview.asRubyArgument(name: "submit_for_review", type: nil)
+ let rejectIfPossibleArg = rejectIfPossible.asRubyArgument(name: "reject_if_possible", type: nil)
+ let automaticReleaseArg = automaticRelease.asRubyArgument(name: "automatic_release", type: nil)
+ let autoReleaseDateArg = autoReleaseDate.asRubyArgument(name: "auto_release_date", type: nil)
+ let phasedReleaseArg = phasedRelease.asRubyArgument(name: "phased_release", type: nil)
+ let resetRatingsArg = resetRatings.asRubyArgument(name: "reset_ratings", type: nil)
+ let priceTierArg = priceTier.asRubyArgument(name: "price_tier", type: nil)
+ let appRatingConfigPathArg = appRatingConfigPath.asRubyArgument(name: "app_rating_config_path", type: nil)
+ let submissionInformationArg = submissionInformation.asRubyArgument(name: "submission_information", type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let devPortalTeamNameArg = devPortalTeamName.asRubyArgument(name: "dev_portal_team_name", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let runPrecheckBeforeSubmitArg = runPrecheckBeforeSubmit.asRubyArgument(name: "run_precheck_before_submit", type: nil)
+ let precheckDefaultRuleLevelArg = RubyCommand.Argument(name: "precheck_default_rule_level", value: precheckDefaultRuleLevel, type: nil)
+ let individualMetadataItemsArg = individualMetadataItems.asRubyArgument(name: "individual_metadata_items", type: nil)
+ let appIconArg = appIcon.asRubyArgument(name: "app_icon", type: nil)
+ let appleWatchAppIconArg = appleWatchAppIcon.asRubyArgument(name: "apple_watch_app_icon", type: nil)
+ let copyrightArg = copyright.asRubyArgument(name: "copyright", type: nil)
+ let primaryCategoryArg = primaryCategory.asRubyArgument(name: "primary_category", type: nil)
+ let secondaryCategoryArg = secondaryCategory.asRubyArgument(name: "secondary_category", type: nil)
+ let primaryFirstSubCategoryArg = primaryFirstSubCategory.asRubyArgument(name: "primary_first_sub_category", type: nil)
+ let primarySecondSubCategoryArg = primarySecondSubCategory.asRubyArgument(name: "primary_second_sub_category", type: nil)
+ let secondaryFirstSubCategoryArg = secondaryFirstSubCategory.asRubyArgument(name: "secondary_first_sub_category", type: nil)
+ let secondarySecondSubCategoryArg = secondarySecondSubCategory.asRubyArgument(name: "secondary_second_sub_category", type: nil)
+ let tradeRepresentativeContactInformationArg = tradeRepresentativeContactInformation.asRubyArgument(name: "trade_representative_contact_information", type: nil)
+ let appReviewInformationArg = appReviewInformation.asRubyArgument(name: "app_review_information", type: nil)
+ let appReviewAttachmentFileArg = appReviewAttachmentFile.asRubyArgument(name: "app_review_attachment_file", type: nil)
+ let descriptionArg = description.asRubyArgument(name: "description", type: nil)
+ let nameArg = name.asRubyArgument(name: "name", type: nil)
+ let subtitleArg = subtitle.asRubyArgument(name: "subtitle", type: nil)
+ let keywordsArg = keywords.asRubyArgument(name: "keywords", type: nil)
+ let promotionalTextArg = promotionalText.asRubyArgument(name: "promotional_text", type: nil)
+ let releaseNotesArg = releaseNotes.asRubyArgument(name: "release_notes", type: nil)
+ let privacyUrlArg = privacyUrl.asRubyArgument(name: "privacy_url", type: nil)
+ let appleTvPrivacyPolicyArg = appleTvPrivacyPolicy.asRubyArgument(name: "apple_tv_privacy_policy", type: nil)
+ let supportUrlArg = supportUrl.asRubyArgument(name: "support_url", type: nil)
+ let marketingUrlArg = marketingUrl.asRubyArgument(name: "marketing_url", type: nil)
+ let languagesArg = languages.asRubyArgument(name: "languages", type: nil)
+ let ignoreLanguageDirectoryValidationArg = ignoreLanguageDirectoryValidation.asRubyArgument(name: "ignore_language_directory_validation", type: nil)
+ let precheckIncludeInAppPurchasesArg = precheckIncludeInAppPurchases.asRubyArgument(name: "precheck_include_in_app_purchases", type: nil)
+ let appArg = app.asRubyArgument(name: "app", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appVersionArg,
+ ipaArg,
+ pkgArg,
+ buildNumberArg,
+ platformArg,
+ editLiveArg,
+ useLiveVersionArg,
+ metadataPathArg,
+ screenshotsPathArg,
+ skipBinaryUploadArg,
+ skipScreenshotsArg,
+ skipMetadataArg,
+ skipAppVersionUpdateArg,
+ forceArg,
+ overwriteScreenshotsArg,
+ submitForReviewArg,
+ rejectIfPossibleArg,
+ automaticReleaseArg,
+ autoReleaseDateArg,
+ phasedReleaseArg,
+ resetRatingsArg,
+ priceTierArg,
+ appRatingConfigPathArg,
+ submissionInformationArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ devPortalTeamNameArg,
+ itcProviderArg,
+ runPrecheckBeforeSubmitArg,
+ precheckDefaultRuleLevelArg,
+ individualMetadataItemsArg,
+ appIconArg,
+ appleWatchAppIconArg,
+ copyrightArg,
+ primaryCategoryArg,
+ secondaryCategoryArg,
+ primaryFirstSubCategoryArg,
+ primarySecondSubCategoryArg,
+ secondaryFirstSubCategoryArg,
+ secondarySecondSubCategoryArg,
+ tradeRepresentativeContactInformationArg,
+ appReviewInformationArg,
+ appReviewAttachmentFileArg,
+ descriptionArg,
+ nameArg,
+ subtitleArg,
+ keywordsArg,
+ promotionalTextArg,
+ releaseNotesArg,
+ privacyUrlArg,
+ appleTvPrivacyPolicyArg,
+ supportUrlArg,
+ marketingUrlArg,
+ languagesArg,
+ ignoreLanguageDirectoryValidationArg,
+ precheckIncludeInAppPurchasesArg,
+ appArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_to_app_store", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload metadata, screenshots and binaries to Google Play (via _supply_)
@@ -8681,11 +12218,11 @@
- packageName: The package name of the application to use
- versionName: Version name (used when uploading new apks/aabs) - defaults to 'versionName' in build.gradle or AndroidManifest.xml
- versionCode: Version code (used when updating rollout or promoting specific versions)
- releaseStatus: Release status (used when uploading new apks/aabs) - valid values are completed, draft, halted, inProgress
- track: The track of the application to use. The default available tracks are: production, beta, alpha, internal
- - rollout: The percentage of the user fraction when uploading to the rollout track
+ - rollout: The percentage of the user fraction when uploading to the rollout track (setting to 1 will complete the rollout)
- metadataPath: Path to the directory containing the metadata files
- key: **DEPRECATED!** Use `--json_key` instead - The p12 File used to authenticate with Google
- issuer: **DEPRECATED!** Use `--json_key` instead - The issuer of the p12 file (email address of the service account)
- jsonKey: The path to a file containing service account JSON, used to authenticate with Google
- jsonKeyData: The raw service account JSON data used to authenticate with Google
@@ -8699,12 +12236,12 @@
- skipUploadChangelogs: Whether to skip uploading changelogs
- skipUploadImages: Whether to skip uploading images, screenshots not included
- skipUploadScreenshots: Whether to skip uploading SCREENSHOTS
- trackPromoteTo: The track to promote to. The default available tracks are: production, beta, alpha, internal
- validateOnly: Only validate changes with Google Play rather than actually publish
- - mapping: Path to the mapping file to upload
- - mappingPaths: An array of paths to mapping files to upload
+ - mapping: Path to the mapping file to upload (mapping.txt or native-debug-symbols.zip alike)
+ - mappingPaths: An array of paths to mapping files to upload (mapping.txt or native-debug-symbols.zip alike)
- rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
- checkSupersededTracks: **DEPRECATED!** Google Play does this automatically now - Check the other tracks for superseded versions and disable them
- timeout: Timeout for read, open, and send (in seconds)
- deactivateOnPromote: **DEPRECATED!** Google Play does this automatically now - When promoting to a new track, deactivate the binary in the origin track
- versionCodesToRetain: An array of version codes to retain when publishing a new APK
@@ -8716,82 +12253,122 @@
- ackBundleInstallationWarning: Must be set to true if the bundle installation may trigger a warning on user devices (e.g can only be downloaded over wifi). Typically this is required for bundles over 150MB
More information: https://docs.fastlane.tools/actions/supply/
*/
public func uploadToPlayStore(packageName: String,
- versionName: String? = nil,
- versionCode: Int? = nil,
+ versionName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versionCode: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
releaseStatus: String = "completed",
track: String = "production",
- rollout: String? = nil,
- metadataPath: String? = nil,
- key: String? = nil,
- issuer: String? = nil,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- apk: String? = nil,
- apkPaths: [String]? = nil,
- aab: String? = nil,
- aabPaths: [String]? = nil,
- skipUploadApk: Bool = false,
- skipUploadAab: Bool = false,
- skipUploadMetadata: Bool = false,
- skipUploadChangelogs: Bool = false,
- skipUploadImages: Bool = false,
- skipUploadScreenshots: Bool = false,
- trackPromoteTo: String? = nil,
- validateOnly: Bool = false,
- mapping: String? = nil,
- mappingPaths: [String]? = nil,
- rootUrl: String? = nil,
- checkSupersededTracks: Bool = false,
+ rollout: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ metadataPath: String = "./metadata",
+ key: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ issuer: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apkPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ aab: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ aabPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ skipUploadApk: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadAab: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadMetadata: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadChangelogs: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadImages: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipUploadScreenshots: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ trackPromoteTo: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ validateOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ mapping: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ mappingPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ checkSupersededTracks: OptionalConfigValue<Bool> = .fastlaneDefault(false),
timeout: Int = 300,
- deactivateOnPromote: Bool = true,
- versionCodesToRetain: [String]? = nil,
- inAppUpdatePriority: Int? = nil,
- obbMainReferencesVersion: String? = nil,
- obbMainFileSize: String? = nil,
- obbPatchReferencesVersion: String? = nil,
- obbPatchFileSize: String? = nil,
- ackBundleInstallationWarning: Bool = false)
+ deactivateOnPromote: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ versionCodesToRetain: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ inAppUpdatePriority: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ obbMainReferencesVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbMainFileSize: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbPatchReferencesVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ obbPatchFileSize: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ackBundleInstallationWarning: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "upload_to_play_store", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "version_name", value: versionName),
- RubyCommand.Argument(name: "version_code", value: versionCode),
- RubyCommand.Argument(name: "release_status", value: releaseStatus),
- RubyCommand.Argument(name: "track", value: track),
- RubyCommand.Argument(name: "rollout", value: rollout),
- RubyCommand.Argument(name: "metadata_path", value: metadataPath),
- RubyCommand.Argument(name: "key", value: key),
- RubyCommand.Argument(name: "issuer", value: issuer),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "apk_paths", value: apkPaths),
- RubyCommand.Argument(name: "aab", value: aab),
- RubyCommand.Argument(name: "aab_paths", value: aabPaths),
- RubyCommand.Argument(name: "skip_upload_apk", value: skipUploadApk),
- RubyCommand.Argument(name: "skip_upload_aab", value: skipUploadAab),
- RubyCommand.Argument(name: "skip_upload_metadata", value: skipUploadMetadata),
- RubyCommand.Argument(name: "skip_upload_changelogs", value: skipUploadChangelogs),
- RubyCommand.Argument(name: "skip_upload_images", value: skipUploadImages),
- RubyCommand.Argument(name: "skip_upload_screenshots", value: skipUploadScreenshots),
- RubyCommand.Argument(name: "track_promote_to", value: trackPromoteTo),
- RubyCommand.Argument(name: "validate_only", value: validateOnly),
- RubyCommand.Argument(name: "mapping", value: mapping),
- RubyCommand.Argument(name: "mapping_paths", value: mappingPaths),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "check_superseded_tracks", value: checkSupersededTracks),
- RubyCommand.Argument(name: "timeout", value: timeout),
- RubyCommand.Argument(name: "deactivate_on_promote", value: deactivateOnPromote),
- RubyCommand.Argument(name: "version_codes_to_retain", value: versionCodesToRetain),
- RubyCommand.Argument(name: "in_app_update_priority", value: inAppUpdatePriority),
- RubyCommand.Argument(name: "obb_main_references_version", value: obbMainReferencesVersion),
- RubyCommand.Argument(name: "obb_main_file_size", value: obbMainFileSize),
- RubyCommand.Argument(name: "obb_patch_references_version", value: obbPatchReferencesVersion),
- RubyCommand.Argument(name: "obb_patch_file_size", value: obbPatchFileSize),
- RubyCommand.Argument(name: "ack_bundle_installation_warning", value: ackBundleInstallationWarning)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let versionNameArg = versionName.asRubyArgument(name: "version_name", type: nil)
+ let versionCodeArg = versionCode.asRubyArgument(name: "version_code", type: nil)
+ let releaseStatusArg = RubyCommand.Argument(name: "release_status", value: releaseStatus, type: nil)
+ let trackArg = RubyCommand.Argument(name: "track", value: track, type: nil)
+ let rolloutArg = rollout.asRubyArgument(name: "rollout", type: nil)
+ let metadataPathArg = RubyCommand.Argument(name: "metadata_path", value: metadataPath, type: nil)
+ let keyArg = key.asRubyArgument(name: "key", type: nil)
+ let issuerArg = issuer.asRubyArgument(name: "issuer", type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let apkPathsArg = apkPaths.asRubyArgument(name: "apk_paths", type: nil)
+ let aabArg = aab.asRubyArgument(name: "aab", type: nil)
+ let aabPathsArg = aabPaths.asRubyArgument(name: "aab_paths", type: nil)
+ let skipUploadApkArg = skipUploadApk.asRubyArgument(name: "skip_upload_apk", type: nil)
+ let skipUploadAabArg = skipUploadAab.asRubyArgument(name: "skip_upload_aab", type: nil)
+ let skipUploadMetadataArg = skipUploadMetadata.asRubyArgument(name: "skip_upload_metadata", type: nil)
+ let skipUploadChangelogsArg = skipUploadChangelogs.asRubyArgument(name: "skip_upload_changelogs", type: nil)
+ let skipUploadImagesArg = skipUploadImages.asRubyArgument(name: "skip_upload_images", type: nil)
+ let skipUploadScreenshotsArg = skipUploadScreenshots.asRubyArgument(name: "skip_upload_screenshots", type: nil)
+ let trackPromoteToArg = trackPromoteTo.asRubyArgument(name: "track_promote_to", type: nil)
+ let validateOnlyArg = validateOnly.asRubyArgument(name: "validate_only", type: nil)
+ let mappingArg = mapping.asRubyArgument(name: "mapping", type: nil)
+ let mappingPathsArg = mappingPaths.asRubyArgument(name: "mapping_paths", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let checkSupersededTracksArg = checkSupersededTracks.asRubyArgument(name: "check_superseded_tracks", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let deactivateOnPromoteArg = deactivateOnPromote.asRubyArgument(name: "deactivate_on_promote", type: nil)
+ let versionCodesToRetainArg = versionCodesToRetain.asRubyArgument(name: "version_codes_to_retain", type: nil)
+ let inAppUpdatePriorityArg = inAppUpdatePriority.asRubyArgument(name: "in_app_update_priority", type: nil)
+ let obbMainReferencesVersionArg = obbMainReferencesVersion.asRubyArgument(name: "obb_main_references_version", type: nil)
+ let obbMainFileSizeArg = obbMainFileSize.asRubyArgument(name: "obb_main_file_size", type: nil)
+ let obbPatchReferencesVersionArg = obbPatchReferencesVersion.asRubyArgument(name: "obb_patch_references_version", type: nil)
+ let obbPatchFileSizeArg = obbPatchFileSize.asRubyArgument(name: "obb_patch_file_size", type: nil)
+ let ackBundleInstallationWarningArg = ackBundleInstallationWarning.asRubyArgument(name: "ack_bundle_installation_warning", type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ versionNameArg,
+ versionCodeArg,
+ releaseStatusArg,
+ trackArg,
+ rolloutArg,
+ metadataPathArg,
+ keyArg,
+ issuerArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ apkArg,
+ apkPathsArg,
+ aabArg,
+ aabPathsArg,
+ skipUploadApkArg,
+ skipUploadAabArg,
+ skipUploadMetadataArg,
+ skipUploadChangelogsArg,
+ skipUploadImagesArg,
+ skipUploadScreenshotsArg,
+ trackPromoteToArg,
+ validateOnlyArg,
+ mappingArg,
+ mappingPathsArg,
+ rootUrlArg,
+ checkSupersededTracksArg,
+ timeoutArg,
+ deactivateOnPromoteArg,
+ versionCodesToRetainArg,
+ inAppUpdatePriorityArg,
+ obbMainReferencesVersionArg,
+ obbMainFileSizeArg,
+ obbPatchReferencesVersionArg,
+ obbPatchFileSizeArg,
+ ackBundleInstallationWarningArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_to_play_store", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload binaries to Google Play Internal App Sharing (via _supply_)
@@ -8810,28 +12387,41 @@
- returns: Returns a string containing the download URL for the uploaded APK/AAB (or array of strings if multiple were uploaded).
More information: https://docs.fastlane.tools/actions/upload_to_play_store_internal_app_sharing/
*/
public func uploadToPlayStoreInternalAppSharing(packageName: String,
- jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- apk: String? = nil,
- apkPaths: [String]? = nil,
- aab: String? = nil,
- aabPaths: [String]? = nil,
- rootUrl: String? = nil,
+ jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apk: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apkPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ aab: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ aabPaths: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "upload_to_play_store_internal_app_sharing", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
- RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "apk", value: apk),
- RubyCommand.Argument(name: "apk_paths", value: apkPaths),
- RubyCommand.Argument(name: "aab", value: aab),
- RubyCommand.Argument(name: "aab_paths", value: aabPaths),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let packageNameArg = RubyCommand.Argument(name: "package_name", value: packageName, type: nil)
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let apkArg = apk.asRubyArgument(name: "apk", type: nil)
+ let apkPathsArg = apkPaths.asRubyArgument(name: "apk_paths", type: nil)
+ let aabArg = aab.asRubyArgument(name: "aab", type: nil)
+ let aabPathsArg = aabPaths.asRubyArgument(name: "aab_paths", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [packageNameArg,
+ jsonKeyArg,
+ jsonKeyDataArg,
+ apkArg,
+ apkPathsArg,
+ aabArg,
+ aabPathsArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_to_play_store_internal_app_sharing", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Upload new binary to App Store Connect for TestFlight beta testing (via _pilot_)
@@ -8854,104 +12444,148 @@
- skipSubmission: Skip the distributing action of pilot and only upload the ipa file
- skipWaitingForBuildProcessing: If set to true, the `distribute_external` option won't work and no build will be distributed to testers. (You might want to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to `true` and a changelog is provided, it will partially wait for the build to appear on AppStore Connect so the changelog can be set, and skip the remaining processing steps
- updateBuildInfoOnUpload: **DEPRECATED!** Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default
- distributeOnly: Distribute a previously uploaded build (equivalent to the `fastlane pilot distribute` command)
- usesNonExemptEncryption: Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist
- - distributeExternal: Should the build be distributed to external testers?
- - notifyExternalTesters: Should notify external testers?
+ - distributeExternal: Should the build be distributed to external testers? If set to true, use of `groups` option is required
+ - notifyExternalTesters: Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)
- appVersion: The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed
- buildNumber: The build number of the application build to distribute. If the build number is not specified, the most recent build is distributed
- expirePreviousBuilds: Should expire previous builds?
- firstName: The tester's first name
- lastName: The tester's last name
- email: The tester's email
- testersFilePath: Path to a CSV file of testers
- - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"`
+ - groups: Associate tester to one group or more by group name / group id. E.g. `-g "Team 1","Team 2"` This is required when `distribute_external` option is set to true or when we want to add a tester to one or more external testing groups
- teamId: The ID of your App Store Connect team if you're in multiple teams
- teamName: The name of your App Store Connect team if you're in multiple teams
- devPortalTeamId: The short ID of your team in the developer portal, if you're in multiple teams. Different from your iTC team ID!
- itcProvider: The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
- waitProcessingInterval: Interval in seconds to wait for App Store Connect processing
+ - waitProcessingTimeoutDuration: Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout duration, this will `force stop` to wait for App Store Connect processing and exit with exception
- waitForUploadedBuild: **DEPRECATED!** No longer needed with the transition over to the App Store Connect API - Use version info from uploaded ipa file to determine what build to use for distribution. If set to false, latest processing or any latest build will be used
- rejectBuildWaitingForReview: Expire previous if it's 'waiting for review'
More details can be found on https://docs.fastlane.tools/actions/pilot/.
This integration will only do the TestFlight upload.
*/
-public func uploadToTestflight(apiKeyPath: String? = nil,
- apiKey: [String: Any]? = nil,
- username: String,
- appIdentifier: String? = nil,
+public func uploadToTestflight(apiKeyPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ apiKey: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ username: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
appPlatform: String = "ios",
- appleId: String? = nil,
- ipa: String? = nil,
- demoAccountRequired: Bool = false,
- betaAppReviewInfo: [String: Any]? = nil,
- localizedAppInfo: [String: Any]? = nil,
- betaAppDescription: String? = nil,
- betaAppFeedbackEmail: String? = nil,
- localizedBuildInfo: [String: Any]? = nil,
- changelog: String? = nil,
- skipSubmission: Bool = false,
- skipWaitingForBuildProcessing: Bool = false,
- updateBuildInfoOnUpload: Bool = false,
- distributeOnly: Bool = false,
- usesNonExemptEncryption: Bool = false,
- distributeExternal: Bool = false,
- notifyExternalTesters: Bool = true,
- appVersion: String? = nil,
- buildNumber: String? = nil,
- expirePreviousBuilds: Bool = false,
- firstName: String? = nil,
- lastName: String? = nil,
- email: String? = nil,
+ appleId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipa: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ demoAccountRequired: OptionalConfigValue<Bool?> = .fastlaneDefault(nil),
+ betaAppReviewInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ localizedAppInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ betaAppDescription: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ betaAppFeedbackEmail: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ localizedBuildInfo: OptionalConfigValue<[String: Any]?> = .fastlaneDefault(nil),
+ changelog: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSubmission: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ skipWaitingForBuildProcessing: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ updateBuildInfoOnUpload: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeOnly: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ usesNonExemptEncryption: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ distributeExternal: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ notifyExternalTesters: Any? = nil,
+ appVersion: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ expirePreviousBuilds: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ firstName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ lastName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ email: OptionalConfigValue<String?> = .fastlaneDefault(nil),
testersFilePath: String = "./testers.csv",
- groups: [String]? = nil,
+ groups: OptionalConfigValue<[String]?> = .fastlaneDefault(nil),
teamId: Any? = nil,
- teamName: String? = nil,
- devPortalTeamId: String? = nil,
- itcProvider: String? = nil,
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ devPortalTeamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ itcProvider: OptionalConfigValue<String?> = .fastlaneDefault(nil),
waitProcessingInterval: Int = 30,
- waitForUploadedBuild: Bool = false,
- rejectBuildWaitingForReview: Bool = false)
+ waitProcessingTimeoutDuration: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
+ waitForUploadedBuild: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ rejectBuildWaitingForReview: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "upload_to_testflight", className: nil, args: [RubyCommand.Argument(name: "api_key_path", value: apiKeyPath),
- RubyCommand.Argument(name: "api_key", value: apiKey),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
- RubyCommand.Argument(name: "app_platform", value: appPlatform),
- RubyCommand.Argument(name: "apple_id", value: appleId),
- RubyCommand.Argument(name: "ipa", value: ipa),
- RubyCommand.Argument(name: "demo_account_required", value: demoAccountRequired),
- RubyCommand.Argument(name: "beta_app_review_info", value: betaAppReviewInfo),
- RubyCommand.Argument(name: "localized_app_info", value: localizedAppInfo),
- RubyCommand.Argument(name: "beta_app_description", value: betaAppDescription),
- RubyCommand.Argument(name: "beta_app_feedback_email", value: betaAppFeedbackEmail),
- RubyCommand.Argument(name: "localized_build_info", value: localizedBuildInfo),
- RubyCommand.Argument(name: "changelog", value: changelog),
- RubyCommand.Argument(name: "skip_submission", value: skipSubmission),
- RubyCommand.Argument(name: "skip_waiting_for_build_processing", value: skipWaitingForBuildProcessing),
- RubyCommand.Argument(name: "update_build_info_on_upload", value: updateBuildInfoOnUpload),
- RubyCommand.Argument(name: "distribute_only", value: distributeOnly),
- RubyCommand.Argument(name: "uses_non_exempt_encryption", value: usesNonExemptEncryption),
- RubyCommand.Argument(name: "distribute_external", value: distributeExternal),
- RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters),
- RubyCommand.Argument(name: "app_version", value: appVersion),
- RubyCommand.Argument(name: "build_number", value: buildNumber),
- RubyCommand.Argument(name: "expire_previous_builds", value: expirePreviousBuilds),
- RubyCommand.Argument(name: "first_name", value: firstName),
- RubyCommand.Argument(name: "last_name", value: lastName),
- RubyCommand.Argument(name: "email", value: email),
- RubyCommand.Argument(name: "testers_file_path", value: testersFilePath),
- RubyCommand.Argument(name: "groups", value: groups),
- RubyCommand.Argument(name: "team_id", value: teamId),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
- RubyCommand.Argument(name: "itc_provider", value: itcProvider),
- RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval),
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
- RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
+ let apiKeyPathArg = apiKeyPath.asRubyArgument(name: "api_key_path", type: nil)
+ let apiKeyArg = apiKey.asRubyArgument(name: "api_key", type: nil)
+ let usernameArg = username.asRubyArgument(name: "username", type: nil)
+ let appIdentifierArg = appIdentifier.asRubyArgument(name: "app_identifier", type: nil)
+ let appPlatformArg = RubyCommand.Argument(name: "app_platform", value: appPlatform, type: nil)
+ let appleIdArg = appleId.asRubyArgument(name: "apple_id", type: nil)
+ let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
+ let demoAccountRequiredArg = demoAccountRequired.asRubyArgument(name: "demo_account_required", type: nil)
+ let betaAppReviewInfoArg = betaAppReviewInfo.asRubyArgument(name: "beta_app_review_info", type: nil)
+ let localizedAppInfoArg = localizedAppInfo.asRubyArgument(name: "localized_app_info", type: nil)
+ let betaAppDescriptionArg = betaAppDescription.asRubyArgument(name: "beta_app_description", type: nil)
+ let betaAppFeedbackEmailArg = betaAppFeedbackEmail.asRubyArgument(name: "beta_app_feedback_email", type: nil)
+ let localizedBuildInfoArg = localizedBuildInfo.asRubyArgument(name: "localized_build_info", type: nil)
+ let changelogArg = changelog.asRubyArgument(name: "changelog", type: nil)
+ let skipSubmissionArg = skipSubmission.asRubyArgument(name: "skip_submission", type: nil)
+ let skipWaitingForBuildProcessingArg = skipWaitingForBuildProcessing.asRubyArgument(name: "skip_waiting_for_build_processing", type: nil)
+ let updateBuildInfoOnUploadArg = updateBuildInfoOnUpload.asRubyArgument(name: "update_build_info_on_upload", type: nil)
+ let distributeOnlyArg = distributeOnly.asRubyArgument(name: "distribute_only", type: nil)
+ let usesNonExemptEncryptionArg = usesNonExemptEncryption.asRubyArgument(name: "uses_non_exempt_encryption", type: nil)
+ let distributeExternalArg = distributeExternal.asRubyArgument(name: "distribute_external", type: nil)
+ let notifyExternalTestersArg = RubyCommand.Argument(name: "notify_external_testers", value: notifyExternalTesters, type: nil)
+ let appVersionArg = appVersion.asRubyArgument(name: "app_version", type: nil)
+ let buildNumberArg = buildNumber.asRubyArgument(name: "build_number", type: nil)
+ let expirePreviousBuildsArg = expirePreviousBuilds.asRubyArgument(name: "expire_previous_builds", type: nil)
+ let firstNameArg = firstName.asRubyArgument(name: "first_name", type: nil)
+ let lastNameArg = lastName.asRubyArgument(name: "last_name", type: nil)
+ let emailArg = email.asRubyArgument(name: "email", type: nil)
+ let testersFilePathArg = RubyCommand.Argument(name: "testers_file_path", value: testersFilePath, type: nil)
+ let groupsArg = groups.asRubyArgument(name: "groups", type: nil)
+ let teamIdArg = RubyCommand.Argument(name: "team_id", value: teamId, type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let devPortalTeamIdArg = devPortalTeamId.asRubyArgument(name: "dev_portal_team_id", type: nil)
+ let itcProviderArg = itcProvider.asRubyArgument(name: "itc_provider", type: nil)
+ let waitProcessingIntervalArg = RubyCommand.Argument(name: "wait_processing_interval", value: waitProcessingInterval, type: nil)
+ let waitProcessingTimeoutDurationArg = waitProcessingTimeoutDuration.asRubyArgument(name: "wait_processing_timeout_duration", type: nil)
+ let waitForUploadedBuildArg = waitForUploadedBuild.asRubyArgument(name: "wait_for_uploaded_build", type: nil)
+ let rejectBuildWaitingForReviewArg = rejectBuildWaitingForReview.asRubyArgument(name: "reject_build_waiting_for_review", type: nil)
+ let array: [RubyCommand.Argument?] = [apiKeyPathArg,
+ apiKeyArg,
+ usernameArg,
+ appIdentifierArg,
+ appPlatformArg,
+ appleIdArg,
+ ipaArg,
+ demoAccountRequiredArg,
+ betaAppReviewInfoArg,
+ localizedAppInfoArg,
+ betaAppDescriptionArg,
+ betaAppFeedbackEmailArg,
+ localizedBuildInfoArg,
+ changelogArg,
+ skipSubmissionArg,
+ skipWaitingForBuildProcessingArg,
+ updateBuildInfoOnUploadArg,
+ distributeOnlyArg,
+ usesNonExemptEncryptionArg,
+ distributeExternalArg,
+ notifyExternalTestersArg,
+ appVersionArg,
+ buildNumberArg,
+ expirePreviousBuildsArg,
+ firstNameArg,
+ lastNameArg,
+ emailArg,
+ testersFilePathArg,
+ groupsArg,
+ teamIdArg,
+ teamNameArg,
+ devPortalTeamIdArg,
+ itcProviderArg,
+ waitProcessingIntervalArg,
+ waitProcessingTimeoutDurationArg,
+ waitForUploadedBuildArg,
+ rejectBuildWaitingForReviewArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "upload_to_testflight", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Validate that the Google Play Store `json_key` works
@@ -8962,19 +12596,27 @@
- rootUrl: Root URL for the Google Play API. The provided URL will be used for API calls in place of https://www.googleapis.com/
- timeout: Timeout for read, open, and send (in seconds)
Use this action to test and validate your private key json key file used to connect and authenticate with the Google Play API
*/
-public func validatePlayStoreJsonKey(jsonKey: String? = nil,
- jsonKeyData: String? = nil,
- rootUrl: String? = nil,
+public func validatePlayStoreJsonKey(jsonKey: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ jsonKeyData: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ rootUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
timeout: Int = 300)
{
- let command = RubyCommand(commandID: "", methodName: "validate_play_store_json_key", className: nil, args: [RubyCommand.Argument(name: "json_key", value: jsonKey),
- RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
- RubyCommand.Argument(name: "root_url", value: rootUrl),
- RubyCommand.Argument(name: "timeout", value: timeout)])
+ let jsonKeyArg = jsonKey.asRubyArgument(name: "json_key", type: nil)
+ let jsonKeyDataArg = jsonKeyData.asRubyArgument(name: "json_key_data", type: nil)
+ let rootUrlArg = rootUrl.asRubyArgument(name: "root_url", type: nil)
+ let timeoutArg = RubyCommand.Argument(name: "timeout", value: timeout, type: nil)
+ let array: [RubyCommand.Argument?] = [jsonKeyArg,
+ jsonKeyDataArg,
+ rootUrlArg,
+ timeoutArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "validate_play_store_json_key", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Able to verify various settings in ipa file
@@ -8989,37 +12631,50 @@
- ipaPath: Explicitly set the ipa path
- buildPath: Explicitly set the ipa, app or xcarchive path
Verifies that the built app was built using the expected build resources. This is relevant for people who build on machines that are used to build apps with different profiles, certificates and/or bundle identifiers to guard against configuration mistakes.
*/
-public func verifyBuild(provisioningType: String? = nil,
- provisioningUuid: String? = nil,
- teamIdentifier: String? = nil,
- teamName: String? = nil,
- appName: String? = nil,
- bundleIdentifier: String? = nil,
- ipaPath: String? = nil,
- buildPath: String? = nil)
+public func verifyBuild(provisioningType: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ provisioningUuid: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ teamName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ appName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ bundleIdentifier: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ipaPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ buildPath: OptionalConfigValue<String?> = .fastlaneDefault(nil))
{
- let command = RubyCommand(commandID: "", methodName: "verify_build", className: nil, args: [RubyCommand.Argument(name: "provisioning_type", value: provisioningType),
- RubyCommand.Argument(name: "provisioning_uuid", value: provisioningUuid),
- RubyCommand.Argument(name: "team_identifier", value: teamIdentifier),
- RubyCommand.Argument(name: "team_name", value: teamName),
- RubyCommand.Argument(name: "app_name", value: appName),
- RubyCommand.Argument(name: "bundle_identifier", value: bundleIdentifier),
- RubyCommand.Argument(name: "ipa_path", value: ipaPath),
- RubyCommand.Argument(name: "build_path", value: buildPath)])
+ let provisioningTypeArg = provisioningType.asRubyArgument(name: "provisioning_type", type: nil)
+ let provisioningUuidArg = provisioningUuid.asRubyArgument(name: "provisioning_uuid", type: nil)
+ let teamIdentifierArg = teamIdentifier.asRubyArgument(name: "team_identifier", type: nil)
+ let teamNameArg = teamName.asRubyArgument(name: "team_name", type: nil)
+ let appNameArg = appName.asRubyArgument(name: "app_name", type: nil)
+ let bundleIdentifierArg = bundleIdentifier.asRubyArgument(name: "bundle_identifier", type: nil)
+ let ipaPathArg = ipaPath.asRubyArgument(name: "ipa_path", type: nil)
+ let buildPathArg = buildPath.asRubyArgument(name: "build_path", type: nil)
+ let array: [RubyCommand.Argument?] = [provisioningTypeArg,
+ provisioningUuidArg,
+ teamIdentifierArg,
+ teamNameArg,
+ appNameArg,
+ bundleIdentifierArg,
+ ipaPathArg,
+ buildPathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "verify_build", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Verifies all keys referenced from the Podfile are non-empty
Runs a check against all keys specified in your Podfile to make sure they're more than a single character long. This is to ensure you don't deploy with stubbed keys.
*/
public func verifyPodKeys() {
- let command = RubyCommand(commandID: "", methodName: "verify_pod_keys", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "verify_pod_keys", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Verifies that the Xcode installation is properly signed by Apple
@@ -9027,11 +12682,16 @@
- parameter xcodePath: The path to the Xcode installation to test
This action was implemented after the recent Xcode attack to make sure you're not using a [hacked Xcode installation](http://researchcenter.paloaltonetworks.com/2015/09/novel-malware-xcodeghost-modifies-xcode-infects-apple-ios-apps-and-hits-app-store/).
*/
public func verifyXcode(xcodePath: String) {
- let command = RubyCommand(commandID: "", methodName: "verify_xcode", className: nil, args: [RubyCommand.Argument(name: "xcode_path", value: xcodePath)])
+ let xcodePathArg = RubyCommand.Argument(name: "xcode_path", value: xcodePath, type: nil)
+ let array: [RubyCommand.Argument?] = [xcodePathArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "verify_xcode", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Increment or set the version in a podspec file
@@ -9048,19 +12708,28 @@
It also supports versions that are not semantic: `1.4.14.4.1`.
For such versions, there is an option to change the appendix (e.g. `4.1`).
*/
public func versionBumpPodspec(path: String,
bumpType: String = "patch",
- versionNumber: String? = nil,
- versionAppendix: String? = nil,
- requireVariablePrefix: Bool = true)
+ versionNumber: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ versionAppendix: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ requireVariablePrefix: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "version_bump_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "bump_type", value: bumpType),
- RubyCommand.Argument(name: "version_number", value: versionNumber),
- RubyCommand.Argument(name: "version_appendix", value: versionAppendix),
- RubyCommand.Argument(name: "require_variable_prefix", value: requireVariablePrefix)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let bumpTypeArg = RubyCommand.Argument(name: "bump_type", value: bumpType, type: nil)
+ let versionNumberArg = versionNumber.asRubyArgument(name: "version_number", type: nil)
+ let versionAppendixArg = versionAppendix.asRubyArgument(name: "version_appendix", type: nil)
+ let requireVariablePrefixArg = requireVariablePrefix.asRubyArgument(name: "require_variable_prefix", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ bumpTypeArg,
+ versionNumberArg,
+ versionAppendixArg,
+ requireVariablePrefixArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "version_bump_podspec", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Receive the version number from a podspec file
@@ -9068,68 +12737,89 @@
- parameters:
- path: You must specify the path to the podspec file
- requireVariablePrefix: true by default, this is used for non CocoaPods version bumps only
*/
public func versionGetPodspec(path: String,
- requireVariablePrefix: Bool = true)
+ requireVariablePrefix: OptionalConfigValue<Bool> = .fastlaneDefault(true))
{
- let command = RubyCommand(commandID: "", methodName: "version_get_podspec", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "require_variable_prefix", value: requireVariablePrefix)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let requireVariablePrefixArg = requireVariablePrefix.asRubyArgument(name: "require_variable_prefix", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ requireVariablePrefixArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "version_get_podspec", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Archives the project using `xcodebuild`
*/
public func xcarchive() {
- let command = RubyCommand(commandID: "", methodName: "xcarchive", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcarchive", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Builds the project using `xcodebuild`
*/
public func xcbuild() {
- let command = RubyCommand(commandID: "", methodName: "xcbuild", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcbuild", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Cleans the project using `xcodebuild`
*/
public func xcclean() {
- let command = RubyCommand(commandID: "", methodName: "xcclean", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcclean", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Exports the project using `xcodebuild`
*/
public func xcexport() {
- let command = RubyCommand(commandID: "", methodName: "xcexport", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcexport", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Make sure a certain version of Xcode is installed
- parameters:
- version: The version number of the version of Xcode to install
- username: Your Apple ID Username
- teamId: The ID of your team if you're in multiple teams
+ - downloadRetryAttempts: Number of times the download will be retried in case of failure
- returns: The path to the newly installed Xcode version
Makes sure a specific version of Xcode is installed. If that's not the case, it will automatically be downloaded by the [xcode_install](https://github.com/neonichu/xcode-install) gem. This will make sure to use the correct Xcode for later actions.
*/
@discardableResult public func xcodeInstall(version: String,
username: String,
- teamId: String? = nil) -> String
+ teamId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ downloadRetryAttempts: Int = 3) -> String
{
- let command = RubyCommand(commandID: "", methodName: "xcode_install", className: nil, args: [RubyCommand.Argument(name: "version", value: version),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "team_id", value: teamId)])
+ let versionArg = RubyCommand.Argument(name: "version", value: version, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let teamIdArg = teamId.asRubyArgument(name: "team_id", type: nil)
+ let downloadRetryAttemptsArg = RubyCommand.Argument(name: "download_retry_attempts", value: downloadRetryAttempts, type: nil)
+ let array: [RubyCommand.Argument?] = [versionArg,
+ usernameArg,
+ teamIdArg,
+ downloadRetryAttemptsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "xcode_install", className: nil, args: args)
return runner.executeCommand(command)
}
/**
Change the xcode-path to use. Useful for beta versions of Xcode
@@ -9138,11 +12828,12 @@
Use the `xcversion` action if you want to select an Xcode:
- Based on a version specifier or
- You don't have known, stable paths, as may happen in a CI environment.
*/
public func xcodeSelect() {
- let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Downloads Xcode Bot assets like the `.xcarchive` and logs
@@ -9163,33 +12854,46 @@
*/
@discardableResult public func xcodeServerGetAssets(host: String,
botName: String,
integrationNumber: Any? = nil,
username: String = "",
- password: String? = nil,
+ password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
targetFolder: String = "./xcs_assets",
- keepAllAssets: Bool = false,
- trustSelfSignedCerts: Bool = true) -> [String]
+ keepAllAssets: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ trustSelfSignedCerts: OptionalConfigValue<Bool> = .fastlaneDefault(true)) -> [String]
{
- let command = RubyCommand(commandID: "", methodName: "xcode_server_get_assets", className: nil, args: [RubyCommand.Argument(name: "host", value: host),
- RubyCommand.Argument(name: "bot_name", value: botName),
- RubyCommand.Argument(name: "integration_number", value: integrationNumber),
- RubyCommand.Argument(name: "username", value: username),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "target_folder", value: targetFolder),
- RubyCommand.Argument(name: "keep_all_assets", value: keepAllAssets),
- RubyCommand.Argument(name: "trust_self_signed_certs", value: trustSelfSignedCerts)])
+ let hostArg = RubyCommand.Argument(name: "host", value: host, type: nil)
+ let botNameArg = RubyCommand.Argument(name: "bot_name", value: botName, type: nil)
+ let integrationNumberArg = RubyCommand.Argument(name: "integration_number", value: integrationNumber, type: nil)
+ let usernameArg = RubyCommand.Argument(name: "username", value: username, type: nil)
+ let passwordArg = password.asRubyArgument(name: "password", type: nil)
+ let targetFolderArg = RubyCommand.Argument(name: "target_folder", value: targetFolder, type: nil)
+ let keepAllAssetsArg = keepAllAssets.asRubyArgument(name: "keep_all_assets", type: nil)
+ let trustSelfSignedCertsArg = trustSelfSignedCerts.asRubyArgument(name: "trust_self_signed_certs", type: nil)
+ let array: [RubyCommand.Argument?] = [hostArg,
+ botNameArg,
+ integrationNumberArg,
+ usernameArg,
+ passwordArg,
+ targetFolderArg,
+ keepAllAssetsArg,
+ trustSelfSignedCertsArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "xcode_server_get_assets", className: nil, args: args)
return parseArray(fromString: runner.executeCommand(command))
}
/**
Use the `xcodebuild` command to build and sign your app
**Note**: `xcodebuild` is a complex command, so it is recommended to use [_gym_](https://docs.fastlane.tools/actions/gym/) for building your ipa file and [_scan_](https://docs.fastlane.tools/actions/scan/) for testing your app instead.
*/
public func xcodebuild() {
- let command = RubyCommand(commandID: "", methodName: "xcodebuild", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xcodebuild", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Nice code coverage reports without hassle
@@ -9225,75 +12929,108 @@
- legacySupport: Whether xcov should parse a xccoverage file instead on xccovreport
Create nice code coverage reports and post coverage summaries on Slack *(xcov gem is required)*.
More information: [https://github.com/nakiostudio/xcov](https://github.com/nakiostudio/xcov).
*/
-public func xcov(workspace: String? = nil,
- project: String? = nil,
- scheme: String? = nil,
- configuration: String? = nil,
- sourceDirectory: String? = nil,
- derivedDataPath: String? = nil,
+public func xcov(workspace: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ project: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ scheme: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ configuration: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ sourceDirectory: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ derivedDataPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
outputDirectory: String = "./xcov_report",
- htmlReport: Bool = true,
- markdownReport: Bool = false,
- jsonReport: Bool = false,
- minimumCoveragePercentage: Float = 0,
- slackUrl: String? = nil,
- slackChannel: String? = nil,
- skipSlack: Bool = false,
+ htmlReport: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ markdownReport: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ jsonReport: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ minimumCoveragePercentage: Float = 0.0,
+ slackUrl: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ slackChannel: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ skipSlack: OptionalConfigValue<Bool> = .fastlaneDefault(false),
slackUsername: String = "xcov",
slackMessage: String = "Your *xcov* coverage report",
ignoreFilePath: String = "./.xcovignore",
- includeTestTargets: Bool = false,
- excludeTargets: String? = nil,
- includeTargets: String? = nil,
- onlyProjectTargets: Bool = false,
- disableCoveralls: Bool = false,
- coverallsServiceName: String? = nil,
- coverallsServiceJobId: String? = nil,
- coverallsRepoToken: String? = nil,
- xcconfig: String? = nil,
- ideFoundationPath: String = "/Applications/Xcode-12.0.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
- legacySupport: Bool = false)
+ includeTestTargets: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ excludeTargets: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ includeTargets: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ onlyProjectTargets: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ disableCoveralls: OptionalConfigValue<Bool> = .fastlaneDefault(false),
+ coverallsServiceName: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ coverallsServiceJobId: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ coverallsRepoToken: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ xcconfig: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ ideFoundationPath: String = "/Applications/Xcode-12.4.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
+ legacySupport: OptionalConfigValue<Bool> = .fastlaneDefault(false))
{
- let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
- RubyCommand.Argument(name: "project", value: project),
- RubyCommand.Argument(name: "scheme", value: scheme),
- RubyCommand.Argument(name: "configuration", value: configuration),
- RubyCommand.Argument(name: "source_directory", value: sourceDirectory),
- RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
- RubyCommand.Argument(name: "output_directory", value: outputDirectory),
- RubyCommand.Argument(name: "html_report", value: htmlReport),
- RubyCommand.Argument(name: "markdown_report", value: markdownReport),
- RubyCommand.Argument(name: "json_report", value: jsonReport),
- RubyCommand.Argument(name: "minimum_coverage_percentage", value: minimumCoveragePercentage),
- RubyCommand.Argument(name: "slack_url", value: slackUrl),
- RubyCommand.Argument(name: "slack_channel", value: slackChannel),
- RubyCommand.Argument(name: "skip_slack", value: skipSlack),
- RubyCommand.Argument(name: "slack_username", value: slackUsername),
- RubyCommand.Argument(name: "slack_message", value: slackMessage),
- RubyCommand.Argument(name: "ignore_file_path", value: ignoreFilePath),
- RubyCommand.Argument(name: "include_test_targets", value: includeTestTargets),
- RubyCommand.Argument(name: "exclude_targets", value: excludeTargets),
- RubyCommand.Argument(name: "include_targets", value: includeTargets),
- RubyCommand.Argument(name: "only_project_targets", value: onlyProjectTargets),
- RubyCommand.Argument(name: "disable_coveralls", value: disableCoveralls),
- RubyCommand.Argument(name: "coveralls_service_name", value: coverallsServiceName),
- RubyCommand.Argument(name: "coveralls_service_job_id", value: coverallsServiceJobId),
- RubyCommand.Argument(name: "coveralls_repo_token", value: coverallsRepoToken),
- RubyCommand.Argument(name: "xcconfig", value: xcconfig),
- RubyCommand.Argument(name: "ideFoundationPath", value: ideFoundationPath),
- RubyCommand.Argument(name: "legacy_support", value: legacySupport)])
+ let workspaceArg = workspace.asRubyArgument(name: "workspace", type: nil)
+ let projectArg = project.asRubyArgument(name: "project", type: nil)
+ let schemeArg = scheme.asRubyArgument(name: "scheme", type: nil)
+ let configurationArg = configuration.asRubyArgument(name: "configuration", type: nil)
+ let sourceDirectoryArg = sourceDirectory.asRubyArgument(name: "source_directory", type: nil)
+ let derivedDataPathArg = derivedDataPath.asRubyArgument(name: "derived_data_path", type: nil)
+ let outputDirectoryArg = RubyCommand.Argument(name: "output_directory", value: outputDirectory, type: nil)
+ let htmlReportArg = htmlReport.asRubyArgument(name: "html_report", type: nil)
+ let markdownReportArg = markdownReport.asRubyArgument(name: "markdown_report", type: nil)
+ let jsonReportArg = jsonReport.asRubyArgument(name: "json_report", type: nil)
+ let minimumCoveragePercentageArg = RubyCommand.Argument(name: "minimum_coverage_percentage", value: minimumCoveragePercentage, type: nil)
+ let slackUrlArg = slackUrl.asRubyArgument(name: "slack_url", type: nil)
+ let slackChannelArg = slackChannel.asRubyArgument(name: "slack_channel", type: nil)
+ let skipSlackArg = skipSlack.asRubyArgument(name: "skip_slack", type: nil)
+ let slackUsernameArg = RubyCommand.Argument(name: "slack_username", value: slackUsername, type: nil)
+ let slackMessageArg = RubyCommand.Argument(name: "slack_message", value: slackMessage, type: nil)
+ let ignoreFilePathArg = RubyCommand.Argument(name: "ignore_file_path", value: ignoreFilePath, type: nil)
+ let includeTestTargetsArg = includeTestTargets.asRubyArgument(name: "include_test_targets", type: nil)
+ let excludeTargetsArg = excludeTargets.asRubyArgument(name: "exclude_targets", type: nil)
+ let includeTargetsArg = includeTargets.asRubyArgument(name: "include_targets", type: nil)
+ let onlyProjectTargetsArg = onlyProjectTargets.asRubyArgument(name: "only_project_targets", type: nil)
+ let disableCoverallsArg = disableCoveralls.asRubyArgument(name: "disable_coveralls", type: nil)
+ let coverallsServiceNameArg = coverallsServiceName.asRubyArgument(name: "coveralls_service_name", type: nil)
+ let coverallsServiceJobIdArg = coverallsServiceJobId.asRubyArgument(name: "coveralls_service_job_id", type: nil)
+ let coverallsRepoTokenArg = coverallsRepoToken.asRubyArgument(name: "coveralls_repo_token", type: nil)
+ let xcconfigArg = xcconfig.asRubyArgument(name: "xcconfig", type: nil)
+ let ideFoundationPathArg = RubyCommand.Argument(name: "ideFoundationPath", value: ideFoundationPath, type: nil)
+ let legacySupportArg = legacySupport.asRubyArgument(name: "legacy_support", type: nil)
+ let array: [RubyCommand.Argument?] = [workspaceArg,
+ projectArg,
+ schemeArg,
+ configurationArg,
+ sourceDirectoryArg,
+ derivedDataPathArg,
+ outputDirectoryArg,
+ htmlReportArg,
+ markdownReportArg,
+ jsonReportArg,
+ minimumCoveragePercentageArg,
+ slackUrlArg,
+ slackChannelArg,
+ skipSlackArg,
+ slackUsernameArg,
+ slackMessageArg,
+ ignoreFilePathArg,
+ includeTestTargetsArg,
+ excludeTargetsArg,
+ includeTargetsArg,
+ onlyProjectTargetsArg,
+ disableCoverallsArg,
+ coverallsServiceNameArg,
+ coverallsServiceJobIdArg,
+ coverallsRepoTokenArg,
+ xcconfigArg,
+ ideFoundationPathArg,
+ legacySupportArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Runs tests on the given simulator
*/
public func xctest() {
- let command = RubyCommand(commandID: "", methodName: "xctest", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xctest", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Run tests using xctool
@@ -9301,11 +13038,12 @@
You can run any `xctool` action. This will require having [xctool](https://github.com/facebook/xctool) installed through [Homebrew](http://brew.sh).
It is recommended to store the build configuration in the `.xctool-args` file.
More information: [https://docs.fastlane.tools/actions/xctool/](https://docs.fastlane.tools/actions/xctool/).
*/
public func xctool() {
- let command = RubyCommand(commandID: "", methodName: "xctool", className: nil, args: [])
+ let args: [RubyCommand.Argument] = []
+ let command = RubyCommand(commandID: "", methodName: "xctool", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Select an Xcode to use by version specifier
@@ -9313,11 +13051,16 @@
- parameter version: The version of Xcode to select specified as a Gem::Version requirement string (e.g. '~> 7.1.0')
Finds and selects a version of an installed Xcode that best matches the provided [`Gem::Version` requirement specifier](http://www.rubydoc.info/github/rubygems/rubygems/Gem/Version)
*/
public func xcversion(version: String) {
- let command = RubyCommand(commandID: "", methodName: "xcversion", className: nil, args: [RubyCommand.Argument(name: "version", value: version)])
+ let versionArg = RubyCommand.Argument(name: "version", value: version, type: nil)
+ let array: [RubyCommand.Argument?] = [versionArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "xcversion", className: nil, args: args)
_ = runner.executeCommand(command)
}
/**
Compress a file or folder to a zip
@@ -9330,20 +13073,29 @@
- symlinks: Store symbolic links as such in the zip archive
- returns: The path to the output zip file
*/
@discardableResult public func zip(path: String,
- outputPath: String? = nil,
- verbose: Bool = true,
- password: String? = nil,
- symlinks: Bool = false) -> String
+ outputPath: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ verbose: OptionalConfigValue<Bool> = .fastlaneDefault(true),
+ password: OptionalConfigValue<String?> = .fastlaneDefault(nil),
+ symlinks: OptionalConfigValue<Bool> = .fastlaneDefault(false)) -> String
{
- let command = RubyCommand(commandID: "", methodName: "zip", className: nil, args: [RubyCommand.Argument(name: "path", value: path),
- RubyCommand.Argument(name: "output_path", value: outputPath),
- RubyCommand.Argument(name: "verbose", value: verbose),
- RubyCommand.Argument(name: "password", value: password),
- RubyCommand.Argument(name: "symlinks", value: symlinks)])
+ let pathArg = RubyCommand.Argument(name: "path", value: path, type: nil)
+ let outputPathArg = outputPath.asRubyArgument(name: "output_path", type: nil)
+ let verboseArg = verbose.asRubyArgument(name: "verbose", type: nil)
+ let passwordArg = password.asRubyArgument(name: "password", type: nil)
+ let symlinksArg = symlinks.asRubyArgument(name: "symlinks", type: nil)
+ let array: [RubyCommand.Argument?] = [pathArg,
+ outputPathArg,
+ verboseArg,
+ passwordArg,
+ symlinksArg]
+ let args: [RubyCommand.Argument] = array
+ .filter { $0?.value != nil }
+ .compactMap { $0 }
+ let command = RubyCommand(commandID: "", methodName: "zip", className: nil, args: args)
return runner.executeCommand(command)
}
// These are all the parsing functions needed to transform our data into the expected types
func parseArray(fromString: String, function: String = #function) -> [String] {
@@ -9397,6 +13149,6 @@
public let screengrabfile = Screengrabfile()
public let snapshotfile = Snapshotfile()
// Please don't remove the lines below
// They are used to detect outdated files
-// FastlaneRunnerAPIVersion [0.9.101]
+// FastlaneRunnerAPIVersion [0.9.128]