App Extensionの中のShare Extensionという今開いてるページの記事やデータを共有できる便利な機能がありますね。
Qiita、ブログなどを参考しながら機能を実装しましたが、なぜか特定のアプリで自分のアプリが表示されない現象でハマってしまいました。
StackOverFlowでも優しい回答が見当たらなかったので自分で調べたことを共有します。同じ悩みでハマっている方にお役に立てれば良いかと思います。
0. 一般的な方法はこちら
最初参考にした記事はこちらです。
Share Extensionでデータを共有する 方法については@KosukeQiita さんの記事を参考にしました。ありがとうございます。
これですぐ終わるかとおもったら。。。
1. できなかったこと
上記のリンクでやってみたらできるアプリとできないアプリがあることがあることに気づきました。
シェアアイコンを押したらシェア可能なアプリが表示されますが、**なぜか!**自分のアプリが表示されません。(私の場合はGoogle Driveアプリでした!)
原因を調べるとStackOverFlowでも同じ悩みの方がいました!
StackOverFlowの質問
2. 表示されない原因は?
経験ベースでの話ですが、(もっと詳しい方はご指摘ください。) 0.のリンクのあり方は**.plistにシェアできる条件を定義する方式**で細かくシェア条件などを定義する場合はカスタム定義(SUBQUERY)が必要だそうです。
下記のアップルの公式ドキュネントでも説明が書いてあります。
下記のドキュメントの説明の通りカスタムSUBQUERYを作成すればできるみたいですね。
3. SUBQUERYでやってみる
一旦作成するのは面倒なのでなんでもできる「TRUEPREDICATE」でやってみると、表示されない自分のアプリが表示されました。これでSUBQUERYの方法に変えれば表示されるはず!
(この設定はリリースの時には使えないみたいなのでSUBQUERY作成できたら変更が必要ですね。)
検索キーワードをSUBQUERYに変えるとやはりStackOverFlowにありました。
[SUBQUREYで作成した先輩の質問]
https://stackoverflow.com/questions/35935804/ios-share-extension-with-custom-subquery-for-nsextensionactivationrule
SUBQUERYを作成するにはにはPredicate文法の知識が必要だそうです。
下記のリンクを参考してみましょう。
ちなみに、フィイルタイプ一覧はこちらを参考してください。
私が作成したSUBQUERYです。これで解決しました。
NSExtensionActivationRuleキーに作成したSUBQUERYを追加します。
NSExtensionActivationRuleに挿入したコード
SUBQUERY (
extensionItems,
$extensionItem,
SUBQUERY (
$extensionItem.attachments,
$attachment,
(
ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.text"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.presentation"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.composite-content"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.audio"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.movie"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url"
|| ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.data"
)
).@count == $extensionItem.attachments.@count
).@count == 1
4. 終わり
記事を書くとリンクだれけになりました。何か間違いなどがあればぜひご指摘ください。