v2.2.0
Grant v2.2.0
Resolves #45 — Apple's App Store static scanner no longer demands NSBluetoothAlwaysUsageDescription / NSLocationAlwaysAndWhenInUseUsageDescription for apps that don't use those capabilities.
New opt-in modules (iOS framework / selector isolation)
dev.brewkits:grant-bluetooth— isolatesCoreBluetooth.framework. Apps that don't use Bluetooth no longer link it.dev.brewkits:grant-location-always— isolates therequestAlwaysAuthorization(background location) path.grant-corenow calls onlyrequestWhenInUseAuthorization; foreground-only apps are no longer flagged for the always-location key.
This extends the v2.1.0 pattern (Contacts/Calendar/Motion). An obfuscation workaround was explicitly rejected as App Store Review Guideline 2.3.1 circumvention — module isolation is the sanctioned fix.
Other
- Maven bundle script is now module-array driven with per-module coverage checks.
- CI builds/tests/lints/covers the two new modules; release attaches all eight module JARs.
- Full test suites (unit/integration/system/performance/stress/security/regression + native
iosTestdeadlock guards) for both new modules. - Verified on real Pixel 6 Pro, iPhone 16 simulator, and iPhone 6s Plus.
Upgrading
Add the new modules only if you need them:
implementation("dev.brewkits:grant-bluetooth:2.2.0") // optional
implementation("dev.brewkits:grant-location-always:2.2.0") // optional