Skip to content

fix: compatibilidad de UserNotifications con el SDK de CI - #1

Merged
AndreeTorres merged 2 commits into
mainfrom
fix/notificaciones-sdk16
Jul 25, 2026
Merged

AndreeTorres merged 2 commits into
mainfrom
fix/notificaciones-sdk16

Conversation

@AndreeTorres

Copy link
Copy Markdown
Owner

Las variantes async de UserNotifications devuelven tipos no-Sendable que el SDK de Xcode 16 (el de los runners) rechaza, aunque compilen con el SDK local más nuevo. Este PR usa las variantes con completion handler y aísla el delegado.

Se valida en CI antes de tocar main.

Las variantes async devuelven tipos no-Sendable (UNNotificationSettings)
que no cruzan la frontera de actor en el SDK de Xcode 16, aunque sí
compilen con el SDK más nuevo local. Se extrae solo el estado de
autorización dentro del callback @sendable, y el delegado se mueve a
una clase nonisolated Sendable que entrega únicamente el UUID de la
tarea y qué acción fue.
Copilot AI review requested due to automatic review settings July 25, 2026 04:21
Un 'static let' dentro de una clase @mainactor queda aislado al actor y
el delegado nonisolated no puede leerlo.
@AndreeTorres
AndreeTorres merged commit a29c6a8 into main Jul 25, 2026
2 checks passed
@AndreeTorres
AndreeTorres deleted the fix/notificaciones-sdk16 branch July 25, 2026 04:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Actualiza la integración con UserNotifications para que compile con el SDK de Xcode 16 usado en CI, evitando los problemas de Sendable de las variantes async y aislando el delegado en un tipo separado.

Changes:

  • Sustituye UNUserNotificationCenter async por APIs con completion handler @Sendable y wrappers con withCheckedContinuation.
  • Extrae el delegado a NotificationDelegate (nonisolated) que reentra al @MainActor con valores Sendable.
  • Ajusta el acceso a IDs de categoría/acción para que el delegado pueda consultarlos dentro del mismo archivo.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +93 to 97
center.add(request) { @Sendable error in
if let error {
log.error("no se pudo programar la alarma: \(error, privacy: .public)")
}
}
Comment on lines +125 to 129
private func requestAuthorization() async -> Bool {
await withCheckedContinuation { continuation in
center.requestAuthorization(options: [.alert, .sound]) { @Sendable granted, _ in
continuation.resume(returning: granted)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants