【Flutter】iOSでreceive_sharing_intent利用時、profile,relaseモードでビルドした時に共有できない
問題
Flutter の receive_sharing_intent パッケージを利用して、
safari などのブラウザアプリから iOS アプリへ、URL を共有する機能を実装しました。
debug モードでビルドした場合には、URL 共有できました。
しかし、profile モード,release モードでビルドした場合には、URL 共有できない問題が発生しました。
原因
receive_sharing_intent パッケージの README 内、iOS 設定の 3 項目に、
同じ App Groups 内に Runner と Share Extension を追加する
設定項目があります。
- Add Runner and Share Extension in the same group
Go to the Capabilities tab and switch on the App Groups switch for both targets. Add a new group and name it group.YOUR_HOST_APP_BUNDLE_IDENTIFIER in my case group.com.kasem.sharing
この設定を行った具体例が、下記の画像になります。
原因は、この設定の不備でした。
より具体的には、All タブで App Groups を設定したのですが、実際に設定反映されていたのは、Debug タブのみで、残りの Relase, Profile タブには設定反映されていませんでした。
原因の対策と新たな問題の発生
原因の対策
問題 ① を解決するために、profile タブで、App Groups の設定を追加しました。
結果、profile モードでビルドした時にも、URL 共有ができるようになりました。
新たな問題の発生
続いて、relase タブでも App Groups の設定を追加しようとしましたが、追加できませんでした。
新たな問題の原因
receive_sharing_intent パッケージの README 内、iOS 設定の 2 項目に、
「ios/Runner/Runner.entitlements」の設定があり、
アプリで URL を開くことをサポートしたい場合は、このタグを追加します。
と記載があります。
Create Share Extension
〜 省略 〜
ios/Runner/Runner.entitlements
....
<!--TODO: Add this tag, if you want support opening urls into your app-->
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:example.com</string>
</array>
....
そのため、「ios/Runner/Runner.entitlements」ファイルを手動で作成し、この設定を行っていたのですが、このファイルが存在していることが原因で、Release タブで、App Groups を追加できない様子でした。
新たな問題の原因の対策
対策として、下記、2 点行いました。
結果、Release タブで App Groups を追加できるようになり、
最終的に、release モードでビルドした時にも、URL 共有できるようになりました。
-
1 点目は、手動で作成した「Runner/RunnerRelease.entitlements」ファイルを削除しました。
-
2 点目は、XCode から「Runner/RunnerRelease.entitlements」を参照している設定を削除しました。
Discussion