日本語入力の開発版のアップデートについてお知らせしました。その際、キーチェーンの警告が出る旨を説明しましたが、なぜそんなものが出るのか、という詳細は書きませんでした。アナウンスにしては技術的に細かすぎるという判断によるものです。本ブログをお読みの技術者には興味のある方もおられると思うので、改めて別エントリという形で書かせてもらうことになりました。日本語入力には、ユーザーが入力した内容からサジェストしてくれる機能があります。このため、ユーザーの確定履歴をある程度保存しなければなりません。それをうっかり漏洩でもしたら大変です。そこで、何らかの手段でデータを保護することが考えられます。場合、ここでキーチェーンを使っています。確定履歴データを暗号化し、その暗号鍵をキーチェーンに保存しているのです。キーチェーンはブラウザのパスワードを保存しておくもの、ぐらいの認識の方が多いでしょうが、実際には汎用の仕組みで、パスワードや証明書の保管に使えます。してキーチェーンに保存したデータには、アクセス制限をかける必要があります。側に保護の仕組みが用意されています。保護ポリシーは比較的単純で、自分で作ったデータは自分で読み書きできます。それ以外のアプリがアクセスした場合にはユーザーに許可を求めるダイアログが出ます。ところが、「それ以外のアプリ」というのが曲者で、同じアプリでもバージョンが違えば違うアプリ扱いになります。正確に言うと、バイナリのハッシュ値を保存しており、ハッシュ値が変わればアプリは違うものとして扱われます。日本語入力ではこれまでダイアログが出ていませんでした。これはなぜかというと、コード署名をしていたからです。同一の証明書でコード署名をした場合は、ハッシュ値が違っていてもキーチェーンが同じアプリとみなすため、アップデートしてもこの問題は発生しませんでした。今回のバージョンアップで証明書の更新が発生しました。新しい証明書も同じパスで正当な証明書なのですが、なにぶんキーチェーンは同じ証明書かどうかのみをチェックしているようなので、バイナリの更新と同じ現象が発生しました。そこで、今回のようにキーチェーンの許可を求めるダイアログが出るというわけです。オープンソース版をビルドした場合はダミーの証明書で署名されるため、同じ問題に遭遇したことのある人もいるかもしれません。)、問題は認識しています。そもそも、インプットメソッドにキーチェーンを使うというのはユーザーの想定と違いますし、ダイアログが出ることでびっくりされるユーザーも多いようです。なにかおかしなことをしているのではないかと不信感を抱かれるのは本意ではありません。そこで、今後は何らかの形で修正を考えています。版と同じにするか、別な方式をとるか。いずれにせよ、現行のバージョンでは既にキーチェーンを使っているため、データ移行のことを考えると今後も最低一度は皆さんもこのダイアログにお目にかかると思います。その際はご理解とご協力をお願いします。日本語入力の開発版のアップデートについてお知らせしました。その際、キーチェーンの警告が出る旨を説明しましたが、なぜそんなものが出るのか、という詳細は書きませんでした。アナウンスにしては技術的に細かすぎるという判断によるものです。本ブログをお読みの技術者には興味のある方もおられると思うので、改めて別エントリという形で書かせてもらうことになりました。日本語入力には、ユーザーが入力した内容からサジェストしてくれる機能があります。このため、ユーザーの確定履歴をある程度保存しなければなりません。それをうっかり漏洩でもしたら大変です。そこで、何らかの手段でデータを保護することが考えられます。場合、ここでキーチェーンを使っています。確定履歴データを暗号化し、その暗号鍵をキーチェーンに保存しているのです。キーチェーンはブラウザのパスワードを保存しておくもの、ぐらいの認識の方が多いでしょうが、実際には汎用の仕組みで、パスワードや証明書の保管に使えます。してキーチェーンに保存したデータには、アクセス制限をかける必要があります。側に保護の仕組みが用意されています。保護ポリシーは比較的単純で、自分で作ったデータは自分で読み書きできます。それ以外のアプリがアクセスした場合にはユーザーに許可を求めるダイアログが出ます。ところが、「それ以外のアプリ」というのが曲者で、同じアプリでもバージョンが違えば違うアプリ扱いになります。正確に言うと、バイナリのハッシュ値を保存しており、ハッシュ値が変わればアプリは違うものとして扱われます。日本語入力ではこれまでダイアログが出ていませんでした。これはなぜかというと、コード署名をしていたからです。同一の証明書でコード署名をした場合は、ハッシュ値が違っていてもキーチェーンが同じアプリとみなすため、アップデートしてもこの問題は発生しませんでした。今回のバージョンアップで証明書の更新が発生しました。新しい証明書も同じパスで正当な証明書なのですが、なにぶんキーチェーンは同じ証明書かどうかのみをチェックしているようなので、バイナリの更新と同じ現象が発生しました。そこで、今回のようにキーチェーンの許可を求めるダイアログが出るというわけです。オープンソース版をビルドした場合はダミーの証明書で署名されるため、同じ問題に遭遇したことのある人もいるかもしれません。)、問題は認識しています。そもそも、インプットメソッドにキーチェーンを使うというのはユーザーの想定と違いますし、ダイアログが出ることでびっくりされるユーザーも多いようです。なにかおかしなことをしているのではないかと不信感を抱かれるのは本意ではありません。そこで、今後は何らかの形で修正を考えています。版と同じにするか、別な方式をとるか。いずれにせよ、現行のバージョンでは既にキーチェーンを使っているため、データ移行のことを考えると今後も最低一度は皆さんもこのダイアログにお目にかかると思います。その際はご理解とご協力をお願いします。ForumGooglePrivacyTerms。