My own iOS app is using AVFoundation to do barcode scanning. Under Mac Catalyst I'm getting an error. Turns out the Apple provided AVCam demo app has the exact same issue.
Both the Swift and Objective-C versions of the AVCam demo app fail but the Objective-C version gives a better error so I'll refer to that in the rest of the question.
In the AVCamCameraViewController, the configureSession method fails on the line:
AVCaptureDeviceInput* videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
The error is:
Could not create video device input: Error Domain=AVFoundationErrorDomain Code=-11814 "Cannot Record" UserInfo={NSLocalizedDescription=Cannot Record, NSLocalizedRecoverySuggestion=Try recording again.}
It turns out that none of the three attempts to call [AVCaptureDevice defaultDeviceWithDeviceType:... are succeeding.
This is the same error I get in my own app though I only attempt to call [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; which is also returning nil.
Permission was granted for the app to access the camera.
There is nothing related to this issue in the release notes for macOS 10.15. I am running the GM version of 10.15 with Xcode 11.1 on a 2018 15" Macbook Pro.
How do we successfully get a video capture device under Mac Catalyst?
I received an answer from Apple after submitting a feedback ticket about this:
This issue behaves as intended.
We do document that we are not listing devices in Catalyst mode.
See
Important iPad apps running in macOS cannot use the AVFoundation Capture classes. These apps should instead use UIImagePickerController for photo and video capture.
Please close your feedback report, or let us know if this is still an issue for you.
https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture
So unless they update it in the future it's not possible to access the camera on a Mac from a Catalyst app.