Cara Membetulkan Ketidakpadanan ID Bundle dan ID App AASA Pautan Universal iOS

opoinstall
2026-08-18
5 min read

Mengapakah ketidakpadanan ID bundle memutuskan Pautan Universal iOS? Ketidakpadanan ID Bundle memutuskan Pautan Universal apabila Pengecam Aplikasi yang ditandatangani oleh aplikasi tidak sepadan dengan kemasukan appID/appIDs AASA yang sepadan untuk domain yang dikaitkan, menyebabkan pengesahan domain yang dikaitkan gagal.

ID Bundle (CFBundleIdentifier) ialah rentetan unik yang mengenal pasti aplikasi iOS individu dalam ekosistem Apple. Dalam seni bina Pautan Universal, ID Bundle digabungkan dengan Prefiks Pengecam Aplikasi untuk membentuk Pengecam Aplikasi, yang disahkan oleh sistem pengendalian berbanding fail apple-app-site-association yang dihoskan untuk memberi kebenaran pengendalian URL asli.

Terma Definisi
ID Bundle Pengecam DNS terbalik unik yang ditetapkan kepada sasaran aplikasi iOS dalam Xcode (CFBundleIdentifier).
Prefiks Pengecam Aplikasi Prefiks ID App yang ditetapkan dalam tetapan akaun Pembangun Apple (selalunya, tetapi tidak semestinya, sama dengan ID Pasukan).
Pautan Universal Mekanisme standard Apple untuk menghala URL HTTPS web terus kepada paparan aplikasi asli.
Domain Berkaitan Hak kelayakan Xcode yang mengisytiharkan domain web yang dibenarkan untuk dikendalikan oleh apl (applinks:).
Fail AASA Fail JSON (apple-app-site-association) yang dihoskan pada domain untuk memberi kebenaran pengendalian URL apl.

Rantaian Diagnostik Kanun

Rajah di bawah menggambarkan urutan pengesahan berbilang peringkat yang dilaksanakan semasa pemasangan apl dan pengesahan domain:

Lapisan 1: Binari Apl Ditandatangani
       │
       ├── application-identifier (<Prefix>.<BundleID>)
       ├── com.apple.developer.team-identifier
       └── com.apple.developer.associated-domains (applinks:example.com)
                    │
                    ▼
Lapisan 2: Penghantaran AASA & Ingesti CDN
       │ (Infrastruktur urusan Apple mengambil AASA asal)
                    ▼
Lapisan 3: Skema AASA & Pemadanan Corak
       │ (Mengesahkan tatasusunan appIDs dan komponen/laluan peraturan haluan)
                    ▼
Lapisan 4: Keadaan Perkaitan Peranti
       │ (Sistem pengendalian mendaftarkan domain disahkan dalam pangkalan data tempatan)
                    ▼
Lapisan 5: Pelaksanaan Haluan Aplikasi
       │ (Sistem menghalakan URL yang sepadan kepada pengendali kitaran hayat aplikasi)
Rajah seni bina teknikal 5 lapisan termaju yang menggambarkan rantaian pengesahan Pautan Universal iOS daripada hak kelayakan binari bertandatangan kepada pelaksanaan apl asli pada latar belakang grid krim lembut yang suam.

Senarai Semak Pembaikan Pantas: Rutin Diagnostik 30 Saat

