能否在Mac Catalyst应用中使用Continuity Camera功能?
在Mac Catalyst应用中支持Continuity Camera的解决方案
目前Mac Catalyst官方文档确实标注AVCaptureDevice.DeviceType.externalUnknown不支持该环境,但有两种可行方式启用Continuity Camera功能:
方法一:利用未公开的兼容调用macOS专属设备类型
在macOS 13及以上版本的Mac Catalyst环境中,实际测试可直接使用.externalUnknown设备类型(即便文档标注不支持)。通过条件编译针对Mac Catalyst环境单独处理:
#if targetEnvironment(macCatalyst) if #available(macOS 13.0, *) { // 包含内置摄像头和外接未知设备类型,覆盖Continuity Camera let targetDeviceTypes: [AVCaptureDevice.DeviceType] = [.builtInWideAngleCamera, .externalUnknown] let discoverySession = AVCaptureDevice.DiscoverySession( deviceTypes: targetDeviceTypes, mediaType: .video, position: .unspecified ) // 遍历发现的设备,处理Continuity Camera for device in discoverySession.devices { if device.isExternalDevice { // 识别到iPhone作为外接摄像头 print("找到Continuity Camera设备:\(device.localizedName)") } } } #else // iOS端原有摄像头逻辑 #endif
注意:该方式依赖系统未公开的兼容行为,未来系统版本更新可能出现兼容性问题,需做好测试和降级处理。
方法二:通过设备特征识别Continuity Camera
若希望依赖更稳定的官方API,可通过设备的外部属性、名称或型号ID识别Continuity Camera设备:
let discoverySession = AVCaptureDevice.DiscoverySession( deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: .unspecified ) for device in discoverySession.devices { // 判定条件:是外部设备 + 名称包含iPhone(可结合多语言适配调整) if device.isExternalDevice && device.localizedName.contains("iPhone") { // 确认是Continuity Camera设备,进行后续配置 configureCaptureSession(with: device) break } }
进一步优化可通过device.modelID匹配iPhone的型号标识符(例如iPhone14,2对应iPhone 13 Pro),这种方式不受语言环境影响,准确性更高。
通用注意事项
- 确保应用已请求相机权限(需在Info.plist中配置
NSCameraUsageDescription)。 - 用户需在Mac系统设置中开启「通用→AirPlay与接力→允许Continuity Camera」权限。
内容的提问来源于stack exchange,提问作者HangarRash
相关产品推荐
相关产品推荐

