Releases: marcocrupi/react-native-notify-kit
Releases · marcocrupi/react-native-notify-kit
10.4.4
Immutable
release. Only release title and notes can be modified.
Fixed
- Android: relaxed the Java runtime guard so JDK versions newer than the validated baselines are no longer blocked before the consumer Gradle/AGP/Kotlin/React Native toolchain can evaluate compatibility. JDK 17 remains the minimum requirement, and JDK 17 and JDK 21 are the validated Android build baselines.
Docs
- Docs: clarified the Android JDK policy across installation, environment support, and README documentation. JDK 17+ is required, JDK 17 and JDK 21 are the validated baselines, and newer JDKs remain toolchain-dependent.
Tooling
- Tooling: resolved the repository lockfile alert for xcode's transitive uuid dependency by pinning xcode/uuid to uuid 11.1.1 with a targeted Yarn resolution. This is a repository tooling/compliance fix and does not change notification runtime behavior.
- Expo smoke app / Tooling: updated the Expo smoke fixture from expo ~55.0.23 to ~55.0.26 so its Expo Metro chain resolves postcss to a patched 8.5.x version. This addresses the repository lockfile alert without adding a PostCSS resolution.
- Expo smoke app / Tooling: updated the ws lockfile resolution used through @expo/cli from 8.20.0 to 8.20.1. This addresses the repository lockfile alert without changing Expo, React Native, Metro, or adding a ws resolution.
Tests
- Tests: moved the xcode-backed Expo config plugin tests to Jest's node environment so xcode resolves uuid through the Node/CommonJS export path under the React Native Jest preset.
- Tests: made the iOS NSE helper harness executable so it can be run directly as scripts/test-ios-nse-helper.sh.
- Validation: passed static validation, React Native/server/CLI Jest suites, iOS ObjC helper harnesses, Android core unit tests, Expo config, and CLI tarball E2E validation.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.4
10.4.3
Immutable
release. Only release title and notes can be modified.
Changed
- React Native: updated the library and bare smoke app development target to React Native 0.85.3.
- Smoke app: aligned the bare smoke app tooling with React Native 0.85.3, including React 19.2.3 and
@react-native/*packages. - Jest: migrated React Native Jest configuration to
@react-native/jest-presetfor the React Native 0.85 toolchain. - Smoke app / Android: aligned the bare smoke Android Gradle wrapper with the React Native 0.85.3 template.
- Smoke app / iOS: refreshed the bare smoke
Podfile.lockto React Native 0.85.3 pods, Hermes 250829098.0.10, and RNNotifee 10.4.2.
Tests
- Validation: validated TypeScript checks, React Native Jest tests, server Jest tests, Android unit tests, iOS core generation verification, bare Android
assembleDebug, iOS pod install, and physical iPhone build/install. - Smoke app / iOS: confirmed visible local notification display on a physical iPhone.
- API: public JavaScript API and runtime notification behavior are unchanged by this maintenance update.
Notes
- Expo smoke app: remains on Expo SDK 55 / React Native 0.83.x and was intentionally not updated in this step.
- Expo / React Native 0.85: Expo React Native 0.85 validation remains a separate future track and was not part of this maintenance step.
- Validation limits: FCM, headless/background flows, EAS, and Expo smoke were not validated as part of this step.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.3
10.4.2
Immutable
release. Only release title and notes can be modified.
Fixed
- Expo / iOS: fixed generated
NotifyKitNSEversion/build metadata so the extension mirrors the parent Expo app version/build inInfo.plistand Xcode build settings. - Expo / iOS: fixed
NotifyKitNSEPodfileuse_frameworks!inheritance so the extension matches the host target linkage, including static/dynamic frameworks and Expo conditional Podfile properties. - Expo / iOS: existing generated
NotifyKitNSEtargets are normalized for version/build metadata and Podfile linkage instead of requiring manual deletion/regeneration. - iOS / EAS: fixed another precompiled-modules header visibility issue by making
NotifeeApiModule.mmimportNotifeeCore+UNUserNotificationCenter.hthrough a relativeNotifeeCorepath. This avoids a reported'NotifeeCore+UNUserNotificationCenter.h' file not foundfailure in EAS builds with precompiled modules enabled. Building from source was not affected. - Expo smoke app / iOS: configured targeted static linking for the RNFirebase pods used by the fixture (
RNFBAppandRNFBMessaging) whenios.useFrameworks: "static"is enabled.
Tests
- Expo smoke app / iOS: aligned the RNFirebase smoke fixture with Expo static-frameworks builds by adding
ios.forceStaticLinkingforRNFBAppandRNFBMessaging. The iOS smoke fixture was validated locally withEXPO_USE_PRECOMPILED_MODULES=1, clean Expo prebuild, CocoaPods install, and build/install on a physical iPhone. - Validation: reviewed the iOS import graph to ensure
RNNotifeeno longer uses bare sibling imports forNotifeeCoreheaders involved in the reported precompiled-modules failure.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.2
10.4.1
Immutable
release. Only release title and notes can be modified.
Fixed
- iOS / Expo: fixed a static-frameworks header visibility issue where
NotifeeApiModule.hpublicly importedNotifeeCore.h, which could fail on clean Expo/EAS or CocoaPods builds with'NotifeeCore.h' file not found.
Tests
- Expo smoke app / EAS: hardened the Expo smoke fixture for EAS builds by supporting Firebase file environment variables, enabling Corepack/Yarn 4 on EAS, making the dynamic Expo config compatible with the EAS config reader, and preserving the NotifyKit config plugin build output in the EAS archive.
- Expo smoke app / Android EAS: validated Android EAS Build for the Expo smoke fixture, including Firebase file env secrets, NotifyKit config plugin resolution, RNFirebase config, Gradle build, and APK artifact generation.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.1
10.4.0
Immutable
release. Only release title and notes can be modified.
Added
- Expo: added Expo CNG / prebuild support for development builds. Expo Go is not supported because this library requires native modules and native notification targets/capabilities.
- Expo / iOS / FCM Mode: added official config plugin automation for the
NotifyKitNSENotification Service Extension used by iOS FCM Mode, including generated Swift service,Info.plist, entitlements, Xcode target wiring, EASappExtensionsmetadata, Podfile target,RNNotifeeCoredependency, and.appexembedding. - Expo / Android / foreground services: added explicit opt-in config plugin support for NotifyKit foreground service manifest requirements. When configured, the plugin writes
app.notifee.core.ForegroundService,android:foregroundServiceType, the baseFOREGROUND_SERVICEpermission, required type-specificFOREGROUND_SERVICE_*permissions, and the requiredspecialUsesubtype property. - Expo smoke app: added
apps/expo-smokefixture coverage for development build validation with Expo SDK 55, React Native 0.83.6,expo-dev-client, andreact-native-notify-kitresolved from the workspace or a packed tarball. - Expo smoke app / Android FCM: added Android FCM smoke support through local
google-services.json, RNFirebase data-only receive paths,notifee.handleFcmMessage, and theandroid-expo-smokesender scenario.
Fixed
- iOS / Expo: fixed NSE Podfile integration for Expo prebuild by isolating the generated
NotifyKitNSEtarget as a top-level target instead of inheriting the Expo host target module graph. - iOS / Expo / Firebase: aligned the generated NSE Podfile linkage with Firebase static frameworks and
use_frameworks!configurations used by Expo development builds. - iOS / NSE: fixed a static-framework header import issue involving
NotifeeExtensionHelperandNotifeeCorewhenRNNotifeeCorecompiles inside a Notification Service Extension.
Tests
- Packaging / Expo: validated real npm tarball install from a scratch fixture, plugin resolution from
node_modules, Expo config, iOS prebuild,pod install,xcodebuild,NotifyKitNSE.appexgeneration, and embedding in the app bundle. - Expo smoke app: validated development build runtime smoke on iOS and Android, including TurboModule startup and basic notification display/read paths.
- FCM Mode / iOS: validated foreground delivery on a physical iPhone with real FCM payloads and a generated NSE, including logical iOS attachment metadata in
getDisplayedNotifications()and observedNotifyKitNSEprocess. Visible FCM background delivery and tap-to-open were observed, but JSPRESSmarker validation for iOS background tap remains a follow-up. Killed state, visual lock-screen/banner attachment rendering, textual NSE logs, and data-only RNFirebase client-handler paths are not claimed as verified in this release. - Expo / Android: validated Expo config, Android prebuild,
expo run:android, base NotifyKit runtime, FCM token registration, foregroundandroid-expo-smoke, backgroundandroid-expo-smoke, visible notification display, and killed-state best-effort delivery without force-stop on a Pixel 9 Pro XL running Android 16 / SDK 36. - FCM Mode / Android / Expo: validated RNFirebase data-only foreground and background receive paths with
SMOKE:FCM_ON_MESSAGE,SMOKE:FCM_FOREGROUND_HANDLE_OK,SMOKE:FOREGROUND_EVENT_DELIVERED,SMOKE:FCM_BACKGROUND_MESSAGE, andSMOKE:FCM_BACKGROUND_HANDLE_OK. - FCM Mode / Android / Expo: validated Android foreground/background delivery and tap routing in the Expo smoke app on a Pixel 9 Pro XL, including background
SMOKE:BACKGROUND_EVENT_PRESSwith coherentcorrelationIdandpressActionId=default. The optional foreground tap path was also observed withSMOKE:FOREGROUND_EVENT_PRESS. - Expo / Android / foreground services: validated the Android Expo foreground service config plugin with a real prebuild and a runtime
shortServicesmoke on a Pixel 9 Pro XL. The gate covered manifestshortService,displayNotificationwithasForegroundService,registerForegroundService,stopForegroundService,cancelNotification, anddumpsysconfirmation oftypes=0x00000800/isShortFgs=truewithoutMissingForegroundServiceTypeException,SecurityException, or AndroidRuntime crash.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.4.0
10.3.3
Immutable
release. Only release title and notes can be modified.
Fixed
- iOS: improved
UNUserNotificationCenterdelegate chaining reliability. NotifyKit now performs a controlled idempotent rechain when relevant iOS notification APIs or lifecycle hooks run, so if another SDK assigns itself as the notification center delegate after NotifyKit, NotifyKit can capture that delegate as downstream and reinstall itself as the current delegate. The downstream delegate selector flags are refreshed during rechain, NotifyKit-owned notifications remain handled by NotifyKit, and non-NotifyKit notifications continue to be forwarded downstream. This internal fix does not add a public API, does not use method swizzling, does not introduce a general delegate multiplexer, and preservessetNotificationConfig({ ios: { handleRemoteNotifications: false } })behavior for non-NotifyKit remote notifications while keeping FCM Mode notifications marked with__notifee_notificationNotifyKit-owned. - iOS: guarded downstream delegate completion handlers for forwarded notification callbacks so duplicate downstream completion calls do not invoke the upstream completion more than once. No timeout or fallback behavior is introduced when a downstream delegate does not call completion.
Tests
- Tests: added and validated an iOS delegate chaining harness covering current delegate capture, late delegate override, explicit rechain behavior, downstream forwarding, NotifyKit-owned ownership, selector flag refresh,
handleRemoteNotifications: false, FCM Mode ownership, and downstream completion one-shot behavior.
Tooling
- Packaging/iOS: fixed generated iOS core packaging so the npm tarball is built from a verified
NotifeeCoresource copy. The packageprepackstep now regeneratespackages/react-native/ios/NotifeeCorefrom the rootios/NotifeeCore, verifies that all 17 generated files match the source of truth, and the tarball E2E check now asserts that all 17 iOS core files are included. This prevents local ignored files from masking missing package sources in clean clones or release builds, and removes the anomalous generated file from tracking.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.3
10.3.2
Immutable
release. Only release title and notes can be modified.
Fixed
- iOS: hardened Notification Service Extension payload handling for FCM Mode.
notifee_optionsis now accepted both as the FCM Mode JSON string and as the legacy/manual APNs dictionary shape. Malformed, unexpected, or non-dictionary payload shapes now fall back safely instead of risking notification delivery failure. - iOS: guarded Notification Service Extension delivery so the content handler is called at most once across normal completion and
serviceExtensionTimeWillExpireraces. - iOS: scoped Notification Service Extension helper state per request so overlapping or late attachment completions do not reuse stale singleton state from another notification request.
- iOS: fixed
getNotificationCategories()readback forUNTextInputNotificationActionactions. Text input actions are now detected from the action instance instead of the action class object. - iOS: hardened the non-NSE local attachment downloader by applying explicit request/resource timeouts and avoiding invalid
"."file suffixes when a downloaded attachment has no usable filename extension. Notifications continue to fall back without the attachment when the file type cannot be determined.
Tests
- Tests: added a lightweight ObjC harness for Notification Service Extension payload parsing, malformed payload fallback, one-shot delivery, and request-scoped helper behavior.
- Tests: added a lightweight ObjC harness for the iOS non-NSE local attachment downloader timeout and filename-extension handling.
- Smoke app: added iOS device automation hooks with deep-link scenarios, stable
SMOKE:RESULT/SMOKE:EVENTmarkers, and a local HTTP callback result channel for script-readable PASS/FAIL results. - Smoke app: added iOS device smoke automation for local notification display, displayed-notification verification, FCM minimal delivery, and FCM iOS attachment delivery. The attachment smoke verifies logical notification delivery; visual attachment rendering still requires manual confirmation or future UI automation.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.2
10.3.1
Immutable
release. Only release title and notes can be modified.
Fixed
- Android: fixed a Kotlin compilation issue in
prewarmForegroundService()on some React Native/Kotlin toolchains, reported with React Native 0.77.3, where the directapp.notifee.core.WarmupHelperreference could fail withUnresolved reference 'app'. The bridge now importsWarmupHelperexplicitly. This is a compile-time fix only with no runtime behavior, public API, JavaScript payload, Gradle, or manifest changes.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.1
10.3.0
Immutable
release. Only release title and notes can be modified.
Changed
- Android: centralized internal Bundle and Parcelable compatibility reads through
BundleValueReaderandParcelableCompatReader, cleaning up deprecated Android access paths without changing public APIs, JavaScript payloads, scheduling policy, Room persistence, reboot recovery, foreground service behavior, or PendingIntent behavior.
Fixed
- Android:
pressAction: nullnow fully disables notification body taps. The notification body no longer opens the app, emitsPRESS, or populatesgetInitialNotification()when the press action is explicitly opted out. Action buttons remain unaffected. - Android: fixed
getChannelGroup()delegating to the channel API instead of the channel group API.
Tests
- Tests: added Android regression coverage for notification, channel, trigger parser current behavior and manager scheduler paths to preserve existing null, default, coercion, update/delete, and reschedule behavior during the internal reader modernization.
- Tests: added Android unit and smoke coverage for
PRESS/ACTION_PRESSrouting,InitialNotificationEvent, Headless JS dispatch, action buttons withoutlaunchActivity,pressAction: null, and default notification body taps.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.3.0
10.2.1
Immutable
release. Only release title and notes can be modified.
Changed
- Android:
getPowerManagerInfo().activitynow represents a known vendor-settings candidate rather than aPackageManager-prevalidated activity. - Android:
openPowerManagerSettings()now attempts vendor settings intents directly and safely falls back or no-ops when Android cannot resolve or start the intent.
Fixed
- Android: guarded notification posting on Android 13+ when
POST_NOTIFICATIONSis not granted, avoiding uncontrolledSecurityExceptionfailures andDELIVEREDevents whennotify()is not called. - Android: removed the protected
BROADCAST_CLOSE_SYSTEM_DIALOGSpermission from the library manifest so it is no longer propagated to consumer apps. - Android: made the legacy
ACTION_CLOSE_SYSTEM_DIALOGSpath best-effort andSecurityException-safe on Android 11 and lower. - Android: removed the
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSdirect-request path from the Oppo/ColorOS power-manager fallback. - Android: removed package-visibility queries from the power-manager settings helpers; vendor settings now open best-effort without requiring consumer apps to inherit
<queries>declarations. - Android: cleaned up owned lint warnings after the permission, policy, package-visibility, discouraged API, and obsolete SDK guard fixes.
- iOS: made the notification display application-state check app-extension-safe so
RNNotifeeCorecan compile inside a Notification Service Extension target. - CLI/iOS: updated
init-nsePodfile patching to avoid an Xcode build cycle between an embeddedNotifyKitNSE.appexand React Native Firebase's[RNFB] Core Configurationphase.
Docs
- Docs: made reference generation self-contained by generating
src/version.tsbefore TypeDoc. - Docs: guarded reference generation against running without Git metadata, preventing degraded
Defined inlinks. - Docs: upgraded TypeDoc reference tooling for TypeScript 5.9 compatibility.
- Docs: included previously missing referenced API types in the generated reference:
ModuleWithStaticsandWebNotificationSettings. - Docs: formatted manual MDX documentation pages.
Tests
- Tests: added an iOS/NSE hardware automation script for
init-nse,pod install, RNFB cycle checks, iOS builds, FCM scenario sending, logs, reports, and cleanup. - Tests: validated Android hardware E2E, including foreground/background FCM, killed rerun without force-stop, tap
PRESS, action buttons, and BigPicture notifications. - Tests: validated iOS/NSE hardware E2E on physical device, including foreground/background/killed FCM, NSE processing, attachment handling, and tap flow.
- Smoke app: cleaned up Android manifest lint warnings for redundant labels and data extraction rules.
📦 npm: https://www.npmjs.com/package/react-native-notify-kit/v/10.2.1