iOS App Extension開発の前提知識
前回の記事でiOSで扱うことのできるApp Extensionについてまとめました。本記事では、App Extensionを開発する際に必要となる前提知識についてまとめています。
App Extensionには2つのアプリが関連します。1つ目はApp Extensionを所有している本体アプリで、Containing appと呼ばれます。2つ目はApp Extensionを実行するアプリで、Host Appと呼ばれます。
App ExtensionはContaining appに所有されていますが、この間のやり取りはほぼできません。唯一許可されているのは、ウィジェットからContaining appを開くことだけです。
以下の図は、App ExtensionとContaining app / Host appの間で行うことのできる処理です。
データを共有する
上の図からわかるように、App ExtensionとContaining appがお互いに直接アクセスすることはできません。したがって相互間で何らかのアクションが必要な場合、例えばデータの保存や削除などは、App Groupsによるデータ共有を使って実装します。
コードを共有する
App ExtensionとContaining appでコードを共有したい場合、例えばPhoto Editing ExtensionでContaining appと同じフィルターを利用したい時などは、Embedded frameworkを使います。この時、App Extensionで利用できないAPIはフレームワーク内に含めることができません。
アップロード・ダウンロードを行う
App Extensionからアップロード・ダウンロードを行う場合には、App Extensionが終了された後でもその処理が完了されることを保証しなければなりません。時間がかかるかもしれない通信の結果を用いて何らかの処理をすることはできません。
App Extensionで扱うデータの種類を指定する
メモ帳アプリで文字を選択した場合と画像を選択した場合では、共有オプションに表示されるアプリが異なります。Instagramへ共有する選択肢は、画像を選択した時にのみ表示されます。このようにApp Extensionでサポートするデータの種類を指定したい場合には、App ExtensionのInfo.plist
にNSExtensionActivationRule
キーを追加します。
以上がApp Extensionを開発する際に役立つ前提知識です。App Extensionは制約がかなり多いので、できること・できないことを知ってから実装について考えると良いです。
参考文献