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 app
-
upload_to_testflight : Beta distribution
-
upload_to_app_store : Production release
-
match : Code signing sync
-
snapshot : Screenshot automation
-
deliver : Metadata/screenshots upload
Use when: iOS builds, TestFlight uploads, App Store releases, CI/CD automation