iOS8においてカスタムキーボードの「フルアクセスを許可」をすると何が起こるのか

ATOK for iOS の設定手順で、キーボードを追加した後「フルアクセスを許可」を有効にするようにと案内されている。 この「フルアクセスを許可」というのは有効にした際に「開発元に送信することを許可します」とか書いてあって、ユーザーにとってはかなりきな臭い設定なわけだけど、実際にどういう設定なのかちょっと調べてみた。

この「フルアクセスの許可」を求めるためには、Custom KeyboardのInfo.plistでNSExtension/NSExtensionAttributes/RequestsOpenAccessというBooleanの値をYESにする必要があり、この設定値はデフォルトではNO。

この設定の具体的な説明をInformation Property List Key Referenceの当該項目で確認してみる。

ここには、この値を YES にした場合、カスタムキーボードからシェアードコンテナとネットワークへのアクセスが可能になるとある。具体的には以下のような内容。

  • ネットワークアクセス。キーストロークをサーバーに送って変換させるとか。
  • シェアードコンテナへのアクセス。キーボードを持っているアプリ(以下親アプリ)で辞書登録させるとか。
  • 位置情報サービス、連絡先へのアクセス (通常のアプリ同様にユーザーの許可が必要)
  • キーボードを持っているアプリを経由して GameCenter やアプリ内課金にアクセスする
  • MDMで管理されている場合にMDM管理下アプリとして振る舞う。

シェアードコンテナは、親アプリとExtensionで設定値やファイルのやりとりをするのに必要な領域なので、これが無効化されるとアプリで設定を変更したり辞書編集する、みたいなことができなくなる。ATOK for iOSの場合も同様なので、設定や辞書が反映されていないと思ったら「フルアクセスの許可」を入れていることを確認するといいだろう。

実際の実装で送っているかいないかは別に関係がなく、できてしまうので強めのテキストで書いてあるんだなって感じ。 ネットワークとシェアードコンテナわけてくれたらいいのに、みたいなことも考えたけど、シェアードコンテナにデータ入れて、親アプリ起動したら、親アプリには制限かからないから抜け道になってしまうと言うことなんだろう。