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なのだが...