Introducing enterprise APIs for visionOS
Spatial Computing 进阶 20m

visionOS 企业级 API 全新上线

Introducing enterprise APIs for visionOS

2024年6月10日

在 Apple 官方观看视频

一句话判断

visionOS 终于开放了主摄像头访问、Passthrough 屏幕捕获、空间条码扫描、Apple Neural Engine 直调、增强 Object Tracking 和性能调优这六大专属企业级 API——每一个都能改变一个行业的作业方式。

这场 Session 讲了什么

这场 Session 系统性地介绍了 visionOS 2.0 新增的六组 Enterprise APIs。主讲人 Kyle McEachern 明确说了:这些 API 提供了比现有 API 高得多的设备能力访问权限,所以 Apple 设计了一套严格的管控机制——managed entitlement + 企业许可证文件 + 仅限内部分发(In-House 或 Apple Business Manager 私有分发)。

六大 API 分两大类。第一类是”增强传感器访问”:主摄像头视频流(Main Camera Access)、Passthrough 视频屏幕捕获(Include Passthrough in Screen Capture)、空间条码/二维码扫描(Spatial Barcode & QR Code Detection)。第二类是”平台控制”:Apple Neural Engine 直接调用(ANE)、增强 Object Tracking、应用性能调优(Performance Tuning)。

每个 API 都配有具体的工业场景示例:生产线上的零件异常检测(主摄像头 + 计算机视觉)、远程专家协作(Passthrough 屏幕共享)、仓库拣货确认(条码扫描)、边缘 AI 推理(ANE)等。

值得深挖的点

主摄像头访问:从”封闭设备”到”感知终端”

Vision Pro 一直被诟病的一点是开发者无法拿到主摄像头画面。对于消费级 App 这没问题,但企业级场景完全不同——质检、巡检、远程协助都需要设备”看得见”环境。

新 API 通过 CameraFrameProvider 提供 “main” 格式的视频帧,使用方式跟 ARKit 的其他 provider 非常相似。拿到的帧是 CVPixelBuffer,你可以直接喂给 Core ML 或自定义的计算机视觉算法。这意味着 Vision Pro 正式从一个”显示设备”变成一个”感知终端”——它可以实时分析用户正在看的场景,做出判断并叠加信息。

隐私方面 Apple 做了多层防护:entitlement 是 managed 的(企业通过 MDM 分发),许可证绑定开发者账号,App 必须是企业内部分发。每一层都在确保这些数据不会被消费级 App 获取。

Passthrough 屏幕捕获:真正的”所见即所传”

当前 Vision Pro 的屏幕录制只能录虚拟窗口,背景是黑的。对于远程协作场景这完全不够——专家看不到用户眼前的实际环境。新 API 让 Broadcast Upload Extension 可以捕获完整的空间视图,包括 Passthrough 摄像头画面和所有虚拟窗口叠加在一起的效果。

实现方式出乎意料地简单:只需在 entitlement 里加 include-passthrough,系统在屏幕录制时自动把黑色背景替换为 Passthrough 画面。用户通过系统级的”开始广播”按钮触发,确保每次录制都是用户主动授权。这个设计很聪明——开发者不需要处理任何额外的隐私逻辑,系统全包了。

代码片段

获取主摄像头视频流

// 配置 CameraFrameProvider,指定使用主摄像头
let cameraFrameProvider = CameraFrameProvider()
cameraFrameProvider.supportedFormats = [.main]

let session = ARKitSession()
var pixelBuffer: CVPixelBuffer?

// 请求用户授权
try await session.requestAuthorization(for: [.mainCameraAccess])

// 启动 ARKit session
try await session.run([cameraFrameProvider])

// 获取视频帧
let frameUpdates = cameraFrameProvider.cameraFrameUpdates(for: .main)
for await frame in frameUpdates {
    // 主摄像头在设备左侧,取左眼视角
    if let sample = frame.sample(for: .left) {
        pixelBuffer = sample.pixelBuffer
        // 在这里进行计算机视觉分析或显示画面
    }
}

一句话说明:整个流程跟 ARKit 的其他 provider 一致,CameraFrameProvider 的新 .main 格式是关键。坑在于必须在 Info.plist 里声明 entitlement 且 App 必须带企业许可证文件,否则运行时直接报错。

空间条码扫描

// 配置条码检测 session
let barcodeDetection = BarcodeDetectionProvider()
barcodeDetection.supportedSymbologies = [.qr, .code128, .ean13]

let session = ARKitSession()
try await session.run([barcodeDetection])

// 监听检测到的条码
for await anchor in barcodeDetection.anchorUpdates {
    let barcode = anchor.anchor
    print("检测到条码: \(barcode.payload)")
    print("类型: \(barcode.symbology)")
    print("空间位置: \(barcode.originFromAnchorTransform)")
    // 根据条码内容执行业务逻辑
}

一句话说明:拿到的不只是条码内容,还有它在 3D 空间中的精确位置。这个空间信息可以做”看着货架就能看到每个商品信息”的 AR 叠加。需要企业级 entitlement,普通 App 用不了。

性能调优——提升计算密集型任务的 GPU 优先级

// 请求提升计算性能(适用于渲染密集型或 AI 推理场景)
let performanceTuner = PerformanceTuner()
try await performanceTuner.request()

// 在需要高负载运算时进入
let token = try await performanceTuner.beginActivity(
    reason: .computeIntensive,
    duration: .seconds(30)
)

// 执行计算密集型任务...
// 比如批量 Neural Engine 推理、实时 3D 渲染

// 任务完成后结束
token.cancel()

一句话说明:PerformanceTuner 让你临时拉高设备的计算资源配额,适合短时高负载场景。注意 duration 不要设太长,系统会根据热管理策略做调整。

最佳实践

新项目:如果你的企业客户已经在用 Vision Pro,这些 API 应该直接进入技术选型清单。主摄像头 + 条码扫描是仓储物流场景的标配组合;Passthrough 屏幕共享是远程协作场景的必备功能。

已有项目:先评估哪个 API 的投入产出比最高。Passthrough 屏幕捕获几乎是”加一行 entitlement 就能用”的改动,适合作为第一步。主摄像头访问需要更多开发工作(对接 CV 模型),但带来的能力提升最大。ANE 和 Object Tracking 增强则需要你对现有 ML pipeline 做适配。

所有企业 API 的共同前提:你的 App 必须通过 Apple Business Manager 私有分发,且需要申请对应的企业许可证。在开发阶段可以先申请开发用的 entitlement,上线前再完成正式的许可证流程。

还有什么值得关注

  • Apple Neural Engine 直接调用 API 让你可以在 Vision Pro 上做边缘 AI 推理,延迟远低于云端方案,适合实时质检等场景。
  • 增强的 Object Tracking 支持同时追踪更多物体,对于工厂流水线的零件追踪很有用。
  • 所有 Enterprise API 都设计了多层隐私保护:managed entitlement + 许可证文件 + 私有分发 + 用户授权,Apple 在安全和能力之间划了一条清晰的线。
WWDC 2024