Building and Signing Game Builds for App Store
In our practice, a common scenario: Xcode Organizer shows "Upload Successful", but App Store Connect sends an email — "Missing required icon", even though icons are set in Assets.xcassets. Or a build succeeds, but a TestFlight build crashes on launch with SIGABRT because the Enable Bitcode = NO flag wasn't removed for one plugin in the Release configuration. Such incidents delay releases by an average of a day and eat significant budgets. The iOS build process for App Store is a manageable pipeline with a dozen failure points. We take over setting up a reliable compilation, signing, and upload pipeline so you can focus on game design.
What Problems Arise Without a Proper Pipeline?
Code signing chaos. For an average Unity project with 15+ plugins, there are multiple provisioning profiles, manual management of Developer and Distribution certificates, tangled Capabilities (Push Notifications, In-App Purchase, Game Center, Sign in with Apple). When compiling on a CI machine without the proper certificates in Keychain, you get No signing certificate "iOS Distribution" found. Fastlane Match solves this systematically: certificates and profiles are stored in a git repository (encrypted), and CI fetches them via match(type: "appstore") — no manual .p12 export. This approach reduces signing errors by 90%.
Entitlements. Unity generates Unity-iPhone.entitlements when exporting the Xcode project. If Automatically Sign is enabled at the wrong moment, Xcode overwrites entitlements, removing manually added capabilities. The PBXProject API in Unity (via UnityEditor.iOS.Xcode) allows you to programmatically add entitlements in a post-build script — this is more reliable than manual editing. In 30% of projects we discover mismatches in Capabilities, leading to crashes on launch.
Incrementing build number. App Store Connect does not accept a build with the same CFBundleVersion as the previous one — even if CFBundleShortVersionString changed. With manual compilation, this is forgotten in about 30% of cases. Automation via Fastlane: increment_build_number(build_number: latest_testflight_build_number + 1).
How We Automate Build and Signing
The base tool is Fastlane with Gymfile for iOS. Unity-specific: before calling gym, a Unity compilation step is needed via command line:
Unity.exe -batchmode -executeMethod BuildScript.BuildiOS -projectPath . -logFile build.log -quit BuildScript.BuildiOS uses BuildPlayerOptions to set BuildTarget.iOS, BuildOptions.Il2CPP, and configure PlayerSettings for the specific build (bundle ID, version, icons).
After exporting the Xcode project — post-build processing via PostProcessBuild attribute: we add required frameworks, tweak Info.plist (NSPhotoLibraryUsageDescription, Privacy manifest for iOS 17+), set linker flags for plugins with Objective-C categories.
Signing and archiving via xcodebuild archive, then xcodebuild -exportArchive with a .plist configuration ExportOptions.plist (signing method app-store, correct provisioning profile per bundle ID, enable bitcode if needed).
Upload to App Store Connect via xcrun altool --upload-app or through Fastlane deliver/pilot. pilot for TestFlight allows immediate assignment of tester groups and setting release notes.
What Our Pipeline Setup Includes
For a reliable pipeline, we include:
- Setup of Fastlane Match and storage of certificates in a git repository.
- Development and integration of PostProcessBuild scripts for your plugins.
- CI/CD configuration (GameCI + GitHub Actions) with full cycle: compilation → signing → upload to TestFlight.
- Documentation of the process and team training (1–2 hours).
- Support for one month after implementation.
Why Choose Automation?
Manual compilation takes up to 2 hours per release, and Code Signing errors delay publication by an average of a day. Automation reduces time to 15 minutes and eliminates human error. According to Apple, studios with CI/CD publish updates 40% faster.
We have implemented over 100 projects for setting up pipelines for mobile and console games. Our experience: 5+ years in game dev, dozens of successful releases on the App Store.
Core Tools for the Pipeline
| Tool | Purpose |
|---|---|
| Fastlane | Automate signing, compilation, upload |
| GameCI | CI/CD for Unity on GitHub Actions |
| Unity Editor | Compile iOS project with IL2CPP |
| Xcode | Finalize and archive |
| App Store Connect API | Manage builds and TestFlight |
Timelines
| Task | Duration |
|---|---|
| One-time compilation and upload to TestFlight | 0.5–1 day |
| Setup Fastlane Match + initial signing setup | 1–2 days |
| Full CI/CD pipeline (GameCI + Fastlane + TestFlight) | 3–7 days |
Cost is calculated after an audit of your current CI infrastructure and certificate/profile state. Request an audit of your pipeline — we will assess your project and propose an optimal solution. Contact us for details.





