iOS 10 - Zmiany w pytaniu o uprawnienia aparatu, mikrofonu i biblioteki zdjęć powodujące awarię aplikacji

104

iOS 10 wymaga teraz pozwolenia użytkownika na dostęp do biblioteki multimediów, zdjęć, aparatu i innego podobnego sprzętu. Rozwiązaniem jest dodanie ich kluczy info.plistwraz z opisem dla użytkownika, w jaki sposób wykorzystujemy jego dane,

Udało mi się znaleźć tylko kilka kluczy

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Chcę wiedzieć, czy jest więcej kluczy również dla innego sprzętu, tak jak w iOS 10 przypadku braku info.plistodpowiedniego opisu kluczy, aplikacja ulegnie awarii, jeśli zostanie zbudowana przy użyciu XCode - 8 beta.

Syed Ali Salman
źródło
czy iOS 10 nie podlega NDA?
sage444,
Nie jestem tego pewien.
Syed Ali Salman

Odpowiedzi:

138

[ZAKTUALIZOWANA lista kluczy prywatności do iOS 13 - patrz poniżej]

Istnieje lista wszystkiego Cocoa Keys, co możesz określić w swoim Info.plistpliku:

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

(Xcode: Target -> Info -> Custom iOS Target Properties)

iOS już wcześniej wymagał uprawnień dostępu do mikrofonu, kamery i biblioteki multimediów (iOS 6, iOS 7), ale ponieważ aplikacja iOS 10 ulegnie awarii, jeśli nie podasz opisu, dlaczego pytasz o pozwolenie (nie może być pusty).

Klucze prywatności z przykładowym opisem: Ściągawka

Źródło

Alternatywnie możesz otworzyć Info.plistjako kod źródłowy: kod źródłowy

Źródło

I dodaj takie klucze prywatności:

<key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} always location use</string>

Lista wszystkich kluczy prywatności: [ZAKTUALIZOWANO do iOS 13]

NFCReaderUsageDescription
NSAppleMusicUsageDescription
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSFaceIDUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryAddUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription

Aktualizacja 2019:

W ciągu ostatnich miesięcy dwie z moich aplikacji zostały odrzucone podczas testu, ponieważ opis użytkowania aparatu nie określał, co mam robić ze zdjęciami.

Musiałem zmienić opis z ${PRODUCT_NAME} need access to the camera to take a photona, ${PRODUCT_NAME} need access to the camera to update your avatarmimo że kontekst aplikacji był oczywisty (użytkownik kliknął awatar).

Wygląda na to, że Apple zwraca teraz jeszcze większą uwagę na opisy użytkowania prywatności i powinniśmy szczegółowo wyjaśnić, dlaczego prosimy o pozwolenie.

KlimczakM
źródło
2
tak, ale zmiana polega na tym, że aplikacja będzie się teraz zawieszać, jeśli nie podałeś opisu, dlaczego prosimy o pozwolenie. Proszę, popraw mnie jeśli się mylę.
Syed Ali Salman
1
@Syed Ali Salman Masz rację - będzie się zawieszać od iOS10, teraz naprawdę masz pytanie. Zaktualizuje odpowiedź. :)
KlimczakM
1
Mam nadzieję, że Apple zadecyduje, czy jest to obowiązkowe, czy nie. Według dokumentacji Apple nie jest to:Explain why your app needs the information if it’s not obvious. You can add custom text to the system-provided permission request alert. Make the text specific and polite, so people don’t feel pressured. Keep the text short, and use sentence case. There’s no need to include your app name. The system already identifies your app as the one making the request.
sumofighter666
Wcześniej skomentowałem, że mogę pozostawić te wartości puste, aby wyświetlić komunikat wygenerowany przez system, i chociaż działa dobrze funkcjonalnie, wydaje się, że Apple automatycznie odrzuci twój plik binarny, jeśli dołączysz te klucze, ale nie ustawisz dla nich wartości .
Stonz2
13
Wydaje mi się, że Apple jest kompletnym nonsensem , pozwalając aplikacji po prostu zawiesić się, gdy nie ma opisu uprawnień ... Co za kiepskie wrażenia użytkownika! (Anonim) skargi płyną szybko w recenzji AppStore ... I oczywiście Simultor zachowuje się inaczej ...
Gabriel
65

Poniżej znajdują się kody wniosków o zezwolenie na iOS 10 dla info.plist.
Możesz zmodyfikować swoją niestandardową wiadomość.

    <key>NSCameraUsageDescription</key>
    <string>${PRODUCT_NAME} Camera Usage</string>

    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>${PRODUCT_NAME} BluetoothPeripheral</string>

    <key>NSCalendarsUsageDescription</key>
    <string>${PRODUCT_NAME} Calendar Usage</string>

    <key>NSContactsUsageDescription</key>
    <string>${PRODUCT_NAME} Contact fetch</string>

    <key>NSHealthShareUsageDescription</key>
    <string>${PRODUCT_NAME} Health Description</string>

    <key>NSHealthUpdateUsageDescription</key>
    <string>${PRODUCT_NAME} Health Updates</string>

    <key>NSHomeKitUsageDescription</key>
    <string>${PRODUCT_NAME} HomeKit Usage</string>

    <key>NSLocationAlwaysUsageDescription</key>
    <string>${PRODUCT_NAME} Use location always</string>

    <key>NSLocationUsageDescription</key>
    <string>${PRODUCT_NAME} Location Updates</string>

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>${PRODUCT_NAME} WhenInUse Location</string>

    <key>NSAppleMusicUsageDescription</key>
    <string>${PRODUCT_NAME} Music Usage</string>

    <key>NSMicrophoneUsageDescription</key>
    <string>${PRODUCT_NAME} Microphone Usage</string>

    <key>NSMotionUsageDescription</key>
    <string>${PRODUCT_NAME} Motion Usage</string>

    <key>kTCCServiceMediaLibrary</key>
    <string>${PRODUCT_NAME} MediaLibrary Usage</string>

    <key>NSPhotoLibraryUsageDescription</key>
    <string>${PRODUCT_NAME} PhotoLibrary Usage</string>

    <key>NSRemindersUsageDescription</key>
    <string>${PRODUCT_NAME} Reminder Usage</string>

    <key>NSSiriUsageDescription</key>
    <string>${PRODUCT_NAME} Siri Usage</string>

    <key>NSSpeechRecognitionUsageDescription</key>
    <string>${PRODUCT_NAME} Speech Recognition Usage</string>

    <key>NSVideoSubscriberAccountUsageDescription</key>
    <string>${PRODUCT_NAME} Video Subscribe Usage</string>

iOS 11 i plus, jeśli chcesz dodać zdjęcie / obraz do swojej biblioteki, musisz dodać ten klucz

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
Ilesh P
źródło
Dzięki, prawdziwa odpowiedź, po prostu Apple mówi: „Nie ma potrzeby podawania nazwy aplikacji. System już identyfikuje Twoją aplikację jako tę, która wysyła żądanie”.
Yucel Bayram
2
To jest odpowiedź, której szukałem
Dinesh Phalwadiya
19

Musisz dodać to uprawnienie w Info.plist na iOS 10.

Zdjęcie:

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

Mikrofon:

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

Aparat fotograficzny :

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use
Kirit Modi
źródło
Prawe klawisze są jak NSPhotoLibraryUsageDescription.
BangOperator