[Swift] iOS の共有メニューに追加できるアプリを作る(その 2:HostAppからデータを受け取るまで)

共有メニューに自アプリのExtensionが表示されるようになったので、自アプリExtensionが選択された時にデータを受け取る方法を説明します。
[Swift] iOS の共有メニューに追加できるアプリを作る(その1:アプリが表示されるまで)

何を受け取り可能とするか?:Info.plistの設定

Info.plistで、どのようなデータを受け付け可能とするかを設定します。

Xcodeのテンプレートでは、全てを受け付けるようになっています。

コード

Appleのドキュメントの”NSExtensionActivationRule”のセクションを参考に、受け付けたいタイプを設定していきます。

今回は、イメージとWebPageを受け取りたいので、以下を設定します。

  • NSExtensionActivationSupportsImageWithMaxCount
  • NSExtensionActivationSupportsWebPageWithMaxCount
注意
指定するのは、最大受付数なので、TRUE/FALSEを設定するものではありません。

以下のようになります。

コード




HostAppからデータを受け取る

Xcodeのテンプレートとして作成されたShareViewControllerで、プロパティ extensionContext 経由でデータを受け取ることができます。

以下は、ShareViewController#didSelectPostに記述したコードです。

コード

extensionContent.inputItems は、NSExtensionItem の配列で、このデータが、HostAppから渡されたデータです。

Item の attachements が、NSItemProvider の配列となっています。実データは、この NSItemProvider 経由で受け取ることとなります。

最初に設定した受け付けるタイプの種類と数がこの NSItemProvider とその attachments に反映されます。

異なるタイプの情報を受け取れるようにすると(かつHostApp側から渡そうとすると)複数の NSItemProvider が渡されます。

同一タイプの複数の要素を受け取れるようにすると(例:複数枚の画像)、NSItemProvider の attachments が複数セットされてきます。

また、NSItemProvider#hasItemConformingToTypeIdentifier にて、欲しいタイプの情報を含んでいるか確認することができます。

例えば、画像データを入手したい時には、以下のようにすることで、HostApp側からの情報を取得できます。

コード

説明は以上です。




HostAppからデータを取得できるようになりましたが、以下の項目の検討も必要です。

  • 自分のアプリとApp Extension でのコード共有
  • App Extension で使えるAPIの確認
[Swift] iOS の共有メニューに追加できるアプリを作る(その3:ContainingApp と App Extensionのデータ共有)




1 COMMENT

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です