본문 바로가기
C.W.K.
Stream
Lesson 05 of 06 · published

애플의 법, 우리 집 규칙

~15 min · platform-map, house-rules, developer-program, testflight

Level 0번들 열어본 사람
0 XP0/81 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete
"이유를 못 대는 규칙은 습관이야. 치를 대가를 모르는 습관은 빚이고."

규칙은 두 종류고, 늘 딱지를 붙여

이 퀘스트의 레슨은 가르치는 내용마다 둘 중 하나의 딱지를 붙여. 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년에 그 정도 투자는 할만해. 얻는 게 워낙 많아." — 아빠

충성이 아니라 투자 판단으로 읽어. 멤버십이 열어주는 걸 따지면 툴체인 전체에서 제일 싼 도구야. 무료 프로비저닝으로 돌아가느라 날리는 시간이 회비보다 훨씬 비싸.

Code

집 규칙을 베끼기 전에 이렇게 읽어·text
HOUSE RULE   Mac apps are signed with one self-signed identity
WHY          permission grants follow a stable designated requirement
COST         Gatekeeper-untrusted; runs only where you installed the certificate
WRONG FOR    anything you plan to hand to people outside your own machines
TAUGHT IN    bundle-signing.self-signed-on-purpose

APPLE LAW    CFBundleVersion must increase for every TestFlight upload
ENFORCED BY  App Store Connect, at upload time
NO CHOICE    a reused build number is refused, whatever your team decided

External links

Exercise

위 코드 블록의 카드 형식으로 Spark의 첫 집 규칙 두 개를 써봐. 하나는 Mac에서 쓸 빌드 방식, 하나는 아이폰 앱을 배달할 방법이야. 둘 다 WHY, COST, WRONG FOR를 솔직하게 채워. 그러고 나서 네가 이미 작업 중인 프로젝트에서 법처럼 대해온 규칙 하나를 찾아서, 실제로는 어느 딱지가 맞는지 정해봐.
Hint
apple-law인지 가리는 법은 간단해. 네가 어겼을 때, 팀이 뭘 합의했든 상관없이 애플의 도구나 서버나 런타임이 막아서? 반대하는 게 너희 팀뿐이라면 그건 집 규칙이야. 지켜도 되는데, 대가는 따져봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.