Capafy
UE5 → TestFlight Pipeline

UE5 → TestFlight Pipeline

Full pipeline for shipping Unreal Engine 5 to TestFlight — from Windows or Mac, across macOS, iOS, and visionOS. Handles remote cook via SSH, codesigning, and every gotcha from real production runs.
Rating
No Ratings
Sold
1
How to use
Download

UE5 → TestFlight Pipeline

Ship Unreal Engine 5 projects to TestFlight from Windows or Mac, targeting macOS, iOS, and visionOS — entirely from the command line. No Xcode Organizer clicks, no Epic launcher dance, no guessing at signing flags.

This is the workflow I use in production. Every gotcha documented here is one I hit on a real shipping build.


What it does

  • Remote cook from Windows — rsync your .uproject to a Mac, run RunUAT.command BuildCookRun over SSH, rsync the .app back. Full pipeline scripted.
  • Mac-native cook — same pipeline collapsed to one machine when you're already on macOS.
  • Code-sign for all three Apple platforms — Apple Distribution certificate handling for macOS (.pkg via productbuild), iOS, and visionOS, including embedded provisioning profile placement inside the .app.
  • Upload to TestFlight via xcrun altool — App Store Connect API key auth, no password prompts, no Transporter app.
  • 15 production gotchas documented — UAT silent failures on BP-only projects, embedded MoltenVK.dylib signing, visionOS plist keys, the MSYS_NO_PATHCONV Git Bash trap, cwrsync path quirks, and more.

Who it's for

  • UE5 devs shipping a real game/app to the Apple ecosystem who are tired of fighting RunUAT
  • Windows-primary teams who only have one Mac in the office (or in a closet, or rented from MacStadium)
  • Anyone who's ever stared at "EXPORT SUCCEEDED" followed by silence and wondered if the upload actually happened

What you get

  • A complete SKILL.md (~600 lines) covering the full pipeline end-to-end
  • Working command examples for Windows Git Bash, macOS Terminal, and SSH-bridged hybrid setups
  • A platform-comparison table for macOS / iOS / visionOS quirks
  • Drop-in shell scripts for each phase (cook, sign, package, upload)
  • A debugging section keyed to the actual error strings UAT and codesign produce

One-time setup after download

You need an Apple Developer Program membership and an App Store Connect API key. Roughly 15 minutes of clicking the first time, zero clicks every time after.

1. Apple Developer Program

Enroll at developer.apple.com ($99/year). Required for the Apple Distribution certificate.

2. App Store Connect API key

  1. Go to App Store Connect → Integrations → Keys → Generate API Key
  2. Role: App Manager (or higher)
  3. Note the Key ID and Issuer ID
  4. Download the .p8 file — you cannot re-download it after leaving the page
  5. Save it to ~/.private_keys/AuthKey_<KEY_ID>.p8altool discovers it there automatically

3. Shell environment

Add to ~/.zprofile (Mac) or your Git Bash equivalent (Windows):

export ASC_KEY_ID="ABC123DEFG"
export ASC_ISSUER_ID="69a6de7e-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export ASC_KEY_PATH="$HOME/.private_keys/AuthKey_${ASC_KEY_ID}.p8"
export DEVELOPMENT_TEAM="YOUR10CHARTEAMID"

4. App Store Connect record

Create the app record once in the portal (App Store Connect → My Apps → +). The API returns 403 on create — portal-only. Bundle ID must match your .uproject packaging settings.

5. (Windows only) cwrsync + OpenSSH

Install cwrsync and add it to PATH. Generate an SSH key, copy the public key to your Mac (ssh-copy-id [email protected]), and confirm ssh [email protected] "uname" works without a password prompt.

6. Export compliance plist key

Add to your packaged Info.plist (or [PlatformGame] build config) before archiving:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Forgetting this blocks the upload at validation time. The skill shows you exactly where UE5 puts this for each platform.


Platform coverage

Platform Cook command Sign target Upload format
macOS RunUAT.command BuildCookRun -platform=Mac .app + .pkg .pkg via altool
iOS RunUAT.command BuildCookRun -platform=IOS .ipa .ipa via altool
visionOS RunUAT.command BuildCookRun -platform=VisionOS .ipa (xros slice) .ipa via altool

Timeline expectations

Phase Time
First-time setup (certs, keys, ASC record) ~15 min
Cook (mid-size UE5 project, M1 Max) 8–25 min
Sign + package 30–90 sec
Upload to TestFlight 1–5 min
ASC processing → build appears in TestFlight 5–30 min

Requires

  • A real Mac (rented or owned) — Apple does not allow cross-compilation to their platforms
  • UE5.3+ recommended (5.0–5.2 may need minor command tweaks)
  • Active Apple Developer Program membership
  • App Store Connect API key with App Manager role

This is a workflow skill — it does not include the UE5 engine, Xcode, or any Apple SDKs. Those remain on your machine.


External APIs

developer.apple.com · appstoreconnect.apple.com · api.appstoreconnect.apple.com