Publish a Game on the App Store Without a Mac: Our Cloud Build Route
How we took an HTML5 game from a Windows PC to App Store review with Capacitor, Codemagic and TestFlight, and the mistakes that cost us builds.

Yes, you can publish a game on the App Store without a Mac. The Mac is still needed, but you rent it: an HTML5 game is wrapped with Capacitor on your PC, a cloud service such as Codemagic compiles and signs it on its own Mac machines, the build goes to App Store Connect and TestFlight, and you finish the listing, privacy details and submission in the browser. What you cannot skip is an iPhone, because someone has to play the build before Apple does.
We did this from Windows with our own action game, Little Ninja Dash. The first successful cloud build took about six minutes, and the app went to App Review on 19 October 2026, where our records show it as Waiting for Review. This guide does not report a review outcome. Facts about Apple and Codemagic come from their official pages, read on 30 October 2026. The rest is what our notes say happened, including the parts that went wrong.
What you need to publish on the App Store without a Mac
- An Apple Developer Program membership: 99 US dollars per membership year. Individuals and organisations can enrol. Organisations need a D-U-N-S Number and a public website.
- A Codemagic account. Its free individual plan has 500 macOS M2 build minutes a month and one build at a time; after that, Mac mini M2 minutes cost US$0.095 each. Free minutes are for single users, not for teams.
- A private Git repository with your project. Codemagic builds from the repository you connect. With our templates, a private repository is required: a public one would redistribute the source code, which the licence forbids.
- An iPhone with the TestFlight app, for testing the real build.
- A game that works offline from its own folder, wrapped with Capacitor.
Apple has required since 28 April 2026 that apps uploaded to App Store Connect be built with Xcode 26 or later and an iOS 26 SDK. Capacitor's iOS page also lists Xcode 26.0 or later and supports iOS 15 and up. Xcode only runs on macOS, which is why the build happens on Codemagic's machines and not on your PC.
Our template editions are browser games. Every edition page lists native app builds as not included. One licence covers one end product, and you may publish that game wherever you want, the App Store and Google Play included. You may not resell the template itself. If you plan to charge players, with a paid app or in-app purchases, ask us first.
Browse the templates and what each edition includes
Step 1: add the iOS project on Windows
If you already have a Capacitor project for Android, install @capacitor/ios and run npx cap add ios. That creates the ios/ folder, even on Windows. You cannot open it in Xcode locally, so every change to the native project is a file edit that you check in the next cloud build.
- Icon: one 1024 by 1024 PNG without transparency.
- Devices and orientation: our game is iPhone-only and landscape-only. Supporting iPad adds iPad screenshots and more layouts to test.
- Encryption: Apple's export compliance help says to update the app's Info.plist so you do not answer the encryption questions with every submission. Our game only uses the system's HTTPS, so we set ITSAppUsesNonExemptEncryption to false.
- Bundled files only: the game is inside the app and never loads our website. Apple's guideline 4.2 asks for apps that go beyond a repackaged website.
Starting from a template? Velvet Pool is one we wrapped with Capacitor for Google Play, so its game folder has already been through this step on Android. None of our templates has been through App Store review yet.
See Velvet Pool, a template we already wrapped with Capacitor
Step 2: signing without a Mac or Keychain
Signing is the part that used to require a Mac. With an App Store Connect API key, Codemagic can do it in the cloud.
- In the Apple Developer site, create an App ID (bundle identifier) for the game, with In-App Purchase if you sell something inside it.
- In App Store Connect, create the app record with that bundle ID, a SKU and the primary language.
- Generate an App Store Connect API key. Codemagic's documentation recommends a dedicated key for Codemagic. Add it to Codemagic's integration settings and never put the key file in your repository.
- Let Codemagic generate the distribution certificate and fetch the provisioning profile with the key. It can fetch certificates it generated before, and profiles from the Apple Developer portal.
What went wrong for us
- Our first two builds failed because no provisioning profile had been set up for the bundle ID yet. Set up the certificate and profile before the first build.
- A profile imported without a reference name in Codemagic did not work, and the button failed silently. Always fill in the name.
- The first API key setup failed because we typed the wrong Issuer ID. Copy and paste it from Apple's keys page.
- Build numbers must always go up. Asking Apple for the last number failed while a previous upload was still processing, so we switched to a number derived from the clock.
Step 3: build on Codemagic and test on TestFlight
The build recipe lives in a codemagic.yaml file in the repository. Ours installs the dependencies, prepares the game files, syncs them into the iOS project with npx cap sync ios, applies the profiles and builds the IPA on a Mac mini M2 machine. Codemagic then publishes the build to App Store Connect. Our first successful build took about six minutes, and the later production build under four.
One surprise: with submit_to_testflight set to false, Codemagic still uploaded the build to App Store Connect. Codemagic's documentation describes that option as the one required for distributing to beta groups.
TestFlight limits
- Internal testers: up to 100 App Store Connect users on your team.
- External testers: up to 10,000, after your first build for external testing is approved by App Review.
- A build stays available to testers for up to 90 days.
An internal tester invitation stays pending until it is accepted from the TestFlight email, and the app does not show up in TestFlight before that. Check the spam folder.
What the iPhone found that Windows could not
- Recorded audio files did not load. Inside the app, fetch returned status 0 with the correct bytes, and our code treated that as an error. Accepting status 0 for local files fixed it.
- Buttons were clipped in landscape near the notch. We reworked the results layout and tested every corner.
- Purchase screens shared with Android still said Google Play. On iOS they now say App Store.
- Test purchases made in TestFlight could not be reset, so test builds got a button to simulate not having bought. Store builds do not have it.
Step 4: App Store Connect listing, privacy and age rating
The rest happens in the browser. This is the order that worked for us.
- App Information: subtitle, category and the age rating questionnaire. Answer it honestly for what the game really shows.
- Pricing and Availability: price and countries. Mac and Apple Vision Pro availability were switched on by default. We turned them off because our game is made for touch.
- App Privacy: Apple requires these details for new apps and updates, including the practices of third-party partners whose code is in the app, such as ad networks and SDKs. A public privacy policy URL is required.
- In-app purchase, if any: names, descriptions, a review screenshot and notes for the reviewer.
- Version page: description, keywords, support and marketing URLs, copyright, the build, review notes and the release option. We chose manual release.
- Screenshots, then each extra language with its own text and captures.
- Screenshots: guideline 2.3.3 says they should show the app in use, not only title art or a splash screen. Ours are real captures of the game.
- App name: one name we wanted was already taken on the App Store. Have a second name, or a name with a short descriptive part, ready.
- Review notes: we wrote that the game is complete inside the app, works offline, needs no login, and where to find the purchase and the restore button.
Read our licence terms before you publish a template as an app
Step 5: submit, and what Apple checks
Submitting asks you to publish the App Privacy answers and confirm they are true, then send the draft submission. Ours went in on 19 October 2026 with the app version and its one-time purchase, and the status became Waiting for Review. If a review comes back with a rejection, the answer goes through the Resolution Center, with facts, not a blind resubmission.
For a game made from a template, three guidelines matter most. 4.2 asks for more than a repackaged website, so keep the game inside the app. 4.3(a) asks you not to create several bundle IDs of the same app. 4.3(b) says Apple does not want apps that cannot be told apart from what is already widely available. A reskin has to change rules, content and interface, not only the art.
What our templates include, and the part we can do for you
Every template comes with the ready-to-host game folder, readable source, a manual and 6 months of support, or 12 with the extension. Support covers installing and using the supplied files and fixing reproducible defects. An iOS wrapper, native ads, in-app purchases, the cloud build setup and the App Store listing are separate services.
If you would rather not set up signing and Codemagic yourself, send us the template, your Apple account plan and the deadline. We reply with scope, price and timing before any work starts. We do not publish a price list for custom work.
Ask for a quote to bring your game to the App Store
FAQ
Can I publish an iPhone game without owning a Mac?
Yes. You still need macOS and Xcode for the build, but a cloud service such as Codemagic provides them. Everything else, from App Store Connect to TestFlight, works in a browser and on an iPhone.
How much does it cost to publish on the App Store?
The Apple Developer Program costs 99 US dollars per membership year. Codemagic's free individual plan includes 500 macOS M2 minutes a month, and extra minutes are billed per minute. Add the game licence and the store art.
Do I need an iPhone?
For real testing, yes. Our iPhone found missing audio, clipped buttons and wrong store names that the Windows build and browser tests did not show.
Will Apple accept an HTML5 game wrapped in an app?
We cannot promise a result. Guideline 4.2 asks for more than a repackaged website, so we bundle the full game inside the app, make it work offline and give it native features. Guideline 4.3 also applies to reskins.
Do your templates include an iOS build?
No. Our editions are browser games, and the item pages say native app builds are not included. You can follow this route yourself or order it from us by quote.
