
iOS、iPadOS、およびmacOSでの機能拡張のサポート
iOS、iPadOS、およびmacOSでは、機能拡張を提供することで、Appの機能をほかのAppに提供できます。機能拡張は、署名された特殊な目的を持つ実行可能バイナリで、App内にパッケージ化されています。Appのインストール時に機能拡張が自動的に検出され、対応するシステムを持ったほかのAppで利用できるようになります。
拡張ポイント
機能拡張をサポートするシステム領域は、拡張ポイントと呼ばれます。それぞれの拡張ポイントがAPIを提供し、その領域のポリシーを適用します。システムは、拡張ポイント固有のマッチングルールに基づいて、利用できる機能拡張を判断します。システムは必要に応じて機能拡張プロセスを自動的に起動し、そのプロセスの終了まで管理します。また、エンタイトルメントを使うと、機能拡張の利用可否を特定のシステムAppに制限できます。例えば、「今日」表示ウィジェットは通知センターにだけ表示され、共有機能拡張は「共有」パネルからのみ利用できます。拡張ポイントの例としては、「今日」ウィジェット、共有、アクション、写真編集、ファイルプロバイダ、カスタムキーボードなどがあります。
機能拡張との通信方法
機能拡張は、自身のアドレス空間内で実行されます。機能拡張と機能拡張を起動したApp間の通信には、システムフレームワークが仲介するプロセス間通信が使用されます。互いのファイルやメモリ空間にはアクセスできません。機能拡張は、機能拡張同士、機能拡張を含むApp本体、および機能拡張を使用するAppからは互いに分離されるように設計されています。ほかの他社製Appと同様にサンドボックス化され、機能拡張を含むApp本体のコンテナとは別のコンテナを持ちます。ただし、プライバシーコントロールへのアクセスは、App本体と同じものになります。そのため、ユーザがAppに「連絡先」へのアクセス権を付与した場合、このアクセス権はそのAppに埋め込まれた機能拡張に対しては適用されますが、そのAppが起動する別のAppの機能拡張には適用されません。
カスタムキーボードの使用方法
カスタムキーボードは、ユーザがシステム全体に対して有効にするため、特殊な種類の機能拡張です。有効にすると、パスコードの入力とテキストのセキュア表示以外のすべてのテキストフィールドでキーボード機能拡張が使用されます。ユーザデータの転送を制限するため、カスタムキーボードはデフォルトで厳しく制限されたサンドボックス内で実行されます。これにより、ネットワーク、プロセスに代わってネットワーク操作を実行するサービス、および入力データの漏えいが可能なAPIへのアクセスがブロックされます。カスタムキーボードのデベロッパは、機能拡張にOpen Accessを付与することを要求できます。これにより、その機能拡張は、ユーザの同意を得たあとにデフォルトのサンドボックス内で実行できるようになります。
MDMと機能拡張
モバイルデバイス管理(MDM)ソリューションに登録されたデバイスでは、書類とキーボードの機能拡張はManaged Open Inルールに従って動作します。例えば、MDMソリューションは、ユーザが管理対象Appから管理対象外ドキュメントプロバイダに書類を書き出したり、管理対象App内で管理対象外キーボードを使用したりすることを禁止できます。また、AppのデベロッパはApp内で他社製のキーボード機能拡張の使用を禁止することもできます。