Files
daily-notification-plugin/ios/Plugin
Jose Olarte III 0a2cbf24f7 fix(ios): correct next notification time and improve rollover UI refresh
- Fix getNextNotificationTime() to find earliest scheduled notification
  instead of using first request (pendingNotificationRequests doesn't
  guarantee order)
- Add comprehensive logging for rollover tracking with DNP-ROLLOVER
  prefix for Xcode console filtering
- Reset all notifications and rollover state when scheduling new
  notification via scheduleDailyNotification() to ensure clean test
  state
- Fix userInfo scope error in handleNotificationDelivery error handler
- Update test app UI to refresh status every 5-10 seconds and
  immediately after notification delivery to reflect rollover changes
- Add console logging in UI to debug getNotificationStatus() results

This ensures the UI correctly displays the next notification time after
rollover completes, and test notifications start with a clean slate.
2025-12-15 21:42:48 +08:00
..

iOS Implementation

This directory contains the iOS-specific implementation of the DailyNotification plugin.

Last Updated: 2025-12-08
Version: 1.1.0

Current Implementation Status

IMPLEMENTED:

  • Basic plugin structure (DailyNotificationPlugin.swift)
  • UserDefaults for local data storage
  • Power management (DailyNotificationPowerManager.swift)
  • Battery optimization handling
  • iOS notification categories and actions
  • App Launch Recovery (DailyNotificationReactivationManager.swift)
    • Cold start recovery
    • Termination recovery
    • Boot recovery
    • Scenario detection
    • Missed notification detection
    • Future notification verification
  • Core Data Integration
    • NotificationContent, NotificationDelivery, NotificationConfig entities
    • DAO classes for all entities (CRUD operations)
    • Data type conversions (Date ↔ Int64, etc.)
    • PersistenceController with entity verification
  • Logging & Observability
    • Comprehensive recovery logging
    • Metrics recording in Core Data History
    • Execution time tracking
  • Error Handling
    • iOS-specific error codes
    • Graceful error handling (non-fatal)
    • Partial results on failures
  • API Methods
    • iOS-specific notification permission methods
    • Background task status methods
    • Pending notifications query

⚠️ PARTIALLY IMPLEMENTED:

  • BGTaskScheduler for background data fetching (basic registration)
  • Background task management (needs enhancement)

NOT IMPLEMENTED (Planned):

  • Silent push nudge support
  • Tlead prefetch logic (enhancement)

Implementation Details

The iOS implementation currently uses:

  • UNUserNotificationCenter for notification management
  • UserDefaults for local data storage
  • iOS notification categories and actions
  • Power management and battery optimization
  • Core Data for structured data persistence
  • BGTaskScheduler for background task registration
  • App Launch Recovery for notification reconciliation

Architecture:

  • ReactivationManager: Handles app launch recovery scenarios
  • DAO Layer: Core Data access objects for all entities
  • Data Conversions: Type conversion utilities (Date, Int, String, JSON)
  • History Recording: Core Data persistence for recovery metrics
  • Error Handling: Comprehensive error codes and graceful degradation

Planned additions:

  • Enhanced background task management
  • Silent push support

Native Code Location

The native iOS implementation is located in the ios/ directory at the project root.

Key Components

  1. DailyNotificationPlugin.swift: Main plugin class
  2. DailyNotificationPowerManager.swift: Power state management
  3. DailyNotificationConfig.swift: Configuration options
  4. DailyNotificationMaintenanceWorker.swift: Maintenance tasks
  5. DailyNotificationLogger.swift: Logging system
  6. DailyNotificationReactivationManager.swift: App launch recovery
  7. HistoryDAO.swift: Recovery history persistence
  8. NotificationContentDAO.swift: Notification content CRUD
  9. NotificationDeliveryDAO.swift: Delivery tracking CRUD
  10. NotificationConfigDAO.swift: Configuration CRUD
  11. DailyNotificationDataConversions.swift: Type conversion utilities
  12. DailyNotificationErrorCodes.swift: iOS-specific error codes
  13. DailyNotificationModel.swift: Core Data model & PersistenceController

Background Task Components:

  • DailyNotificationBackgroundTasks.swift: Background task handlers ⚠️ (basic)
  • DailyNotificationBackgroundTaskManager.swift: Task management ⚠️ (basic)

Implementation Notes

  • Uses UserDefaults for lightweight data storage
  • Uses Core Data for structured data persistence
  • Implements proper battery optimization handling
  • Supports iOS notification categories and actions
  • Handles background refresh limitations
  • App launch recovery with scenario detection
  • Comprehensive error handling (non-fatal)
  • Metrics recording and observability
  • BGTaskScheduler registration

Recovery Scenarios Supported:

  • Cold Start: App terminated, notifications may need verification
  • Termination: App terminated, all notifications cleared
  • Boot: Device rebooted, full recovery needed
  • Warm Start: No recovery needed (optimization)

Planned Features:

  • Enhanced background task budget management
  • Silent push notification support
  • Advanced prefetch logic

Testing

Run iOS-specific tests with:

npm run test:ios