🐷

ユニバーサルリンク実装編: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.confserver(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アプリ側で「このドメインのリンクを自分が処理する」という宣言を行います。

  1. Xcodeでプロジェクトファイルを選択します。
  2. Signing & Capabilities タブを選択し、+ Capability をクリックします。
  3. Associated Domains を追加します。
  4. 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. 動作テストの実施

設定が完了したら、以下の手順でテストを行います。

  1. 実機(シミュレータではなく実機を推奨)にアプリをインストールします。
  2. メモ帳アプリに設定したURL(例: https://example.ddns.net/articles/123 )を貼り付けます。
  3. そのリンクをタップします(Safariで開くのではなく、直接タップ)。
  4. アプリが自動的に起動すれば成功です。

まとめ

今回の設定で、自作のホームサーバとiOSアプリがユニバーサルリンクによって完全に連携しました。

  1. AASAファイルは .well-known 配下に置き、拡張子を付けない。
  2. Nginxで application/json として配信する設定を入れる。
  3. Xcodeで applinks:ドメイン を追加する。
ファースト・スクラッチTech Blog

Discussion