iOS 10 + UIDocumentPickerViewController でクラッシュ
クラッシュ時のコンソールログは以下
*** Assertion failure in -[UIDocumentPickerViewController _commonInitWithCompletion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIDocumentPickerViewController.m:91 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application initializing document picker is missing the iCloud entitlement. Is com.apple.developer.icloud-container-identifiers set?'
アプリで iCloud の機能は使っていなくても iOS 10 で UIDocumentPickerViewController
を利用する場合は Capabilities で iCloud をオンに設定しておく必要があるらしい。
かつ Files app の導入された iOS 11 以降だと Capabilities での設定不要で問題なく動作するので見落としがち。*1
今回は2019年の iOS 12 時代になってからようやく UIDocumentPickerViewController
を機能として初導入したアプリだったので iOS 10 での動作チェック漏れでクラッシュが起きた。
選択肢としては iOS 11 以降のみで UIDocumentPickerViewController
の呼び出しボタンを表示する様に分岐する、またはアプリでは iCloud は使ってないけど Capabilities で iCloud をオンにしておくという2つがあると思う。
ちなみに iCloud をオンにして Key-value storage のみを使う様にチェックして、iCloud Documents はチェックしないでおけば iCloud のコンテナ等の設定無しに UIDocumentPickerViewController
での iCloud Drive へのアクセスが可能な様なので、Key-value storage にチェックだけしておいてアプリでは Key-value storage の機能を使用しないでおくのが一番影響が少ないと思われる。
*1:iOS 11 以降では UIDocumentPickerViewController イコール Files へのアクセスなのに対して、iOS 10 では UIDocumentPickerViewController イコール iCloud Drive へのアクセスとなるためだと思われる。