Apabila Pautan Universal tiba-tiba kembali kepada pengendalian web, sahkan perkara ini mengikut urutan:

  • Ekstrak Pengecam Ditandatangani: Periksa hak kelayakan terbenam binari yang dikompilasi untuk mendapatkan application-identifier yang tepat (<Prefix>.<BundleID>).
  • Sahkan Format Hak Kelayakan: Sahkan bahawa com.apple.developer.associated-domains mengandungi nama hos yang tepat (cth., applinks:subdomain.domain.com) tanpa laluan yang tidak diperlukan, rentetan pertanyaan, atau garis miring penutup.
  • Audit AASA Asal: Ambil https://subdomain.domain.com/.well-known/apple-app-site-association dan pastikan Pengecam Aplikasi yang ditandatangani disenaraikan secara verbatim dalam appIDs.
  • Sahkan Pemadanan Laluan: Sahkan bahawa URL sasaran sepadan dengan corak components atau paths yang ditentukan dalam konfigurasi AASA.
  • Semak Skop Domain: Pastikan hak kelayakan domain berkaitan merangkumi nama hos sasaran dan konfigurasi AASA yang sepadan tersedia untuk nama hos tersebut. Untuk subdomain, gunakan nama hos eksplisit atau bentuk kad bebas *. yang disokong mengikut kesesuaian.
  • Asingkan Mod Pembangunan: Gunakan ?mode=developer pada binaan bertandatangan pembangunan untuk memintas pencachean CDN Apple semasa lelaran.

Sebab Ketepatan ID Bundle dan Pengecam Aplikasi Penting

Anatomi Pengecam Aplikasi

Pengesahan Pautan Universal tidak menilai nama paparan aplikasi, skema URL dalaman, atau nama bundle. Menurut dokumentasi Apple mengenai applinks.Details, model keselamatan bergantung sepenuhnya pada Pengecam Aplikasi layak penuh, berstruktur seperti:

Application Identifier=ApplicationIdentifierPrefix  +  "."  +  CFBundleIdentifier\text{Application Identifier} = \text{ApplicationIdentifierPrefix} \;+\; \text{"."} \;+\; \text{CFBundleIdentifier}

Di mana:

  • ApplicationIdentifierPrefix: Prefiks ID App yang ditetapkan dalam konfigurasi akaun Pembangun Apple anda (cth., 9JA723G82S). Bagi kebanyakan akaun pembangun moden, nilai ini sepadan dengan ID Pasukan 10 aksara, tetapi jurutera harus mengesahkan prefiks sebenar dalam Portal Pembangun Apple mereka daripada menganggap kedua-duanya boleh ditukar ganti.
  • CFBundleIdentifier (ID Bundle): Rentetan DNS terbalik yang sensitif huruf besar-kecil yang ditentukan dalam tetapan binaan sasaran (cth., com.example.mobileapp).

