본문 바로가기
카테고리 없음

[Trouble shooting] XCode Archive 후 빌드 도구에서 보이지 않는다.

by 어느덧중반 2021. 8. 22.
반응형

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 기능을 추가하자.

XCode > Runner > Signing & Capabilities 메뉴에서 +Capability를 클릭하자.
Push Notifications를 추가하자.

이렇게 메일로 보내온 잘못된 바이너리에 대한 조치를 한 후 다시 Archive > Upload 후에 다시 확인을 해 보도록 하자.

반응형

댓글