Issue: ARKit Camera Frame Provider Not Authorized in visionOS App

I’m developing a visionOS app using EnterpriseKit, and I need access to the main camera for QR code detection. I’m using the ARKit CameraFrameProvider and ARKitSession to capture frames, but I’m encountering this error when trying to start the camera stream:

ar_camera_frame_provider_t: Failed to start camera stream with error: <ar_error_t Error Domain=com.apple.arkit Code=100 "App not authorized.">

Context:

  • VisionOS using EnterpriseKit for camera access and QR code scanning.
  • My Info.plist includes necessary permissions like NSCameraUsageDescription and NSWorldSensingUsageDescription.
  • I’ve added the com.apple.developer.arkit.main-camera-access.allow entitlement as per the official documentation here.
  • My app is allowed camera access as shown in the logs (Authorization status: [cameraAccess: allowed]), but the camera stream still fails to start with the “App not authorized” error.
  • I followed Apple’s WWDC 2024 sample code for accessing the main camera in visionOS from this session.

Sample of My Code:

import ARKit
import Vision

class QRCodeScanner: ObservableObject {
    private var arKitSession = ARKitSession()
    private var cameraFrameProvider = CameraFrameProvider()
    private var pixelBuffer: CVPixelBuffer?

    init() {
        Task {
            await requestCameraAccess()
        }
    }

    private func requestCameraAccess() async {
        await arKitSession.queryAuthorization(for: [.cameraAccess])
        do {
            try await arKitSession.run([cameraFrameProvider])
        } catch {
            print("Failed to start ARKit session: \(error)")
            return
        }
        
        let formats = CameraVideoFormat.supportedVideoFormats(for: .main, cameraPositions: [.left])
        guard let cameraFrameUpdates = cameraFrameProvider.cameraFrameUpdates(for: formats[0]) else { return }

        Task {
            for await cameraFrame in cameraFrameUpdates {
                guard let mainCameraSample = cameraFrame.sample(for: .left) else { continue }
                self.pixelBuffer = mainCameraSample.pixelBuffer
                // QR Code detection code here
            }
        }
    }
}

Things I’ve Tried:

  • Verified entitlements in both Info.plist and .entitlements files. I have added the com.apple.developer.arkit.main-camera-access.allow entitlement.
  • Confirmed camera permissions in the privacy settings.
  • Followed the official documentation and WWDC 2024 sample code.
  • Checked my provisioning profile to ensure it supports ARKit camera access.

Request:

Has anyone encountered this “App not authorized” error when accessing the main camera via ARKit in visionOS using EnterpriseKit? Are there additional entitlements or provisioning profile configurations I might be missing? Any help would be greatly appreciated! I haven't seen any official examples using new API for main camera access and no open source examples either.

I am having the same issue in my project :(

@nataodutton and @NikStiresLLAR

This post and this post cover a similar issue and have some useful troubleshooting tips.

Please let me know how this turns out!

Issue: ARKit Camera Frame Provider Not Authorized in visionOS App
 
 
Q