Dalam fail JSON apple-app-site-association (AASA) yang dihoskan, rentetan komposit ini muncul di dalam tatasusunan appIDs atau kemasukan kamus appID (cth., 9JA723G82S.com.example.mobileapp. Jika percanggahan aksara, perbezaan huruf besar-kecil, atau ruang penutup wujud antara hak kelayakan terbenam binari yang dikompilasi dan kemasukan AASA yang dihoskan, pengesahan domain akan gagal.

Ketidakpadanan ID Bundle ialah salah satu punca keutamaan tertinggi untuk diperiksa semasa triaj integrasi, tetapi ia bukan satu-satunya sebab Pautan Universal boleh kembali kepada web.

Bagaimana Domain Berkaitan dan AASA Mewujudkan Perkaitan Dua Hala

Tidak seperti skema URL tersuai, yang boleh diisytiharkan oleh mana-mana aplikasi yang dipasang tanpa pengesahan domain, Pautan Universal mewujudkan perkaitan dua hala yang selamat:

  • Pengisytiharan Apl kepada Domain: Aplikasi iOS yang dikompilasi mengisytiharkan bahawa ia menuntut pemilikan domain web tertentu dengan memasukkan hak kelayakan com.apple.developer.associated-domains dalam tandatangan kodnya.
  • Kebenaran Domain kepada Apl: Domain web mengesahkan bahawa ia memberikan kebenaran penghalaan kepada aplikasi tertentu dengan mengehoskan fail JSON AASA di https://<domain>/.well-known/apple-app-site-association atau https://<domain>/apple-app-site-association.

Semasa pemasangan atau kemas kini apl, sistem pengendalian mengesahkan hak kelayakan Domain Berkaitan bertandatangan apl berbanding konfigurasi AASA yang diambil untuk domain tersebut. Pengecam Aplikasi yang digunakan untuk perkaitan apl mesti sepadan dengan pengecam sepadan yang diisytiharkan dalam konfigurasi AASA. Selepas pengecam sepadan, URL yang diminta juga mesti memenuhi peraturan components atau paths yang dikonfigurasikan.

Simptom Kegagalan: Mengapa Pengecam Tidak Sepadan Memaksa Laluan Pulang Web

Apabila ketidakpadanan Pengecam Aplikasi berlaku, iOS biasanya tidak memaparkan ketidakpadanan Pengecam Aplikasi sebagai pengecualian masa jalan yang fatal. Kegagalan tersebut sebaliknya dicerminkan dalam keadaan pengesahan domain berkaitan, diagnostik peranti, atau tingkah laku laluan pulang web yang terhasil:

  • Pengendalian Sistem: Apabila perkaitan domain gagal, sistem tidak memanggil apl melalui laluan Pautan Universal yang disahkan. Bergantung pada cara URL dibuka dan konteks pelayar di sekelilingnya, URL kekal dalam atau kembali kepada pengendalian web dan bukannya dihantar kepada aplikasi asli.
  • Kesan Pengalaman Pengguna: Apabila pengguna mengetik pautan web yang sepadan dalam Mesej, Mel, atau Safari, sistem gagal mengenali pemetaan apl asli yang dibenarkan dan membuka URL web dalam pelayar.

Lihat Juga: ID Bundle ──> Seni Bina Pautan Universal

Bagaimana CDN Apple Mengambil dan Mencache Fail AASA

Salasilah Pemasangan dan Mekanik CDN Apple

Apabila aplikasi yang mengandungi hak kelayakan com.apple.developer.associated-domains dipasang atau dikemas kini, sistem menetapkan atau menyegarkan hubungan domain berkaitan:

  • Pengikis Perantara CDN: Apabila sistem menetapkan atau menyegarkan hubungan domain berkaitan, ia mendapatkan data AASA domain melalui infrastruktur domain berkaitan Apple dan menggunakan data tersebut untuk mengesahkan perkaitan.
  • Kitaran Hayat Pencachean Bebas: CDN yang diuruskan Apple mengawal kitaran hayat muat semula dan pencacheannya sendiri, jadi kemas kini asal tidak seharusnya dianggap serta-merta kelihatan melalui CDN. Semasa menguji perubahan, gunakan mod alternatif pembangunan yang didokumenkan jika berkenaan dan periksa keadaan perkaitan peranti.
  • Keperluan Pelayan Asal: Pelayan web asal mesti menyediakan fail AASA melalui HTTPS dengan sijil TLS yang sah dan dipercayai (sijil ditandatangani sendiri ditolak), menggunakan jenis MIME application/json. Pengehosan AASA tidak boleh bergantung padaubah hala HTTP; titik akhir AASA harus mengembalikan fail secara terus dengan HTTP 200 OK.

Konsistensi Format JSON AASA

Versi iOS moden menyokong sintaks kamus components berbutir sambil mengekalkan keserasian ke belakang dengan tatasusunan paths lama.

Menurut Nota Teknikal Pembangun Apple TN3155 mengenai Nyahpepijat Pautan Universal, dalam kemasukan details yang diberikan, pembangun harus menggunakan sama ada struktur moden appIDs + components atau struktur lama appID + paths; jangan campurkan kedua-dua struktur dalam kemasukan yang sama, kerana konfigurasi bercampur boleh menghasilkan tingkah laku pengesahan yang tidak dijangka.

Contoh AASA lama biasanya menyertakan "apps": []. Untuk penggunaan yang menyasarkan keluaran OS Apple moden, kekunci ini tidak diperlukan; kekalkannya hanya apabila menyokong versi OS lama yang khusus memerlukannya.

Protokol Diagnostik: Aliran Kerja Penyelesaian Langkah demi Langkah

Langkah 1: Periksa Hak Kelayakan Apl Ditandatangani dengan codesign

Untuk menentukan sama ada IPA yang dieksport atau binaan nyahpepijat mengandungi Pengecam Aplikasi dan Domain Berkaitan yang dijangka tepat, periksa tandatangan kod binari secara langsung menggunakan utiliti baris arahan macOS codesign. Semak application-identifier, com.apple.developer.team-identifier, dan com.apple.developer.associated-domains bersama-sama.

Profil peruntukan menunjukkan keupayaan dan domain yang dibenarkan oleh profil; boleh laku bertandatangan (codesign) menunjukkan apa yang sebenarnya terkandung dalam binari yang dihantar.

Langkah 2: Audit Skema JSON AASA yang Dihoskan

Sahkan bahawa pelayan asal mengehoskan fail AASA sah yang boleh diakses umum tanpa pengesahan atau ubah hala. Perhatikan bahawa contoh AASA lama biasanya menyertakan "apps": [], manakala konfigurasi moden yang menyasarkan keluaran iOS kontemporari meninggalkan kekunci ini.

Skema JSON AASA standard di bawah menggambarkan penghalaan laluan yang betul menggunakan struktur moden appIDs dan components:


```json
{
  "applinks": {
    "details": [
      {
        "appIDs": [
          "9JA723G82S.com.example.mobileapp",
          "9JA723G82S.com.example.mobileapp.staging"
        ],
        "components": [
          {
            "/": "/product/*",
            "comment": "Matches product detail routes"
          },
          {
            "/": "/invite/*",
            "?": { "ref": "?*" },
            "comment": "Matches referral links with custom query parameters"
          },
          {
            "/": "/help/*",
            "exclude": true,
            "comment": "Excludes customer support URLs from native routing"
          }
        ]
      }
    ]
  }
}

Langkah 3: Jalankan Alatan CLI Diagnostik (codesign, swcutil, curl)

Pada versi macOS yang menyediakan diagnostik swcutil, gunakan alat tersebut untuk memeriksa atau mengesahkan data domain berkaitan. Oleh kerana pilihan arahan boleh berbeza merentas keluaran OS dan rantaian alat, sahkan pilihan yang tersedia dengan swcutil --help sebelum menjalankan aliran kerja diagnostik di bawah:

# 0. Sahkan pilihan yang tersedia (sintaks mungkin berbeza mengikut OS dan keluaran rantaian alat)
swcutil --help

# 1. Nyahpek arkib IPA yang dieksport
unzip -q YourApp.ipa -d UnpackedApp

# 2. Ekstrak dan periksa hak kelayakan bertandatangan secara terus daripada binari boleh laku
codesign -d --entitlements :- "UnpackedApp/Payload/YourApp.app" > signed-entitlements.plist 2>/dev/null
/usr/libexec/PlistBuddy -c "Print" signed-entitlements.plist

# 3. Semak sama ada data AASA boleh dimuat turun untuk domain menggunakan swcutil (alat diagnostik macOS)
sudo swcutil dl -d custom.opwakeup.com

# 4. Sahkan pemadanan corak AASA berbanding URL tertentu menggunakan swcutil
sudo swcutil verify -d custom.opwakeup.com -j ./apple-app-site-association -u https://custom.opwakeup.com/product/123

# 5. Pertanyakan titik akhir diagnostik CDN Domain Berkaitan yang diuruskan Apple secara terus
curl -i https://app-site-association.cdn-apple.com/a/v1/custom.opwakeup.com

Periksa titik akhir CDN Domain Berkaitan yang diuruskan Apple apabila menyelesaikan masalah data AASA yang dihantar di pinggir. Anggap titik akhir ini sebagai infrastruktur diagnostik dan bukannya sebagai kontrak API awam.

Langkah 4: Gunakan Mod Pembangun Domain Berkaitan untuk Ujian AASA

Menurut dokumentasi Apple mengenai Mengonfigurasi Domain Berkaitan, Apple menyediakan mod alternatif untuk pembangunan. Mod developer (?mode=developer) membolehkan peranti pembangunan yang layak memintas CDN yang diuruskan Apple dan mengambil fail AASA secara terus daripada domain berkaitan melalui HTTPS.

Konfigurasi di bawah menunjukkan cara mengisytiharkan Mod Pembangun dalam konfigurasi hak kelayakan Xcode yang berasingan:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:custom.opwakeup.com</string>
    </array>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:custom.opwakeup.com?mode=developer</string>
    </array>
</dict>
</plist>

Sebaik sahaja sistem pengendalian menetapkan perkaitan domain, penghalaan peringkat aplikasi mengendalikan muatan URL yang masuk menggunakan perwakilan kitaran hayat UIKit atau SwiftUI standard:

import UIKit

// ----------------------------------------------------------------------------
// 1. Implementasi AppDelegate UIKit
// ----------------------------------------------------------------------------
@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    function application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        return true
    }

    // Panggilan Balik Sambungan Pautan Universal Apple Standard
    function application(
        _ application: UIApplication,
        continue userActivity: NSUserActivity,
        restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
    ) -> Bool {
        
        guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
              let incomingURL = userActivity.webpageURL else {
            return false
        }
        
        print("Mengendalikan Pautan Universal yang disahkan: \(incomingURL.absoluteString)")
        
        // Hantar incomingURL kepada penghala dalaman atau lapisan SDK untuk pengekstrakan parameter
        return handleIncomingRoute(incomingURL)
    }

    private func handleIncomingRoute(_ url: URL) -> Bool {
        // Logik penghalaan destinasi peringkat aplikasi
        // Nota: Mengembalikan true menunjukkan apl mengendalikan aktiviti tersebut, bukan penghuraian URL berjaya.
        return true
    }
}

// ----------------------------------------------------------------------------
// 2. Implementasi Kitaran Hayat SceneDelegate (iOS 13+)
// ----------------------------------------------------------------------------
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    function scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let userActivity = connectionOptions.userActivities.first(where: { $0.activityType == NSUserActivityTypeBrowsingWeb }),
           let incomingURL = userActivity.webpageURL {
            print("Pautan Universal Pelancaran Sejuk: \(incomingURL.absoluteString)")
        }
    }

    function scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
           let incomingURL = userActivity.webpageURL {
            print("Pautan Universal Latar Depan: \(incomingURL.absoluteString)")
        }
    }
}

Untuk mendayakan Mod Pembangun sisi klien pada perkakasan fizikal:

  1. Pada iOS 16+, navigasi ke Tetapan > Privasi & Keselamatan > Mod Pembangun dan Togol ke HIDUP (but semula peranti diperlukan).
  2. Navigasi ke Tetapan > Pembangun > Pembangunan Domain Berkaitan dan togol suis ke HIDUP.
  3. Pasang binaan pembangunan yang ditandatangani dengan profil peruntukan pembangunan yang mengandungi hak kelayakan ?mode=developer.
  4. Nota Pengeluaran: Pastikan ?mode=developer dihadkan kepada konfigurasi pembangunan dan ujian dalaman, dan jangan menyertakannya dalam hak kelayakan domain berkaitan pengeluaran melainkan penggunaan anda secara eksplisit memerlukan dan menyokong konfigurasi tersebut.

Poko Decision Tree Punca Masalah

Pautan Universal kembali kepada pengendalian web
        │
        ├── Adakah application-identifier bertandatangan sepadan dengan appIDs AASA?
        │       ├── TIDAK ──> Betulkan Prefiks ID App atau ID Bundle dalam AASA
        │       └── YA
        │
        ├── Adakah hak kelayakan associated-domains menyenaraikan domain yang tepat?
        │       ├── TIDAK ──> Tambah applinks:<domain> pada hak kelayakan sasaran
        │       └── YA
        │
        ├── Adakah sudo swcutil dl -d <domain> berjaya?
        │       ├── TIDAK ──> Betulkan HTTPS asal, sijil TLS, atau ubah hala 301/302
        │       └── YA
        │
        ├── Adakah sudo swcutil verify sepadan dengan laluan URL sasaran?
        │       ├── TIDAK ──> Betulkan sintaks components atau paths dalam AASA
        │       └── YA
        │
        └── Semak keadaan perkaitan peranti dan pengendali penghalaan aplikasi dalaman
Poko keputusan carta alir teknikal untuk mendiagnosis punca masalah laluan pulang web Pautan Universal iOS merentas hak kelayakan binari, skema AASA, dan pencachean CDN pada latar belakang grid krim suam.

Matriks Diagnostik: Punca Kegagalan Pautan Universal

Mod Kegagalan Punca Asas Tingkah Laku Sistem Pemerhatian Pemulihan Disyorkan
Kesilapan Taip ID Bundle Sensitiviti huruf besar-kecil atau ketidakpadanan aksara dalam appIDs AASA Pautan membuka pelayar dan bukannya apl asli Betulkan rentetan dalam JSON AASA dan edarkan semula ke asal
Ketidakpadanan Prefiks ID App Menggunakan prefiks yang salah dan bukannya Prefiks ID App Pembangun sebenar Perkaitan domain gagal semasa pemasangan Sahkan Prefiks Pengecam Aplikasi dalam Pusat Ahli Apple
Ketidakpadanan Subdomain Hak kelayakan menunjuk kepada www.example.com manakala AASA berada pada example.com Apl gagal menuntut pautan daripada subdomain Hoskan fail AASA khusus pada setiap subdomain yang dituntut atau konfigurasikan kad bebas
Ubah Hala HTTP pada Titik Akhir Pelayan asal mengembalikan ubah hala 301 atau 302 untuk URL AASA Pengikis CDN Apple menolak fail AASA Konfigurasikan pelayan web untuk mengembalikan 200 OK secara terus
Ketidakkonsistenan Format AASA Mencampurkan appID/paths lama dengan appIDs/components moden Pemadanan laluan tidak konsisten atau separa Piawaikan pada sintaks appIDs + components moden
Ketidakpadanan Corak URL AASA dimuat turun dengan berjaya tetapi URL yang diminta tidak sepadan dengan corak Pautan dibuka dalam pelayar web Sahkan sintaks laluan dan komponen menggunakan swcutil verify
Mod Pembangun Kekal dalam Keluaran Binaan pengedaran mengekalkan mod alternatif pembangunan Hak kelayakan tidak standard dalam binaan pengedaran Alih keluar ?mode=developer dalam konfigurasi binaan Keluaran

Carta matriks perbandingan perusahaan antarabangsa yang menggambarkan mod kegagalan Pautan Universal iOS, punca asas, tingkah laku sistem, dan langkah pemulihan dengan lencana status yang jelas pada latar belakang grid krim suam.

Mengimplementasikan Konfigurasi Persekitaran Dwi dalam Xcode

Menguruskan Berbilang Konfigurasi Binaan (Debug, Staging, Production)

Saluran paip pembangunan perusahaan kerap menguruskan ID Bundle berbeza merentas persekitaran binaan (cth., com.example.app.debug, com.example.app.staging, com.example.app).

Untuk mengekalkan Pautan Universal yang berfungsi merentas semua konfigurasi binaan:

  • Pengisytiharan AASA Eksplisit: Fail AASA yang dihoskan mesti secara eksplisit menyenaraikan Pengecam Aplikasi layak penuh setiap persekitaran dalam tatasusunan appIDs:

    "appIDs": [
      "9JA723G82S.com.example.app",
      "9JA723G82S.com.example.app.staging",
      "9JA723G82S.com.example.app.debug"
    ]
    
    
  • Hak Kelayakan Khusus Sasaran: Gunakan tetapan konfigurasi binaan Xcode untuk memautkan fail .entitlements berbeza setiap konfigurasi binaan, memastikan domain pengeluaran tidak ditanya oleh binaan nyahpepijat dalaman.

Menguruskan Pengecam Sasaran

Untuk penyelesaian masalah Pautan Universal, gunakan ID Bundle dan Prefiks Pengecam Aplikasi yang tepat daripada binaan bertandatangan dan bukannya bergantung pada pengecam kad bebas. Rawat setiap nama hos secara eksplisit: jika apl menuntut example.com dan www.example.com, konfigurasikan kemasukan domain berkaitan yang sepadan dan pastikan setiap nama hos menyediakan data AASA yang bersesuaian. Pastikan hak kelayakan dikonfigurasikan pada sasaran yang sebenarnya mengendalikan Pautan Universal, dan sahkan mana-mana sambungan apl atau sasaran watchOS secara berasingan apabila berkenaan.

Mengesahkan Profil Peruntukan Terbenam dan Binari Bertandatangan dalam CI/CD

Automatikkan pengesahan hak kelayakan dan Pengecam Aplikasi di dalam skrip binaan integrasi berterusan sebelum memuat naik binari ke TestFlight:

# Skrip pengesahan CI automatik
security cms -D -i /path/to/embedded.mobileprovision > provision.plist

# 1. Periksa hak kelayakan profil untuk Domain Berkaitan yang dibenarkan
/usr/libexec/PlistBuddy -c "Print :Entitlements:com.apple.developer.associated-domains" provision.plist

# 2. Ekstrak hak kelayakan bertandatangan sebenar daripada binari boleh laku yang dikompilasi
codesign -d --entitlements :- "UnpackedApp/Payload/YourApp.app" > signed-entitlements.plist 2>/dev/null
SIGNED_APP_ID=$(/usr/libexec/PlistBuddy -c "Print :application-identifier" signed-entitlements.plist)
echo "Pengecam Aplikasi Bertandatangan Diekstrak: $SIGNED_APP_ID"

# 3. Sahkan bahawa Domain Berkaitan bertandatangan sepadan dengan domain sasaran
/usr/libexec/PlistBuddy -c "Print :com.apple.developer.associated-domains" signed-entitlements.plist

# 4. Sahkan bahawa ID App bertandatangan wujud dalam fail AASA yang dihoskan melalui Python
python3 -c "
import json, sys
signed_id = sys.argv[1]
data = json.load(open('apple-app-site-association'))
app_ids = [app for detail in data.get('applinks', {}).get('details', []) for app in detail.get('appIDs', [])]
if signed_id not in app_ids:
    print(f'AASA mismatch: {signed_id} not found in AASA appIDs: {app_ids}')
    sys.exit(1)
print(f'AASA consistency check passed: {signed_id} registered')
" "$SIGNED_APP_ID"

Jika skrip pengesahan keluar dengan kod ralat, batalkan saluran paip binaan untuk mengelakkan penghantaran binari pautan mendalam yang tidak berfungsi ke pengeluaran.

Carta alir aliran kerja pembangun 4 langkah antarabangsa untuk mengautomasikan pengesahan ID App Pautan Universal iOS dan AASA dalam saluran paip binaan CI/CD pada latar belakang grid krim lembut suam.

Kriteria Pemadanan Pautan Universal

Untuk memastikan penghalaan yang boleh dipercayai, syarat berikut mesti dipenuhi secara serentak:

Konfigurasi Apl Bertandatangan:
application-identifier = <ApplicationIdentifierPrefix>.<CFBundleIdentifier>
com.apple.developer.associated-domains = applinks:<hostname>

Konfigurasi AASA:
appIDs = [..., "<ApplicationIdentifierPrefix>.<CFBundleIdentifier>", ...]
components / paths = Memadankan laluan URL sasaran dan parameter pertanyaan

Kelayakan Sistem:
1. Hak kelayakan Associated Domains secara eksplisit mengandungi nama hos sasaran.
2. Pengecam Aplikasi yang ditandatangani sepadan dengan kemasukan yang dibenarkan dalam appIDs AASA.
3. URL yang masuk memenuhi corak penghalaan AASA.
4. Keadaan perkaitan peranti dan konteks pengguna/pelayar membenarkan perwakilan aplikasi asli.

Walaupun apabila hak kelayakan, perkaitan AASA, dan corak URL semuanya sepadan, penghalaan yang diperhatikan masih boleh bergantung pada keadaan peranti dan konteks pengguna atau pelayar. Sebagai contoh, apabila pengguna mengetik pautan universal semasa sedang melayari domain yang sama dalam Safari, sistem pengendalian mungkin menghormati niat pengguna untuk kekal dalam Safari.

Soalan Lazim (FAQ)

Apakah format tepat pengecam aplikasi dalam fail AASA?
Pengecam aplikasi mesti diformatkan secara ketat sebagai `<ApplicationIdentifierPrefix>.<CFBundleIdentifier>`, di mana `<ApplicationIdentifierPrefix>` ialah prefiks ID App yang dikaitkan dengan aplikasi dalam akaun Pembangun Apple anda (cth., `9JA723G82S`) dan `<CFBundleIdentifier>` ialah ID Bundle (cth., `com.example.app`), menghasilkan `9JA723G82S.com.example.app`. Jangan anggap prefiks itu sentiasa sama dengan ID Pasukan; sahkan nilai daripada profil peruntukan apl.
Mengapakah Pautan Universal saya berfungsi dalam Mod Pembangun tetapi gagal dalam pengeluaran?
Mod Pembangun (`?mode=developer`) membolehkan peranti pembangunan yang layak memintas CDN yang diuruskan Apple dan mengambil fail AASA secara terus daripada pelayan web asal anda melalui HTTPS. Jika Pautan Universal gagal dalam pengeluaran, punca biasa termasuk sijil TLS yang tidak sah pada pelayan asal anda, ubah hala HTTP pada titik akhir AASA, atau muatan AASA pengeluaran mengandungi ralat pemformatan yang ditolak oleh pengikis CDN Apple.
Bolehkah saya menggunakan asterisk kad bebas dalam tatasusunan appIDs AASA?
Untuk penyelesaian masalah Pautan Universal, gunakan Pengecam Aplikasi eksplisit daripada apl bertandatangan (`<App ID Prefix>.<Bundle ID>`) dan isytiharkan pengecam tersebut dalam konfigurasi AASA. Jangan gunakan kad bebas sebagai pengganti kepada pengecam sebenar aplikasi.

Ringkasan dan Rangka Kerja Keputusan

Kebolehpercayaan penghalaan Pautan Universal bergantung pada penjajaran tahap aksara yang tepat merentas tiga nod: konfigurasi App ID Portal Pembangun Apple, hak kelayakan com.apple.developer.associated-domains Xcode, and fail JSON apple-app-site-association yang dihoskan. SDK pihak ketiga atau rangka kerja penghalaan tidak boleh membaiki perkaitan domain sistem pengendalian yang gagal; ia hanya boleh memproses URL selepas iOS berjaya menghantar Pautan Universal kepada aplikasi. Jika Pautan Universal dikaitkan dengan betul pada peringkat sistem pengendalian tetapi pengekstrakan parameter gagal, periksa lapisan penghalaan peringkat aplikasi secara berasingan daripada lapisan perkaitan domain.

Jika aplikasi anda juga memerlukan pemulihan parameter pautan dinamik dan penghalaan onboarding selepas perkaitan Pautan Universal berjaya, OpoInstall menyediakan lapisan SDK pilihan untuk aliran kerja peringkat aplikasi tersebut.

Untuk mengetahui lebih lanjut tentang corak konfigurasi domain dan integrasi pautan mendalam, semak dokumentasi pautan mendalam OpoInstall.

Bahan Berkaitan

  • Konsep: Pengesahan Pengecam Aplikasi, Pengesahan Skema AASA, Pencachean CDN Apple, Pengekstrakan Hak Kelayakan

  • Teknologi: Pautan Universal iOS, Hak Kelayakan Xcode, Portal Pembangun Apple, Kredensial Web Berkongsi

  • Piawaian: IETF RFC 8259 (Pertukaran Data JSON), Spesifikasi TLS 1.3

  • Alat Diagnostik: Alat CLI Apple codesign, Alat macOS swcutil, Pertanyaan Cache CDN yang diuruskan Apple

Dokumentasi Rasmi

Share this article