Many indie developers and agency teams run Windows as their daily driver, yet the App Store release pipeline still runs through Apple's ecosystem: code signing, Archive, .ipa upload, TestFlight distribution, and App Review submission all depend on macOS tooling. That does not mean you need a Mac sitting on every desk. In 2026, the practical split is Windows for day-to-day development and App Store Connect operations, and a cloud Mac for signing and release. This guide walks the full timeline step by step—what you can do on Windows versus what must run on Mac—and gives you a reusable checklist you can hand to your team.
Bottom line: Windows can lead store ops; Mac must sign and upload
Split iOS publishing into two buckets and the boundaries become clear. Store-facing work—accounts, metadata, pricing, review communication—mostly lives in the browser. Build-facing work—certificates, Keychain, Archive, codesign—requires macOS. The table below is the reference most Windows teams pin next to their release runbook.
| Stage | Windows OK? | Notes |
|---|---|---|
| Enroll in Apple Developer Program | Yes | Browser-only; needs Apple ID plus identity or company verification |
| App Store Connect metadata, screenshots, pricing | Yes | Pure web console; any modern browser on Windows works |
| Code, Git, cross-platform framework builds | Mostly yes | Flutter, React Native, and KMP run on Windows; final iOS build still needs Mac |
| Certificates, Provisioning Profile, Keychain | No | Must use macOS Keychain and Xcode signing tools |
| Archive, codesign, produce .ipa | No | xcodebuild and Xcode Organizer are macOS-only |
| Upload to TestFlight / App Store | Indirectly | Transporter is macOS; fastlane upload on a cloud Mac is the usual Windows-team path |
| Review communication, release, sales reports | Yes | All via App Store Connect in the browser |
Six-step roadmap: from zero to App Store
Whether you ship native Swift, Flutter, or React Native, the main release path is the same. The steps below follow chronological order and note the recommended environment for each. Treat this as your onboarding map when a new teammate asks, "Where does Windows stop and Mac start?"
- Join Apple Developer Program (Individual $99/year or Organization account—confirm current pricing on Apple's site)
- Create the App record in App Store Connect: Bundle ID, name, primary language, SKU
- Configure signing: Distribution certificate + App Store Provisioning Profile
- Archive and upload a build: Xcode Organizer or
fastlane gym + pilot/deliver - TestFlight internal / external testing: validate crashes, permissions, login, payments, and other critical paths
- Submit for App Review and release: review notes, export compliance, privacy labels; after approval, choose territories and go live
Steps 1, 2, 5 (tester management), and 6 (metadata and review replies) are where Windows teams spend most of their calendar time. Steps 3 and 4 are shorter in wall-clock hours but higher in technical risk—plan a cloud Mac session before your first hard deadline, not the night before submission.
Step 1: Apple Developer account and App Store Connect (Windows browser)
Register at the Apple Developer Program with your Apple ID. Individual accounts usually require identity verification; organization accounts need D-U-N-S and corporate paperwork. Review timing varies by region—apply early; do not wait until the build is ready.
Once active, sign in to App Store Connect, open My Apps, and tap + to create a new app. Register your Bundle Identifier first under Certificates, Identifiers & Profiles, and make sure it matches PRODUCT_BUNDLE_IDENTIFIER in your Xcode project.
All of the following can be done entirely on Windows:
- App name, subtitle, description, keywords, support URL, privacy policy link
- Screenshots and preview videos at required sizes (Figma, Photoshop, or similar on Windows)
- Pricing, territories, in-app purchases, and subscriptions
- App Privacy details (Privacy Nutrition Labels) and data collection declarations
- TestFlight tester lists and demo accounts for App Review
Many teams underestimate how long metadata takes. Writing store copy, localizing descriptions, and producing screenshot sets for every device class often runs parallel to engineering—and none of it requires a Mac. Block calendar time for App Store Connect the same way you block time for QA.
Step 2: Certificates, profiles, and signing (Mac required)
This is where Windows-only teams most often stall. Apple stores Distribution certificate private keys in the macOS Keychain; Provisioning Profiles bind to App IDs and Capabilities (push notifications, Sign in with Apple, App Groups, and more). Managing them through Xcode's Signing & Capabilities tab is usually the least painful route.
Recommended approach
- On a cloud Mac or shared team Mac, sign in via Xcode → Settings → Accounts and use Automatic Signing, or create a Distribution certificate manually
- Before exporting a .p12 certificate + profile bundle, agree on team key-handling rules—a leaked private key means someone else can ship builds under your identity
- For CI, use an App Store Connect API Key (.p8) with fastlane to reduce interactive logins; store key files with the same care as production secrets
- Document which Apple ID owns the Distribution cert and which machine holds the Keychain entry—onboarding breaks when that knowledge lives in one person's head
Multi-region teams that need a single signing source and runner switching should read the iOS signing and Provisioning Profile governance FAQ. Windows cannot replace this step—without macOS Keychain, there is no compliant codesign environment.
If you inherit a project from another vendor, verify the signing identity before your first Archive. Mismatched team IDs, expired profiles, and capability drift between the portal and the project file are the top three first-upload failures we see from Windows-led teams.
Step 3: Archive, upload, and TestFlight
After the app runs cleanly on Simulator, release builds must use Release + Generic iOS Device / Any iOS Device for Archive. Three upload paths cover most teams:
| Method | Best for | Notes |
|---|---|---|
| Xcode Organizer → Distribute App | First release, GUI troubleshooting | Run on cloud Mac via VNC; Windows side watches remotely |
fastlane gym + pilot | CI-experienced teams | Scriptable and repeatable; fits fixed release cadence |
| Transporter (macOS) | Already have .ipa, no Xcode needed | Drag-and-drop upload; common for agency handoffs |
After a successful upload, the build appears under App Store Connect → TestFlight. Processing can take minutes to several hours. First-time uploads often hit missing export compliance, encryption declarations (Export Compliance), or dSYM symbol files not synced—most fixes are form fields in Connect, not a full rebuild.
TestFlight should cover at minimum: cold start, login/registration, core paid flows, push notifications and deep links, and several iOS versions and screen sizes. Apps with StoreKit or regional pricing can use the App Store regional sandbox testing FAQ for node and timing choices.
Keep a log of build numbers (CFBundleVersion) and upload timestamps. When Apple emails about ITMS issues, matching the exact build saves hours of guesswork across Windows and cloud Mac sessions.
Step 4: Submit for review and go live
Once TestFlight looks good, select the build in App Store Connect and complete App Review Information:
- Contact name and phone (Review may call)
- Demo account username and password (if login is required)
- Review notes: backend feature flags, test steps, special hardware needs
- Content rights, age rating, government filings—depends on your business and region
Tap Submit for Review and the status moves to Waiting for Review → In Review. If rejected, Resolution Center cites the Guideline; you can update metadata in a Windows browser, upload a new build, or reply with clarification only. After approval, choose manual or automatic release for selected countries and regions.
Common rejection reasons: crashes or placeholder content, missing privacy policy, unclear permission strings (Info.plist Usage Description), Guideline 4.3 similar apps, subscription or IAP description mismatch. These rarely depend on which OS you code on—but Info.plist and Capability setup must be correct in Mac/Xcode before the first Archive.
Build a short "review packet" document your PM can paste into Connect: demo credentials, feature flag states, and a three-step happy path. Reviewers are human; clarity beats marketing copy.
Recommended workflow for Windows-first teams
A division of labor that many teams have validated at scale:
- Windows: VS Code / Cursor for code, Git PRs, App Store Connect store listing, email with Review
- Cloud Mac: same Git repo,
pod install/ SPM resolve, Archive, fastlane upload, VNC into Xcode GUI when Signing errors need clicking - Connection: SSH for scripts, VNC for GUI; artifacts and caches in Git or object storage—avoid manual cross-OS file copies
- Release window: rent cloud Mac by the day—power on for release week, shut down between ships; cheaper than idle Macs per developer
Cross-check the step-by-step Archive → TestFlight list with the Windows remote Xcode build, signing, and TestFlight FAQ. That FAQ covers SSH setup, common xcodebuild flags, and first-upload error codes in one place.
Boundaries: when CI-only is not enough
Hosted macOS runners (GitHub Actions and similar) work well for unattended builds, but keep an interactive cloud Mac for:
- First-time Capability toggles in Xcode and Provisioning Profile mismatch fixes
- Organizer ITMS errors that need Xcode logs cross-checked with Apple email
- Downloading new iOS Simulator runtimes and Swift Package index oddities
- Same-day rejection that requires a new Archive and re-upload
CI excels at repeatability; humans excel at one-off portal and Keychain surprises. Budget both—not one instead of the other.
Pre-launch checklist (printable)
- Apple Developer Program active; Bundle ID registered
- App Store Connect app record created; privacy policy URL reachable
- Distribution certificate and App Store Profile valid; Capabilities match the project
- Archive uses Release configuration; version (
CFBundleShortVersionString/CFBundleVersion) follows increment rules - Build uploaded to TestFlight; export compliance and encryption declarations complete
- Screenshots, description, age rating, demo account, review notes ready
- Known crashes and blocking bugs fixed; dSYM uploaded if you need symbolicated crash reports
Cloud Mac for release windows
For Windows teams, buying a Mac just to ship a few times a year rarely pays off. Pay-by-the-day dedicated Mac mini fits the release window model: enable SSH/VNC, pin an Xcode version and signing environment, Archive, then power off. vpszap offers Apple Silicon bare metal, multi-region nodes, and daily billing with no long contract—aligned with "Windows writes code, Mac only ships." Explore vpszap cloud Mac mini and run one full Archive → TestFlight cycle to validate latency and disk before your real deadline.