agentsclimarketplace

Ios ci cd

Skill almasumdev/awesome-ios-agent-skills/.github/skills/build_and_tooling/ios-ci-cd

Curated agent skills, conventions, and workflows for building iOS apps (Swift, SwiftUI, UIKit) with AI coding agents.

Install
npx -y skills add almasumdev/awesome-ios-agent-skills --skill ios-ci-cd

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Expert guidance on iOS CI/CD — Xcode Cloud, GitHub Actions on macOS runners, Fastlane lanes, TestFlight delivery, and App Store Connect API automation. Use when setting up pipelines or release automation.

SKILL.md

6.0 KB, as published. Nobody here has run it

iOS CI/CD

Instructions

iOS CI/CD boils down to: build on a macOS host, sign with a managed certificate, test, archive, and ship to App Store Connect. Pick one host (Xcode Cloud or GitHub Actions + Fastlane) and stay consistent.

1. Pick a Host

HostProsCons
Xcode CloudNative, zero infra, automatic signing, TestFlight wired.Vendor lock-in, limited customization.
GitHub ActionsFull control, shared secrets with other pipelines.You own the macOS runner config.
Bitrise / CodemagicGood iOS ergonomics, prebuilt steps.Extra vendor.

2. GitHub Actions: Build & Test

name: iOS CI
on:
  pull_request:
  push:
    branches: [main]

jobs:
  test:
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: maxim-lobanov/setup-xcode@v1
        with:
          xcode-version: '15.4'
      - name: Resolve SPM
        run: xcodebuild -resolvePackageDependencies -workspace MyApp.xcworkspace -scheme MyApp
      - name: Test
        run: |
          xcodebuild test \
            -workspace MyApp.xcworkspace \
            -scheme MyApp \
            -destination 'platform=iOS Simulator,name=iPhone 15' \
            -resultBundlePath build/Tests.xcresult \
            -parallel-testing-enabled YES
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: xcresult
          path: build/Tests.xcresult

3. Fastlane Lanes

Install via bundle init, add fastlane to the Gemfile. Keep lanes small and composable:

# fastlane/Fastfile
default_platform(:ios)

platform :ios do
  desc "Run unit + UI tests"
  lane :test do
    run_tests(
      workspace: "MyApp.xcworkspace",
      scheme: "MyApp",
      devices: ["iPhone 15"],
      result_bundle: true,
      code_coverage: true
    )
  end

  desc "Build and upload to TestFlight"
  lane :beta do
    setup_ci if ENV["CI"]
    match(type: "appstore", readonly: true)
    increment_build_number(xcodeproj: "MyApp.xcodeproj")
    build_app(
      workspace: "MyApp.xcworkspace",
      scheme: "MyApp",
      export_method: "app-store",
      configuration: "Release"
    )
    upload_to_testflight(
      skip_waiting_for_build_processing: true,
      api_key_path: "fastlane/app_store_connect_api_key.json"
    )
  end
end

4. Signing with match

match stores your team's distribution certificate and provisioning profiles encrypted in a private git repo. On CI:

bundle exec fastlane match appstore --readonly

CI needs the MATCH_PASSWORD secret and an SSH deploy key (or HTTPS token) for the match repo.

5. App Store Connect API Key

Generate a key in App Store Connect → Users and Access → Keys. Store .p8 content as a CI secret. Build the JSON fastlane expects:

{
  "key_id": "XXXXXXXXXX",
  "issuer_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
  "in_house": false
}

Used by upload_to_testflight, pilot, deliver, precheck.

6. TestFlight Delivery Pipeline

beta:
  needs: test
  runs-on: macos-14
  if: github.ref == 'refs/heads/main'
  steps:
    - uses: actions/checkout@v4
    - uses: ruby/setup-ruby@v1
      with: { ruby-version: '3.3', bundler-cache: true }
    - name: Write API Key
      run: echo "$ASC_API_KEY_JSON" > fastlane/app_store_connect_api_key.json
      env: { ASC_API_KEY_JSON: ${{ secrets.ASC_API_KEY_JSON }} }
    - name: Beta
      env:
        MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
        MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }}
      run: bundle exec fastlane beta

7. Xcode Cloud

If you prefer Apple's hosted offering:

  1. Enable Xcode Cloud in App Store Connect.

  2. Add ci_scripts/ci_post_clone.sh for any pre-build setup:

    #!/bin/sh
    set -euo pipefail
    brew install swiftlint
    
  3. Define workflows in Xcode (Report Navigator → Cloud). Workflows map branches to start actions: Build, Test, Archive, TestFlight, App Store.

Xcode Cloud handles signing automatically with your team's Apple Developer account.

8. Store Submission

Automate metadata and screenshots:

lane :release do
  deliver(
    submit_for_review: true,
    automatic_release: false,
    force: true,
    precheck_include_in_app_purchases: false,
    api_key_path: "fastlane/app_store_connect_api_key.json"
  )
end

Keep screenshots in fastlane/screenshots/<locale>/ regenerated by snapshot on a nightly schedule.

9. Quality Gates

Block merges to main on:

  • Unit + UI tests passing.
  • SwiftLint / SwiftFormat clean.
  • Package.resolved unchanged or PR-reviewed.
  • No increase in app-binary size beyond a budget (actions-app-size-report or similar).

10. Monitoring Releases

  • Wire Crashlytics or Apple's own crash reports to a Slack channel.
  • Track KPIs (crash-free sessions, launch time, cold-start p95) per release — regressions should block the next rollout.

Checklist

  • One CI host owns iOS builds; no duplicated pipelines.
  • Signing identities managed by match or Xcode Cloud, never checked in.
  • App Store Connect API key stored as an encrypted CI secret.
  • fastlane beta runs on main and uploads to TestFlight.
  • Build numbers auto-increment; versions bump via PR.
  • Test and snapshot artifacts are uploaded from CI.
  • Store submission has a reviewed release lane; metadata lives in fastlane/.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.