Guide

    iOS without a Mac

    Unity can make the iOS project on Windows, but compiling, signing and uploading need macOS. A cloud Mac does those steps for you. This guide shows the route, what it costs and where the usual traps are.

    1What you need

    • Apple Developer Program
      Paid yearly membership in your own name or company. Needed for any App Store release.
    • Unity with the iOS Build Support module
      Install it from Unity Hub on Windows. It exports an Xcode project.
    • A cloud build service with macOS
      Codemagic or Unity Build Automation (below). They run Xcode for you.
    • A Git repository of your project
      Cloud builders pull the project from GitHub, GitLab or Bitbucket.
    • An iOS AdMob app
      A separate app and ad units in AdMob. Paste the iOS IDs in the AdMob tool.
    • Your privacy policy URL
      App Store Connect asks for it. Use the one from the store kit.

    2Pick a cloud Mac

    Codemagic
    • Personal accounts get 500 free macOS build minutes a month, then pay per minute.
    • Publishes straight to App Store Connect and TestFlight with an App Store Connect API key.
    • Unity licence: Codemagic’s Unity guide requires a Unity Plus or Pro licence for cloud builds.

    Codemagic Unity guide

    Unity Build Automation
    • Unity’s own cloud builder (part of Unity DevOps), set up from the Unity Cloud dashboard.
    • Builds iOS on Unity’s macOS machines, charged by build minutes.
    • Produces a signed .ipa; upload it with a separate step (see 4).

    Unity Build Automation docs

    Prices and plan limits change; check the provider’s pricing page before you start. Checked October 2026.

    3Signing, without Keychain Access

    1. Create an App Store Connect API key: App Store Connect → Users and Access → Integrations → App Store Connect API → generate a key with the App Manager role. Download the .p8 file (only once) and note the Issuer ID and Key ID. Store it only in the build service’s secret settings, never in your repository.
    2. Register the bundle ID (for example com.yourstudio.yourgame) under Certificates, Identifiers & Profiles, using exactly the Bundle Identifier from Unity’s Player Settings.
    3. Let the build service create and manage the distribution certificate and provisioning profile with that API key (Codemagic calls this automatic code signing). No Mac needed.
    4. Create the app record in App Store Connect (My Apps → +) with the same bundle ID before the first upload.

    4Build and upload

    1. In Unity: switch the platform to iOS, set the Bundle Identifier, version and build number, and in the AdMob settings enter your iOS App ID.
    2. For iOS, Google Mobile Ads needs CocoaPods; the cloud Mac runs pod install for you when the build workflow includes it.
    3. Upload: Codemagic publishes the signed build to App Store Connect / TestFlight itself. With Unity Build Automation, download the .ipa and upload it with a tool that uses your App Store Connect API key, or add an upload step to the build.
    4. Test on your own iPhone through TestFlight before you submit for review.

    5App Store answers for an AdMob game

    • App Privacy: declare the same data as for Google Play (location from IP, identifiers including the IDFA if you ask for tracking, usage and diagnostics), used for third-party advertising and analytics. Our Data safety summary lists them.
    • App Tracking Transparency: if the game asks for tracking permission (the template’s IDFA option), App Store Connect must say the data is used to track, and the permission text must explain why. If it never asks, the app cannot read the IDFA and ads rely on other signals; you still declare the data the SDK collects.
    • app-ads.txt: the same file works for iOS. AdMob reads the developer website from the App Store listing’s Marketing URLfield, so put your domain there, and check it with the app-ads.txt checker.

    Managed iOS builds from HyperCodeStore are planned: we would run the cloud build for you so you only supply your Apple API key. It isn’t available yet; this guide is the route today. If you want it, tell us.