ContactAccessPicker crashing issue

Given Apple's new .limited contact authorization introduced in ios18, I want to be able to present the ContactAccessPicker directly from my app, via ionic capacitor. I present the .contactAccessPicker view via a UIHostingController, and I manage the view controller's dismissal accordingly when the ContactAccessPicker completes and is no longer presented.

Bug: After a few searches or interactions with the Contact Access Picker (ex. searching, selecting contacts, clicking the "show selected" button), the contact access picker crashes and the overlay remains. Any interaction with my app is then blocked because I can't detect that the contact access picker has disappeared when it crashes so I can't dismiss the viewController.

Is there a way for me to prevent the contact access picker from crashing, and how can I detect if it does crash, so I can at least dismiss the view controller if that happens?

struct ContactAccessPickerView: View {
        @Binding var isPresented: Bool
        let completion: @MainActor ([String]) -> Void

        var body: some View {
            Group {
                if #available(iOS 18.0, *) {
                    Color.clear
                        .contactAccessPicker(isPresented: $isPresented) { result in
                            Task { @MainActor in
                                completion(result)
                            }
                        }
                } else {
                }
            }

        }
    }
    
    @objc func selectMoreContacts(_ call: CAPPluginCall) {
        guard isContactsPermissionGranted() else {
            call.resolve(["success": false])
            return
        }

        // Save the call to ensure it's available until we finish
        self.bridge?.saveCall(call)

        DispatchQueue.main.async { [weak self] in
            guard let self = self else { return }

            var isPresented = true
            let picker = ContactAccessPickerView(isPresented: .init(get: { isPresented }, set: { isPresented = $0 })) { contacts in
                call.resolve(["success": true])
                self.dismissAndCleanup(call)
            }

            let hostingController = UIHostingController(rootView: picker)
            hostingController.modalPresentationStyle = .overFullScreen

            self.bridge?.viewController?.present(hostingController, animated: true)
        }
    }

ContactAccessPicker crashing issue
 
 
Q