¿Por qué una discrepancia en el Bundle ID interrumpe los Universal Links de iOS? Una discrepancia en el Bundle ID rompe los Universal Links cuando el identificador de aplicación firmado no coincide con la entrada correspondiente de appID/appIDs en el archivo AASA para el dominio asociado, lo que provoca que falle la verificación de dominios asociados.
Un Bundle ID (CFBundleIdentifier) es una cadena única que identifica a una aplicación individual de iOS dentro del ecosistema de Apple. En las arquitecturas de Universal Links, el Bundle ID se concatena con el prefijo del identificador de aplicación para formar el identificador de aplicación, que el sistema operativo valida frente al archivo apple-app-site-association alojado para autorizar el manejo nativo de URL.
| Término | Definición |
|---|---|
| Bundle ID | El identificador DNS inverso único asignado a un objetivo de aplicación iOS en Xcode (CFBundleIdentifier). |
| Prefijo del Identificador de Aplicación | El prefijo de App ID asignado en la configuración de la cuenta de Apple Developer (frecuentemente, aunque no siempre, idéntico al Team ID). |
| Universal Links | El mecanismo estándar de Apple para enrutar URL HTTPS web directamente a las vistas nativas de la aplicación. |
| Dominios Asociados | Los permisos (entitlements) de Xcode que declaran qué dominios web está autorizada a gestionar una aplicación (applinks:). |
| Archivo AASA | El archivo JSON (apple-app-site-association) alojado en un dominio para autorizar el manejo de URL de la aplicación. |
Cadena de Diagnóstico Canónica
El diagrama a continuación ilustra la secuencia de verificación de múltiples niveles ejecutada durante la instalación de la aplicación y la validación de dominios:
Capa 1: Binario de Aplicación Firmado
│
├── application-identifier (<Prefix>.<BundleID>)
├── com.apple.developer.team-identifier
└── com.apple.developer.associated-domains (applinks:example.com)
│
▼
Capa 2: Entrega de AASA e Ingesta en CDN
│ (Infraestructura gestionada por Apple recupera el AASA de origen)
▼
Capa 3: Esquema AASA y Coincidencia de Patrones
│ (Valida la matriz appIDs y las reglas de enrutamiento components/paths)
▼
Capa 4: Estado de Asociación del Dispositivo
│ (El sistema operativo registra los dominios verificados en la base de datos local)
▼
Capa 5: Ejecución del Enrutamiento de la Aplicación
│ (El sistema enruta las URL coincidentes a los controladores del ciclo de vida de la aplicación)

