🐷
ユニバーサルリンク実装編:AASAファイルの作成・配置とXcodeの設定
前回の記事で、ホームサーバにDockerとNginxを用いたHTTPS環境を構築しました。今回はその環境を使い、iOSアプリが特定のURLを検知して起動するようにするための「ユニバーサルリンクの実装」 を解説します。
ユニバーサルリンクを動作させるには、サーバ側の設定(AASAファイル)とアプリ側の設定(Associated Domains)の双方が一致している必要があります。
1. apple-app-site-association (AASA) ファイルの作成
まず、アプリの情報と、どのパスをアプリで開くかを記述したJSONファイルを作成します。
ファイル名: apple-app-site-association
※拡張子(.json)を付けてはいけません。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDE12345.com.yourname.testapp",
"paths": ["/articles/*", "/profiles/*"]
}
]
}
}
- appID: 「Team ID + Bundle ID」の組み合わせです(Apple Developerで確認可能)。
- paths: アプリで開く対象となるパスを指定します。「*」を利用して、特定のディレクトリ配下を対象にできます。
2. サーバーへの配置とNginx設定
作成したファイルをサーバのドキュメントルートの .well-known ディレクトリに配置します。
ファイルの配置
前回のWordPress環境(Docker)であれば、以下のパスに配置します。
docker-compose.yml
./docker-compose/nginx/.well-known/apple-app-site-association
Nginxの設定(Content-Typeの指定)
AASAファイルは、ブラウザからアクセスした際に application/json として返される必要があります。前回の nginx.conf の server(listen 443) ブロック内に以下を追加します。
nginx.conf
location /.well-known/apple-app-site-association {
default_type application/json;
}
設定反映後、ブラウザやcurlでアクセスして、正しくファイルが表示されるか確認してください。
bash
curl -I https://example.ddns.net/.well-known/apple-app-site-association
3. Xcodeの設定(Associated Domains)
次に、iOSアプリ側で「このドメインのリンクを自分が処理する」という宣言を行います。
- Xcodeでプロジェクトファイルを選択します。
- Signing & Capabilities タブを選択し、+ Capability をクリックします。
- Associated Domains を追加します。
- Domains に、以下のような形式で自分のドメインを追加します。
- applinks:example.ddns.net
4. アプリ内での遷移処理 (Swift)
リンクからアプリが起動した際、特定の画面へ遷移させるためのコードを AppDelegate または SceneDelegate に記述します。
SceneDelegate.swift
func scene(_ scene: UIScene, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) {
// ユニバーサルリンクからの起動かチェック
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return
}
// URLを解析して遷移処理を行う
print("Opened with URL: \(url.absoluteString)")
}
5. 動作テストの実施
設定が完了したら、以下の手順でテストを行います。
- 実機(シミュレータではなく実機を推奨)にアプリをインストールします。
- メモ帳アプリに設定したURL(例: https://example.ddns.net/articles/123 )を貼り付けます。
- そのリンクをタップします(Safariで開くのではなく、直接タップ)。
- アプリが自動的に起動すれば成功です。
まとめ
今回の設定で、自作のホームサーバとiOSアプリがユニバーサルリンクによって完全に連携しました。
- AASAファイルは .well-known 配下に置き、拡張子を付けない。
- Nginxで application/json として配信する設定を入れる。
- Xcodeで applinks:ドメイン を追加する。
Discussion