Guide · iOS · App Store

    Build an iOS .ipa without a Mac, straight from GitHub (2026)

    Nathan Claiborne
    Building an iOS app traditionally requires a Mac, Xcode, and an afternoon wrestling with provisioning profiles. With GitHub Actions macOS runners and the right Fastlane setup, you can ship a signed .ipa from a Linux or Windows machine. Corenna wires the whole pipeline up for you.

    What you need before you start

    • Apple Developer Program membership ($99/year). Apple does not waive this — see the FAQ.
    • An iOS Distribution certificate exported as .p12 with a password.
    • An App Store provisioning profile (.mobileprovision) matching your bundle ID.
    • A GitHub repo with a Capacitor, Flutter, or React Native project (Expo works after npx expo prebuild, with the ios/ folder committed).
    • Deep dive: iOS code signing explained.

    How the build works

    1. GitHub spins up a macOS-14 runner with Xcode preinstalled.
    2. Your .p12 is imported into a temporary keychain.
    3. The provisioning profile is copied to ~/Library/MobileDevice/Provisioning Profiles/.
    4. Fastlane gym archives the app and exports a signed .ipa.
    5. The artifact is uploaded back to GitHub (or pushed to TestFlight with pilot).

    Manual setup vs Corenna

    Manual: encode .p12 and profile as base64, add them plus P12_PASSWORD, APPLE_TEAM_ID, and KEYCHAIN_PASSWORD to GitHub Secrets, then write a Fastfile with match or cert + sigh.

    Corenna: upload the .p12 and .mobileprovision once. We validate the cert, extract the team ID, push everything as sealed-box secrets, and generate the workflow. You click Build iOS and download the .ipa.

    Cost note: GitHub Actions macOS minutes

    On a private repo, once your GitHub plan's included minutes are used, macOS runner minutes cost $0.062 each, against $0.006 on Linux (GitHub's 2026 prices). A typical iOS build is 8–15 minutes. Public repos build free on GitHub's standard runners. Corenna doesn't charge per build — see pricing.

    Shipping to TestFlight

    With the .ipa in hand, upload via Transporter, Xcode Organizer, or programmatically with Fastlane pilot upload. Allow 5–15 minutes for Apple's processing pipeline before the build appears in App Store Connect.

    Keep reading