Ship iOS

Ship iOS Apps Series

Shipping workflows for iOS apps: signing, TestFlight, App Store Connect, CI, and release hygiene.

4 chapters · about 81 min end to end

  1. Do You Need CI for an iOS App? The macOS 10x Tax, Code Signing, and Shipping for $0The iOS companion to the web CI chapter. Why iOS forces you onto the expensive macOS runners (and what that costs), why code signing — not the build — is the genuinely hard part of iOS CI, what Xcode Cloud / Bitrise / Codemagic / fastlane each actually do, the four ways to build and ship to TestFlight from your own Mac for $0, a self-hosted Mac runner that dodges the 10x tax entirely, and a side-by-side price comparison so you can pick the cheapest pipeline that fits.Beginner · 26 min
  2. Too Many Builds in App Store Connect? Why You Can't Really Delete Them — and What to Do InsteadEvery time you archive and upload from Xcode, App Store Connect keeps another build — so the Add Build picker fills up with versions you no longer want. This chapter explains why builds are immutable and can't be deleted from your account, what the 'Missing Compliance' warning actually means and how to make it disappear for good, the difference between a version number and a build number, how to expire TestFlight builds so they stop cluttering the list, and the upload hygiene that keeps the picker clean — with the asc CLI commands to do it from your terminal.Beginner · 22 min
  3. Your First In-App Purchase Got Orphaned in 'Waiting for Review' — Here's How to Ship AnywayA first iOS in-app purchase has to be reviewed bundled with a build. Cancel that submission once and App Store Connect can strand the IAP in 'Waiting for Review', make the 'In-App Purchases and Subscriptions' section vanish from your version page, and reject you under Guideline 2.1 'Product not available'. This is the full diagnosis — including reading the true state from the internal iris API — and the four recovery paths, ranked by effort and what each one costs you.Intermediate · 18 min
  4. '3.0.0 Business: Preamble' Isn't a Real Rejection — It's Apple Asking About Your PriceYour version says Rejected, the banner cites guideline 3.0.0, and the message is one sentence asking you to confirm a price. This is Apple's automated price-confirmation hold, not a finding against your app. This chapter decodes what X.0.0 guideline codes mean, gives you a reply template that resolves it, and documents the button that trips almost everyone: 'Update Review' submits your app immediately — it is not a staging step. Plus how to read your true review state from the iris API and the asc CLI instead of guessing from the UI.Intermediate · 15 min

Read next

Ultimate Swift SeriesUltimate SwiftUI SeriesModern Delivery Pipeline