Complete Step-by-Step Guide to Publishing an iOS App to the App Store with Appuploader: From Certificates to Submission

Publish iOS app to App Store with Appuploader on Windows: create certs, upload IPA, fix build issues, batch screenshots, and submit for review. No Mac needed.

Complete Step-by-Step Guide to Publishing an iOS App to the App Store with Appuploader: From Certificates to Submission

Recently, I helped a team release a version. Their development machines were all Windows, and the project used Flutter. The package was built as an .ipa, but how to get it to the App Store? We tried Xcode Organizer — it can’t be installed. Transporter — only has a macOS version. fastlane — it depends on xcrun at the core, and the CI also needs a Mac node. After researching, we found that Appuploader can complete the entire process on Windows: certificate creation, provisioning profile generation, IPA upload, and batch screenshot management. Here’s a record of our operations in order that day.

Certificates and Provisioning Profiles: Creating from Scratch on Windows

Before publishing, you need to configure certificates. The normal process involves generating a CSR using Keychain on a Mac, submitting it to developer.apple.com, downloading the .cer, and importing it back into Keychain to convert it to a .p12 — the entire process depends on macOS, and none of it can be done on Windows. Appuploader compresses these steps into a single interface: go to certificate management, click add, select iOS Distribution as the type, enter a name and P12 password, and click OK to generate. It’s done in minutes, without touching Keychain or understanding what CSR is. The generated .p12 can be exported and shared with other team members, so everyone can use the same certificate across different computers without each person having to apply separately.

Provisioning profiles are also handled in the same tool. Select the corresponding App ID, check the test devices, click create, and it’s done. If you need to add new test devices during development, the UDID can be automatically read from the phone connected to the computer, saving manual input. You need to distinguish the purpose here: for publishing, you must use a Distribution certificate paired with an App Store type provisioning profile. Development is only suitable for debugging on real devices; using it to upload a release build will cause errors.

IPA Upload and Channel Selection

Once the certificates are in place, go to the submission upload interface. Select the compiled .ipa file, and switch the upload channel in the upper-right corner — the tool provides four options: 1, 2, 3, and the legacy channel. Different broadband operators respond differently to these channels. If the default doesn’t work, switch to the legacy channel or retry with a mobile hotspot. This trick has resolved multiple cases of uploads getting stuck.

Enter the Apple upload-specific password (the app-specific password generated in your appleid.apple.com account, not your login password), then click upload. After the progress bar completes, Apple will send a confirmation email. Here’s a detail: if the app record hasn’t been created in App Store Connect yet, the upload will prompt “No suitable application records were found” — go to App Store Connect first to create a new app, fill in the Bundle ID and basic information, then come back to upload.

If you need to integrate with CI, the tool also provides a command-line version:

appuploader_cli -u your@apple.com -p xxxx-xxxx-xxxx -c 1 -f app.ipa

This command works on both Windows and Linux, so there’s no need for a Mac node. It’s suitable for integrating into Jenkins or GitLab CI, allowing automatic packaging and uploading after each code commit.

What to Do When the Build Doesn’t Appear

After uploading, you sometimes can’t see the build in App Store Connect; I’ve encountered this a few times. The troubleshooting path is fairly fixed: first wait 5-15 minutes for Apple to process it. If it still doesn’t appear, check the version number — if CFBundleShortVersionString or CFBundleVersion duplicates a previously submitted one, you need to change it in Info.plist, rebuild, and upload again. Also, check the account: a free Apple ID can only generate development certificates for internal testing and cannot upload release builds. You must use a developer account that has paid the $99 annual fee.

Another situation is when you selected a Development or Ad Hoc provisioning profile during upload. These are only suitable for internal test distribution, and the App Store won’t receive the build. Make sure you use an iOS Distribution provisioning profile, repackage, and upload again.

Batch Processing of Screenshots and Metadata

Before submission, you also need to prepare screenshots and metadata. Appuploader’s batch upload feature lets you select multiple screenshots of different sizes at once, and the tool automatically assigns them to the corresponding device positions and language versions. There’s no need to drag and drop each screenshot one by one on the App Store Connect web page. If the project supports both iPhone and iPad, just place the two sets of images in the corresponding directories when batch uploading. App description, keywords, and multilingual information are also managed on the same page. After filling in and saving, the data syncs to the developer backend, eliminating the need to switch pages repeatedly.

Submitting for Review

After completing all the steps above, return to App Store Connect and click Submit for Review. From a Windows machine, you can handle certificates, upload the IPA, manage screenshots and metadata, and finally submit for review — the entire chain is viable, so you don’t need to prepare a dedicated Mac for releases. If your team has both Mac and Windows development machines, Windows colleagues can fully participate in release operations without having to wait to borrow a machine each time.