---
title: "Gestión de errores en el SDK de iOS"
description: "Gestiona los errores del SDK de iOS de forma eficiente con la guía de solución de problemas de Adapty."
---

El SDK de Adapty tiene su propio contenedor para todo tipo de errores, llamado `AdaptyError`. Básicamente, todo error que devuelve el SDK es un `AdaptyError`. Tiene dos propiedades útiles: `originalError` y `adaptyErrorCode`, que se describen a continuación.
**originalError** contiene el error original en caso de que necesites trabajar directamente con él. Puede ser [SKError](https://developer.apple.com/documentation/storekit/skerror), [NSError](https://developer.apple.com/documentation/foundation/nserror) o simplemente un [Error](https://developer.apple.com/documentation/swift/error) genérico de Swift. Esta propiedad es opcional, ya que algunos errores pueden ser generados directamente por el SDK —como datos inconsistentes o faltantes— y no tendrán un error original sobre el que se construyó el wrapper.

**adaptyErrorCode** se puede usar para gestionar problemas comunes, como:
- credenciales no válidas
- errores de red
- pagos cancelados
- problemas de facturación
- recibo no válido
- y mucho más

Es bastante sencillo comprobar el error buscando códigos específicos y reaccionar en consecuencia.

```swift showLineNumbers title="Swift"
do {
    let info = try await Adapty.makePurchase(product: product)
} catch {
    if error.adaptyErrorCode == .paymentCancelled {
        // purchase was cancelled
        // you can offer discount to your user or remind them later
    }
}
```
:::tip
**Activa los logs detallados antes de depurar.** La mayoría de los `AdaptyError` envuelven un error subyacente de StoreKit, de red o del backend. Con los logs detallados activados (`Adapty.logLevel = .verbose` — consulta [Logging](sdk-installation-ios#logging)), ese error envuelto se imprime en la consola, lo que normalmente indica la causa real. La propiedad `originalError` se rellena independientemente del nivel de log — los logs detallados simplemente lo muestran en la consola.
:::
:::important
Si estas soluciones no resuelven tu problema, consulta [Otros problemas](#other-issues) para conocer los pasos a seguir antes de contactar con el soporte y así ayudarnos a asistirte de forma más eficiente.
:::
## Errores de StoreKit \{#storekit-errors\}
| Error                                                                                                                                      | Código | Solución                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|--------------------------------------------------------------------------------------------------------------------------------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [unknown](https://developer.apple.com/documentation/storekit/skerror/code/unknown)                                                         | 0      | Código de error que indica que ocurrió un error desconocido o inesperado. <br/> Vuelve a intentarlo o consulta la sección [Otros problemas](#other-issues).                                                                                                                                                                                                                                                                                         |
| [clientInvalid](https://developer.apple.com/documentation/storekit/skerror/code/clientinvalid)                                             | 1      | Este código de error indica que el cliente no tiene permiso para realizar la acción intentada.                                                                                                                                                                                                                                                                                                                                                      |
| [paymentCancelled](https://developer.apple.com/documentation/storekit/skerror/code/paymentcancelled)                                       | 2      | <p>Este código de error indica que el usuario canceló una solicitud de pago.</p><p>No se requiere ninguna acción, aunque desde el punto de vista de la lógica de negocio puedes ofrecer un descuento al usuario o recordárselo más adelante.</p>                                                                                                                                                                                                    |
| [paymentInvalid](https://developer.apple.com/documentation/storekit/skerror/code/paymentinvalid)                                           | 3      | Este error indica que uno de los parámetros de pago no fue reconocido por el App Store.                                                                                                                                                                                                                                                                                                                                                             |
| [paymentNotAllowed](https://developer.apple.com/documentation/storekit/skerror/code/paymentnotallowed)                                     | 4      | Este código de error indica que el usuario no tiene permiso para autorizar pagos.                                                                                                                                                                                                                                                                                                                                                                   |
| [storeProductNotAvailable](https://developer.apple.com/documentation/storekit/skerror/code/storeproductnotavailable)                       | 5      | Este código de error indica que el producto solicitado no está disponible en el store. <br/> Intenta reinstalar la app.                                                                                                                                                                                                                                                                                                                             |
| [cloudServicePermissionDenied](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicepermissiondenied)               | 6      | Este código de error indica que el usuario no ha permitido el acceso a la información del servicio en la nube.                                                                                                                                                                                                                                                                                                                                      |
| [cloudServiceNetworkConnectionFailed](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicenetworkconnectionfailed) | 7      | Este código de error indica que el dispositivo no pudo conectarse a la red.                                                                                                                                                                                                                                                                                                                                                                         |
| [cloudServiceRevoked](https://developer.apple.com/documentation/storekit/skerror/code/cloudservicerevoked/)                                | 8      | Este código de error indica que el usuario ha revocado el permiso para usar este servicio en la nube.                                                                                                                                                                                                                                                                                                                                               |
| [privacyAcknowledgementRequired](https://developer.apple.com/documentation/storekit/skerror/code/privacyacknowledgementrequired)           | 9      | Este código de error indica que el usuario aún no ha aceptado la política de privacidad de Apple.                                                                                                                                                                                                                                                                                                                                                   |
| [unauthorizedRequestData](https://developer.apple.com/documentation/storekit/skerror/code/unauthorizedrequestdata)                         | 10     | Este código de error indica que la app está intentando usar una propiedad para la que no tiene el entitlement necesario.                                                                                                                                                                                                                                                                                                                             |
| [invalidOfferIdentifier](https://developer.apple.com/documentation/storekit/skerror/code/invalidofferidentifier)                           | 11     | <p>El [`identifier`](https://developer.apple.com/documentation/storekit/skpaymentdiscount/identifier) de la oferta no es válido. Por ejemplo, no has configurado una oferta con ese identificador en el App Store, o has revocado la oferta.</p><p>Asegúrate de configurar las ofertas deseadas en App Store Connect y de pasar un identificador de oferta válido.</p>                                                                              |
| [invalidSignature](https://developer.apple.com/documentation/storekit/skerror/code/invalidsignature)                                       | 12     | Este código de error indica que la firma en un descuento de pago no es válida.                                                                                                                                                                                                                                                                                                                                                                      |
| [missingOfferParams](https://developer.apple.com/documentation/storekit/skerror/code/missingofferparams)                                   | 13     | Este código de error indica que faltan parámetros en un descuento de pago.                                                                                                                                                                                                                                                                                                                                                                          |
| [invalidOfferPrice](https://developer.apple.com/documentation/storekit/skerror/code/invalidofferprice/)                                    | 14     | Este código de error indica que el precio que especificaste en App Store Connect ya no es válido. Las ofertas siempre deben representar un precio con descuento.                                                                                                                                                                                                                                                                                     |
| noProductIDsFound                                                                                                                          | 1000   | <p>Este error indica que ninguno de los productos que solicitaste en el paywall está disponible para comprar en el App Store, aunque estén listados allí. A veces puede aparecer junto con una advertencia `InvalidProductIdentifiers`. Si la advertencia aparece sin un error, ignórala.</p><p>Si encuentras este error, sigue los pasos de la sección [Solución para el error Code-1000 `noProductIDsFound`](InvalidProductIdentifiers).</p>       |
| productRequestFailed                                                                                                                       | 1002   | No se pueden obtener los productos disponibles en este momento.                                                                                                                                                                                                                                                                                                                                                                                     |
| cantMakePayments                                                                                                                           | 1003   | Las compras in-app no están permitidas en este dispositivo. Consulta la [guía](cantMakePayments) de solución de problemas.                                                                                                                                                                                                                                                                                                                          |
| [cantReadReceipt](https://developer.apple.com/documentation/storekit/skerror/code/paymentcancelled)                                        | 1005   | <p>No hay ningún recibo válido disponible en el dispositivo. Esto puede ser un problema durante las pruebas en sandbox.</p><p>En el sandbox no tendrás un archivo de recibo válido hasta que hagas una compra real, así que asegúrate de hacer una antes de acceder a él. Durante las pruebas en sandbox, verifica también que hayas iniciado sesión en el dispositivo con una cuenta sandbox de Apple válida.</p>                                    |
| productPurchaseFailed                                                                                                                      | 1006   | La compra del producto falló. Esto envuelve un error subyacente de StoreKit; lee `originalError` (o activa los logs detallados para verlo en la consola) para conocer el motivo real. El error envuelto suele ser uno de los códigos de StoreKit del 0 al 14 de la tabla anterior, siendo los más habituales `paymentCancelled`, `paymentInvalid`, `paymentNotAllowed` o `invalidOfferPrice`. Si no puedes identificar un motivo concreto, prueba con un nuevo [perfil sandbox](test-purchases-in-sandbox); si sigue fallando, contacta con el soporte de Apple. |
| refreshReceiptFailed                                                                                                                       | 1010   | La operación de actualización del recibo falló.                                                                                                                                                                                                                                                                                                                                                                                                     |
| fetchSubscriptionStatusFailed                                                                                                              | 1020   | No se pudo obtener el estado de la suscripción desde el App Store.                                                                                                                                                                                                                                                                                                                                                                                  |
| unknownTransactionId                                                                                                                       | 1030   | El identificador de transacción es desconocido.                                                                                                                                                                                                                                                                                                                                                                                                     |
| paymentPendingError                                                                                                                        | 1050   | El pago está pendiente en este momento.                                                                                                                                                                                                                                                                                                                                                                                                             |
## Errores de red \{#network-errors\}
| Error          | Código | Solución                                                                                                                                                                                                     |
| :------------- | :----- |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| notActivated   | 2002 | El SDK de Adapty no está activado. <br/> Se produce con más frecuencia cuando una pantalla de bienvenida o un hook de UI temprano llama a métodos de Adapty antes de que `Adapty.activate` devuelva el resultado. El síntoma es intermitente y puede no reproducirse en el simulador porque el timing en un dispositivo real es diferente. Espera a que el manejador de completado o el resultado asíncrono de `activate` finalice antes de programar cualquier otra llamada al SDK. Consulta [Orden de llamadas en el SDK de iOS](ios-sdk-call-order) para ver la secuencia completa. |
| badRequest     | 2003 | Solicitud incorrecta. <br/> Asegúrate de haber completado todos los pasos necesarios para [integrarte con el App Store](app-store-connection-configuration).                                                 |
| serverError    | 2004 | Error de servidor. <br/> Vuelve a intentarlo pasado un tiempo. Si el problema persiste, contacta con el equipo de soporte de Adapty.                                                                         |
| networkFailed  | 2005 | Este error indica problemas con la conexión de red en el dispositivo del usuario. <br/> Prueba a desactivar la VPN o cambiar de red celular a WiFi, o viceversa.                                             |
| decodingFailed | 2006 | Este error indica que la decodificación de la respuesta falló. <br/> Revisa tu código y asegúrate de que los parámetros que envías son válidos. Por ejemplo, este error puede indicar que estás usando una clave de API no válida. |
| encodingFailed | 2009 | Este error indica que la codificación de la solicitud falló.                                                                                                                                                 |
## Errores generales \{#general-errors\}
| Error                | Código | Solución                                                                                                                                                                                                                                                                                                                                                                                                  |
| :------------------- | :----- |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| analyticsDisabled    | 3000 | No podemos gestionar eventos de analítica porque la has [desactivado](analytics-integration#disabling-external-analytics-for-a-specific-customer).                                                                                                                                                                                                                                                                |
| wrongParam           | 3001 | Este error indica que alguno de tus parámetros no es correcto. <br/> Si usas el Paywall Builder de Adapty y no puedes mostrar un paywall debido a este error, activa **Show on device** en el Paywall Builder.<br/> Otra posible causa es que la versión del archivo de [respaldo](fallback-paywalls) local no coincida con la versión del SDK. Descarga un nuevo archivo desde el dashboard. |
| activateOnceError    | 3005 | No es posible llamar al método `.activate` más de una vez.                                                                                                                                                                                                                                                                                                                                             |
| profileWasChanged    | 3006 | El perfil de usuario cambió durante la operación. <br/> Esto ocurre cuando se llama a un método mientras `Adapty.identify` aún está en curso — la llamada en vuelo llega a un perfil que está a punto de ser reemplazado y el SDK la rechaza. Usa siempre `await` con `identify` (o su completion handler) antes de cualquier llamada de acción del usuario. Consulta [Call order in iOS SDK](ios-sdk-call-order). |
| unsupportedData      | 3007 | Este error indica que el formato de datos no es compatible con el SDK.                                                                                                                                                                                                                                                                                                                                    |
| unidentifiedUserLogout | 3020 | No es posible llamar al método `logout` para un usuario no identificado.                                                                                                                                                                                                                                                                                                                                  |
| fetchTimeoutError    | 3101 | Este error indica que la operación de fetch ha superado el tiempo de espera.                                                                                                                                                                                                                                                                                                                                  |
| operationInterrupted | 9000 | El sistema interrumpió esta operación.                                                                                                                                                                                                                                                                                                                                                             |
## Otros problemas \{#other-issues\}

Si aún no has encontrado una solución, los siguientes pasos pueden ser:
- **Actualizar el SDK a la última versión**: Siempre recomendamos actualizar a las últimas versiones del SDK, ya que son más estables e incluyen correcciones para problemas conocidos.
- **Contacta con el equipo de soporte u obtén ayuda de otros desarrolladores** en el [foro de soporte](https://adapty.featurebase.app/).
- **Contacta con el equipo de soporte en [support@adapty.io](mailto:support@adapty.io) o a través del chat**: Si no estás listo para actualizar el SDK o no te ha ayudado, contacta con nuestro equipo de soporte. Ten en cuenta que tu problema se resolverá más rápido si [activas el registro detallado](sdk-installation-ios#logging) y compartes los logs con el equipo. También puedes adjuntar fragmentos de código relevantes.