📝

【Flutter】iOSでreceive_sharing_intent利用時、profile,relaseモードでビルドした時に共有できない

2023/03/24に公開

問題

Flutter の receive_sharing_intent パッケージを利用して、
safari などのブラウザアプリから iOS アプリへ、URL を共有する機能を実装しました。
debug モードでビルドした場合には、URL 共有できました。
しかし、profile モード,release モードでビルドした場合には、URL 共有できない問題が発生しました。

原因

receive_sharing_intent パッケージの README 内、iOS 設定の 3 項目に、
同じ App Groups 内に Runner と Share Extension を追加する
設定項目があります。

https://pub.dev/packages/receive_sharing_intent

  1. 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

この設定を行った具体例が、下記の画像になります。
setting_app_groups

原因は、この設定の不備でした。
より具体的には、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 を開くことをサポートしたい場合は、このタグを追加します。
と記載があります。

https://pub.dev/packages/receive_sharing_intent

  1. 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」を参照している設定を削除しました。

    setting_signing

Discussion