앱스토어 마이크 권한 누락으로 배포가 막혔던 이야기
목차
App Store 검증 오류(ITMS-90683)가 떴을 때, 배포를 며칠 앞두고 있었다. 마이크 권한 설명이 빠져 있다는 오류였는데, 단순히 Info.plist에 한 줄 추가하는 것만은 아니었다.
왜 ITMS-90683이 발생했나
Apple 앱스토어는 앱이 민감한 디바이스 기능(마이크, 카메라, 연락처 등)에 접근할 때마다 명확한 설명을 Info.plist에 등록하도록 강제한다. 우리는 음성 기능 구현을 서서히 추가했는데, 마이크 접근 로직은 있는데 NSMicrophoneUsageDescription이 누락되어 있었다. 검증 과정에서 정적 분석으로 마이크 권한 요청을 감지했지만 설명 문구가 없으니 reject한 것.
이 오류는 앱이 실제로 권한을 요청하려고 하는지, 아니면 실수로 권한 라이브러리를 포함한 건지 판단할 수 없을 때 발생한다. 사용자는 권한 요청 팝업을 보는데 뭐 때문에 권한이 필요한지 설명이 없으면 거부할 가능성이 높으니까, Apple 입장에선 이걸 강제하는 것.
Info.plist와 암호화 규제 키
변경된 파일은 두 개였다.
| 파일 | 변경 내용 | 이유 |
|---|---|---|
app/ios/Runner/Info.plist |
NSMicrophoneUsageDescription 추가, Encryption compliance key 추가 | 마이크 권한 설명 + US export 규정 |
app/pubspec.yaml |
빌드 버전 1.0.0+3으로 상향 | 배포 시 새 빌드 번호 필수 |
Info.plist의 NSMicrophoneUsageDescription은 사용자가 권한 동의 화면에서 보게 되는 문구를 정의한다:
<key>NSMicrophoneUsageDescription</key>
<string>마이크는 음성 기능을 위해 필요합니다</string>
그런데 동시에 "Encryption compliance key"도 추가됐다는 게 흥미로웠다. 이건 미국 수출규정(EAR, Export Administration Regulations)과 관련된 것인데, 앱이 암호화 기술을 포함하면 Apple에 신고해야 한다는 규정 때문이다. 음성 통신에 암호화가 들어가니 선언해야 했던 것.
<key>ITSAppUsesNonExemptEncryption</key>
<boolean>false</boolean>
배포 직전 compliance 체크리스트
이 작업을 통해 느낀 건, 배포 파이프라인 단계에서 compliance 이슈를 얼마나 일찍 잡느냐가 팀의 효율성을 크게 좌우한다는 것이다.
우리 팀에선 이후로:
- beta 배포 단계에서 한 번 App Store Connect 검증 시뮬레이션 실행
- 새로운 권한 접근(마이크, 카메라, 위치 등)을 추가하면 즉시 Info.plist 항목을 체크리스트화
- 암호화 관련 라이브러리 추가 시 규제 키 선언 여부를 코드리뷰에서 지적
빌드 버전(1.0.0+3)을 올린 것도 의도가 있는데, App Store는 같은 빌드로 여러 번 리젝트된 후 재제출하면 버전 번호가 증가해야 새로운 심사로 취급한다. 처음 제출할 때 빌드 3을 썼으니, 검증 재제출 때도 번호를 올려야 했던 것.
다음 번엔 더 빨리
이런 규제 관련 이슈는 기능 구현 끝나고 마지막에 "아, 설명 문구 빠졌네"라고 발견하면 배포 일정이 밀린다. 더 나은 방식은:
- 새 권한 접근을 추가하는 PR을 보낼 때, Info.plist 항목도 같은 PR에 포함
- 팀 wiki에 "iOS 권한 체크리스트" 문서 유지
- CI/CD에서 Info.plist 파일 변경 감지 시 자동으로 권한 키 이름 검증 (누락된 항목이 있으면 경고)
단순 fix처럼 보이지만, 사실 배포 프로세스가 복잡한 iOS 생태계에서 얼마나 신경 써야 하는지를 다시 일깨워줬다. 앞으로는 feature 기획 단계에서부터 App Store 규제를 먼저 확인하고 시작하려고 한다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.