"A rule you cannot trace to a reason is a habit. A habit you cannot price is a liability."
Two Kinds of Rule, Labelled Everywhere
Every lesson in this quest marks what it teaches with one of two labels. An apple-law callout is a rule the platform imposes on anyone who ships: break it and the app crashes, gets refused, or quietly loses its permissions, no matter whose app it is. A house-rule callout is a choice this family made. It comes with the reason it was made and what it costs, because a reader copying a house rule into a different situation deserves to know what they are buying.
The distinction matters most exactly where they look alike. "Turn off the App Sandbox" reads like a platform instruction; it is a house rule with a real cost, and it is wrong for an app you intend to put on the Mac App Store. "A new build number for every TestFlight upload" reads like a team convention; it is Apple's law, and App Store Connect enforces it.
The House Rules, With Their Prices
| House rule | Why | What it costs |
|---|---|---|
| Mac apps build with SwiftPM and a script, no Xcode project | Plain text that diffs, reviews and runs from a terminal or an agent the same way every time | You write the bundle, signing and install steps yourself |
| One self-signed code-signing identity for every Mac app | A designated requirement that stays stable across rebuilds and Macs, so permission grants survive | Gatekeeper does not trust it: the apps run on the family's own Macs, not on a stranger's |
| No notarization, hardened runtime off by default, no App Sandbox on the Mac | Apps are never distributed publicly and need whole-disk and network-share paths | No public distribution; safety rests on the machines being your own |
project.yml (XcodeGen) is the source of every iOS project | A readable, regenerable project with the team baked into source | Regenerate before you trust a test run |
| Swift 6 language mode | Data races become compile errors instead of crashes on a phone | Migration work and honest annotations |
| Apps are thin windows onto an engine at home, over a private network | One writer owns the record; no public route, no second database | No private network, no app |
| TestFlight is the only delivery that counts for iPhone, iPad and Watch apps | Every device updates over the air with the same signing as a release | Apple's processing time, upload caps, and a paid membership |
The One Condition: A Paid Membership
This quest assumes a paid Apple Developer Program membership — 99 US dollars a year, or the local price where you enrol. A free Apple ID can put an app on your own device from Xcode, with short-lived provisioning profiles and a restricted set of capabilities, and every serious feature in the later tracks (TestFlight, App Store Connect records, App Groups across extensions, push keys) sits behind the paid program. Dad set the rule for this quest in plain words:
"In my experience, developing on a free account is just digging holes. Build around TestFlight. If you'd dig holes to save 99 dollars, don't read this quest. Not because Apple is pretty — that much a year is worth it. You get so much for it." — Dad
Read it as an investment judgment, not loyalty. The membership is the cheapest tool in the whole toolchain for what it unlocks, and the hours a free-provisioning workaround eats are worth more than the fee.