[StoreKit] Runtime warning with manageSubscriptionsSheet and ObservableObject

The following runtime warning is emitted by Xcode when using the manageSubscriptionsSheet with an ObservableObject:

\ContentViewModel.isPresented is isolated to the main actor. Accessing it via Binding from a different actor will cause undefined behaviors, and potential data races; This warning will become a runtime crash in a future version of SwiftUI.

Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.

This minimal sample project reproduces the issue:

class ContentViewModel: ObservableObject {
  @Published var isPresented = false

  func didTapButton() { self.isPresented = true }
}

struct ContentView: View {
  @ObservedObject var viewModel: ContentViewModel

  var body: some View {
    Button("Tap me") { self.viewModel.didTapButton() }
      .manageSubscriptionsSheet(isPresented: self.$viewModel.isPresented)
  }
}

Reproduced on:

  • Xcode 16.2
  • Xcode 16.3 beta

both with a simulator and a real device.

This doesn't happen when using @Observable.

Did you find a solution for this?

[StoreKit] Runtime warning with manageSubscriptionsSheet and ObservableObject
 
 
Q