When developing iOS projects on Windows, the most challenging step isn’t writing code, but uploading the IPA to the App Store.
Many resources assume the use of Xcode or Transporter, which rely on macOS.
If both development and release are done on Windows, the process needs to be separated:
- IPA can be generated in any environment
- Uploading is just an independent step
As long as the IPA meets requirements, uploading can be completed entirely on Windows.
Confirm the IPA is Ready for Upload
Before considering upload, ensure the IPA is a “release package.”
Check three key points:
1. Use a Distribution Certificate
When packaging, you must use:
- A Distribution certificate
If using a Development certificate:
- The IPA can be installed
- But it cannot be uploaded to the App Store
2. Correct Provisioning Profile Type
The provisioning profile must be:
- App Store type
You can check by unpacking the IPA:
unzip -p app.ipa Payload/*.app/embedded.mobileprovision
Confirm there are no device UDIDs.
3. Bundle ID Matches the Backend
Ensure:
- The Bundle ID in the IPA
- The Bundle ID in App Store Connect
Are exactly the same.
Prepare Upload Environment on Windows
Windows doesn’t have Xcode, but you can use the following tools:
- AppUploader
- iTMSTransporter (requires additional Java environment setup)
- Fastlane (limited support on Windows)
In practice, using graphical or command-line tools directly is more stable.
Upload IPA Using AppUploader
On Windows, AppUploader (Happy Upload) can directly handle the upload.
Specific steps are as follows:
1. Open the Upload Interface
Launch AppUploader and go to the “Submit Upload” page.
2. Set Up App-Specific Password
Generate an app-specific password in your Apple ID.
Enter:
- Apple ID
- App-specific password
Note: Do not use your account login password here.


3. Select IPA File
Click to select the local .ipa file.
4. Choose Upload Channel
The tool offers multiple upload channels:
- Channel 1 (old channel)
- Channel 2 (new channel)
If the upload gets stuck, try switching channels.

5. Execute Upload
Click the upload button and wait for completion.
After successful upload, Apple will return processing results.

Confirm Status After Upload
Upload completion doesn’t mean immediate visibility.
Go to:
App Store Connect → My Apps → TestFlight
Apple will process it (Processing).
After processing:
- The build version will appear
- You can then submit for review
If Upload Succeeds but No Build Appears
If upload succeeds but no build appears, check:
Check Build Number
CFBundleVersionmust be incremented
Check Signing Type
- Whether an App Store provisioning profile is used
Check Bundle ID
- Whether it matches the one in App Store Connect
Re-upload
Try submitting again using a different upload channel.
Upload Methods Integrated with Other Tools
In some teams, the upload process is integrated with build tools.
For example:
Fastlane + Windows
You can build the IPA on Mac, transfer it to Windows, and then upload using AppUploader.
CI Workflow
The process can be split into:
- Build IPA on Mac or cloud
- Upload to server
- Execute upload on Windows node
This reduces dependency on macOS.
Practical Workflow Example
When a team develops on Windows, they can do this:
- Build IPA using HBuilderX or CI
- Create certificates and provisioning profiles using AppUploader
- Download
.p12and.mobileprovisionfiles - Package to generate IPA
- Upload using AppUploader on Windows
Throughout this process:
- No Xcode upload is needed
- No macOS device is required
Reference link: https://www.appuploader.net/blog/231