10.1 — Apple Developer Program

Opening scenario

You finish a polished MVP on Friday night, hit Archive, and try to upload to App Store Connect. Xcode tells you: “No accounts with App Store Connect access.” You sign up for an Apple Developer account, pay the $99, wait. Monday morning, still pending — because you used a Gmail account that doesn’t match the legal entity on your tax forms. By Thursday, support has bounced you twice. Your launch date is gone.

The Apple Developer Program isn’t a credit card transaction. It’s an identity verification, a legal contract, and a permission system rolled into one. Get this layer wrong and nothing else matters — your code never reaches users.

Context taxonomy

Account typeCostWho it’s forDUNS requiredTime to approveCaveats
Individual$99/yearSolo developer, publishing under your nameNoHours to daysYour real name appears on App Store
Organization$99/yearLLC, Inc, GmbH, LtdYes (free, ~5 biz days)1–2 weeksLegal entity name appears on store
Enterprise$299/yearIn-house distribution only, 100+ employeesYes2–4 weeksCannot publish to App Store
Apple Developer (free)$0Build to your device, no distributionNoInstantProvisioning expires after 7 days
Education / non-profit$0 or waivedAccredited schools, qualifying non-profitsSometimes1–3 weeksApply via Apple’s program page

Concept → Why → How → Code

Concept. The program gives you three things: an App Store Connect identity, code signing certificates, and entitlements to use Apple’s restricted APIs (Push, HealthKit, CarPlay, etc.).

Why. Apple gates the platform because every signed binary is traceable to a real person or entity. This is what makes “scammed by an iOS app” rare compared to other ecosystems.

How. You’ll work with five primitives in your career:

  1. Team ID — 10-char string like ABCDE12345. Identifies your account everywhere.
  2. Certificate — public/private keypair issued by Apple. Two main types: Apple Development, Apple Distribution.
  3. App ID (Identifier) — bundle ID like com.acme.notes, registered in your account with associated capabilities.
  4. Provisioning Profile — binds (certificate × app ID × devices × entitlements). The thing Xcode actually embeds in your .app.
  5. Role — Account Holder, Admin, App Manager, Developer, Marketing, Customer Support, Finance. Each has a precise permission scope.
# Inspect a downloaded provisioning profile (decode the PKCS#7 envelope)
security cms -D -i ~/Downloads/MyApp_AdHoc.mobileprovision | plutil -p -

# List signing identities installed in your keychain
security find-identity -v -p codesigning

The provisioning profile dump shows you the App ID, the certificate fingerprints, expiry date, and (for Ad Hoc/Development) the UDIDs allowed to run it. When code signing breaks, this is what you read first.

In the wild

  • Stripe runs an Organization account under “Stripe, Inc.” with the Account Holder being a tightly-restricted role no engineer has direct access to. Engineers get App Manager.
  • Indie devs (Marco Arment, Underscore Apps, Cultured Code) use Individual accounts to keep the legal name on the store page, which matters for personal branding.
  • Large studios (Riot Games, Niantic) buy Enterprise accounts for internal QA distribution alongside their App Store Organization account — two separate Team IDs.
  • Startups that haven’t formed an LLC yet publish under Individual accounts and migrate to Organization later via Apple’s account transfer process (slow, paperwork-heavy, requires Apple’s manual review).

Common misconceptions

  1. “Enterprise lets me put apps on the App Store.” No. Enterprise is private distribution only. Listing to App Store gets your account terminated.
  2. “I can switch from Individual to Organization later for free.” You can, but it’s not seamless — Apple manually re-verifies and your Team ID changes, which breaks every existing keychain-shared app group and Sign in with Apple linkage.
  3. “DUNS takes weeks.” It takes ~5 business days if you request it via Apple’s free lookup tool. Going to D&B directly costs money.
  4. “Account Holder = root.” Account Holder controls billing and termination. Admin actually controls most day-to-day. You want Admin, not Account Holder, on automation accounts.
  5. “$99 covers everything.” It covers App Store distribution. It does not cover Mac notarization throttling, expedited reviews, or storage above the App Store’s limits.

Seasoned engineer’s take

The Apple Developer Program is administrivia, but it’s the kind of administrivia that destroys launches. Three rules to live by:

TIP. Set the Account Holder to a role-based email (apple-account@yourcompany.com) backed by a mailing list, not a person’s inbox. People quit. Mailing lists don’t.

WARNING. The DUNS number is legal entity-specific. If you re-incorporate, change states, or pivot the LLC, you need a new DUNS and your Apple account must be transferred — Apple is the slowest party in this dance. Plan months ahead.

The other thing nobody tells you: the App Store agreement (the “Paid Apps Agreement”) has banking and tax forms that take longer than the developer account itself. Until those are signed and your bank account is verified, you can’t get paid. Start that paperwork on day one.

Interview corner

Junior“What does $99/year get you?” The ability to distribute apps to the App Store and TestFlight, code signing certificates, access to beta OSes, technical support incidents, and entitlements to restricted APIs. The free tier lets you run apps on your own devices but only with 7-day provisioning.

Mid“Walk me through registering a new app from scratch.” Create a bundle ID in Identifiers (matching what you’ll use in Xcode), enable any capabilities (Push, App Groups, etc.), generate or use existing certificates, create a provisioning profile that binds them, download it, and configure Xcode signing to use it — or let Xcode-managed signing do all of that for you.

Senior“Your company is moving from solo founder to 4-person team plus 2 contractors. What does your Apple Developer setup look like?” Move the Account Holder to a role-based email controlled by a small board. Add admins (founders), App Managers (full-time engineers), and Developers (contractors — they can run on test devices but can’t ship). All Account Holder actions go through a 2FA-enforced account with a hardware key. Set up an App Store Connect API key for CI so nobody’s personal credentials are in pipelines.

Red flag“I just use the Account Holder login on the CI server because it’s simpler.” That’s a credentials-on-disk anti-pattern, and if you leave the company the Account Holder cannot be reassigned without contacting Apple support.

Lab preview

In Lab 10.1 you’ll build a Fastlane pipeline that uses an App Store Connect API key (not a username/password) so this entire chapter’s lessons about roles, account safety, and automation come together in working code.


Next: 10.2 — Code Signing Deep Dive