ShareExtensionを利用したFlutterアプリを作っていて、なぜかYouTubeアプリからのshareだけ受け取れなくてハマった...という、誰の役に立つのか分からない、とてもニッチなお話。
(普段iOS開発してないエンジニアの備忘録)
解決したかったこと
receive_sharing_intentプラグインを利用したアプリを作っている。
(こちらの記事を参考にさせてもらった)
URLを受け取りたいアプリなので、サンプルに倣い、URL部分だけを使ってほぼほぼ問題なく動くようになった![]()
ただ、なぜかYouTubeアプリからだけURLが受け取れない ![]()
shareの候補としてアプリは表示されるものの、アプリを選択してもなぜか何も起こらない。
どうやらSwiftレベルで、何かがうまく動いてない様子。 ![]()
ログを仕込んでデバグしたいのだが...
Swiftまわりデバグしてていつもハマるのはログ。
Swiftでprint等でログを仕込んでも、Flutterのコンソールには何も表示されず。
何が起きてるのかさっぱりわからん![]()
「じゃあ、XCodeで実行したらなんか見えるかなー」となり、実行してみるが
「XCodeのコンソールも何も出ねーじゃーん」...となりーの、
View -> Debug Area -> Activate Consoleをして初めてログが見えることを知る。
ただ、それでもprintやNSLogで仕込んだログは表示されず。
(見落としてるだけかなぁ。。。)
ひとまずの打開策
辿りついた自分のwork aroundは、"NSLogを使ってコンソールアプリでログを見る"。

NSLogならここに表示された![]()
で、本筋の問題
問題だったのは、typeの判定。
サンプルで言えば、if attachment.hasItemConformingToTypeIdentifier(urlContentType)のところで引っかかってた。
iPhoneのYouTubeアプリからshareは、なぜかURLではなく、Plain Textとしてシェアされていた。
なので、if attachment.hasItemConformingToTypeIdentifier(textContentType)の部分も実装することで解決。
何故なのかはいまいちよくわからぬ。
渡ってくるのは間違いなくURLなのだが... ![]()