Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

App crashes after requesting PhotoLibrary limited access

My visionOS requires access to users' personal photos. The trigger mechanism is: when user firstly opens a FooView, a task attached to that FooView and calling let status = PHPhotoLibrary.authorizationStatus(for: .readWrite), if the status is .notDetermined, then calling PHPhotoLibrary.requestAuthorization(for: .readWrite, handler: authCompletionHandler) to let visionOS pop out a window to request Photo access.

However, the app crashes every time when user selects Limited Access and the system try to pop out a photo library picker. And btw, I have set Prevent limited photos access alert to Yes, but it shouldn't affect the behavior here I guess.

There was a debugger message here:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Presentations are not permitted within volumetric window scenes.'

However, the window this view belongs to is a .plain style window (though there were 3D object appearing in the other view of same windowgroup)

This is my code snippet if this helps: checkAndUpdatePhotoAuthorization is just a wrapper of PHPhotoLibrary.authorizationStatus(for: .readWrite)

private func checkAndUpdatePhotoAuthorization() -> PHAuthorizationStatus {
        let currentStatus = PHPhotoLibrary.authorizationStatus(for: .readWrite)
        switch currentStatus {
        case .authorized:
            print("Photo library access authorized.")
            isPhotoGalleryAuthorized = true
            isPhotoGalleryLimited = false
            isPhotoGalleryAccessRestricted = false
            isPhotoGalleryDetermined = true
        case .limited:
            print("Photo library access limited.")
            isPhotoGalleryLimited = true
            isPhotoGalleryAuthorized = false
            isPhotoGalleryAccessRestricted = false
            isPhotoGalleryDetermined = true
        case .notDetermined:
            isPhotoGalleryDetermined = false
            print("Photo library access not determined.")
        case .denied:
            print("Photo library access denied.")
            isPhotoGalleryAuthorized = false
            isPhotoGalleryLimited = false
            isPhotoGalleryAccessRestricted = false
            showSettingsAlert = true
            isPhotoGalleryDetermined = true
            
        case .restricted:
            print("Photo library access restricted.")
            isPhotoGalleryAuthorized = false
            isPhotoGalleryLimited = false
            isPhotoGalleryAccessRestricted = true
            showPhotoAuthExplainationAlert = true
            isPhotoGalleryDetermined = true
            
        @unknown default:
            print("Photo library Unknown authorization status.")
            isPhotoGalleryAuthorized = false
            isPhotoGalleryLimited = false
            isPhotoGalleryAccessRestricted = false
            isPhotoGalleryDetermined = true
        }
        
        return currentStatus
    }

And then FooView attaches task to fire up checkAndUpdatePhotoAuthorization()

var body: some View {
    EmptyView()
}
.task {
        try? await Task.sleep(for: .seconds(1.0))
        let status = self.checkAndUpdatePhotoAuthorization()
        if status == .notDetermined {
                DispatchQueue.main.async {
                        PHPhotoLibrary.requestAuthorization(for: .readWrite, handler: authCompletionHandler)
                    }
        }

Another thing worth to mention is that SOMETIMES it won't crash when running on a debug build. But it crashes when it comes to TF.

Any other idea? Big thanks in advance

XCode version: 16.2 beta 3 VisionOS version: 2.2

Answered by Vision Pro Engineer in 820718022

Hey @milanowth,

I'm unable to reproduce the issue that you are encountering. Do you get the same results with just the relevant code in a small test project?

If so, please share a link to your test project. That'll help us better understand what's going on. If you're not familiar with preparing a test project, take a look at Creating a test project.

Thanks,
Michael

Accepted Answer

Hey @milanowth,

I'm unable to reproduce the issue that you are encountering. Do you get the same results with just the relevant code in a small test project?

If so, please share a link to your test project. That'll help us better understand what's going on. If you're not familiar with preparing a test project, take a look at Creating a test project.

Thanks,
Michael

App crashes after requesting PhotoLibrary limited access
 
 
Q