Sponsor Link
Appleのドキュメント: App Extension Programming Guide
まず、読むべきはこの Apple のドキュメントです。
上記を読むと、どんなExtensionポイントがあるかが分かります。それぞれの想定される使い方も説明されています。
ここでは、写真を共有する先として自分のアプリが表示できるようにする方法を調査・説明していきます。
読んでみたところ、上記のドキュメントの中では、以下を使うことになります。
- Share (iOS and MacOS) Post to a sharing website or share content with others
まずは、App Extension の使い方から見ていきます。
App Extension の動作
App Extension と普通のAppはどう違うの??という疑問については、ここで説明されています。
App と AppExtension のやりとりは ざっくり説明すると、以下のような手順になってます。(上記ページの絵のまんまです)
- Host App(共有メニューを表示している側のアプリ) からApp Extensionが選択される
- System が App Extension を起動する
- App Extension のコードが実行される
- System が App Extension を終了させる
Host App と App Extension の間のやりとりは、NSExtensionContext の openURL:completionHandler: で行われます。(NSExtensionContext は、App Extension 専用のクラスです。)
App Extension がデータを受け取ろうとしても、その時点で Host App は動いていないかもしれないので、システム(OS)側で共有リソースを用意してくれます。
App Extension から使える Host App の情報は制限されていて、例えば、sharedApplicationには、App Extension からは、アクセスできません。
App Extension 向け Xcode プロジェクトの作成
App Extension 向けプロジェクトは、Xcode でテンプレートを作ってくれますが、ポイントは、App Extension のみのプロジェクトは存在できないということです。
普通にプロジェクトを作ろうとしても App Extension は選択できません。
例えば、iOS 向けの Single View プロジェクトを作成した後に、App Extension 向けのターゲットを追加することができるようになります。
途中で聞かれる App Extension の名前ですが、Apple は、次のような名前を推奨しています。<Containing app name>—<App extension name>
ドキュメントでは、App Extension でのCFBundleDisplayName が共有メニューで表示されると書いてありますが、Xcode11.5 では、App 側のCFBundleDisplayName が表示されています。
# アプリと同名で表示されることで特に困ることはないと思いますが・・・
コードを動作させてみる
この状態で、App Extension の Scheme を Active にして動作させようとすると(⌘-R)、どのアプリ上で動作させるか聞いてきます。Safari がお勧めされたので、そのように指定しました。
Safari の起動を待って、共有メニューを押すと、以下のように、自分の App Extension が表示されることが確認できます。
テンプレートとして、SLComposeServiceViewController を継承したクラスが用意されているため、メニューを選択すると、以下のような画面が表示されます。
まとめ:自分で作った App Extension を表示できるようにするまで
アプリのプロジェクトに、Xcode から App Extension のテンプレートを利用してターゲットを追加すると、すぐに表示されるようになります。
今回の説明は以上です。
実際に、App Extension を作るためには、以下のようなことを考える必要があります。
順番に説明していく予定です。
- 自分のアプリとApp Extension でのコード共有
- App Extension で使えるAPIの確認
- Host App と App Extension のデータやりとり
続きの説明は、こちら。
Sponsor Link
[…] 前回の説明からの続きです。 […]
[…] その1で共有メニューに追加できるアプリを作成、その2では、Host App 側からのデータ受け取りを説明しました。 […]