This episode covers modern tooling for Swift projects: Xcode project management and build settings, continuous integration with Xcode Cloud, GitHub Actions, and Bitrise, code signing with provisioning profiles, and Fastlane for build and deployment automation.

A healthy project isn't only about code — it's also about how that code is built, tested, and released consistently. Episode 18 covers modern tooling and build automation: managing Xcode projects, building CI/CD pipelines with Xcode Cloud, GitHub Actions, and Bitrise, handling code signing, and automating distribution with Fastlane.
A build that anyone can run, at any time, with identical results is the foundation of a trustworthy release. This episode turns fragile manual processes into repeatable automation.
Xcode build settings are hundreds of variables that control compilation. The ones you change most often: SWIFT_VERSION, IPHONEOS_DEPLOYMENT_TARGET, and PRODUCT_BUNDLE_IDENTIFIER. Modern management uses xcconfig — versionable text configuration files that replace settings only visible through the GUI:
# Config/Release.xcconfig
SWIFT_VERSION = 6.0
IPHONEOS_DEPLOYMENT_TARGET = 16.0
PRODUCT_BUNDLE_IDENTIFIER = com.example.Aplikasi
CODE_SIGN_STYLE = AutomaticSWIFT_VERSION = 6.0 selects the language version — important because Swift 6 enforces concurrency. Moving settings into xcconfig makes build changes documented and reviewable in pull requests.
Everything the Xcode GUI does can be done from the terminal with xcodebuild:
xcodebuild -project Aplikasi.xcodeproj \
-scheme Aplikasi \
-destination 'platform=iOS Simulator,name=iPhone 15' \
testxcodebuild ... -scheme Aplikasi ... test runs the build and tests on the specified simulator. This same command is what the CI pipeline runs — consistency between local builds and CI builds makes debugging the pipeline far easier.
Xcode Cloud is Apple's integrated CI: triggers on branches and tags, runs tests on simulators or devices, then signs and distributes. Its strength: full integration with App Store Connect and TestFlight with no infrastructure configuration.
For open source and server-side Swift projects, GitHub Actions is the lightest choice. Workflows run on Linux or macOS runners:
name: iOS CI
on:
push:
branches: [main]
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- run: xcodebuild test \
-scheme Aplikasi \
-destination 'platform=iOS Simulator,name=iPhone 15'runs-on: macos-14 provides a runner with Xcode. The workflow runs the same xcodebuild test as locally — one set of commands for every environment. For server-side packages, swift build and swift test run on ubuntu-latest.
Bitrise is a mobile-focused CI/CD platform with ready-made steps: building the IPA, uploading to TestFlight, automated cert signing, and App Store Connect integration. It's useful when a team wants a documented mobile pipeline without writing a workflow from scratch.
Code signing signs the binary with a Developer ID certificate so devices trust it. A provisioning profile binds the app to specific devices or accounts and contains entitlements. The two must match: a development profile for dev builds, a distribution profile for App Store and ad-hoc builds.
Signing errors are the most common cause of CI build failures. Automate by managing certificates and profiles as secrets, and use Xcode's automatic signing with a team ID to save manual configuration.
A distribution build uses the Release configuration with full optimization:
xcodebuild archive \
-scheme Aplikasi \
-archivePath ./build/Aplikasi.xcarchive \
-configuration Releasexcodebuild archive -archivePath ... produces a .xcarchive containing the app ready for export. From there, the archive is exported to the appropriate format — .ipa for App Store or ad-hoc — and uploaded for distribution (episode 20).
Fastlane is an open source tool that automates build, test, signing, and upload flows. Lanes are defined in a Ruby Fastfile:
lane :beta do
match(type: "adhoc")
build_app(scheme: "Aplikasi")
upload_to_testflight
endlane :beta do ... end defines a flow named beta: fetch signing via match, build the app, then upload to TestFlight. Run it with bundle exec fastlane beta:
bundle exec fastlane betabundle exec fastlane beta executes the lane step by step. Fastlane supports many platforms and is the de facto standard for iOS release automation because it replaces dozens of manual steps with a single command.
Tip
Start automation from the one step most often done manually and most often wrong — usually code signing and upload. Once the first pipeline runs reliably, add tests and notifications.
Key takeaways:
xcodebuild provides the same CLI commands for local and CI builds.xcodebuild archive produces the artifact for release.In the next episode, episode 19, we'll cover cross-platform and server-side Swift — using Swift on the server with Vapor, Kitura, and SwiftNIO, comparing use cases with other platforms, cross-platform packages, and running Swift on Linux and in Docker. Swift leaves the Apple ecosystem!