Ce face ca NSCalendarsUsageDescription să fie necesar? (Programare, App Store Connect, Xcode8)

Martin Polak a intrebat.
a intrebat.

Atunci când încarc pe iTunes Connect, aplicația mea primește eroarea că NSCalendarsUsageDescription confidențialitatea nu este furnizată. Sunt conștient de faptul că aceste informații sunt acum obligatorii, însă nu știu ce și unde aplicația mea folosește ceva care ar necesita această descriere a utilizării confidențialității.

Ce face/folosește aplicația mea încât să necesite o NSCalendarsUsageDescription?

Dear developer,

We have discovered one or more issues with your recent delivery for "MyApp". To process your delivery, the following issues must be corrected:

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

Editare: Nu este un duplicat din cauza faptului că soluția nu a funcționat, deoarece am comentat deja primul răspuns ȘI din cauza faptului că posibilul duplicat nu răspunde de fapt la întrebarea ce (în general) face ca această descriere a utilizării să fie necesară.

Comentarii

5 răspunsuri
Stanislav Pankevich

Ați putea încerca să utilizați nm instrument pentru a căuta simboluri specifice EventKit în binarele cadrelor dvs., ceva de genul:

nm YourFramework.framework/YourFramework | grep EK # EK is a prefix for EventKit classes

Sau one-liner (căutați fișiere fără extensie, ignorați, de asemenea, CodeResources pentru a reduce ieșirea irelevantă):

find YourApp/Frameworks ! -name '*CodeResources*' -type f ! -name "*.*" -exec nm -o -- {} + | grep EK

Dacă există așa ceva, veți vedea ceva de genul:

0000000000003fdb t -[ClusterPrePermissions EKEquivalentEventType:]
                 U _OBJC_CLASS_$_EKEventStore

Pentru a afla mai multe despre nm rulați man nm în terminalul dumneavoastră.

Site-ul nm este util atunci când doriți să vedeți ce simboluri conține un anumit binar. Există o mulțime de opțiuni pe care le puteți da la nm dar, de cele mai multe ori, este suficient să îl rulați fără argumente pentru a răspunde la întrebări de genul: este simbolul X prezent într-un anumit binar?

Comentarii

  • Ce este acest instrument nm? Pot obține un link către documentația sa? Sau, cel puțin, unde îl folosim? –  > Por Edgaras.
Sachin Nikumbh

Actualizare Info.plist adăugând permisiunea pe baza e-mail de respingere sau jurnalul de erori.

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>

NSRememindersUsageDescription

<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>

SAU

Rezolvarea respingerii aplicației de respingere a datelor sensibile la confidențialitate

https://developer.apple.com/library/content/qa/qa1937/_index.html

Dustin Spengler

Conform documentației merelor:

NSCalendarsUsageDescription (String – iOS) Această cheie vă permite să descrieți motivul pentru care aplicația dvs. accesează calendarele utilizatorului. Atunci când sistemul solicită utilizatorului să permită accesul, acest șir este afișat ca parte a alertei.

continuă apoi să explice cum să o implementați:

Important: Pentru a proteja confidențialitatea utilizatorului, o aplicație iOS legată pe iOS 10.0 sau ulterior și care accesează calendarele utilizatorului trebuie să declare static intenția de a face acest lucru. Includeți cheia NSCalendarsUsageDescription în fișierul Info.plist al aplicației dvs. și furnizați un șir de caractere de scop pentru această cheie. Dacă aplicația dvs. încearcă să acceseze calendarele utilizatorului fără un șir de scop corespunzător, aplicația dvs. iese.

Practic, inserați acest lucru în fișierul dvs. info.plist fișier

 <key>NSCalendarsUsageDescription</key>
<string>purpose for using calendar</string>

puteți citi mai multe despre cheile de cacaoaici

Comentarii

  • Când am pus întrebarea, acest lucru era clar – la urma urmei, apare ca prim rezultat al căutării pe Google. Mă interesează mai mult cadrele specifice sau funcționalitatea care face ca descrierea utilizării să fie într-adevăr necesară, cum ar fi EventKit sau NSCalendar. –  > Por Martin Polak.
  • EventKit este ceea ce necesită acest lucru –  > Por Dustin Spengler.
  • Cheia de descriere apare în interiorul vizualizării de alertă atunci când aplicația dvs. solicită accesarea calendarului din telefon –  > Por Dustin Spengler.
  • În afară de faptul că apare în vizualizarea de alertă, nu cred că este folosită pentru nimic. –  > Por Dustin Spengler.
  • Este folosită pur și simplu pentru a informa utilizatorul cu privire la motivul pentru care aplicația dvs. are nevoie de acces la calendarul lor –  > Por Dustin Spengler.
thatzprem

Actualizarea la noua versiune a AdMob SDK mi-a rezolvat problema.

rolinger

Pentru oricine se întreabă de ce dintr-o dată aplicația dvs. are acum toate aceste setări de permisiuni în primul rând, ar putea fi din cauza CocoaPods sau Carthage – acestea au pus cârlige la toate aceste permisiuni. Tocmai mi-am actualizat aplicația pentru a utiliza cordova-plugin-firebasex care are o instalare extinsă Cocoapods (și dependențe). Puteți dezactiva aceste permisiuni ÎNAINTE de a instala cocoapods în proiectul dvs. punând un PermissionsConfiguration.xcconfig în rădăcina proiectului dumneavoastră – puteți citi mai multe despre acest lucru aici: https://cocoapods.org/pods/Permission#installation

Toate acestea m-au surprins atunci când noua versiune a aplicației mele a fost respinsă cu 7 permisiuni key/string lipsă din fișierul Info.plist. A trebuit apoi să sap în proiectul meu pentru a afla care era cauza acestui lucru, deoarece aplicația mea nu are nevoie și nu folosește niciuna dintre aceste permisiuni (nu a avut niciodată).

Este posibil să existe, dar în momentul de față nu pot găsi o modalitate de a elimina permisiunile după integrarea podurilor…va trebui să sap în jurul valorii de modul de a face acest lucru fără a începe proiectul meu peste.