Skip to main content

Command Palette

Search for a command to run...

Do You Need a Mac to Publish an iOS App?

You do not need to own a Mac to publish an iOS app, but macOS has to exist somewhere in the build chain. Here is what needs one and what does not.

Updated
9 min readView as Markdown
Do You Need a Mac to Publish an iOS App?

You do not need to own a Mac. That is the honest short answer, and it is also the answer most articles stop at, which is why people buy a used MacBook they did not need or pay for a service without understanding what it is doing. The accurate version is this: macOS has to exist somewhere in the chain that produces your .ipa. The only real question is whose macOS it is, and what you hand over to use it.

What genuinely requires macOS

Three steps in the iOS pipeline cannot happen anywhere else.

Compiling the binary. Xcode runs on macOS only. There is no Windows or Linux build. The command line tools (xcodebuild, xcrun, the iOS SDK itself) ship inside Xcode and carry the same restriction. Every cross-platform framework you have heard of, React Native, Flutter, Capacitor, Unity, still hands the final iOS compile to Xcode on a Mac.

Signing it. codesign is a macOS binary. An unsigned .ipa cannot be installed on a device or accepted by App Store Connect.

Uploading it. Transporter is a Mac App Store app. Application Loader was discontinued years ago, and xcrun altool was deprecated in 2023. In practice the upload runs from macOS, from Transporter or from an archive step in Xcode or a CI runner.

Everything else in the process is a browser.

What does not require a Mac, despite what people assume

Enrolling in the Apple Developer Program is a web flow and a payment ($99 a year for an individual or organization). Creating the App ID and bundle identifier, generating provisioning profiles, creating the app record, writing the listing, uploading screenshots, setting pricing and availability, filling out the privacy questionnaire and the age rating, distributing through TestFlight, submitting for review, replying to a rejection, releasing the build: all of it happens in App Store Connect and the Developer portal, in any browser, on any operating system.

Even the signing certificate does not need a Mac. Apple's documentation walks you through generating the certificate signing request in Keychain Access, which is why everyone believes it is Mac-only, but a CSR is just an RSA key and a request file:

openssl genrsa -out ios_distribution.key 2048
openssl req -new -key ios_distribution.key -out ios_distribution.csr \
  -subj "/emailAddress=you@example.com, CN=Your Name, C=AE"

Upload the .csr to the Certificates section of the Developer portal, download the .cer Apple gives back, and keep the .key file safe. Lose it and the certificate is dead and you issue a new one.

Step Needs macOS
Enroll in the Apple Developer Program No
Create bundle ID, certificates, provisioning profiles No
Create the app record and write the listing No
Upload screenshots and set the age rating No
Compile the app to an .ipa Yes
Code sign the binary Yes
Upload the build to App Store Connect Yes, in practice
Distribute via TestFlight No
Submit for review and release No
Ship a fix after release Depends on your stack

That last row is the one worth sitting with, and this post comes back to it.

The rule that turned old Macs into paperweights

If you were planning to solve this with a cheap second-hand Mac, check the date.

Since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later, using the iOS 26 SDK or later. This is enforced at upload, not at review, so a non-compliant build does not get rejected days later by a human. It bounces immediately with ITMS-90725: SDK version issue. TestFlight rejects it too.

Xcode 26 requires macOS Sequoia 15.6 or later. macOS 15 dropped support for a long list of older Intel Macs. So the chain runs: your submission needs Xcode 26, Xcode 26 needs a recent macOS, and a recent macOS needs hardware from roughly 2018 onward. The $200 MacBook Air on eBay that someone recommended in a forum thread three years ago cannot upload an app in 2026.

Note that this is about the SDK you build against, not the iOS version your users run. Your deployment target can still be iOS 15 or 16. Apple raises this floor most years, which means a Mac bought to solve this problem is a recurring cost, not a one-time one.

And no, a virtual machine is not a clean workaround. Apple's macOS licence permits virtualization only on Apple hardware, so running macOS on a Windows PC is a licence violation before it is a technical headache, and the technical headaches are real: graphics, simulators, and Xcode updates that break on the next point release.

How every "no Mac required" service actually works

