Creating AVCaptureVideoPreviewLayer object - Publishing changes from within view updates is not allowed, this will cause undefined behavior

Viewed 70

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!
0 Answers
Related