15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Share Extensionで自分のアプリが表示されない問題を解決した件

Last updated at Posted at 2018-06-18

App Extensionの中のShare Extensionという今開いてるページの記事やデータを共有できる便利な機能がありますね。
Qiita、ブログなどを参考しながら機能を実装しましたが、なぜか特定のアプリで自分のアプリが表示されない現象でハマってしまいました。

StackOverFlowでも優しい回答が見当たらなかったので自分で調べたことを共有します。同じ悩みでハマっている方にお役に立てれば良いかと思います。

0. 一般的な方法はこちら

最初参考にした記事はこちらです。
Share Extensionでデータを共有する 方法については@KosukeQiita さんの記事を参考にしました。ありがとうございます。

これですぐ終わるかとおもったら。。。

1. できなかったこと

上記のリンクでやってみたらできるアプリとできないアプリがあることがあることに気づきました。
シェアアイコンを押したらシェア可能なアプリが表示されますが、**なぜか!**自分のアプリが表示されません。(私の場合はGoogle Driveアプリでした!)

スクリーンショット 2018-06-18 11.32.00.png

原因を調べると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文法の知識が必要だそうです。
下記のリンクを参考してみましょう。

Predicate文法について

ちなみに、フィイルタイプ一覧はこちらを参考してください。

SUBQUERYで必要なフィイルタイプ一覧

私が作成したSUBQUERYです。これで解決しました。

NSExtensionActivationRuleキーに作成したSUBQUERYを追加します。
スクリーンショット 2018-06-18 12.03.53.png


これじゃ、みづらいですね。ソースでみるとこんな感じです。
スクリーンショット 2018-06-18 12.04.17.png

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. 終わり

記事を書くとリンクだれけになりました。何か間違いなどがあればぜひご指摘ください。

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?