I used to think that publishing an iOS app had to go through Xcode: install certificates on a Mac, archive the build, and upload via Organizer. It wasn’t until a colleague on Windows asked how to release that I realized each step in the publishing process has more than one approach. Here I’ll break down the entire chain from account preparation to final submission, noting key points and common pitfalls at each step.
Developer Account
The first step is to register an Apple Developer account. A personal account costs $99 per year, displays your personal name on the App Store, and suits independent developers. A company account is also $99 per year, allows adding multiple developers for collaboration, displays the company name, and requires a D-U-N-S number for registration. An enterprise account costs $299 per year and is used only for internal distribution, not for publishing on the App Store. Choosing the wrong account type can be troublesome to change later in the developer portal, so decide on the display name before registering. After registration, log in to developer.apple.com to create an App ID, fill in the Bundle ID, and enable needed services (push notifications, Sign in with Apple, etc.). This step determines the unique identifier for your app.
Certificates and Provisioning Profiles
Once the account is ready, configure certificates. Distinguish between two types: Distribution certificates for App Store release and Development certificates for testing on real devices. The standard process is to use Keychain on a Mac to request a CSR, generate a .cer file on developer.apple.com, and then export it as a .p12. If you don’t have a Mac handy, tools like Appuploader can create certificates directly on Windows: open certificate management, click Add, choose Distribution type, enter a name and P12 password, and generate the .p12 in a few minutes. Certificate files can be exported and shared across team computers, so each person doesn’t need to request a new one.
A provisioning profile ties together certificates, App IDs, and test devices. To publish on the App Store, you must use an App Store type provisioning profile; Ad Hoc and Development are only for internal testing distribution. Multiple apps can share the same Distribution certificate, but each app needs its own provisioning profile.
IPA Packaging
For pure native projects, export the .ipa via Product → Archive in Xcode, which must be done on macOS. Cross-platform projects (Flutter, uni-app, React Native) each have their own build commands and can also compile and output .ipa on Windows or Linux. When packaging, ensure the Bundle ID matches the provisioning profile, and the build number (CFBundleVersion) must not duplicate a previously submitted one; otherwise, you won’t see the build in the version list after uploading. Check the version numbers in Info.plist before each release; forming this habit can save a lot of troubleshooting time.
Upload and Submission
After uploading the IPA to App Store Connect, it takes 5–15 minutes to process. If you don’t see the build, check: whether the version number is duplicated, whether the annual fee has been paid, and whether the provisioning profile type used for upload is correct (App Store type, not Ad Hoc). While waiting, you can fill in screenshots and metadata: 5.5-inch and 6.5-inch screenshots basically cover iPhone devices; add another set if you support iPad. App description, keywords, and a privacy policy link should be prepared before submission. If your app involves user login, provide test account credentials. Once everything is confirmed, click Submit for Review and wait for Apple Review feedback. — If your app uses sensitive permissions (location, camera, contacts), explaining their purpose in the review notes can help speed up the review.
How to Choose Upload Tools
Xcode Organizer and Transporter are official solutions but limited to macOS. fastlane suits teams with Mac CI for automation. Appuploader uploads IPA directly on Windows and Linux and also manages certificates, provisioning profiles, and screenshots in one place, making it suitable for cross-platform project releases.
Top comments (0)