program story

사용 설명 누락으로 인해 앱이 거부 됨 (Xcode8)

inputbox 2020. 9. 5. 09:53
반응형

사용 설명 누락으로 인해 앱이 거부 됨 (Xcode8)


그래서 오늘이 메일을 받았는데, 사용 설명이 누락되어 내 앱의 최신 빌드가 iTunes Connect에서 거부되었다는 내용입니다. 정확히는:

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값과 함께 NSContactsUsageDescription 키가 포함되어야합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값과 함께 NSCalendarsUsageDescription 키가 포함되어야합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값과 함께 NSPhotoLibraryUsageDescription 키가 포함되어야합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값과 함께 NSBluetoothPeripheralUsageDescription 키가 포함되어야합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값이있는 NSMicrophoneUsageDescription 키가 포함되어야합니다.

이 앱은 사용 설명없이 개인 정보에 민감한 데이터에 액세스하려고합니다. 앱의 Info.plist에는 앱이이 데이터를 사용하는 방법을 사용자에게 설명하는 문자열 값과 함께 NSMotionUsageDescription 키가 포함되어야합니다.

이러한 문제가 수정되면 수정 된 바이너리를 다시 제공 할 수 있습니다.

나는 이것들이 iOS 10에서 필수가되었다는 것을 알았지 만, 유일한 문제는 내 앱이 이들 중 하나에 액세스 할 수있는 권한을 요청하지 않는다는 것입니다. 실제로 권한을 요청한 경우에만 설명이 필수라고 생각 했습니까?

내 종속성 중 하나 (Cocoapods)에 이러한 권한을 요청하는 코드가 포함될 수 있기 때문입니까? 또는 사용자 캘린더, 연락처 등을 보도록 요청하지 않더라도 이러한 설명은 필수입니까?


설명은 귀하 또는 귀하가 액세스 시도에 대해 링크하는 모든 프레임 워크에 대해 필수입니다. 사용 설명이 제공되지 않은 경우 콘텐츠에 액세스하려고 시도 할 때 오류가 생성되므로 이러한 오류가 발생하면 앱에서 요청해야합니다. 앱 또는 프레임 워크에 이러한 항목이 필요한 이유를 파악하고 앱의 info.plist에 적절한 사용 설명을 추가해야합니다.

이상적으로는 액세스가 필요하지 않은 경우 요청하지 않는 방법이 있는지 확인하십시오 (또는 불필요하게 수행하는 프레임 워크 사용).


iOS 10info.plist 에 권한을 추가해야합니다. 블로그를 검토하면됩니다 .-settings-in-ios-10 모든 아이디어를 얻을 수 있습니다.

오류 로그의 info.plist 파일 기반에 권한추가하십시오 .

참고 : 권한에 대한 적절한 이유를 문자열 값에 쓰지 않으면 애플이 앱을 다시 거부합니다.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>$(PRODUCT_NAME) camera use.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>$(PRODUCT_NAME) contacts use.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) photos and video use.</string>

NSBluetoothPeripheralUsageDescription

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>$(PRODUCT_NAME) bluetooth use.</string>

NSMicrophoneUsageDescription

<key>NSMicrophoneUsageDescription</key>
    <string>$(PRODUCT_NAME) microphone use.</string>

NSMotionUsageDescription

<key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use.</string>

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>$(PRODUCT_NAME) reminders use.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>$(PRODUCT_NAME) siri use.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>$(PRODUCT_NAME) video use.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>$(PRODUCT_NAME) speech recognition use.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>$(PRODUCT_NAME) user your calendar.</string>

enter image description here


다음과 같이 info.plist에 추가 할 수 있습니다.

<key>NSCalendarsUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Explain the reasons for accessing...</string>

기타

희망은 누군가를 도울 것입니다 ...


I had the same issue, and it appears that if any framework you link against has code that asks this permission (even if your app never requests them), the usage descriptions are necessary. But according to my test, if you don't request them, they won't appear in the permissions list of your app.


Calendar : Key : Privacy - Calendars Usage Description
Value : $(PRODUCT_NAME) calendar events

Reminder : Key : Privacy - Reminders Usage Description
Value : $(PRODUCT_NAME) reminder use

Contact : Key : Privacy - Contacts Usage Description
Value : $(PRODUCT_NAME) contact use

Photo : Key : Privacy - Photo Library Usage Description
Value : $(PRODUCT_NAME) photo use

Bluetooth Sharing : Key : Privacy - Bluetooth Peripheral Usage Description
Value : $(PRODUCT_NAME) Bluetooth Peripheral use

Microphone : Key : Privacy - Microphone Usage Description
Value : $(PRODUCT_NAME) microphone use

Camera : Key : Privacy - Camera Usage Description
Value : $(PRODUCT_NAME) camera use

Location : Key : Privacy - Location Always Usage Description
Value : $(PRODUCT_NAME) location use

Key : Privacy - Location When In Use Usage Description
Value : $(PRODUCT_NAME) location use

Heath : Key : Privacy - Health Share Usage Description
Value : $(PRODUCT_NAME) heath share use

Key : Privacy - Health Update Usage Description
Value : $(PRODUCT_NAME) heath update use

HomeKit : Key : Privacy - HomeKit Usage Description
Value : $(PRODUCT_NAME) home kit use

Media Library : Key : Privacy - Media Library Usage Description
Value : $(PRODUCT_NAME) media library use

Motion : Key : Privacy - Motion Usage Description
Value : $(PRODUCT_NAME) motion use

Speech Recognition : Key : Privacy - Speech Recognition Usage Description
Value : $(PRODUCT_NAME) speech use

SiriKit : Key : Privacy - Siri Usage Description
Value : $(PRODUCT_NAME) siri use

TV Provider : Key : Privacy - TV Provider Usage Description
Value : $(PRODUCT_NAME) tvProvider use


For anyone wondering why all of a sudden your app now has all these permission settings in the first place it could be because of CocoaPods or Carthage - they put in hooks to all of these permissions. I just upgraded my app to use cordova-plugin-firebasex which has an extensive Cocoapods (and dependencies) installation. You can turn these permissions off BEFORE you install cocoapods into your project by putting a PermissionsConfiguration.xcconfig in the root of your project - you can read more about this here: https://cocoapods.org/pods/Permission#installation

This all surprised me when the new version of my app was rejected with 7 permissions key/string missing from Info.plist file. I then had to dig into my project to find what was causing this since my app doesn't need or use any of these permissions (never has).

It may exist but at the moment I can't find a way to remove permissions after pods integration...going to have to dig around on how to do this without starting my project over.

참고URL : https://stackoverflow.com/questions/39415895/app-rejected-due-to-missing-usage-descriptions-xcode8

반응형