2017-01-04 5 views
1

iOS 9でカレンダーアクセスを要求して異常なケースに遭遇しました。このロジックはすべてのiOS 10デバイスで正常に動作します。EKEventStore requestAccess()がiOS 9でユーザーのプロンプトを表示していません

ここでは、ユーザーがカレンダーにイベントを追加するためにタップするボタンをツールバーに追加しました。

したがって、ユーザーが「カレンダーに追加」ボタンを初めてタップするまでは、カレンダーにアクセスするためのアクセス許可を確認しません。このように:

@IBAction func addToCalendarPressed(_ sender: UIBarButtonItem) { 
    eventStore.requestAccess(to: .event, completion: { (granted, error) in 
     if (granted) && (error == nil) { 
      // Present the EKEventEditViewController 
     } else { 
      // Do something else (show an alert) 
     } 
    }) 
} 

iOS 10では、アプリは予想どおりのカレンダーアクセスのプロンプトを表示します。 iOS 9.xでは、プロンプトが表示されず、補完ハンドラが即座に起動し、許可がfalseを返します。

「カレンダーの権限」チェックが完了したように見えても、設定に入り、カレンダーのアクセスを手動で有効にすることはできません。デバイスに関する限り、アプリは決して許可チェックを行っていないので、設定>プライバシー>カレンダーには表示されません。

ユーザーがボタンをタップするのを待つ代わりに、チェックをviewWillAppearまたはviewDidLoadに移動しようとしましたが、それでも機能しません。イベントチェックでいくつかのサンプルアプリケーションを引き出し、iOS 9で動作します。このインスタンスでプロンプトが失敗する理由を理解できませんでした。

アプリは、(ただし、この画面上の)場所をチェックし、それらの作業を正しくiOSの9

答えて

2

に我々は問題を発見しました。どういうわけか私たちのプロジェクトはinfo.plistにCFBundleDisplayNameを持っていませんでした。開発の後の時点で、Xcode 8でプロジェクトを開くとプロパティが追加されましたが、名前は空白のままでした。

iOS 9の予定表権限と写真のアクセス許可の両方のプロンプトでは、権限のプロンプトにアプリケーション名を表示するときにその値が使用されます。

修正点は、単にinfo.plistのCFBundleDisplayNameに$(PRODUCT_NAME)を設定することでした。

関連する問題