Getting Started with Fastlane.swift (beta)
Welcome to Fastlane.swift. Fastlane.swift allows you to write your fastlane configuration using Xcode, in Swift - the language you have come to know and love from the world of iOS development.
Fastlane.swift is currently in beta. Please provide feedback by opening an issue in the fastlane repo.
Currently Supported
Fastlane.swift currently supports all built-in fastlane actions and 3rd party plugins. Make sure to update to the most recent fastlane release to try these features.
Get Started (Xcode)
Step 1
Run the following command in your terminal:
fastlane init swift
Step 2
Open the file located at [project]/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj
to configure your lanes in Fastfile.swift
.
func betaLane() {
desc("Submit a new Beta Build to Apple TestFlight. This will also make sure the profile is up to date")
syncCodeSigning(gitUrl: "URL/for/your/git/repo", appIdentifier: [appIdentifier], username: appleID)
// Build your app - more options available
buildIosApp(scheme: "SchemeName")
uploadToTestflight(username: appleID)
// You can also use other beta testing services here (run `fastlane actions`)
}
Step 3
Run fastlane <laneName>
in your terminal to execute fastlane.
Step 4
🎉
Get Started (SPM) (Beta)
Swift Package Manager (SPM) support adds the ability to distribute fastlane as a Swift Package Manager package, which allows other packages to integrate with the toolset.
Step 1
Create an executable Swift Package Manager project with swift package init --type executable
.
Step 2
Add the fastlane dependency to your Package.swift
.
.package(name: "Fastlane", url: "https://github.com/fastlane/fastlane", from: "2.179.0")
A full example of a working package description would be the following.
// swift-tools-version:5.2
import PackageDescription
let package = Package(
name: "fastlaneRunner",
products: [
.executable(name: "fastlaneRunner", targets: ["fastlaneRunner"])
],
dependencies: [
.package(name: "Fastlane", url: "https://github.com/fastlane/fastlane", from: "2.179.0")
],
targets: [
.target(
name: "fastlaneRunner",
dependencies: ["Fastlane"],
path: "Sources/Thingy"
)
]
)
Step 3
Create your Fastfile.swift file in your package and add the desired lanes, as follows.
import Fastlane
// Create a class with:
class FastFile: LaneFile {
// Your lanes goes here.
}
Step 4
Add an entry point (@main
) or a main.swift
file (mandatory for executable SPM packages) and don't forget to start the fastlane runloop as follows:
import Fastlane
Main().run(with: Fastfile())
Step 5
Modify the target of your executable to have executable arguments lane myLane
or add them in the call after making swift build
.
myExecutable lane myLane
Notes:
- You can edit the created
Package.swift
file to add your desired dependencies so you can use them in the Fastfile.
- If you want to just push your
Package.swift
andPackage.resolved
to the repo, you'd need toswift build
the package to create your executable again which can be found in the.debug
or.release
folders, depending on how you built the package (.debug
by default).
Defining Lanes
Lanes are defined with functions that end with Lane
within the class Fastfile: LaneFile
.
class Fastfile: LaneFile {
func testLane() {
desc("This is a lane")
}
func helper() {
// This is not a lane but can be called from a lane
}
}
Passing Parameters
To pass parameters from the command line to your lane, use the following syntax:
fastlane [lane] key:value key2:value2
fastlane deploy submit:false build_number:24
To access those values, change your lane declaration to also include withOptions options:[String: String]?
class Fastfile: LaneFile {
func deployLane(withOptions options:[String: String]?) {
// ...
if let submit = options?["submit"], submit == "true" {
// Only when submit is true
}
// ...
incrementBuildNumber(buildNumber: options?["build_number"])
// ...
}
}
Using Plugins
Once you add a plugin, fastlane will automatically generate the corresponding API and make it available in fastlane/swift/Plugins.swift
.
Example:
bundle exec fastlane add_plugin ascii_art
The fastlane/swift/Plugins.swift
file should now contain the function asciiArt()
, and you can access it in your lanes in fastlane/Fastlane.swift
.
Run Parallel
Fastlane Swift
uses socket internally. Therefore, for several Lane
s to run in parallel at the same time, each Lane
must be specified different socket port
(lane's default socket port
is 2000
)
To specify socket port
from the command line to your lane, use the following syntax:
fastlane [lane] --swift_server_port [socket port]
We Would Love Your Feedback
Please feel free to open an issue on GitHub to report any problems you are having with Fastlane.swift and we will respond as quickly as possible.