How to Upload an IPA to App Store Connect from Windows (No Mac Needed)

You build with Flutter, UniApp or React Native, your main machine runs Windows, and you are holding a compiled .ipa file with no idea how to hand it to Apple. This article breaks the whole chain apart: which step genuinely requires a Mac, which step runs fine on Windows, and the mistakes that trip people up most often along the way.

1. Three separate things: certificate, account, IPA

Most "upload failed" confusion comes from treating three distinct stages as one. They are independent:

Stage What it does Possible on Windows?
Signing Create the distribution certificate and provisioning profile, sign with Xcode, export the .ipa ❌ Requires macOS (a clean VMware VM is recommended)
Uploading Submit the signed .ipa to App Store Connect ✅ Yes — Windows, Android and cloud hosts all work
Submitting Fill in metadata and submit for review in the App Store Connect web UI ✅ Yes — it is just a browser

In other words, signing must be done by Apple's official tools, but uploading does not need a Mac at all. This is exactly the blind spot for many cross-platform developers: they assume "you need a Mac to publish", turn to cloud platforms that bundle certificates, signing and uploading together, and end up handing over their private key — which creates a far bigger problem (covered in section 6).

Recommended approach: keep signing inside Xcode in your local macOS VM so the private key never leaves your machine, and use a pure upload tool that only handles transfer for the upload stage. Each stage does its own job — the safest and least painful combination.

2. Create an App-Specific Password

A third-party upload tool should never ask for your main Apple ID password. The correct approach is an App-Specific Password: a separate authorization credential used only for third-party sign-in, revocable at any time, and useless for signing in to iCloud or changing account details.

  1. Open appleid.apple.com in a browser and sign in with your Apple Developer account.
  2. Go to the Sign-In and Security page.
  3. Find App-Specific Passwords and click Generate Password.
  4. Enter a recognizable label (for example xuploader) to generate a password shaped like abcd-efgh-ijkl-mnop.
  5. Copy and save it immediately — once you close the dialog it cannot be viewed again and you must generate a new one.
Prerequisite: two-factor authentication must be enabled on the account, otherwise the App-Specific Passwords entry will not appear. If you cannot find the option, finish setting up two-factor authentication first and come back.

3. Uploading from Windows with XUploader (recommended path)

Step 1: get a signed IPA

Inside the macOS VM, use Xcode and choose Product → Archive → Distribute App → App Store Connect → Export to produce the .ipa, then copy it over to your Windows machine.

Step 2: enter your account details

Open the XUploader client and enter your Apple Developer account (email) plus the App-Specific Password created above. The client authenticates over an encrypted connection straight to App Store Connect — no server-side relay.

Step 3: choose the IPA and upload

Pick either of two methods:

Click upload and wait for the progress bar to finish; throughput mostly depends on your upstream bandwidth.

Step 4: confirm in App Store Connect

Sign in to App Store Connect and open TestFlight or the build list for your app. The freshly uploaded package shows as Processing, usually becoming selectable within a few minutes up to half an hour, after which you can attach it to a version and submit for review.

4. No computer at hand? Upload from an Android phone

For business trips and emergencies, uploading from a phone is genuinely useful: install the XUploader client on an Android phone, enter the same developer account and App-Specific Password, and either pick a local IPA or paste a download URL. No need to sit in front of a computer.

5. Common upload errors and how to fix them

Symptom / error Likely cause Fix
Wrong account or password You used the main Apple ID password, or copied the App-Specific Password with a trailing space Switch to the App-Specific Password; regenerate one and type it manually
Authentication failed / two-factor prompt Two-factor is not enabled, or the password was revoked Enable two-factor at appleid.apple.com and generate a fresh App-Specific Password
No uploadable app found The Bundle ID does not match the app record created in App Store Connect Make the Xcode Bundle Identifier identical to the one in App Store Connect
Upload succeeded but no build appears The build number duplicates an earlier one (silently discarded), or it is still processing Bump the build number and re-archive; wait, and check Apple's email after one hour
ITMS-90022 / ITMS-90023 A required App icon size is missing Add every required icon size to the Asset Catalog and rebuild
ERROR ITMS-90535 A bundled third-party SDK ships a malformed Info.plist Locate the bundle named in the error, contact the SDK vendor or remove it per Apple's instructions
ITMS-90205 / ITMS-90206 The bundle contains disallowed directory structures or nested apps Check whether Frameworks or stray directories were packaged into Payload by mistake
Rejected under Guideline 4.3 Too similar to an existing app, or an unusual link between the upload environment and the certificate See the next section

6. The security red line: why not to use upload tools that manage certificates

Several "all-in-one" products bundle certificate generation, p12 private key storage, provisioning profile management and IPA uploading into a single package. It looks convenient, but it welds together two things of completely different natures.

This is the trade-off we made when building XUploader: upload only, no certificate management. The tool never touches, stores or transmits any certificate, private key, p8 key or provisioning profile — the signing right stays yours at all times. A clean upload path also carries no macOS hardware identifiers or development-environment fingerprints, shares no upload signature with other users, and combined with a clean egress IP noticeably reduces Guideline 4.3 (duplicate app) review risk caused by environmental correlation.

For a fuller analysis of certificate-hosting risk, see this longer article (in Chinese): To cross-platform iOS developers: IPA upload tools that manage certificates carry very high risk.

7. FAQ

Do I need Xcode installed to upload an IPA from Windows?

Not for the upload step. Xcode is only required for signing and archiving, and it only runs on macOS. Uploading simply submits an already-signed IPA through the App Store Connect API, which Windows handles perfectly well.

I own no Mac hardware. How do I create certificates and sign the IPA?

A common approach is to install a clean macOS virtual machine on Windows using VMware, then run Xcode inside it to create the distribution certificate, sign the app and export the IPA. Once signing is done you can shut the VM down and do all your day-to-day uploads from Windows.

What is the difference between an App-Specific Password and my Apple ID password?

An App-Specific Password is a separate one-off authorization code generated at appleid.apple.com for third-party tools. It cannot sign in to iCloud or manage your account, and it can be revoked at any time, which makes it far safer than handing over your main password. Two-factor authentication must be enabled before you can generate one.

The upload succeeded but I cannot see the build in App Store Connect.

First confirm that the Bundle ID matches the app record you created in App Store Connect, then check whether the build number duplicates an earlier one (duplicates are silently discarded). Processing usually takes a few minutes up to half an hour; if nothing appears after an hour, check the account mailbox for an ITMS error notification from Apple.

Do IPA upload tools store my certificates and private keys?

It depends on the type of tool. All-in-one tools with certificate management usually upload and store the p12 private key and provisioning profiles on the vendor's servers, which creates leakage and shared-ban risk. Pure upload tools such as XUploader offer no certificate management at all and transfer only the IPA file itself.

8. The short version

Sign it with local Xcode; upload it with a pure upload tool. Separate those two jobs and you never need to buy a Mac just to ship a release — nor hand the single most valuable asset of your developer account to any third party.

Download XUploader and ship your next release from Windows

No certificates or private keys involved · Platform independent · Pay per upload