Skip to content

10.9.0

Choose a tag to compare

@marcocrupi marcocrupi released this 17 Oct 07:14
· 10 commits to main since this release
Immutable release. Only release title and notes can be modified.

Added

  • Android: add the default-disabled notification.android.foregroundServiceBestEffortStopAfterMs option for a single dataSync foreground run on API 35+ (60,000–18,000,000 integer milliseconds). An internal inexact alarm attempts REMOVE demotion and selective stopping after the first successful promotion; same-ID updates preserve the deadline. The distinct best-effort FG_RUN_LIMIT_REACHED = 10 event reports native handling without certifying AMS teardown or JavaScript cancellation. Scheduling/storage failures remain observable in native diagnostics. Delivery can be late or absent, and effectiveness against vivo/iQOO/OEM timeout crashes is unproven.

Fixed

  • CLI / packaging: generate the Notification Service Extension CLI from clean output, preserve pre-existing staging files across packing, and remove the obsolete bundled CLI artifact. The stable Xcode parser now uses Node's UUID generator, removing the public CLI's legacy xcode/uuid dependency chain.

  • Tooling / dependencies: patch compatible release HTTP clients and transitive build dependencies; replace Lerna/Nx orchestration with Yarn 4 workspaces. Remaining upstream advisories and their exposure are documented in tooling security maintenance.

  • Android / build configuration: inherit a usable rootProject.ext.compileSdkVersion with a minimum/fallback of 35, so hosts using SDK 36 or 37 can compile the library at the same level. Invalid values warn and fall back without truncation or host mutation; minSdk = 24, targetSdk = 35 and JVM target 17 are unchanged. SDK 37 is not required: the AAR consumer minimum is explicitly kept at 35 to prevent AGP 9 from defaulting it to a higher inherited compile SDK.

  • Android / toolchain documentation: align the legacy standalone AGP declaration to the API 35 / WorkManager 2.11.1 minimum of 8.6.0, clarify that the standalone folder remains incomplete, and document SDK-dependent AGP/Gradle requirements instead of the obsolete AGP 8.2.2 / generic Gradle 8.x guidance. Smoke target values do not certify RN 0.88 compatibility.

  • React Native / TypeScript: replaced the incompatible NativeModulesStatic type reference for RN 0.88 without adding public APIs.

  • Android / iOS assets: reject invalid Image.resolveAssetSource() results for Android large icons, Big Picture pictures/large icons and iOS attachment URLs before native dispatch. Resolved URIs must be strings that are neither empty nor whitespace-only; the check covers Unicode White_Space (including U+0085) and ECMAScript whitespace (including U+FEFF). Meaningful resolved URIs are preserved exactly without normalization; direct string URL behavior is unchanged. This is not full URL syntax validation.

Changed

  • Android / tests: updated Robolectric to 4.17 and set the default simulation SDK to API 24, independently of compileSdk. API 36/37 simulations require a JDK 21 test JVM; Java/Kotlin targets remain 17 and consumer Android runtime requirements are unchanged.

Tests

  • Android: adapted foreground-service shadows to Robolectric's checked exception declarations and added compatibility coverage that preserves failure propagation and existing regression boundaries across API levels, including API 37.
  • React Native / assets: added validator and display/trigger regression coverage for invalid resolver results, Unicode whitespace-only rejection, exact URI preservation, unchanged direct strings and rejection before native dispatch.
  • React Native 0.88: validated TypeScript builds, consumer types and client tests with RN 0.85.3/0.88.0, plus Android native tests with JDK 17/21 respectively. RN 0.88/SDK 37 Android build and selected Pixel API 37 runtime checks predate the final validator changes; they do not establish full RN 0.88, FCM or foreground-service recovery qualification. See Environment Support for scope and remaining limits.

Qualification and remaining limits

Release commit d3f696188e7b8e99cd894e46025e9a1f11179ab2: Jest on Node 22/24, Android JUnit, code quality. Fresh npm/Yarn consumers passed CLI, export, Server SDK and TypeScript resolution checks; all 397 installed package files match the release tarball.

Tarball SHA-256: 7bdf97f5701f26290a9f0db71c9e3c165831cbf11211ed13870915e41f22aa39.

The reviewed source candidate passed the product Jest, JUnit and code quality workflows. Release tooling retains documented upstream security advisories; these are not declared fixed. This release does not establish new OEM or full native/device qualification. See tooling security maintenance.


📦 react-native-notify-kit@10.9.0 on npm

Full comparison