728x90
App Store 제출/리뷰에서 가장 자주 막히는 오류는 “Missing Purpose String in Info.plist” (ITMS-90683)다. 카메라, 위치, 사진, 마이크 등 개인정보에 접근하는데 Info.plist에 설명이 없으면 바로 리젝된다. 이 글은 누락이 발생하는 이유, 에러 메시지 패턴, 수정 방법, 재발 방지 체크리스트를 정리했다.
목차
1. 왜 발생하나? (ITMS-90683 패턴)
iOS 10 이후 개인정보에 접근하려면 Info.plist에 사용 목적 문자열(Purpose String)을 넣어야 한다. 라이브러리(카메라/푸시/위치/사진/블루투스 등)를 추가했는데 대응 키를 넣지 않으면 App Store Connect 검사나 심사에서 다음과 같이 실패한다:
ITMS-90683: Missing Purpose String in Info.plist
NSCameraUsageDescription
NSLocationWhenInUseUsageDescription
NSPhotoLibraryUsageDescription
...
핵심: 앱 코드에서 해당 권한 API를 “사용하지 않아도”, 포함된 SDK가 접근할 수 있으면 목적 문자열이 필요하다.
2. 필요한 Info.plist 키 목록
프로젝트에 따라 달라지지만, 출시에서 자주 요구되는 키들은 아래와 같다. (설명은 실제 서비스 문구로 교체)
<key>NSCameraUsageDescription</key>
<string>[카메라 사용 목적 설명]</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>[앨범/사진 접근 목적 설명]</string>
<key>NSMicrophoneUsageDescription</key>
<string>[마이크 사용 목적 설명]</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>[앱 사용 중 위치 접근 목적 설명]</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>[블루투스 사용 목적 설명]</string>
<key>NSUserTrackingUsageDescription</key>
<string>[ATT 트래킹 목적 설명]</string>
TIP: Push 알림은
NSUserNotificationUsageDescription 대신 iOS 12+에서는 별도 문자열이 필요하지 않지만, 알림을 통한 개인정보 활용 내용은 심사 노트에 적어두면 좋다.3. 수정 방법 (Xcode / Capacitor / Flutter 공통)
3.1 Xcode에서 직접 수정
ios/App/App/Info.plist
Xcode에서 Info.plist를 열어 필요한 키/문자열을 추가한다. 리뷰에 맞게 실제 사용 목적을 한국어/영어로 명확히 작성.
3.2 Capacitor/Hybrid (config 유지)
<platform name="ios">
<edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
<string>[카메라 사용 목적 설명]</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryUsageDescription">
<string>[앨범 사용 목적 설명]</string>
</edit-config>
</platform>
Capacitor/Cordova는 config.xml이나 Capacitor 5부터는 ios/App/App/Info.plist를 직접 커밋해두고, npx cap sync ios 후 Xcode에서 확인한다.
3.3 빌드 후 검증
grep -A1 NSCameraUsageDescription ios/App/App/Info.plist
grep -A1 NSPhotoLibraryUsageDescription ios/App/App/Info.plist
CI나 로컬에서 grep으로 키가 포함됐는지 확인하고, TestFlight 빌드로 실제 권한 팝업 문구를 검증한다.
4. 리뷰 제출 전 점검 체크리스트
- 앱에서 사용하는 모든 권한에 대한 목적 문자열이 Info.plist에 존재하는지 확인
- 문구는 실제 사용 시나리오를 명확히 설명(예: “프로필 사진 업로드를 위해 카메라가 필요합니다”)
- 다국어 지원 시, 심사에 보이는 기본 언어(주로 영어) 문구도 자연스럽게 작성
npx cap sync ios후 Xcode에서 최종 Info.plist를 다시 한 번 확인- TestFlight로 실제 권한 팝업을 테스트하여 오타/누락 확인
✅ 핵심 요약:
- ITMS-90683은 Info.plist에 권한 목적 문자열이 없어서 발생한다.
- 카메라/사진/마이크/위치/블루투스/ATT 등 사용 가능성이 있는 SDK를 쓴다면 모두 키를 추가한다.
- Capacitor/하이브리드는 Info.plist를 리포에 포함하고,
npx cap sync ios후 Xcode에서 최종 확인. - TestFlight에서 실제 팝업 문구를 검증해 리젝을 미리 방지한다.

카카오톡 오픈채팅 링크
728x90