Is ObservableObject implicitly a MainActor in iOS 16 and later?

This is a question regarding the specification of ObservalObject.

The following code does not cause a compilation error when the deployment target is set to iOS 16, but it does cause the following error when set to iOS 15:

class Model: ObservableObject {
    
    let player: AVPlayer
    
    @Published var isPlaying = false
    
    var playerObserver: NSKeyValueObservation?
    
    init() {
        self.player = AVPlayer()
        self.playerObserver = self.player.observe(\.rate, options: [.new, .old]) { player, change in
            NSLog("changed rate: \(String(describing: change.newValue))")
        }
    }
    
    func setup() {
        let name = "sample"
        let url = Bundle.main.url(forResource: name, withExtension: "m4a")!
        let playerItem = AVPlayerItem(url: url)
        self.player.replaceCurrentItem(with: playerItem)
    }
    
    func play() {
        self.player.play()
        self.isPlaying = true
    }
}

The following error occurs in iOS 15:

Cannot form key path to main actor-isolated property 'rate'

Call to main actor-isolated instance method 'play()' in a synchronous nonisolated context

Additionally, if the code is modified as follows, the error does not occur even in iOS 15. Specifically, adding @MainActor to the Model resolves the issue.

@MainActor
class Model: ObservableObject {
...
}

From this behavior, I guessed that ObservableObject is implicitly a MainActor in iOS 16 and later. Is this understanding correct?

I forgot to include the environment details:

Xcode: Version 16.0 beta 3 (16A5202i)
Swift: Swift 6
Strict Concurrency Checking: Complete
Is ObservableObject implicitly a MainActor in iOS 16 and later?
 
 
Q