Skip to content

10.2.0

Choose a tag to compare

@marcocrupi marcocrupi released this 27 Apr 09:42
· 293 commits to main since this release
Immutable release. Only release title and notes can be modified.

Added

  • React Native: TimestampTrigger.repeatInterval for calendar-based custom repeat intervals on timestamp triggers. Timestamp triggers now support custom repeat intervals such as every 2 days, every 2 weeks, and every 3 months from the selected start timestamp.
  • React Native: RepeatFrequency.MONTHLY for monthly timestamp trigger recurrence. Yearly recurrence is not supported.
  • iOS: custom repeat intervals are implemented with a bounded rolling schedule of one-shot local notifications, with top-up when the app becomes active, when the user interacts with a notification, or when a rolling notification is delivered in foreground.

Changed

  • iOS: removed the legacy UILocalNotification launch-options fallback from the initial-notification path. Supported iOS versions use the modern UNUserNotificationCenterDelegate / UNNotificationResponse path for notification taps and getInitialNotification().
  • iOS: migrated deprecated SiriKit call intent identifiers to Apple's unified INStartCallIntentIdentifier. The public IOSIntentIdentifier.START_CALL should be used for notification category intent identifiers. Legacy START_AUDIO_CALL and START_VIDEO_CALL values remain accepted for compatibility, but now map to the unified call intent identifier. getNotificationCategories() can return START_CALL when reading back call intent categories from iOS.
  • iOS: deprecated announcement and notification-summary options are now treated as compatibility no-ops on supported iOS versions. Explicit announcement authorization requests are no longer needed because announcement authorization is included by iOS on supported versions, while notification summary arguments are ignored by iOS 15+. The JS fields remain available for backward compatibility and are marked as deprecated in the TypeScript reference.
  • iOS: foregroundPresentationOptions.alert is now implemented with the modern banner/list presentation options on supported iOS versions instead of calling the deprecated UNNotificationPresentationOptionAlert. The JS option remains available for backward compatibility.
  • iOS behavior change: repeating TimestampTrigger notifications now use a bounded rolling schedule of one-shot local notifications instead of a native repeating UNCalendarNotificationTrigger. This makes custom repeat intervals (repeatInterval) and RepeatFrequency.MONTHLY possible, respects the selected start timestamp, and rebalances the rolling pending-notification budget across active series. Apps that relied on iOS native repeating calendar triggers being scheduled indefinitely should review the new iOS rolling-window behavior: the library keeps upcoming occurrences scheduled and tops them up when the app becomes active, when the user interacts with a notification, or when a rolling notification is delivered in foreground. iOS does not wake an app merely because a local notification was delivered while the app is killed or suspended, so the rolling window cannot be extended indefinitely unless the app runs again.
  • Android: timestamp trigger recurrence now advances by repeatFrequency * repeatInterval using calendar-aware scheduling. Existing triggers without repeatInterval keep the previous behavior with interval 1.
  • Tooling: yarn gen:reference now formats generated reference docs with Prettier so repeated runs are idempotent. The smoke app also has a dedicated Jest setup for a lightweight import/render gate, with owned iOS build warnings cleaned up.

Fixed

  • iOS: rolling timestamp triggers now rebalance the bounded pending-notification window across all active rolling series. This prevents earlier recurring triggers from consuming the entire iOS pending budget and blocking later triggers such as DAILY + repeatInterval: 2, WEEKLY + repeatInterval: 2, and MONTHLY + repeatInterval: 3 from coexisting.
  • Android: cleaned up owned build/lint warnings by modernizing Gradle assignment syntax, replacing deprecated React Native activity access in the Kotlin bridge, adding an explicit action guard to RebootBroadcastReceiver, using Locale.ROOT for resource-name normalization, and removing the invalid smoke-app FOREGROUND_SERVICE_SHORT_SERVICE permission.

Notes

  • Android: RepeatFrequency.MONTHLY is supported with AlarmManager. It is not supported with alarmManager: false, because WorkManager uses duration-based intervals and does not provide calendar-month recurrence semantics.
  • iOS: custom repeat intervals cannot be extended indefinitely while the app remains killed/suspended and the user never interacts with notifications, because iOS does not wake the app merely when a local notification is delivered.

📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.2.0