런북 — App Store App Privacy (`asc-app-privacy`)
App Store Connect 의 App Privacy(수집하는 데이터 종류·용도·사용자 연결·추적 여부)를 입력하거나 고칠 때. 공개 API 키로는 할 수 없다.
등급 미검증 — 가드 없는 실행에서 원본 앱 답으로 한 번 채워졌다. 가드를 갖춘 첫 실행은 드라이런 뒤에 사람이 지켜보며 한다. 공통 절차는
cc-dev:grok-bot-handoff, 선언 원칙은 SKILL.md §5.
언제#
App Store Connect 의 App Privacy(수집하는 데이터 종류·용도·사용자 연결·추적 여부)를 입력하거나 고칠 때. 공개 API 키로는 할 수 없다.
전제#
-
답표 — Claude 가 대상 바이너리에서 만든 표(SKILL.md
§5). 데이터 종류마다 수집 여부·용도·사용자와의 연결·추적을 적고, 소유 조직이 확정했다(값 시트
store.appPrivacy가confirmed) -
개인정보처리방침 URL 은 API(
appInfoLocalizations)로 먼저 넣었고, 그 방침이 답표의 수집 항목을 다룬다 — 이 런북에서 넣지 않는다 -
칸 기준 점검(value-sheet.md
§3)에 넣을 전제 칸:
store.appPrivacy store.privacyPolicyUrl, 봇 절차면botAccount apple.teamName도
먼저 — CLI 경로 [문서]#
fastlane upload_app_privacy_details_to_app_store 는 Apple ID 로그인(2단계 인증)으로 답 JSON 을 올린다. Claude 가 확정 답표를 JSON 으로 옮기고,
사람이 자기 터미널에서 실행한다.
# 게시는 미루고(skip_publish) 화면에서 대조한 뒤 사람이 게시한다
fastlane run upload_app_privacy_details_to_app_store \
username:"<apple-id>" app_identifier:"<ios.bundleIds.prod>" \
json_path:"<답 JSON 경로>" skip_publish:true
-
JSON 의 형식은 이 액션이 대화형 질문으로 만드는 파일과 같다. 형식을 확신할 수 없으면 한 번 대화형으로 만들어(
skip_upload: true,output_json_path) 대조한다. - 답 JSON 은 선언 답일 뿐 비밀값이 아니지만, 앱 저장소에 커밋할지는 저장소 공개 범위를 보고 정한다.
- 올린 뒤 사람이 App Privacy 화면에서 답표와 대조하고 게시(Publish)한다.
-
이 액션은
username·team_id만 받고 App Store Connect API 키 옵션이 없다. 사람 없이 돌릴 때는 asc-create-app 「세션으로 무인 실행」의 세션을 같이 쓴다(미검증). 게시는 그때도 사람이 화면에서 한다. - CLI 를 쓸 수 없을 때만 아래 봇 절차로 간다.
봇 절차 — CLI 를 쓸 수 없을 때#
- 봇 계정 역할: App Manager — Apple 역할 표의 "Respond to app privacy questions" 가 이 역할부터다. 이 역할은 심사 제출·가격 변경도 할 수 있으므로 그 동작이 Ask first 에 있는지 확인하고, 작업이 끝나면 역할을 회수한다(SKILL.md §3)
입력값#
답표 — 데이터 종류 → {수집 여부, 용도, 사용자 연결, 추적}. 이미 게시된 답을 고칠 때는 브리프의 고쳐 넣기 표(지금 답 → 바꿀 답)를 쓴다.
순서 — 브리프 §3 에 옮긴다#
- App Privacy 화면을 연다. 이미 답이 있으면 고쳐 넣기 표의 "지금 답" 과 같을 때만 바꾼다
- 데이터 수집 설문을 답표대로 입력한다. 데이터 종류마다 용도·연결·추적을 답한다
- 답표에 없는 데이터 종류나 문항이 나오면 멈춘다
- Publish: Ask first — 사람이 요약 화면을 보고 Allow once
멈추고 사람을 부를 때 — 브리프 §4 에 더한다#
- 답표에 없는 데이터 종류·문항이 나온다
- 이미 게시된 답이 있는데 고쳐 넣기 표에 없거나 "지금 답" 과 다르다
- 개인정보처리방침 URL 이 비어 있다 — 봇이 넣지 않는다
기대 결과#
데이터 종류마다 한 행 — type declaration, store appstore, source brief.
검증#
- 사람: App Privacy 요약 화면을 답표와 대조한다. 이 답은 공개 API 로 읽을 수 없다.
- Claude: 답표, 앱과 SDK 의
PrivacyInfo.xcprivacy, 개인정보처리방침이 서로 맞는지 본다.