I'm experiencing app crashes when calling the CLMonitor initialization function:
let monitor = await CLMonitor("my_monitor")
According to WWDC 2023: Meet Core Location Monitor, when creating a CLMonitor object with the same identifier, it should access the existing monitor without any mention of app crashes or buggy behavior.
However, in my actual testing, attempting to create a CLMonitor object with the same identifier immediately causes an app crash.
Here's part of the crash log:
Last Exception Backtrace:
0   CoreFoundation                	0x19c4ab21c __exceptionPreprocess + 164 (NSException.m:249)
1   libobjc.A.dylib               	0x199945abc objc_exception_throw + 88 (objc-exception.mm:356)
2   Foundation                    	0x19b7a9670 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 288 (NSException.m:252)
3   CoreLocation                  	0x1aa25cbb4 +[CLMonitor _requestMonitorWithConfiguration:locationManager:completion:] + 516 (CLMonitor.mm:516)
4   libswiftCoreLocation.dylib    	0x22bf6085c CLMonitor.init(_:) + 488 (CLMonitor.swift:280)
5   libswiftCoreLocation.dylib    	0x22bf604b9 <deduplicated_symbol> + 1
6   MiniPlengi                    	0x106372ec9 closure #1 in static CLMonitor.loplatMonitor.getter + 1 (CLMonitor+Extensions.swift:31)
7   MiniPlengi                    	0x1062ce325 0x106290000 + 254757
8   MiniPlengi                    	0x1062f6a29 specialized thunk for @escaping @isolated(any) @callee_guaranteed @async () -> (@out A) + 1 (/<compiler-generated>:0)
9   MiniPlengi                    	0x1062ce325 0x106290000 + 254757
10  libswift_Concurrency.dylib    	0x1a7f75241 completeTaskWithClosure(swift::AsyncContext*, swift::SwiftError*) + 1 (Task.cpp:537)
Furthermore, even though I've written code to create CLMonitor objects based on a singleton structure to handle these crash cases, the app still crashes:
extension CLMonitor {
    static var loplatMonitor: CLMonitor {
        get async {
            struct Static {
                static var monitor: CLMonitor?
                static var initializationTask: Task<CLMonitor, Never>?
            }
            // If already initialized
            if let monitor = Static.monitor {
                return monitor
            }
            // If there's an initialization task in progress, wait for its result
            if let task = Static.initializationTask {
                return await task.value
            }
            // Create new initialization task
            let task = Task {
                let monitor = await CLMonitor("my_monitor")
                Static.monitor = monitor
                Static.initializationTask = nil  // Clean up task after completion
                return monitor
            }
            Static.initializationTask = task
            return await task.value
        }
    }
}
Is the CLMonitor API still in a stabilization phase and not recommended for production release? I would appreciate guidance on the correct usage.
If these issues are expected to persist, I'm wondering if I should continue using the existing CLCircularRegion API instead.
Any insights or recommendations would be greatly appreciated.