Lista de Verificación Rápida: Rutina de Diagnóstico de 30 Segundos
Cuando los Universal Links recurren inesperadamente al manejo web, verifica estos elementos en orden:
- Extraer Identificador Firmado: Inspecciona los permisos integrados en el binario compilado para obtener el
application-identifierexacto (<Prefix>.<BundleID>). - Verificar el Formato de Permisos: Confirma que
com.apple.developer.associated-domainscontenga el nombre de host exacto (p. ej.,applinks:subdomain.domain.com) sin rutas innecesarias, cadenas de consulta o barras inclinadas al final. - Auditar el AASA de Origen: Obtén
https://subdomain.domain.com/.well-known/apple-app-site-associationy asegúrate de que el identificador de aplicación firmado aparezca textualmente enappIDs. - Validar Coincidencia de Rutas: Confirma que la URL de destino coincida con los patrones
componentsopathsdefinidos en la configuración de AASA. - Comprobar el Alcance del Dominio: Asegúrate de que el permiso de dominio asociado cubra el nombre de host de destino y que la configuración AASA correspondiente esté disponible para dicho dominio. Para subdominios, utiliza un nombre de host explícito o la forma de comodín
*.admitida según corresponda. - Aislar Modos de Desarrollo: Utiliza
?mode=developeren compilaciones firmadas para desarrollo con el fin de evitar el almacenamiento en caché de la CDN de Apple durante las iteraciones.
Por qué Importa la Precisión del Bundle ID y del Identificador de Aplicación
La Anatomía de un Identificador de Aplicación
La verificación de Universal Links no evalúa el nombre de presentación de la aplicación, el esquema de URL interno ni el nombre del paquete. Según la documentación de Apple sobre applinks.Details, el modelo de seguridad se basa estrictamente en el Identificador de Aplicación totalmente cualificado, estructurado como:
Donde:
ApplicationIdentifierPrefix: El prefijo de App ID asignado en la configuración de tu cuenta de Apple Developer (p. ej.,9JA723G82S). Para muchas cuentas de desarrollador modernas, este valor coincide con el Team ID de 10 caracteres, pero los ingenieros deben verificar el prefijo real en su portal de desarrolladores de Apple en lugar de asumir que ambos son intercambiables.CFBundleIdentifier(Bundle ID): La cadena distinguible entre mayúsculas y minúsculas con formato DNS inverso definida en la configuración de compilación del objetivo (p. ej.,com.example.mobileapp).
En el archivo JSON apple-app-site-association (AASA) alojado, esta cadena compuesta aparece dentro de la matriz appIDs o de las entradas del diccionario appID (p. ej., 9JA723G82S.com.example.mobileapp). Si existe una discrepancia de caracteres, diferencia de mayúsculas/minúsculas o un espacio al final entre el permiso integrado del binario compilado y la entrada AASA alojada, la verificación del dominio fallará.
Una discrepancia en el Bundle ID es una de las causas de mayor prioridad a comprobar durante el triaje de integración, pero no es la única razón por la cual un Universal Link puede recurrir al navegador.
Cómo los Dominios Asociados y el AASA Establecen una Asociación Bidireccional
A diferencia de los esquemas de URL personalizados, que cualquier aplicación instalada puede declarar sin verificación de dominio, los Universal Links establecen una asociación segura y bidireccional:
- Declaración de Aplicación a Dominio: La aplicación iOS compilada declara que reclama la propiedad de un dominio web específico al incluir el permiso
com.apple.developer.associated-domainsen su firma de código. - Autorización de Dominio a Aplicación: El dominio web confirma que otorga autorización de enrutamiento a aplicaciones específicas al alojar el archivo JSON AASA en
https://<domain>/.well-known/apple-app-site-associationohttps://<domain>/apple-app-site-association.
Durante la instalación o actualización de la aplicación, el sistema operativo verifica el permiso de dominios asociados firmado de la app con la configuración AASA recuperada para el dominio. El identificador de aplicación utilizado para la asociación de la app debe coincidir con el identificador correspondiente declarado en la configuración AASA. Una vez que el identificador coincide, la URL solicitada también debe cumplir con las reglas configuradas en components o paths.
El Síntoma del Fallo: Por Qué los Identificadores Desalineados Forzarán Resguardos Web
Cuando ocurre una discrepancia en el Identificador de Aplicación, iOS normalmente no muestra esta discrepancia como una excepción de tiempo de ejecución fatal. En su lugar, el fallo se refleja en el estado de verificación de dominios asociados, en los diagnósticos del dispositivo o en el comportamiento resultante de reserva web:
- Manejo del Sistema: Cuando la asociación de dominio falla, el sistema no invoca la aplicación a través de la ruta del Universal Link verificada. Dependiendo de cómo se abrió la URL y el contexto del navegador circundante, la URL permanece en el manejo web o recurre a él en lugar de ser entregada a la aplicación nativa.
- Impacto en la Experiencia de Usuario: Cuando un usuario pulsa en un enlace web coincidente en Mensajes, Correo o Safari, el sistema no logra reconocer una asignación de aplicación nativa autorizada y abre la URL web en el navegador.
Véase También: Bundle ID ──> Arquitectura de Universal Links
Cómo la CDN de Apple Obtiene y Almacena en Caché los Archivos AASA
El Protocolo de Instalación y la Mecánica de la CDN de Apple
Cuando una aplicación que contiene el permiso com.apple.developer.associated-domains se instala o actualiza, el sistema establece o refresca una relación de dominio asociado:
- Raspador Mediado por CDN: Cuando el sistema establece o actualiza una relación de dominio asociado, obtiene los datos AASA del dominio a través de la infraestructura de dominios asociados de Apple y utiliza dichos datos para verificar la asociación.
- Ciclo de Vida de Caché Independiente: La CDN gestionada por Apple controla su propio ciclo de vida de actualización y almacenamiento en caché, por lo que no se debe asumir que una actualización en el origen sea visible de inmediato a través de la CDN. Al probar cambios, utiliza el modo alternativo de desarrollo documentado cuando corresponda e inspecciona el estado de asociación del dispositivo.
- Requisitos del Servidor de Origen: El servidor web de origen debe servir el archivo AASA a través de HTTPS con un certificado TLS válido y de confianza (los certificados autofirmados son rechazados), utilizando el tipo MIME
application/json. El alojamiento de AASA no debe depender de redireccionamientos HTTP; el extremo de AASA debe devolver el archivo directamente con un código HTTP 200 OK.
Consistencia del Formato JSON de AASA
Las versiones modernas de iOS admiten la sintaxis granular del diccionario components manteniendo al mismo tiempo la compatibilidad retroactiva con las matrices heredadas paths.
Según la Nota Técnica TN3155 de Apple Developer sobre Depuración de Universal Links, dentro de una entrada details determinada, los desarrolladores deben utilizar la estructura moderna appIDs + components o la estructura heredada appID + paths; no mezcles ambas estructuras en una misma entrada, ya que las configuraciones mixtas pueden producir un comportamiento de verificación inesperado.
Los ejemplos de AASA más antiguos incluían comúnmente "apps": []. Para implementaciones dirigidas a versiones modernas de sistemas operativos de Apple, esta clave no es obligatoria; consérvala únicamente cuando des soporte a versiones heredadas de SO que la esperen específicamente.
Protocolo de Diagnóstico: Flujo de Resolución Paso a Paso
Paso 1: Inspeccionar los Permisos Firmados de la Aplicación con codesign
Para determinar si un IPA exportado o una compilación de depuración contiene exactamente el Identificador de Aplicación y los Dominios Asociados esperados, inspecciona la firma de código del binario directamente utilizando la utilidad de línea de comandos codesign de macOS. Comprueba application-identifier, com.apple.developer.team-identifier y com.apple.developer.associated-domains de forma conjunta.
El perfil de aprovisionamiento muestra qué capacidades y dominios permite dicho perfil; el ejecutable firmado (codesign) muestra lo que realmente contiene el binario distribuido.
Paso 2: Auditar el Esquema JSON AASA Alojo
Verifica que el servidor de origen aloje un archivo AASA válido que sea públicamente accesible sin autenticación ni redireccionamientos. Ten en cuenta que los ejemplos de AASA antiguos comúnmente incluían "apps": [], mientras que las configuraciones modernas dirigidas a lanzamientos contemporáneos de iOS omiten esta clave.
El esquema JSON AASA estándar a continuación ilustra el enrutamiento de rutas adecuado utilizando la estructura moderna appIDs y 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"
}
]
}
]
}
}
Paso 3: Ejecutar Herramientas CLI de Diagnóstico (codesign, swcutil, curl)
En las versiones de macOS que proporcionan diagnósticos con swcutil, utiliza la herramienta para inspeccionar o validar los datos de dominios asociados. Debido a que las opciones de comandos pueden variar entre versiones de SO y cadenas de herramientas, confirma las opciones disponibles con swcutil --help antes de ejecutar los flujos de diagnóstico a continuación:
# 0. Confirmar las opciones disponibles (la sintaxis puede variar según la versión del SO y la cadena de herramientas)
swcutil --help
# 1. Desempaquetar el archivo IPA exportado
unzip -q YourApp.ipa -d UnpackedApp
# 2. Extraer e inspeccionar los permisos firmados directamente desde el binario ejecutable
codesign -d --entitlements :- "UnpackedApp/Payload/YourApp.app" > signed-entitlements.plist 2>/dev/null
/usr/libexec/PlistBuddy -c "Print" signed-entitlements.plist
# 3. Comprobar si los datos AASA se pueden descargar para el dominio utilizando swcutil (herramienta de diagnóstico de macOS)
sudo swcutil dl -d custom.opwakeup.com
# 4. Validar la coincidencia de patrones AASA frente a una URL específica usando swcutil
sudo swcutil verify -d custom.opwakeup.com -j ./apple-app-site-association -u https://custom.opwakeup.com/product/123
# 5. Consultar directamente el punto de extremo de diagnóstico de la CDN de Dominios Asociados gestionada por Apple
curl -i https://app-site-association.cdn-apple.com/a/v1/custom.opwakeup.com
Inspecciona el punto de extremo de la CDN de Dominios Asociados gestionada por Apple al solucionar problemas de datos AASA entregados en el borde. Trata este punto de extremo como infraestructura de diagnóstico en lugar de como un contrato de API pública.
Paso 4: Usar el Modo Desarrollador de Dominios Asociados para Pruebas AASA
Según la documentación de Apple sobre Configuración de Dominios Asociados, Apple proporciona un modo alternativo para el desarrollo. El modo developer (?mode=developer) permite que los dispositivos de desarrollo elegibles omitan la CDN gestionada por Apple y obtengan el archivo AASA directamente del dominio asociado a través de HTTPS.
La configuración a continuación demuestra cómo declarar el Modo Desarrollador en configuraciones de permisos de Xcode independientes:
<?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>
Una vez que el sistema operativo establece la asociación de dominio, el enrutamiento a nivel de aplicación gestiona las cargas de URL entrantes utilizando delegados estándar de los ciclos de vida de UIKit o SwiftUI:
import UIKit
// ----------------------------------------------------------------------------
// 1. Implementación de UIKit AppDelegate
// ----------------------------------------------------------------------------
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
return true
}
// Devolución de llamada estándar de continuación de Universal Link de Apple
func application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL else {
return false
}
print("Manejando Universal Link verificado: \(incomingURL.absoluteString)")
// Enviar incomingURL al enrutador interno o a la capa del SDK para la extracción de parámetros
return handleIncomingRoute(incomingURL)
}
private func handleIncomingRoute(_ url: URL) -> Bool {
// Lógica de enrutamiento de destino a nivel de aplicación
// Nota: Devolver true indica que la aplicación manejó la actividad, no que el análisis de la URL haya tenido éxito.
return true
}
}
// ----------------------------------------------------------------------------
// 2. Implementación del Ciclo de Vida de SceneDelegate (iOS 13+)
// ----------------------------------------------------------------------------
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func 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("Universal Link en inicio en frío: \(incomingURL.absoluteString)")
}
}
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL {
print("Universal Link en primer plano: \(incomingURL.absoluteString)")
}
}
}
Para habilitar el Modo Desarrollador del lado del cliente en hardware físico:
- En iOS 16+, ve a Ajustes > Privacidad y seguridad > Modo Desarrollador y actívalo (se requiere reiniciar el dispositivo).
- Ve a Ajustes > Desarrollador > Desarrollo de dominios asociados y activa el interruptor.
- Instala la compilación de desarrollo firmada con un perfil de aprovisionamiento de desarrollo que contenga el permiso
?mode=developer. - Nota de Producción: Mantén
?mode=developerrestringido a las configuraciones de desarrollo y pruebas internas, y no lo incluyas en el permiso de dominios asociados de producción a menos que tu despliegue requiera y admita explícitamente dicha configuración.
Árbol de Decisiones de Causa Raíz
El Universal Link recurre al manejo web
│
├── ¿El application-identifier firmado coincide con los appIDs del AASA?
│ ├── NO ──> Corregir el prefijo del App ID o el Bundle ID en el AASA
│ └── SÍ
│
├── ¿El permiso associated-domains lista el dominio exacto?
│ ├── NO ──> Añadir applinks:<domain> a los permisos de destino
│ └── SÍ
│
├── ¿sudo swcutil dl -d <domain> se ejecuta con éxito?
│ ├── NO ──> Corregir el HTTPS de origen, los certificados TLS o los redireccionamientos 301/302
│ └── SÍ
│
├── ¿sudo swcutil verify coincide con la ruta de la URL de destino?
│ ├── NO ──> Corregir la sintaxis de components o paths en el AASA
│ └── SÍ
│
└── Comprobar el estado de asociación del dispositivo y los controladores de enrutamiento internos de la aplicación

