Więc dzisiaj dostałem tę wiadomość, mówiącą, że najnowsza wersja mojej aplikacji została odrzucona przez iTunes Connect z powodu brakujących opisów użytkowania. Byc dokładnym:
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSContactsUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja używa tych danych.
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSCalendarsUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja wykorzystuje te dane.
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSPhotoLibraryUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja wykorzystuje te dane.
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSBluetoothPeripheralUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja wykorzystuje te dane.
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSMicrophoneUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja używa tych danych.
Ta aplikacja próbuje uzyskać dostęp do danych wrażliwych na prywatność bez opisu użytkowania. Aplikacja Info.plist musi zawierać klucz NSMotionUsageDescription z wartością ciągu wyjaśniającą użytkownikowi, w jaki sposób aplikacja wykorzystuje te dane.
Po rozwiązaniu tych problemów możesz ponownie dostarczyć poprawiony plik binarny.
Doszedłem do wniosku, że stały się one obowiązkowe w iOS 10, ale jedynym problemem jest to, że moja aplikacja nie prosi o pozwolenie na dostęp do któregokolwiek z nich. Sądziłem, że opis jest obowiązkowy tylko wtedy, gdy faktycznie poprosiłeś o pozwolenie?
Czy to dlatego, że jedna z moich zależności (Cocoapods) może zawierać kod żądający tych uprawnień? A może te opisy są obowiązkowe, nawet jeśli nigdy nie chcę wyświetlać kalendarza użytkowników, kontaktów itp.?
źródło
PodFile
i listę bibliotek, z których korzystasz (jeśli korzystasz z niektórych zewnętrznych cocoapods)?Odpowiedzi:
Opisy są obowiązkowe w przypadku wszelkich treści, do których odsyłasz, lub ram, do których odsyłasz, przed próbą uzyskania dostępu. Błędy są generowane przy próbie uzyskania dostępu do treści, jeśli nie podano opisu użytkowania, więc jeśli otrzymujesz te błędy, aplikacja musi o nie prosić. Powinieneś dowiedzieć się, dlaczego Twoja aplikacja lub jej struktury wymagają tego i dodać odpowiednie opisy użytkowania do listy info.plist aplikacji.
Lub lepiej, jeśli nie potrzebujesz dostępu, sprawdź, czy istnieje sposób, aby go nie żądać (lub użyj struktur, które niepotrzebnie go wymagają).
źródło
iOS 10 musi dodać uprawnienia w info.plist, po prostu przejrzyj ten BLOG: - ustawienia-w-ios-10 masz cały pomysł.
Dodaj uprawnienia w pliku info.plist na podstawie dziennika błędów .
NSCameraUsageDescription
<key>NSCameraUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSContactsUsageDescription
<key>NSContactsUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSPhotoLibraryUsageDescription
<key>NSPhotoLibraryUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSBluetoothPeripheralUsageDescription
<key>NSBluetoothPeripheralUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSMicrophoneUsageDescription
<key>NSMicrophoneUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSMotionUsageDescription
<key>NSMotionUsageDescription</key> <string>$(PRODUCT_NAME) motion use.</string>
NSLocationAlwaysUsageDescription
<key>NSLocationAlwaysUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSLocationUsageDescription
<key>NSLocationUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSLocationWhenInUseUsageDescription
<key>NSLocationWhenInUseUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSRemindersUsageDescription
<key>NSRemindersUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSSiriUsageDescription
<key>NSSiriUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSVideoSubscriberAccountUsageDescription
<key>NSVideoSubscriberAccountUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSSpeechRecognitionUsageDescription
<key>NSSpeechRecognitionUsageDescription</key> <string>You have to describe the real usage for a human.</string>
NSCalendarsUsageDescription
<key>NSCalendarsUsageDescription</key> <string>You have to describe the real usage for a human.</string>
źródło
$(PRODUCT_NAME)
. Możesz zobaczyć domyślną właściwość, taką jakBundle name
w pliku plist.Możesz dodać do swojej info.plist jak:
<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>
itp.
Nadzieja komuś pomoże ...
źródło
Miałem ten sam problem i wygląda na to, że jeśli jakikolwiek framework, z którym łączysz się, zawiera kod, który prosi o to pozwolenie (nawet jeśli Twoja aplikacja nigdy ich nie żąda), opisy użytkowania są konieczne. Ale zgodnie z moim testem, jeśli ich nie poprosisz, nie pojawią się na liście uprawnień Twojej aplikacji.
źródło
Kalendarz: Klucz: Prywatność - Kalendarze Opis zastosowania
Wartość: wydarzenia kalendarza $ (PRODUCT_NAME)
Przypomnienie: Klucz: Prywatność - Przypomnienia Opis użycia
Wartość: użycie przypomnienia $ (PRODUCT_NAME)
Kontakt : Klucz: Prywatność - Opis wykorzystania kontaktów
Wartość: wykorzystanie kontaktu $ (PRODUCT_NAME)
Zdjęcie: Klucz: Prywatność - Opis wykorzystania biblioteki zdjęć
Wartość: Wykorzystanie zdjęć $ (PRODUCT_NAME)
Udostępnianie Bluetooth: Klucz: Prywatność - Opis wykorzystania urządzeń peryferyjnych Bluetooth
Wartość: $ (PRODUCT_NAME) Używanie urządzeń peryferyjnych Bluetooth
Mikrofon: Klucz: Prywatność - Opis użycia mikrofonu
Wartość: użycie mikrofonu $ (PRODUCT_NAME)
Kamera: Klucz: Prywatność - Opis użycia kamery
Wartość: Użytkowanie kamery $ (PRODUCT_NAME)
Lokalizacja: Klucz: Prywatność - Lokalizacja Zawsze Opis użycia
Wartość: $ (PRODUCT_NAME) użycie lokalizacji
Klucz: Prywatność - Lokalizacja podczas użytkowania Opis użycia
Wartość: $ (PRODUCT_NAME) użycie lokalizacji
Zdrowie : Klucz: Prywatność - Zdrowie Użycie udziału Opis
Wartość: $ (PRODUCT_NAME) wykorzystanie udziału zdrowotnego
Klucz: Prywatność - Aktualizacja stanu zdrowia Opis użycia
Wartość: użycie aktualizacji zdrowia $ (PRODUCT_NAME)
HomeKit: Klucz: Prywatność - Opis wykorzystania HomeKit
Wartość: Użytkowanie zestawu domowego $ (PRODUCT_NAME)
Biblioteka multimediów: Klucz: Prywatność - Opis wykorzystania biblioteki multimediów
Wartość: użycie biblioteki multimediów $ (PRODUCT_NAME)
Ruch: Klucz: Prywatność - Opis użycia ruchu
Wartość: Wykorzystanie ruchu $ (PRODUCT_NAME)
Rozpoznawanie mowy: Klucz: Prywatność - Rozpoznawanie mowy Opis zastosowania
Wartość: $ (PRODUCT_NAME) użycie mowy
SiriKit: Klucz: Prywatność - Opis wykorzystania Siri
Wartość: użycie Siri $ (PRODUCT_NAME)
Dostawca telewizji: Klucz: Prywatność - Opis wykorzystania dostawcy telewizji
Wartość: $ (PRODUCT_NAME) Wykorzystanie przez tvProvider
źródło
Każdy, kto zastanawia się, dlaczego nagle Twoja aplikacja ma teraz wszystkie te ustawienia uprawnień, może to być spowodowane CocoaPods lub Carthage - umieszczają haczyki na wszystkich tych uprawnieniach. Właśnie zaktualizowałem moją aplikację do korzystania z cordova-plugin-firebasex, który ma rozbudowaną instalację Cocoapods (i zależności). Możesz wyłączyć te uprawnienia PRZED zainstalowaniem cocoapods w swoim projekcie, umieszczając PermissionsConfiguration.xcconfig w katalogu głównym swojego projektu - możesz przeczytać więcej na ten temat tutaj: https://cocoapods.org/pods/Permission#installation
To wszystko mnie zaskoczyło, gdy nowa wersja mojej aplikacji została odrzucona z brakiem 7 kluczy / ciągu uprawnień w pliku Info.plist. Następnie musiałem zagłębić się w mój projekt, aby znaleźć przyczynę tego problemu, ponieważ moja aplikacja nie potrzebuje ani nie używa żadnego z tych uprawnień (nigdy nie ma).
Może istnieć, ale w tej chwili nie mogę znaleźć sposobu na usunięcie uprawnień po integracji z podami ... będę musiał przekopać się, jak to zrobić bez rozpoczynania projektu od nowa.
źródło