Publish a Unity Game to the App Store Without a Mac
Unity on Windows can export an iOS project, but only a Mac can turn it into an app. A cloud Mac does that part for you. Here is the full path: Apple account, API key, cloud build, TestFlight, App Privacy, tracking prompt and App Review.
Short answer: you can publish a Unity game to the App Store from Windows, but a Mac still has to do the build, so you rent one in the cloud. Join the Apple Developer Program, create an App Store Connect API key, push your Unity project to a Git repository, and let a cloud build service (Codemagic or Unity Build Automation) build, sign and upload it to TestFlight. You test on your iPhone, fill in App Privacy, and submit for review in the browser.
Our iOS without a Mac page has the same steps as a checklist with the exact App Store Connect menu paths. This guide adds the reasoning and the parts that trip people up.
Why you need a Mac at all
Unity’s documentation describes the iOS build in two steps: Unity generates an Xcode project, then Xcode builds that project into the application. Xcode runs only on macOS. Unity on Windows does the first step; a Mac must do the second. Apple’s upload tools (Xcode, Transporter and altool) are macOS tools too. So "without a Mac" really means "without owning a Mac".
What you still need
- Apple Developer Program membership: 99 USD per membership year (prices vary by region). Required to use TestFlight and the App Store. Individuals need an Apple Account with two-factor authentication; organisations need a D-U-N-S number.
- An iPhone or iPad for testing through TestFlight. Strongly recommended; you should not ship a game you have never touched on a device.
- Your Unity project in a Git repository (GitHub, GitLab or Bitbucket) that the build service can read.
- Unity’s iOS build support module installed through Unity Hub, so you can switch the platform and set iOS Player Settings.
- A cloud macOS build service, below.
Choose the cloud Mac: Codemagic or Unity Build Automation
- Codemagic: a CI/CD service with macOS machines and a monthly free allowance of macOS build minutes for personal accounts. It publishes straight to App Store Connect and TestFlight with your API key. Important: Codemagic’s Unity guide states that building Unity apps in a cloud CI/CD environment requires a Unity Plus or Pro licence, so it is not an option on Unity Personal.
- Unity Build Automation: Unity’s own cloud builder, part of Unity DevOps, set up from the Unity Cloud dashboard. It supports iOS and is billed by build minutes, with a small free monthly allowance of Mac minutes. Unity changed DevOps pricing in March 2026 and notes that pricing may vary by licence type, so read the current pricing page first. It produces a signed .ipa, which you then upload with a separate step.
- A rented remote Mac (hourly or monthly) is a third route if you want to use Xcode yourself; it is more manual and outside this guide.
Prices, free allowances and licence rules change. Check each provider’s pricing page and documentation on the day you start.
Step 1: App Store Connect API key
In App Store Connect go to Users and Access → Integrations → App Store Connect API → Team Keys and generate a key. Only the Account Holder or an Admin can create team keys. Codemagic needs the key to have at least App Manager access. Note the Issuer ID and Key ID shown on the page and download the private key file straight away: Apple lets you download it only once. Store it like a password; anyone with it can manage your apps.
Step 2: Bundle ID and app record
- Register the bundle ID in your developer account: Certificates, Identifiers & Profiles → Identifiers → + → App IDs, explicit, using exactly the Bundle Identifier from Unity’s Player Settings (for example com.yourstudio.yourgame).
- Create the app record in App Store Connect (Apps → + → New App) with that bundle ID. Apple says to create the app record before uploading the first build. The Account Holder must have accepted the latest agreements first.
Step 3: Prepare the Unity project
- Switch the platform to iOS and set the Bundle Identifier, version and build number. The build number must increase with every upload.
- In Assets → Google Mobile Ads → Settings, enter your iOS AdMob App ID. iOS has its own App ID and ad unit IDs; see switching AdMob test ads to real ads.
- Google Mobile Ads on iOS uses CocoaPods. The cloud Mac must run pod install and build the generated .xcworkspace, not the .xcodeproj; Codemagic’s Unity guide shows the build step to use for this.
- Commit and push.
Step 4: Build, sign and upload
With Codemagic, connect the repository, add the API key as an App Store Connect integration, and use its Unity iOS workflow. Codemagic can fetch or create the distribution certificate and provisioning profile automatically from the API key, so you never open Keychain Access. Set submit_to_testflight to send the build straight to TestFlight. With Unity Build Automation, configure an iOS target with your signing credentials; it outputs an .ipa that you upload through a step that uses the App Store Connect API.
Apple currently requires apps uploaded to App Store Connect to be built with Xcode 26 or later and the iOS 26 SDK (since 28 April 2026). Choose a recent Xcode version in the build service and a Unity version that supports it.
Step 5: TestFlight on your iPhone
Install the TestFlight app on your iPhone and add yourself as an internal tester (internal testers are App Store Connect users, up to 100). Internal builds need no review. External testers, up to 10,000 by link or email, need Beta App Review for the first build. Each build can be tested for up to 90 days. Check ads, the consent message and the tracking prompt on the device.
Step 6: App Privacy and the tracking prompt for an AdMob game
App Store Connect requires privacy details ("nutrition labels") for new apps and updates, covering data collected by third-party SDKs, plus a privacy policy URL. Google’s iOS data disclosure for the Google Mobile Ads SDK lists the data to declare, including the IP address for approximate location, crash logs, performance data, the advertising identifier, advertising data and product interactions. Answer to match your privacy policy.
- App Tracking Transparency: to read the IDFA on iOS 14.5 and later, the app must show Apple’s ATT prompt and get permission. Without it the IDFA is all zeros and the Google Mobile Ads SDK does not send it.
- If your game shows the prompt, add NSUserTrackingUsageDescription to Info.plist with a clear reason, and declare tracking in App Privacy. Google’s UMP SDK can show an explainer message before the system prompt.
- If it never asks, ads still serve without the IDFA; you still declare the data the SDK collects.
- Privacy manifests: Google Mobile Ads SDK version 11.2.0 and later ships its own privacy manifest. If you use mediation, use adapter versions that include one.
app-ads.txt works the same on iOS: AdMob reads the developer website from your App Store listing, so the same file on the same domain covers both platforms.
Step 7: App Review, and templates
Fill in the store listing, screenshots, age rating and review notes in App Store Connect, pick the build, and submit. If anything needs a login, give reviewers a demo account. If you built from a template, read Apple’s App Review Guidelines first: guideline 4.2.6 says apps created from a commercialised template or app generation service will be rejected unless they are submitted directly by the provider of the app’s content, and 4.3 rejects apps that are indistinguishable from what is already widely available. A thorough reskin with your own art, levels and identity, submitted from your own developer account, is what these guidelines expect; it does not guarantee approval, but it is the way to address them; our step-by-step reskin guide covers what to change, and we take on reskins if you would rather not do it yourself.
The other release tools (AdMob IDs, store kit, privacy policy) are on the Publish toolkit. Need a game to start from? Browse Unity game templates.
Sources: Unity Manual, "iOS build process" (docs.unity.com); Apple, "Enrollment" (developer.apple.com/programs/enroll), "Upcoming requirements" (developer.apple.com/news/upcoming-requirements), App Store Connect Help on API keys, adding an app record, uploading builds and TestFlight, "App privacy details", "User privacy and data use", App Review Guidelines 4.2.6 and 4.3; Codemagic docs, "Building a Unity app" and "App Store Connect publishing", and codemagic.io/pricing; Unity Support, "Understanding Unity DevOps charges"; Google, "Data disclosure" and "IDFA support" for the Google Mobile Ads iOS SDK. Last verified 27 October 2026.