Matriz de Diagnóstico: Causas Raíz de Fallos en Universal Links
| Modo de Fallo | Causa Raíz Subyacente | Comportamiento del Sistema Observado | Remediación Recomendada |
|---|---|---|---|
| Error tipográfico en Bundle ID | Sensibilidad a mayúsculas/minúsculas o discrepancia de caracteres en appIDs de AASA |
El enlace abre el navegador en lugar de la aplicación nativa | Corregir la cadena en el JSON AASA y volver a desplegar en el origen |
| Discrepancia en el Prefijo de App ID | Uso de un prefijo incorrecto en lugar del App ID Prefix real del desarrollador | La asociación de dominio falla durante la instalación | Verificar el prefijo del identificador de aplicación en Apple Member Center |
| Discrepancia de Subdominio | El permiso apunta a www.example.com mientras que el AASA está en example.com |
La aplicación no logra reclamar los enlaces del subdominio | Alojar un archivo AASA dedicado en cada subdominio reclamado o configurar un comodín |
| Redireccionamiento HTTP en el Extremo | El servidor de origen devuelve un redireccionamiento 301 o 302 para la URL de AASA | El raspador de la CDN de Apple rechaza el archivo AASA | Configurar el servidor web para devolver directamente un 200 OK |
| Inconsistencia en el Formato AASA | Mezclar appID/paths heredados con appIDs/components modernos |
Coincidencia de rutas inconsistente o parcial | Estandarizar en la sintaxis moderna de appIDs + components |
| Discrepancia en Patrón de URL | AASA se descarga con éxito pero la URL solicitada no coincide con los patrones | El enlace se abre en el navegador web | Verificar la sintaxis de rutas y componentes usando swcutil verify |
| Modo Desarrollador Activo en Versión de Lanzamiento | La compilación de distribución conserva el modo alternativo de desarrollo | Permiso no estándar en la compilación de distribución | Eliminar ?mode=developer en la configuración de compilación Release |

