I'm trying to open the camera with AVKit and while creating CameraView and AVCaptureVideoPreviewLayer object I have the following error:
Publishing changes from within view updates is not allowed, this will cause undefined behavior.
I know that it could be resolved with adding DispatchQueue.main.async {}
but I do not know exactly where to put it.
I'm creating CameraView like:
CameraView(size: geometry.size)
.environmentObject(cameraViewModel)
.ignoresSafeArea()
Inside, it look like:
struct CameraView: UIViewRepresentable {
@EnvironmentObject var cameraViewModel: CameraViewModel
var size: CGSize
func makeUIView(context: Context) -> UIView {
let view = UIView()
/* error occurs here */
cameraViewModel.capturePreview = AVCaptureVideoPreviewLayer(session: cameraViewModel.captureSession)
cameraViewModel.capturePreview.frame.size = size
cameraViewModel.capturePreview.videoGravity = .resizeAspectFill
view.layer.addSublayer(cameraViewModel.capturePreview)
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
}
}
And lastly, CameraViewModel holds capturePreview
which is:
@Published var capturePreview: AVCaptureVideoPreviewLayer!