Flutter アプリで Universal links 対応をしたときに色々ハマったので、確認方法などをまとめておきます。
iOS アプリの設定
Xcode 上で Universal links で iOS アプリを起動するために必要な設定を追加します。
Set up universal links for iOS - Adjust iOS build settings (Flutter 公式ドキュメント)
- info.plist に
FlutterDeepLinkingEnabled
設定を追加 - Signing & Capabilities に
Associated Domains
設定を追加
Associated Domains の Domains 設定で applinks:
を書き忘れるとアプリが起動しません (一度書き忘れてハマりました)。
apple-app-site-association ファイル
サーバーに配置する Universal links 設定ファイルが必要になります。
ファイル名は必ず apple-app-site-association
です。拡張子は必要ありません。
- Set up universal links for iOS - Create and host apple-app-site-association JSON file (Flutter 公式ドキュメント)
- Supporting associated domains (Apple 公式ドキュメント)
シンプルな例では、次のような書き方になります:
- App ID Prefix (Team ID) : ABCDE12345
- Bundle ID : com.example.app
{
"applinks": {
"details": [
{
"appIDs": [
"ABCDE12345.com.example.app"
],
"components": [
{
"/": "/*"
}
]
}
]
}
}
Universal links でアプリが起動しないときの確認
apple-app-site-association がきちんと配置されている
下記の curl を実行し、apple-app-site-association の内容が返ってくれば大丈夫です。
curl -v https://{ドメイン}/.well-known/apple-app-site-association
ドメインは apple-app-site-association ファイルを配置しているサーバーのドメインを指定します。
Apple CDN に apple-app-site-association の情報がキャッシュされている
下記の curl を実行し、status code 200 で apple-app-site-association の内容が返ってくればキャッシュされています。
curl -v https://app-site-association.cdn-apple.com/a/v1/{ドメイン}
ドメインは apple-app-site-association ファイルを配置しているサーバーのドメインを指定します。
Apple Developer サイトに Associated Domain 設定が反映されている
https://developer.apple.com/account/resources/identifiers/list
Apple Developer サイト内の上記ページにアクセスし、リストから該当の Bundle ID を選択すると、どの Capability が有効になっているか確認できます。
コマンドでアプリ起動を試す
下記コマンドで Universal links を指定して実行すると、設定などがうまくいっていれば iOS アプリが起動します。
xcrun simctl openurl booted {Universal links URL}
Universal links 呼び出し側が未実装でも動作確認ができます。
アプリをアンインストールしてから再インストールする
設定変更を行なったあとにアプリを入れ直す場合は、アンインストールしてから再インストールをしました。
アプリ起動時のログ確認
アプリで問題が起きていないかを確認するため、下記コマンドでアプリのログを確認をするということもやりました。
xcrun simctl spawn booted log stream --level debug --style compact --predicate 'process == "Runner"' | grep "Flutter"
Console.app でもログの確認ができます。