"이유를 못 대는 규칙은 습관이야. 치를 대가를 모르는 습관은 빚이고."
규칙은 두 종류고, 늘 딱지를 붙여
이 퀘스트의 레슨은 가르치는 내용마다 둘 중 하나의 딱지를 붙여. apple-law 콜아웃은 이 플랫폼에 앱을 올리는 누구한테나 걸리는 규칙이야. 어기면 누구 앱이든 크래시가 나거나, 거절당하거나, 권한을 조용히 잃어. house-rule 콜아웃은 이 가족이 고른 선택이야. 왜 골랐는지, 뭘 대가로 치르는지를 같이 적어둬. 남의 집 규칙을 자기 상황에 베껴 가는 사람은 뭘 떠안게 되는지 알 권리가 있으니까.
이 구분은 둘이 서로 닮아 보일 때 제일 중요해. "App Sandbox 꺼"는 플랫폼 지시처럼 들리지만, 사실은 대가가 분명한 집 규칙이야. Mac App Store에 올릴 앱이라면 틀린 선택이고. "TestFlight 올릴 때마다 빌드 번호 새로"는 팀 약속처럼 들리지만, 실은 애플의 법이라서 App Store Connect가 강제로 지키게 해.
집 규칙과 그 대가
| 집 규칙 | 왜 | 치르는 대가 |
|---|---|---|
| Mac 앱은 Xcode 프로젝트 없이 SwiftPM이랑 스크립트로 빌드 | diff로 비교하고 리뷰할 수 있고, 터미널이든 에이전트든 매번 똑같이 도는 평문 | 번들, 서명, 설치 단계를 네가 직접 써야 해 |
| 모든 Mac 앱을 자체 서명 인증서 하나로 서명 | 다시 빌드해도, 다른 Mac에서도 designated requirement가 그대로라서 권한이 유지돼 | Gatekeeper가 안 믿어줘. 가족 Mac에서만 돌고 남의 Mac에선 안 돌아 |
| Mac에선 공증 안 함, 하드닝 런타임은 기본 끔, App Sandbox 안 씀 | 공개 배포를 안 하고, 디스크 전체랑 네트워크 공유 경로가 필요해 | 공개 배포는 못 해. 안전은 그 기계들이 전부 네 거라는 사실에 기대 |
iOS 프로젝트의 원본은 전부 project.yml(XcodeGen) | 읽을 수 있고 다시 생성되는 프로젝트고, 팀 정보도 소스에 들어 있어 | 테스트 결과 믿기 전에 다시 생성해야 해 |
| Swift 6 언어 모드 | 데이터 경합이 폰에서 크래시로 터지는 대신 컴파일 에러가 돼 | 마이그레이션 작업이랑 솔직한 어노테이션 |
| 앱은 사설망 너머 집에 있는 엔진을 보는 얇은 창 | 기록을 쓰는 곳은 하나뿐이고, 공개 경로도 두 번째 DB도 없어 | 사설망 없으면 앱도 없어 |
| iPhone, iPad, 워치 앱의 배달로 인정하는 건 TestFlight 하나 | 모든 기기가 출시판과 같은 서명으로 무선 업데이트돼 | 애플 처리 시간, 업로드 상한, 유료 멤버십 |
조건은 하나, 유료 멤버십
이 퀘스트는 유료 Apple Developer Program 멤버십을 가정해. 1년에 99달러이고, 가입하는 나라에 따라 현지 가격이 붙어. 무료 Apple ID로도 Xcode에서 네 기기 하나에 앱을 올릴 순 있어. 대신 프로비저닝 프로파일이 금방 만료되고, 쓸 수 있는 기능도 줄어. 뒤쪽 트랙의 굵직한 내용(TestFlight, App Store Connect 레코드, 확장끼리 나눠 쓰는 App Group, 푸시 키)은 전부 유료 프로그램에 가입해야 쓸 수 있어. 아빠가 이 퀘스트의 규칙을 이렇게 못 박았어.
"아빠 경험으로는 무료 개발은 삽질이야. testflight 을 기준으로 해. $99 아끼려고 삽질할 거면 보지 말라고 못 박아. 애플이 예뻐서가 아니라 1년에 그 정도 투자는 할만해. 얻는 게 워낙 많아." — 아빠
충성이 아니라 투자 판단으로 읽어. 멤버십이 열어주는 걸 따지면 툴체인 전체에서 제일 싼 도구야. 무료 프로비저닝으로 돌아가느라 날리는 시간이 회비보다 훨씬 비싸.