You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
6
6
7
7
---
8
8
9
+
## [1.3.1] - 2026-05-05
10
+
11
+
### 🛡️ Critical Bug Fix: iOS Deadlock
12
+
-**iOS Mutex Re-entrancy Fix**: Resolved a critical deadlock in `PlatformGrantDelegate.ios.kt` where calling `request()` would hang indefinitely. This occurred because `requestInternal()` incorrectly called the public `checkStatus()` (which acquires a per-permission Mutex) while the same Mutex was already held by the parent `request()` call.
13
+
-**Regression Safety**: Added `Issue29IosMutexDeadlockTest` to ensure this class of deadlock is automatically detected in the future using `withTimeout` guards.
implementation("dev.brewkits:grant-core-koin:1.3.1") // Optional: Koin DI support
161
161
}
162
162
}
163
163
}
@@ -167,7 +167,7 @@ kotlin {
167
167
> For projects targeting **Web (JS)** or **Desktop (JVM)**, use an intermediate `mobileMain` source set to avoid linking iOS/Android dependencies on unsupported platforms. [Read the Guide](docs/DEPENDENCY_MANAGEMENT.md).
168
168
169
169
> [!NOTE]
170
-
> **Koin users**: The Koin integration was moved to `grant-core-koin` in v1.3.0. Add the new artifact alongside `grant-core` and replace `GrantPlatformModule` imports. See the [Migration Guide](docs/MIGRATION_GUIDE.md).
170
+
> **Koin users**: The Koin integration was moved to `grant-core-koin` in v1.3.1. Add the new artifact alongside `grant-core` and replace `GrantPlatformModule` imports. See the [Migration Guide](docs/MIGRATION_GUIDE.md).
171
171
172
172
---
173
173
@@ -177,7 +177,7 @@ kotlin {
177
177
| :--- | :--- |
178
178
|[Architecture](docs/grant-core/ARCHITECTURE.md)| How concurrency, state machines, and the mutex flow work |
179
179
|[iOS Setup](docs/platform-specific/ios/info-plist.md)| Critical `Info.plist` configuration — read before shipping |
180
-
|[Migration Guide](docs/MIGRATION_GUIDE.md)| Upgrading from v1.2.x to v1.3.0|
180
+
|[Migration Guide](docs/MIGRATION_GUIDE.md)| Upgrading from v1.2.x to v1.3.1|
181
181
|[Service Checking](docs/grant-core/SERVICES.md)| Combining permission + hardware service checks |
182
182
|[Manual Injection](docs/MANUAL_INJECTION.md)| Using Grant without any DI framework |
183
183
|[Android Reliability](docs/FIX_DEAD_CLICK_ANDROID.md)| How we fix "Dead Clicks" on Android |
*Focus: Resilience against Process Death, Performance at Scale, and Architectural Purity.*
11
+
12
+
**1. Resilience (Android)**
13
+
-[ ]**Process Death Recovery**: Implement `SavedStateHandle` support in `GrantRequestActivity`. Ensure active permission requests survive when the OS kills the app in the background.
14
+
-[ ]**Activity Launch Guard**: Prevent multiple `GrantRequestActivity` instances from overlapping during rapid concurrent calls.
15
+
16
+
**2. Extensibility (iOS)**
17
+
-[ ]**Handler Registry**: Allow developers to register custom `IosPermissionHandler` implementations for `RawPermission`. No more "Not Implemented" dead-ends on iOS.
18
+
-[ ]**Modern iOS API Support**: Guidelines and helpers for `PHPicker` (no-permission photo selection) and `NSLocationTemporaryFullAccuracyUsageDescriptionKey`.
19
+
20
+
**3. Performance & UI**
21
+
-[ ]**Parallel Status Checks**: Refactor `GrantGroupHandler` to use `async/awaitAll` for status verification, eliminating "UI Jank" when checking 10+ permissions.
22
+
-[ ]**Emission Throttling**: Use `distinctUntilChanged` on internal flows to prevent redundant UI re-compositions.
23
+
24
+
**4. Core Architecture**
25
+
-[ ]**Robust Locking**: Replace the brittle `checkStatusInternal` pattern with a cleaner internal/external separation or a re-entrant safe locking strategy.
26
+
-[ ]**Atomic Store Operations**: Ensure `GrantStore` updates are atomic across all platforms to prevent race conditions during rapid state changes.
0 commit comments