Implementación de Configuración de Entorno Dual en Xcode
Gestión de Múltiples Configuraciones de Compilación (Debug, Staging, Production)
Los canales de desarrollo empresarial gestionan frecuentemente diferentes Bundle IDs en distintos entornos de compilación (p. ej., com.example.app.debug, com.example.app.staging, com.example.app).
Para mantener Universal Links funcionales en todas las configuraciones de compilación:
-
Declaraciones AASA Explícitas: El archivo AASA alojado debe enumerar explícitamente el Identificador de Aplicación totalmente cualificado de cada entorno en su matriz
appIDs:"appIDs": [ "9JA723G82S.com.example.app", "9JA723G82S.com.example.app.staging", "9JA723G82S.com.example.app.debug" ] -
Permisos Específicos por Destino (Target): Utiliza la configuración de compilación de Xcode para vincular archivos
.entitlementsdistintos por entorno de compilación, asegurando que las compilaciones internas de depuración no consulten los dominios de producción.
Gestión de Identificadores de Destino
Para la solución de problemas de Universal Links, utiliza el Bundle ID exacto y el prefijo de Identificador de Aplicación de la compilación firmada en lugar de depender de identificadores comodín. Trata cada nombre de host de forma explícita: si la app reclama example.com y www.example.com, configura las entradas de dominios asociados correspondientes y asegúrate de que cada nombre de host sirva los datos AASA adecuados. Asegúrate de que el permiso esté configurado en el objetivo que realmente gestiona los Universal Links, y verifica cualquier extensión de aplicación u objetivos watchOS por separado cuando corresponda.
Validación de Perfiles de Aprovisionamiento Integrados y Binarios Firmados en CI/CD
Automatiza la verificación de permisos e Identificadores de Aplicación dentro de los scripts de compilación de integración continua antes de cargar los binarios a TestFlight:
# Script de validación automatizada de CI
security cms -D -i /path/to/embedded.mobileprovision > provision.plist
# 1. Inspeccionar los permisos del perfil para ver los Dominios Asociados permitidos
/usr/libexec/PlistBuddy -c "Print :Entitlements:com.apple.developer.associated-domains" provision.plist
# 2. Extraer los permisos firmados reales del binario ejecutable compilado
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 "Identificador de Aplicación Firmado Extractor: $SIGNED_APP_ID"
# 3. Validar que los Dominios Asociados firmados coincidan con el dominio de destino
/usr/libexec/PlistBuddy -c "Print :com.apple.developer.associated-domains" signed-entitlements.plist
# 4. Verificar mediante Python que el App ID firmado exista en el archivo AASA alojado
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"
Si el script de verificación finaliza con un código de error, aborta la canalización de compilación para evitar enviar binarios de deep linking no funcionales a producción.

