iOS: Resolución de problemas
En esta página aprenderás cuáles son los errores más comunes al implementar la librería Notificare para iOS.
Activar los registros de depuración
Hay ocasiones en las que el nivel de registro por defecto no es suficiente para diagnosticar problemas. Puedes habilitar los registros de depuración añadiendo lo siguiente a tu archivo NotificareOptions.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>DEBUG_LOGGING_ENABLED</key>
<true/>
</dict>
</plist>
Gestión del estado de la aplicación
Datos importantes de la aplicación, como la información actual del dispositivo y el estado del push, se almacenan en el UserDefaults
estándar. Es fundamental no eliminar manualmente estas propiedades, ya que podría tener efectos secundarios no deseados, como restablecer parcialmente la aplicación. En su lugar, se recomienda utilizar las funciones adecuadas según el caso de uso, como disableRemoteNotifications()
o unlaunch()
.
Claves de aplicación incorrectas
Al implementar Notificare, el archivo de configuración de la librería (el cual se deposita en tu TransferBox) debe contener el Application ID
, Application Key
y el Application Secret
. Como APNS utiliza los servidores sandbox al compilar directamente desde Xcode en el dispositivo y los servidores de producción al distribuir OTA, se recomienda encarecidamente crear dos aplicaciones en Notificare: una para desarrollo y otra para producción. Esto facilitará el cambio entre entornos. Puedes leer más sobre el archivo de configuración aquí.
Cambio a producción
Verifica siempre que se esté incluyendo el archivo correcto NotificareServices.plist
en tu aplicación. Siempre que compiles directamente desde Xcode en un dispositivo, estarás utilizando los servidores sandbox de APNS, por lo tanto, las claves deben apuntar a una cuenta DEV. Si archivas tu aplicación para distribución Ad Hoc, App Store o Enterprise, asegúrate de que las claves apunten a una cuenta PROD. Si no se configura correctamente, no será posible enviar notificaciones a los tokens de dispositivo correctos, ya que se registrarán tokens inválidos.
Certificados expirados
El uso de notificaciones push requiere certificados con fecha de expiración para funcionar correctamente. Sin certificados válidos, no se podrán enviar notificaciones ni generar pases, lo que dejará esta funcionalidad inutilizable. Asegúrate de renovarlos a tiempo y notificar al equipo de Actito para que puedan actualizar el certificado y evitar interrupciones del servicio.
SwiftUI
Al utilizar el nuevo ciclo de vida de aplicaciones SwiftUI, el AppDelegate
no está disponible a menos que se especifique un interceptor. Nuestra librería necesita ser configurada en el método didFinishLaunchingWithOptions
.
En el punto de entrada principal de tu aplicación, añade un UIApplicationDelegateAdaptor
:
@main
struct SampleApp: App {
// add the interceptor
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
Crea el archivo AppDelegate.swift
y configura la librería:
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// Configure Notificare.
Notificare.shared.configure()
// ...
return true
}
}
Notification Service Extension
Incluir NotificareNotificationServiceExtensionKit
vía Cocoapods funciona correctamente cuando se utiliza use_frameworks!
en el Podfile
.
Sin embargo, incluir la librería como enlace dinámico puede dar lugar a dos errores posibles:
- La aplicación no compila si se añade la librería al target de la aplicación pero no al de la extensión;
- O la imagen de la pantalla de bloqueo no se muestra si la librería solo se añade al target de la extensión, ya que esta no se incorpora a la aplicación.
Actualmente, Cocoapods no puede añadir correctamente el XCFramework como framework de enlace dinámico cuando se declara en ambos targets. Para evitar este problema, se recomienda utilizar Swift Package Manager para incluir NotificareNotificationServiceExtensionKit
en la aplicación.
Capacidad de Protección de Datos
Habilitar la capacidad de Protección de Datos en tu aplicación establecerá el nivel de protección de archivos por defecto en completo. Esto hace que el sistema operativo restrinja el acceso a la base de datos, lo cual es necesario para el correcto funcionamiento de nuestras librerías.
Apple recomienda aplicar protección segura solo a archivos que contengan datos sensibles, en lugar de activarla para toda la app. Sin embargo, si eliges esta última opción, podrías encontrar errores de acceso a archivos.
Dado que nuestras librerías requieren acceso a la base de datos incluso cuando el dispositivo está bloqueado (por ejemplo, para procesar una notificación entrante), puedes optar por sobrescribir el nivel de protección de archivos de la base de datos activando la siguiente opción en tu archivo NotificareOptions.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>OVERRIDE_DATABASE_FILE_PROTECTION</key>
<true/>
</dict>
</plist>