@Observable crashes in Xcode, iOS Beta 7 on iPad

If you update the code using @Observable, it works normally on macOS, but an error occurs on iPad.

Simultaneous accesses to 0x60000300c9a0, but modification requires exclusive access.

The first time I select it from the list, it works fine, but the second time I select it, an error occurs.

original source code

struct ContentView: View {
    
    @StateObject private var envProfile = ProfileEnvironment()
    
    var body: some View {
        NavigationSplitView {
            List(selection: $envProfile.selection) {
                NavigationLink("One", value: "1")
                NavigationLink("Two", value: "2")
            }
        } detail: {
            Text(envProfile.selection ?? "nil")
        }
    }
}

class ProfileEnvironment: ObservableObject {
    @Published var selection : String?
}

Updated code using @Observable

struct ContentView: View {
    
    @State private var envProfile = ProfileEnvironment()
    
    var body: some View {
        NavigationSplitView {
            List(selection: $envProfile.selection) {
                NavigationLink("One", value: "1")
                NavigationLink("Two", value: "2")
            }
        } detail: {
            Text(envProfile.selection ?? "nil")
        }
    }
}

@Observable
class ProfileEnvironment {
    var selection : String?
}

Replies

I checked and get the same error. The only issue I found with your code is that you declared the property with @State but you should have declared it with @Bindable. But I tried and keep getting the error. It has to be a bug. The only solution was to manage the selection from a @State property (@State private var envProfile: String?)

The problem was not resolved in XCode 15.0 beta 8.

@Observable is a very nice macro.

However, errors occur even in such simple code, so using @Observable is a very dangerous choice.

This is a known issue, and cited in the iOS 17 beta 8 release notes:

On iOS, using an Observable object’s property as a selection value of a List inside NavigationSplitView may cause a “Simultaneous accesses to …” error when a list selection is made via tap gesture. (113978783)

Workaround: There is no current workaround for Observable properties. Alternatives include factoring out the selection value into separate state stored outside the object, or using ObservableObject instead.