Criterios de Coincidencia de Universal Links
Para garantizar un enrutamiento fiable, deben cumplirse las siguientes condiciones simultáneamente:
Configuración de la App Firmada:
application-identifier = <ApplicationIdentifierPrefix>.<CFBundleIdentifier>
com.apple.developer.associated-domains = applinks:<hostname>
Configuración AASA:
appIDs = [..., "<ApplicationIdentifierPrefix>.<CFBundleIdentifier>", ...]
components / paths = Coincidencia con las rutas y parámetros de consulta de la URL de destino
Elegibilidad del Sistema:
1. El permiso de dominios asociados contiene explícitamente el nombre de host de destino.
2. El Identificador de Aplicación firmado coincide con una entrada autorizada en los appIDs AASA del dominio.
3. La URL entrante satisface los patrones de enrutamiento AASA.
4. El estado de asociación del dispositivo y el contexto del usuario/navegador permiten la delegación en la aplicación nativa.
Incluso cuando el permiso, la asociación AASA y el patrón de URL coinciden, el comportamiento de enrutamiento observado aún puede depender del estado del dispositivo y del contexto del usuario o navegador. Por ejemplo, cuando un usuario pulsa un universal link mientras ya está navegando por el mismo dominio en Safari, el sistema operativo puede respetar la intención del usuario de permanecer en Safari.
Preguntas Frecuentes (FAQ)
¿Cuál es el formato exacto del identificador de aplicación en el archivo AASA?
¿Por qué mi Universal Link funciona en el Modo Desarrollador pero falla en producción?
¿Puedo usar asteriscos como comodines en la matriz appIDs de AASA?
Resumen y Marco de Decisiones
La fiabilidad del enrutamiento de los Universal Links depende de la alineación exacta a nivel de caracteres en tres nodos: la configuración de App ID en el Portal de Desarrolladores de Apple, el permiso com.apple.developer.associated-domains en Xcode y el archivo JSON apple-app-site-association alojado. Un SDK de terceros o un marco de enrutamiento no puede reparar una asociación de dominio fallida en el sistema operativo; solo puede procesar la URL una vez que iOS ha entregado con éxito el Universal Link a la aplicación. Si los Universal Links están asociados correctamente a nivel de sistema operativo pero la extracción de parámetros falla, inspecciona la capa de enrutamiento a nivel de aplicación de forma separada de la capa de asociación de dominios.
Si tu aplicación también requiere la restauración de parámetros de enlaces dinámicos y el enrutamiento de incorporación (onboarding) una vez que la asociación del Universal Link tiene éxito, OpoInstall proporciona una capa de SDK opcional para ese flujo de trabajo a nivel de aplicación.
Para obtener más información sobre los patrones de configuración de dominios y la integración de deep linking, revisa la documentación de deep linking de OpoInstall.
Materiales Relacionados
-
Conceptos: Verificación de Identificadores de Aplicación, Validación de Esquemas AASA, Almacenamiento en Caché de CDN de Apple, Extracción de Permisos
-
Tecnologías: Universal Links de iOS, Permisos de Xcode, Portal de Apple Developer, Credenciales Web Compartidas
-
Estándares: IETF RFC 8259 (Intercambio de Datos JSON), Especificación TLS 1.3
-
Herramientas de Diagnóstico: Herramienta CLI de Apple
codesign, Herramienta de macOSswcutil, Consulta de Caché de CDN Gestionada por Apple
Documentación Oficial
-
Documentación de Apple Developer sobre Compatibilidad con Dominios Asociados
-
Documentación de Apple Developer sobre Configuración de Permisos de Dominios Asociados
-
Nota Técnica TN3155 de Apple Developer: Depuración de Universal Links
-
Documentación de Apple Developer sobre Compatibilidad con Universal Links en tu Aplicación
Share this article



