fastlane | Skill Performance & Reviews | TopRankSkills

TopRank Skills

Home / Skills / tools / fastlane

fastlane

maintained by pstuart

star 20 account_tree 5 verified_user MIT License
bolt View GitHub

name: fastlane description: Comprehensive guide to Fastlane automation for iOS and Android app deployment. Use when helping with mobile app releases, code signing, screenshots, TestFlight, App Store Connect, Google Play Store, beta distribution, CI/CD pipelines, or any Fastlane actions/lanes. Covers gym, match, pilot, deliver, supply, snapshot, screengrab, and 100+ other actions.

Fastlane Deployment Skill

Fastlane automates iOS and Android app building, testing, and deployment. This skill provides action references, common workflows, and Fastfile patterns.

Quick Reference

Core Tools (Aliases)

Tool Action Purpose
gym build_app Build and sign iOS/macOS apps
pilot upload_to_testflight Upload to TestFlight
deliver upload_to_app_store Upload to App Store
supply upload_to_play_store Upload to Google Play
match sync_code_signing Sync certificates/profiles
cert get_certificates Create iOS certificates
sigh get_provisioning_profile Generate provisioning profiles
snapshot capture_ios_screenshots iOS screenshots
screengrab capture_android_screenshots Android screenshots
produce create_app_online Create app on App Store Connect
pem get_push_certificate Push notification certificates
scan run_tests Run iOS/macOS tests
precheck check_app_store_metadata Validate metadata before submission

Common Workflows

iOS TestFlight Deployment

lane :beta do
  app_store_connect_api_key(
    key_id: ENV["ASC_KEY_ID"],
    issuer_id: ENV["ASC_ISSUER_ID"],
    key_filepath: ENV["ASC_KEY_PATH"]
  )
  increment_build_number
  match(type: "appstore")
  build_app(scheme: "MyApp")
  upload_to_testflight
  slack(message: "Build uploaded to TestFlight!")
end

iOS App Store Release

lane :release do
  app_store_connect_api_key(...)
  capture_screenshots
  sync_code_signing(type: "appstore")
  build_app(scheme: "MyApp")
  upload_to_app_store(
    submit_for_review: true,
    automatic_release: true
  )
end

Android Play Store Deployment

lane :deploy do
  gradle(task: "clean assembleRelease")
  upload_to_play_store(
    track: "production",
    json_key: ENV["GOOGLE_PLAY_JSON_KEY"]
  )
end

Android Beta (Internal Testing)

lane :beta do
  gradle(task: "clean bundleRelease")
  upload_to_play_store(
    track: "internal",
    aab: "app/build/outputs/bundle/release/app-release.aab"
  )
end

Code Signing with Match

# Appfile
app_identifier("com.example.app")

# Matchfile
git_url("git@github.com:org/certificates.git")
storage_mode("git")
type("appstore")

# Usage in lane
lane :setup_signing do
  match(type: "development")  # Dev certs
  match(type: "appstore")     # Distribution certs
end

CI/CD Integration

GitHub Actions Environment

lane :ci_build do
  setup_ci  # Sets up keychain for CI
  match(type: "appstore", readonly: true)
  build_app(scheme: "MyApp")
end

Environment Variables

# App Store Connect API Key (recommended over password auth)
app_store_connect_api_key(
  key_id: ENV["ASC_KEY_ID"],
  issuer_id: ENV["ASC_ISSUER_ID"],
  key_content: ENV["ASC_KEY_CONTENT"],  # Base64 encoded .p8
  is_key_content_base64: true
)

# Google Play Service Account
upload_to_play_store(
  json_key_data: ENV["GOOGLE_PLAY_JSON_KEY"]
)

Detailed Action References

For complete action parameters and examples, see:

  • Building: references/building.md - gym, gradle, xcodebuild, cocoapods
  • Code Signing: references/code-signing.md - match, cert, sigh, notarize
  • App Store: references/app-store.md - deliver, pilot, produce, precheck
  • Google Play: references/google-play.md - supply, gradle actions
  • Screenshots: references/screenshots.md - snapshot, screengrab, frameit
  • Testing: references/testing.md - scan, slather, swiftlint
  • Utilities: references/utilities.md - notifications, source control, misc

Essential Commands

# Initialize fastlane
fastlane init

# List all actions
fastlane actions

# Get action details
fastlane action [action_name]

# Run a lane
bundle exec fastlane [lane_name]

# Run with verbose output
bundle exec fastlane [lane_name] --verbose

App Store Connect Restrictions

Metadata Character Limits

Field Max Length Notes
App Name 30 characters Shown on App Store
Subtitle 30 characters Below app name
Keywords 100 characters Total including commas, no spaces after commas
Promotional Text 170 characters Can update without new build
Description 4000 characters
What's New 4000 characters Release notes

Screenshot Size Requirements

Device Class Resolution Required
iPhone 6.9" (16 Pro Max) 1320×2868 Yes
iPhone 6.7" (15 Pro Max) 1290×2796 Yes
iPhone 6.5" (11 Pro Max) 1242×2688 Yes
iPhone 5.5" (8 Plus) 1242×2208 Yes
iPad 12.9" 2048×2732 If iPad supported

Known Issue: Screenshots from Xcode 26 beta simulators (iPhone 17 series) may have resolutions not yet recognized by App Store Connect. Use iPhone 16 series simulators.

API Key Configuration

The App Store Connect API key must be properly formatted in JSON:

{
  "key_id": "YOUR_KEY_ID",
  "issuer_id": "YOUR_ISSUER_ID",
  "key": "-----BEGIN PRIVATE KEY-----\nLINE1...\nLINE2...\n-----END PRIVATE KEY-----",
  "duration": 1200,
  "in_house": false
}

Critical: The PEM key MUST have \n newline characters between lines. A single-line PEM causes OpenSSL::PKey::ECError: invalid curve name.

Common Errors and Solutions

Error Cause Solution
invalid curve name API key PEM on single line Add \n between 64-char lines
Invalid screenshot size Unrecognized device resolution Use supported device simulators
Keywords too long Over 100 characters total Trim keywords, remove duplicates
Subtitle too long Over 30 characters Shorten subtitle
No data from fetch_app_store_review_detail Known bug for new apps Ignore - metadata uploads successfully
validate_only not found Parameter renamed Use verify_only instead
Bundler version mismatch Gemfile.lock version conflict Use fastlane directly instead of bundle exec fastlane

Fastfile Structure

# fastlane/Fastfile
default_platform(:ios)

platform :ios do
  before_all do
    # Runs before every lane
  end

  lane :test do
    run_tests(scheme: "MyApp")
  end

  lane :beta do
    # Beta deployment
  end

  after_all do |lane|
    # Runs after successful lane completion
  end

  error do |lane, exception|
    slack(
      message: "Error in #{lane}: #{exception.message}",
      success: false
    )
  end
end

platform :android do
  lane :deploy do
    gradle(task: "assembleRelease")
  end
end

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!

Skill Details

GitHub Stars 20
GitHub Forks 5
Created Jan 2026
Last Updated 5 months ago
tools tools productivity tools

Related Skills

ui-ux-pro-max
chevron_right
planning-with-files
chevron_right
agent-browser
chevron_right
building-agents
chevron_right
docker-expert
chevron_right

Build your own?

Join 12,000+ developers contributing to the Claude ecosystem.