Skip to content

v2.3.0 — Kotlin 2.4 toolchain · Android 17 LOCAL_NETWORK · location/gallery status fixes

Latest

Choose a tag to compare

@vietnguyentuan2019 vietnguyentuan2019 released this 10 Jul 04:49
78fe9fc

⚠️ Breaking (grant-compose only)

grant-compose no longer publishes the iosX64 target. Compose Multiplatform 1.11 stopped publishing iosX64 artifacts. Every other module (grant-core, grant-core-koin, grant-contacts, grant-calendar, grant-motion, grant-bluetooth, grant-location-always) keeps iosX64. Apps needing grant-compose on an Intel-Mac simulator should stay on 2.2.3.

Added

  • AppGrant.LOCAL_NETWORK — Android 17 (API 37) introduced the ACCESS_LOCAL_NETWORK runtime permission (NEARBY_DEVICES group; enforcement mandatory for apps targeting 37) for talking to LAN devices. Below API 37 and on iOS the grant is a no-op (GRANTED); on iOS the OS prompts automatically on first LAN access when NSLocalNetworkUsageDescription is present. Device-verified end-to-end on a Pixel 6 Pro running Android 17.
  • Android 17 Contact Picker guidance — KDoc on CONTACTS/READ_CONTACTS now points read-only "pick a few contacts" flows to the permission-free Contact Picker.

Fixed

  • Approximate-only location misreported as denied. A user picking "Approximate" in the OS dialog grants only COARSE; that usable state used to fail the all-granted check and escalate to DENIED_ALWAYS. Coarse-only now reports PARTIAL_GRANTED.
  • requestSuspend() suspended forever when no dialog host was attached. A headless request parked on rationale/settings dialog state with no collector now clears the unrenderable state and completes with the current status.
  • Android 14+: fully-granted gallery misreported as DENIED_ALWAYS when READ_MEDIA_VISUAL_USER_SELECTED stayed denied (ADB grant, MDM policy, auto-reset edge states). Full access is now judged on the required permissions only.
  • Demo: Scenario 3 "Test Grant Denial Flow" was mis-wired to the gallery request — the denial → rationale → settings walkthrough never ran.

Toolchain

Component From To
Kotlin 2.1.0 2.4.0
Compose Multiplatform 1.9.3 1.11.1
kotlinx-coroutines 1.10.2 1.11.0
Kover 0.7.5 0.9.8
atomicfu 0.27.0 0.33.0

Verification

  • ./gradlew build (all 9 modules, Android + iOS): 2,174 tests executed, 0 failures
  • Kover line coverage 86.9% against the enforced 85% floor
  • LOCAL_NETWORK + denial flows device-verified on Pixel 6 Pro (Android 17)

Full changelog: CHANGELOG.md · Migration guide