Open view using a navigation link that contains the CodeScannerView which shows an alert using a state boolean if there is not camera access (see code below).
Expected: The alert appears
Actual: No alert is shown and an error is logged: [SwiftUI] Modifying state during view update, this will cause undefined behavior.
Workaround: Set the change to the alert bool in a new main actor task
// DetailCameraView.swift
import SwiftUI
import CodeScanner
struct DetailCameraView: View {
@State private var showNoCameraAccess = false
var body: some View {
CodeScannerView(codeTypes: [.qr]) { result in
switch result {
case .success(_):
print("Success")
case .failure(_):
// Task { @MainActor in // Workaround
showNoCameraAccess = true
// }
}
}
.alert("No Camera Access", isPresented: $showNoCameraAccess) {
// OK button is shown by default
}
}
}
CodeScannerView
which shows an alert using a state boolean if there is not camera access (see code below).Expected: The alert appears Actual: No alert is shown and an error is logged:
[SwiftUI] Modifying state during view update, this will cause undefined behavior.
Workaround: Set the change to the alert bool in a new main actor taskCode to reproduce the issue: