XCode에서 Product > Archive 로 업로드까지 완료했는데 App Store Connect에서 업로드된 버전이 보이지 않는다면 이 글을 참고하도록 하자.
올해 초 같은 경험을 하고 그 때 정리를 해 두지 않아 이번에 또 같은 경험을 하고도 한참을 삽질하게 되었다.
근 2~3일을 삽질하고 이제야 깨닫게 되어 이 번엔 꼭 기록으로 남겨 두고자 한다. ^^
이유는 아주아주 간단했다. 업로드가 정상적으로 되지 않은 이유는 내 이메일로 설명과 함께 보내주었다.
그러므로 메일을 꼭 확인해야 한다. 이유는 별거 아니었지만 해결을 해두지 않으면 절대 업로드가 불가능할지도 모른다.
이번에 업로드가 되지 않은 사유에 대해 알아보자.
메일 확인
메일 제목 : App Store Connect: Your app "XXXXXX" (Apple ID: 1234567**** Version: 1.0.1 Build: 1) has one or more issues
아래의 메일 내용을 보면 사유는 크게 2가지로 나뉘었다.
- ITMS-90683: Missing Purpose String in Info.plist
- ITMS-90078: Missing Push Notification Entitlement
ITMS-90683: Missing Purpose String in Info.plist
앱을 배포하게 되면 사용자들이 앱을 다운받아 사용하게 된다. 이 때 애플이 중요하게 강조하는 것 중 하나는 바로 사용자 개인정보 보호이다. 어떠한 이유에서도 사용자의 개인정보를 개발자가 사용해선 안되며, 개인정보를 활용하는 기능을 사용하는 경우 반드시 해당 사유에 대해 명시를 해 줘야 한다. 이와 비슷한 경우로, 앱 내에서 카메라, 위치 등 특정 권한을 사용하거나 데이터를 활용하고자 하는 경우 사용자에게 사전에 권한에 대한 승인을 받아야 하며 이 때 사용자에게 알릴 문구를 명시해줘야 한다. 해당 정보는 프로젝트 내 info.plist 파일에 명시하게 되어 있다.
따라서, 메일의 내용을 잘 보면 Missing Purpose String in Info.plist 제목으로 된 문단이 여러개 이더라도 내용을 잘 읽어 보면 각자 사용 목적에 대한 명시가 빠져있다는 내용은 같으나 어떤 기능을 활용할지에 대해서 각자 명시 해줘야 한다.
예를 들어 내 메일에는 총 7개의 Missing Purpose String in Info.plist 문단이 있었고 아래의 기능 들이었다.
- NSContactsUsageDescription
- NSCalendarsUsageDescription
- NSCameraUsageDescription
- NSAppleMusicUsageDescription
- NSMotionUsageDescription
- NSSpeechRecognitionUsageDescription
- NSLocationWhenInUseUsageDescription
이제 위 기능들에 대해 사용목적을 명시해야겠다는건 인지했다. 여기서 이런 궁금증이 있을 수도 있겠다.
'내 앱에선 저런 기능을 쓰지 않는데..?'
사실 나도 정확한 원인은 모르겠으나, 전혀 사용하지 않을 것 같은 기능임에도 왜 저 기능에 대한 목적을 명시해야 한다는지 100% 이해가 가진 않는다. 하지만, 해결방법이 어렵지 않으니 귀찮더라도 명시를 해주면 쿨하게 해결이 되니, 꼭 그렇게 하도록 하자.
그럼 해결을 어떻게 해야 할까? 방법은 간단하다.
바로, 프로젝트 내 Info.plist 파일을 열어 위 목적에 대한 purpose string을 입력해 주면 된다.
아래의 내 입력값을 참고하여 각자 입맛에 맞게 작성해주도록 하자.
주의할 점은, 개발자가 업로드하는 앱 마다 각각 다른 기능들에 대한 목적 명시를 하라는 메일이 올 것이기에
'나는 저기 명시되어 있지 않은 기능인데,,, 어떻게 작성해야 하지?' 라고 어려워 하지 말도록 하자.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
중략
...
<key>NSAppleMusicUsageDescription</key>
<string>To use record customer voice and evaluate level</string>
<key>NSCalendarsUsageDescription</key>
<string>To show course date and time</string>
<key>NSContactsUsageDescription</key>
<string>To use contact customer</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>To use customer location</string>
<key>NSCameraUsageDescription</key>
<string>To use camera</string>
<key>NSMotionUsageDescription</key>
<string>To use customer motion</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>To use customer speech recognotion</string>
</dict>
</plist>
위 처럼 사용목적에 대한 명시가 되어 있다면 다음 번 Archive > Upload 이후에 정상적으로 App store connect의 빌드내역에 보이게 될 것이다.
ITMS-90078: Missing Push Notification Entitlement
푸쉬 기능에 대한 사유이다. 앱에서 푸쉬 기능을 사용하는데 푸쉬 기능 설정이 제대로 되어 있지 않다는 사유이다.
사실 내 앱에 푸쉬 기능을 넣지 않았고 쓰이지 않을 기능이긴 하다. 그런데 일단 리젝 사유에 있기 때문에 해결은 해 줘야 한다.
우선 해결하는 방법은 아주 간단하다. 본인의 앱이 푸쉬 기능을 사용하지 않는데 위 메일을 같은 이유로 받게 된다면 아래 방법대로 조치하고 해결하기 바란다.
XCode > Runner > Signing & Capabilities > 여기서 +Capability 를 눌러 Push Notification 기능을 추가하자.
이렇게 메일로 보내온 잘못된 바이너리에 대한 조치를 한 후 다시 Archive > Upload 후에 다시 확인을 해 보도록 하자.
댓글