Instalar y configurar el SDK de iOS
El SDK de Adapty incluye dos módulos clave para una integración fluida en tu app móvil:
- Core Adapty: Este SDK esencial es necesario para que Adapty funcione correctamente en tu app.
- AdaptyUI: Este módulo opcional es necesario si usas el Adapty Paywall Builder, una herramienta visual sin código para crear paywalls multiplataforma fácilmente.
¿Quieres ver un ejemplo real de cómo se integra el SDK de Adapty en una app móvil? Echa un vistazo a nuestras apps de ejemplo, que muestran la configuración completa, incluyendo la visualización de paywalls, la realización de compras y otras funcionalidades básicas.
Para una guía completa de implementación, también puedes ver los vídeos:
Requisitos
Aunque el SDK es técnicamente compatible con iOS 13.0+ para el módulo principal, en la práctica se requiere iOS 15.0+ porque:
- Todas las funciones de StoreKit 2 requieren iOS 15.0+
- El módulo AdaptyUI solo es compatible con iOS 15.0+
Se requiere Adapty SDK 3.15.7+ al compilar con Xcode 26.4 o posterior.
Instalar el SDK es el paso 5 de la configuración de Adapty. Para que las compras funcionen en tu app, también necesitas conectar tu app a los stores, y luego crear productos, un paywall y un placement en el Adapty Dashboard. La guía de inicio rápido explica todos los pasos necesarios.
Instala el SDK de Adapty
El SDK de Adapty se instala mediante Swift Package Manager. En Xcode, ve a File -> Add Package Dependency…. Ten en cuenta que los pasos para añadir dependencias de paquetes pueden variar según la versión de Xcode, así que consulta la documentación de Xcode si es necesario.
- Introduce la URL del repositorio:
https://github.com/adaptyteam/AdaptySDK-iOS.git - Selecciona la versión (se recomienda la última versión estable) y haz clic en Add Package.
- En la ventana Choose Package Products, selecciona los módulos que necesites:
- Adapty (módulo principal)
- AdaptyUI (opcional, solo si vas a usar Paywall Builder)
Nota:
- Para activar el modo Kids, selecciona Adapty_KidsMode en lugar de Adapty.
- No selecciones ningún otro paquete de la lista: no los necesitarás.
- Haz clic en Add Package para completar la instalación.
- Verifica la instalación: en el navegador de tu proyecto deberías ver “Adapty” (y “AdaptyUI” si lo seleccionaste) bajo Package Dependencies.
Adapty iOS SDK 4.0 es una versión preliminar. Swift Package Manager no resuelve versiones beta mediante la regla Up to Next Major Version (from:), por lo que debes fijar la versión exacta. En Xcode, establece Dependency Rule en Exact Version e introduce 4.0.0-beta.1. En Package.swift, usa .exact("4.0.0-beta.1"). Consulta Migrar el SDK de Adapty iOS a v4.
Activar el módulo Adapty del SDK
Activa el SDK de Adapty en el código de tu aplicación.
El SDK de Adapty solo necesita activarse una vez en tu aplicación.
Para obtener tu Public SDK Key:
- Ve al Adapty Dashboard y navega a App settings → General.
- En la sección Api keys, copia la Public SDK Key (NO la Secret Key).
- Reemplaza
"YOUR_PUBLIC_SDK_KEY"en el código.
O bien, obtenla de forma programática usando el Adapty CLI:
npm install -g adapty
adapty auth login
adapty apps list
O directamente:
npx adapty auth login
adapty apps list
- Asegúrate de usar la Public SDK key para inicializar Adapty; la Secret key solo debe usarse para la API del lado del servidor.
- Las SDK keys son únicas para cada app, así que si tienes varias apps asegúrate de elegir la correcta.
Espera a que activate se resuelva antes de llamar a cualquier otro método del SDK de Adapty. Consulta el orden de llamadas en el SDK de iOS para ver la secuencia completa.
Ahora configura los paywalls en tu app:
- Si usas Adapty Paywall Builder, primero activa el módulo AdaptyUI más abajo y luego sigue la guía de inicio rápido del Paywall Builder.
- Si construyes tu propia interfaz de paywall, consulta la guía de inicio rápido para paywalls personalizados.
Activar el módulo AdaptyUI del SDK
Si planeas usar Paywall Builder y has instalado el módulo AdaptyUI, también necesitas activar AdaptyUI.
En tu código, debes activar el módulo principal de Adapty antes de activar AdaptyUI.
Opcionalmente, al activar AdaptyUI, puedes sobrescribir la configuración de caché predeterminada para paywalls.
Configuración opcional
Registro
Configura el sistema de registro
Adapty registra errores y otra información importante para ayudarte a entender qué está ocurriendo. Hay los siguientes niveles disponibles:
| Nivel | Descripción |
|---|---|
error | Solo se registrarán errores |
warn | Se registrarán errores y mensajes del SDK que no causan errores críticos, pero que conviene tener en cuenta |
info | Se registrarán errores, advertencias y varios mensajes informativos |
verbose | Se registrará cualquier información adicional que pueda ser útil durante la depuración, como llamadas a funciones, consultas a la API, etc. |
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(logLevel: .verbose) // recommended for development
Redirigir los mensajes del sistema de registro
Si necesitas enviar los mensajes de registro de Adapty a tu sistema o guardarlos en un archivo, usa el método setLogHandler e implementa tu lógica de registro personalizada dentro de él. Este handler recibe registros de log con el contenido del mensaje y el nivel de severidad.
Adapty.setLogHandler { record in
writeToLocalFile("Adapty \(record.level): \(record.message)")
}
Políticas de datos
Adapty no almacena datos personales de tus usuarios a menos que los envíes explícitamente, pero puedes implementar políticas adicionales de seguridad de datos para cumplir con las directrices del store o del país.
Desactivar la recopilación y el uso compartido del IDFA
Al activar el módulo de Adapty, establece idfaCollectionDisabled en true para desactivar la recopilación y el uso compartido del IDFA.
Utiliza este parámetro para cumplir con las directrices de revisión de App Store o evitar que aparezca el aviso de App Tracking Transparency cuando tu app no necesita el IDFA. El valor predeterminado es false. Para más información sobre la recopilación del IDFA, consulta la sección Integración de análisis.
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(idfaCollectionDisabled: true)
Deshabilitar la recopilación y el uso compartido de IP
Al activar el módulo de Adapty, establece ipAddressCollectionDisabled en true para deshabilitar la recopilación y el intercambio de la dirección IP del usuario. El valor predeterminado es false.
Usa este parámetro para reforzar la privacidad del usuario, cumplir con las normativas regionales de protección de datos (como GDPR o CCPA) o reducir la recopilación de datos innecesaria cuando las funciones basadas en IP no son necesarias para tu aplicación.
let configurationBuilder =
AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(ipAddressCollectionDisabled: true)
Configuración de caché de medios para paywalls en AdaptyUI
Ten en cuenta que la configuración de AdaptyUI es opcional. Puedes activar el módulo AdaptyUI sin su configuración. Sin embargo, si usas la configuración, todos los parámetros son obligatorios.
// Configure AdaptyUI
let adaptyUIConfiguration = AdaptyUI.Configuration(
mediaCacheConfiguration: .init(
memoryStorageTotalCostLimit: 100 * 1024 * 1024,
memoryStorageCountLimit: .max,
diskStorageSizeLimit: 100 * 1024 * 1024
)
)
// Activate AdaptyUI
AdaptyUI.activate(configuration: adaptyUIConfiguration)
Parámetros:
| Parámetro | Presencia | Descripción |
|---|---|---|
| memoryStorageTotalCostLimit | requerido | Límite de coste total del almacenamiento en bytes. |
| memoryStorageCountLimit | requerido | Límite de número de elementos del almacenamiento en memoria. |
| diskStorageSizeLimit | requerido | Límite de tamaño de archivo en disco del almacenamiento en bytes. 0 significa sin límite. |
Comportamiento al finalizar transacciones
Esta funcionalidad está disponible a partir de la versión 3.12.0 del SDK.
Por defecto, Adapty finaliza las transacciones automáticamente tras una validación correcta. Sin embargo, si necesitas una validación avanzada (como validación de recibos en el servidor, detección de fraude o lógica de negocio personalizada), puedes configurar el SDK para usar la finalización manual de transacciones.
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(transactionsFinishBehavior: .manual) // .auto is the default
Consulta más detalles sobre cómo finalizar transacciones en la guía.
Borrar datos al restaurar desde copia de seguridad
Cuando clearDataOnBackup se establece en true, el SDK detecta cuándo se restaura la app desde una copia de seguridad de iCloud y elimina todos los datos del SDK almacenados localmente, incluyendo la información de perfil en caché, los detalles de productos y los paywalls. A continuación, el SDK se inicializa con un estado limpio. El valor predeterminado es false.
Solo se elimina la caché local del SDK. El historial de transacciones con Apple y los datos de usuario en los servidores de Adapty no se ven afectados.
let configurationBuilder = AdaptyConfiguration
.builder(withAPIKey: "YOUR_PUBLIC_SDK_KEY")
.with(clearDataOnBackup: true) // default – false
Solución de problemas
Error de concurrencia Swift 6 con Tuist
Al compilar con Tuist, es posible que veas errores de compilación por concurrencia estricta de Swift 6. Los síntomas habituales incluyen desajustes del atributo @Sendable en AdaptyUIBuilderLogic u otros errores de Sendability entre módulos.
Esto ocurre porque Tuist genera proyectos Xcode a partir de paquetes SPM pero no conserva el ajuste swift-tools-version: 6.0. Como resultado, algunos targets de Adapty (Adapty, AdaptyUI, AdaptyUIBuilder) se compilan con las reglas de Swift 5 mientras que otros usan Swift 6, lo que provoca incompatibilidades de @Sendable entre módulos.
Solución: Actualiza al SDK de Adapty 3.15.5 o posterior, que resuelve el problema independientemente de las versiones mixtas de Swift.
Alternativa: Si no puedes actualizar, establece explícitamente Swift 6 para los tres targets de Adapty en tu configuración de Tuist:
targetSettings: [
"Adapty": .init().swiftVersion("6"),
"AdaptyUI": .init().swiftVersion("6"),
"AdaptyUIBuilder": .init().swiftVersion("6"),
]