Fastlane Expert
SKILL.md
Fastlane Automation Expert
Automate iOS builds, testing, and deployment with fastlane.
Setup
# Install
brew install fastlane
# Init in project
cd ios-project
fastlane init
Fastfile Patterns
Beta to TestFlight
# Fastfile
default_platform(:ios)
platform :ios do
desc "Push a new beta build to TestFlight"
lane :beta do
increment_build_number(xcodeproj: "App.xcodeproj")
build_app(scheme: "App")
upload_to_testflight(
skip_waiting_for_build_processing: true
)
end
end
App Store Release
lane :release do
capture_screenshots
build_app(scheme: "App")
upload_to_app_store(
submit_for_review: true,
automatic_release: true,
force: true,
skip_metadata: false,
skip_screenshots: false
)
end
Testing Lane
lane :test do
run_tests(
scheme: "AppTests",
devices: ["iPhone 15 Pro"],
code_coverage: true
)
end
App Store Connect API
# Appfile
app_identifier "com.example.app"
apple_id "developer@example.com"
team_id "ABC123"
# API key auth (recommended)
# Store key file securely
lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] = app_store_connect_api_key(
key_id: "ABC123",
issuer_id: "def-456",
key_filepath: "./AuthKey.p8"
)
Code Signing
Match (Recommended)
lane :sync_certs do
match(
type: "appstore",
app_identifier: "com.example.app",
git_url: "git@github.com:org/certs.git"
)
end
lane :beta do
match(type: "appstore")
build_app(scheme: "App")
upload_to_testflight
end
CI/CD Integration
GitHub Actions
- name: Build and Upload
env:
APP_STORE_CONNECT_API_KEY: ${{ secrets.ASC_KEY }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
run: bundle exec fastlane beta
Common Actions
build_app: Build iOS appupload_to_testflight: Beta distributionupload_to_app_store: Production releasematch: Code signing syncsnapshot: Screenshot automationdeliver: Metadata/screenshots upload
Use when: iOS builds, TestFlight uploads, App Store releases, CI/CD automation