Two mechanisms, and it is worth knowing which one you are buying.

A rented Mac. MacStadium, MacinCloud, and similar services give you a real machine or a VM on Apple hardware, and you drive Xcode through screen sharing or SSH. Roughly $30 to $100 a month depending on the tier. You still do all the work, you just do not own the metal. If you need Xcode itself, an actual IDE with a debugger, this is the honest option.

A hosted build runner plus an App Store Connect API key. This is what every platform that advertises "publish to iOS without a Mac" is doing, including Despia. Your code goes to a macOS runner in a data centre, xcodebuild produces a signed .ipa, and the upload to App Store Connect authenticates with an API key you generated in your own account.

That API key is the part people skip past. It is issued under Users and Access in App Store Connect, it has a role you choose, and it lets whoever holds it act on your account inside that role. That is what makes the whole thing work without you ever touching a Mac. It is also a real trust decision, so treat it like one: issue the key with the narrowest role that works, keep the key file (you can only download it once), and revoke it the day you stop using the service. Any vendor that asks for your Apple ID password and 2FA code instead of an API key is doing it the wrong way, and that is a signal about the rest of their engineering.

Where this lands if you already have a web app

If your app is a web app, the Mac question is not really about Xcode. It is about how many times you have to go through this pipeline.

Despia takes the web app you already built and ships it as a real native binary for iOS and Android. Your web code runs in the platform WebView, WKWebView on iOS and the Chromium-based WebView on Android, with 50+ native device capabilities available through a single despia() call from your existing JavaScript. The compile and signing steps happen on hosted macOS, so the machine in front of you can be a Windows laptop, a Chromebook, or a phone.

const isDespia = navigator.userAgent.toLowerCase().includes('despia')

if (isDespia) despia('successhaptic://')

The part that matters more than the build machine: web content updates ship over the air, so a bug fix or a copy change or a new screen goes out without a new binary, without a new upload, and without a review cycle. You go through the signed-build pipeline for the initial submission and for changes that touch the native layer. Everything else is a deploy of your web app. And if you outgrow the arrangement, the full Xcode and Android Studio projects export at any time, which is the point at which you will want a Mac, on your terms rather than because the toolchain forced it.

Android, for the record, has never needed a Mac. Android Studio runs everywhere, and Google Play Console is a browser. The Mac question is an Apple question only.

When you should just buy the Mac

Being straight about this: there are cases where every workaround is worse than the machine.

If you are writing Swift or SwiftUI, you need Xcode, and you need it locally. If you are debugging native crashes, profiling with Instruments, or working on anything with heavy 3D, real-time media, or gesture work at 120fps, remote screen sharing into a rented Mac will make you miserable. If you are shipping multiple apps for clients, a Mac mini amortises fast against a monthly rental. If you plan to build iOS apps as a career rather than to publish one product, own the tool.

The workarounds exist for the other case, which is the common one: you have a product, it runs on the web, and the App Store is a distribution channel rather than a platform you want to specialise in.

FAQ

Can I publish an iOS app from Windows? Yes, if the compile and signing run on macOS somewhere else, through a hosted build service or a rented Mac. Everything you do in a browser works identically on Windows.

Can I publish an iOS app from Linux? Same answer. The OpenSSL commands above are arguably easier there.

Do I need a Mac to enroll in the Apple Developer Program? No. It is a web enrollment. Apple may ask you to verify identity through the Developer app on an iPhone or iPad in some cases, but not a Mac.

Do I need an iPhone to publish an iOS app? Not strictly, but you should have one or borrow one. Testing through TestFlight on a real device before submitting catches things no simulator will.

Do I need a Mac to update my app after launch? For a native binary change, yes, the same chain applies. For a web app running in a native runtime with over-the-air updates, no, the content ships from your normal deploy.

Is a cheap used Mac still an option? Only if it runs macOS 15.6 or later, which in practice means a 2018 model or newer. Apple raises the required Xcode version most years, so budget for the machine ageing out.

Get it on the stores

Take the app you already built and ship it to iOS and Android without a CLI or a Mac. Code signing and submission run from the browser.

See the setup docs at setup.despia.com