2016-10-15 10 views
1

は、私は、既存のアプリは、2010年以降、およびiOSの10で今、アプリが使用法を説明しInfo.plist内の文字列を持っていることが要求されている: http://useyourloaf.com/blog/privacy-settings-in-ios-10/EventKitUI/EKCalendarChooserは連絡先にアクセスする必要があります - なぜですか?ここで説明したように

しかし、私はすでにに対応するキーを追加しました私のInfo.plist。それでも、アプリがカレンダーにアクセスしようとすると、ユーザーがアプリクラッシュを報告します。今、私はこのようになりますクラッシュレポート、送信するために、管理ユーザーの一人:

Termination Reason: TCC, This app has crashed because it attempted to access 
privacy-sensitive data without a usage description.  
The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data. 
Triggered by Thread: 2 

Filtered syslog: 
None found 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 libsystem_kernel.dylib   0x00000001812501a8 0x18124f000 + 4520 
1 libdispatch.dylib    0x000000018113b7ec 0x181128000 + 79852 
2 Contacts      0x000000018aa2c63c 0x18a9c8000 + 411196 
3 Contacts      0x000000018a9f7c40 0x18a9c8000 + 195648 
4 Contacts      0x000000018aa08578 0x18a9c8000 + 263544 
5 EventKitUI      0x000000018f18b5a4 0x18f169000 + 140708 
6 EventKitUI      0x000000018f2a9628 0x18f169000 + 1312296 
7 EventKitUI      0x000000018f2aa3a8 0x18f169000 + 1315752 
8 UIKit       0x000000018843b1b4 0x1880e8000 + 3486132 

を今の質問は、なぜ連絡先へのアクセスを必要とする私のアプリですが、私のアプリは、読み取り/書き込みたいですカレンダー?私はEKCalendarChooserを開封しておりますクラッシュコードで

、および以前に私が持っている私のInfo.plistでeventStore requestAccessToEntityType:EKEntityTypeEvent completion:(...)

を使用して権限をユーザーに尋ねた:
<key>NSCalendarsUsageDescription</key>
<string>Storing of leave data</string>

それでは、どのように私はこれを修正しますか?クラッシュレポートに示されているようにNSContactsUsageDescriptionを追加する必要がありますか?どうして?また、連絡先アクセスのためのポップアッププロンプトが表示されますが、これはほとんどのユーザーがおそらく悪いと考えるでしょうか?

注:奇妙なことは、私のデバイスでこのクラッシュを再現することができないことです。この種のクラッシュを報告しているユーザーは2人だけです。

+0

安全のためにNSContactsUsageDescription .iを追加してください。私のアプリにもフォトライブラリの使用説明が追加されていますが、私のアプリではフォトライブラリを使用していません。 –

+0

さて、なぜですか?理由を知っているときに連絡先の権限が不要になるようにコードを変更する可能性があります。 – user826955

答えて

5

私はちょうど同じ問題を抱えており、EKCalendarChooserがカレンダーを共有している連絡先のどれかを表示できるためだと思います。私は、iCloudファミリーから家族を削除するなど、すべての共有をオフにしました。連絡先にアクセスする必要はなくなりました。その後、EKCalendarChooserを使用して連絡先とカレンダーを共有しようとしましたが、連絡先を選択した後に許可が求められました。

これはちょっと痛みですが、解決方法として、カレンダーの共有の詳細を表示/変更するにはユーザーのアクセス許可が必要であることを伝える使用方法の説明を追加することをお勧めします。別の(もっと痛い)代替案は、カレンダーを選択するための独自のビューを作成することです。

Appleが意図したものかバグか分かりませんが、開発者がEKCalendarChooserビューの連絡先情報にアクセスする方法があるかどうかわかりません。

+0

私が最後にやったこと、私は説明を追加し、ユーザーはアプリが今働くと報告します。私はコード内で実際にトリガーしない限り、連絡先のためのプロンプトは表示されません(私はカレンダーアクセスプロンプトを起動するだけです)。 – user826955

+0

Appleデベロッパーフォーラムでこれに関する議論があります。 https://forums.developer.apple.com/thread/7473 –

0

あなたは「この種のクラッシュを報告しているのは2人のユーザーしかいない」と言いました。アプリが設定アプリでカレンダー/連絡先/カメラなどを無効にしたときにアプリがクラッシュし、コードが無効なオプションに直接アクセスしようとします。常に承認を確認する前に。 これがあなたを助けてくれることを願っています。

+0

ユーザーは、電話設定でカレンダーにアクセスできるようにしていることを明確に報告します。また、「EKCalendarChooser」を無断で起動すると、「EventKitUI」からのロックアイコンを含むページが表示されます。問題は*カレンダーにしかアクセスできない場合、*一部の*ユーザーが**連絡先**のプライバシーの使用説明を必要とする理由です。そうしないと、アプリがクラッシュします。 – user826955