fix(ios): resolve build errors and add missing configureNativeFetcher method

Fixed Swift compilation errors preventing iOS build:
- Added explicit self capture [self] in closures in DailyNotificationReactivationManager
- Removed invalid BGTaskScheduler.shared.registeredTaskIdentifiers API call
- Fixed initialization order in DailyNotificationModel (verifyEntities after container init)

Added missing configureNativeFetcher method to iOS plugin:
- Implemented method matching Android functionality
- Stores configuration in UserDefaults for persistence
- Registered method in pluginMethods array
- Supports both jwtToken and jwtSecret parameters for compatibility

This resolves the runtime error "configureNativeFetcher is not a function"
that was preventing the test app from configuring the plugin.
This commit is contained in:
Jose Olarte III
2025-12-11 16:44:18 +08:00
parent 332dfbad75
commit 1bfd87a0e4
10 changed files with 292 additions and 79 deletions
+113 -3
View File
@@ -114,6 +114,114 @@ extension History: Identifiable {
}
// MARK: - NotificationContent Entity
@objc(NotificationContentEntity)
public class NotificationContentEntity: NSManagedObject {
}
extension NotificationContentEntity {
@nonobjc public class func fetchRequest() -> NSFetchRequest<NotificationContentEntity> {
return NSFetchRequest<NotificationContentEntity>(entityName: "NotificationContent")
}
@NSManaged public var id: String?
@NSManaged public var pluginVersion: String?
@NSManaged public var timesafariDid: String?
@NSManaged public var notificationType: String?
@NSManaged public var title: String?
@NSManaged public var body: String?
@NSManaged public var scheduledTime: Date?
@NSManaged public var timezone: String?
@NSManaged public var priority: Int32
@NSManaged public var vibrationEnabled: Bool
@NSManaged public var soundEnabled: Bool
@NSManaged public var mediaUrl: String?
@NSManaged public var encryptedContent: String?
@NSManaged public var encryptionKeyId: String?
@NSManaged public var createdAt: Date?
@NSManaged public var updatedAt: Date?
@NSManaged public var ttlSeconds: Int64
@NSManaged public var deliveryStatus: String?
@NSManaged public var deliveryAttempts: Int32
@NSManaged public var lastDeliveryAttempt: Date?
@NSManaged public var userInteractionCount: Int32
@NSManaged public var lastUserInteraction: Date?
@NSManaged public var metadata: String?
}
extension NotificationContentEntity: Identifiable {
}
// MARK: - NotificationDelivery Entity
@objc(NotificationDelivery)
public class NotificationDelivery: NSManagedObject {
}
extension NotificationDelivery {
@nonobjc public class func fetchRequest() -> NSFetchRequest<NotificationDelivery> {
return NSFetchRequest<NotificationDelivery>(entityName: "NotificationDelivery")
}
@NSManaged public var id: String?
@NSManaged public var notificationId: String?
@NSManaged public var notificationContent: NotificationContentEntity?
@NSManaged public var timesafariDid: String?
@NSManaged public var deliveryTimestamp: Date?
@NSManaged public var deliveryStatus: String?
@NSManaged public var deliveryMethod: String?
@NSManaged public var deliveryAttemptNumber: Int32
@NSManaged public var deliveryDurationMs: Int64
@NSManaged public var userInteractionType: String?
@NSManaged public var userInteractionTimestamp: Date?
@NSManaged public var userInteractionDurationMs: Int64
@NSManaged public var errorCode: String?
@NSManaged public var errorMessage: String?
@NSManaged public var deviceInfo: String?
@NSManaged public var networkInfo: String?
@NSManaged public var batteryLevel: Int32
@NSManaged public var dozeModeActive: Bool
@NSManaged public var exactAlarmPermission: Bool
@NSManaged public var notificationPermission: Bool
@NSManaged public var metadata: String?
}
extension NotificationDelivery: Identifiable {
}
// MARK: - NotificationConfig Entity
@objc(NotificationConfig)
public class NotificationConfig: NSManagedObject {
}
extension NotificationConfig {
@nonobjc public class func fetchRequest() -> NSFetchRequest<NotificationConfig> {
return NSFetchRequest<NotificationConfig>(entityName: "NotificationConfig")
}
@NSManaged public var id: String?
@NSManaged public var timesafariDid: String?
@NSManaged public var configType: String?
@NSManaged public var configKey: String?
@NSManaged public var configValue: String?
@NSManaged public var configDataType: String?
@NSManaged public var isEncrypted: Bool
@NSManaged public var encryptionKeyId: String?
@NSManaged public var createdAt: Date?
@NSManaged public var updatedAt: Date?
@NSManaged public var ttlSeconds: Int64
@NSManaged public var isActive: Bool
@NSManaged public var metadata: String?
}
extension NotificationConfig: Identifiable {
}
// MARK: - Persistence Controller
// Phase 2: CoreData integration for advanced features
// All entities now available: ContentCache, Schedule, Callback, History,
@@ -169,11 +277,13 @@ class PersistenceController {
if let context = tempContainer?.viewContext {
context.automaticallyMergesChangesFromParent = true
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
// Verify all entities are available
verifyEntities(in: context)
}
self.container = tempContainer
// Verify all entities are available (after container is initialized)
if let context = tempContainer?.viewContext {
verifyEntities(in: context)
}
}
} catch {
print("DNP-PLUGIN: Failed to initialize CoreData container: \(error.localizedDescription)")