The error: When building a RealityKitContent package that contains a USDZ file exported from Blender, Xcode throws the following error:
error: [xrsimulator] Exception thrown during compile: Cannot get rkassets content for path .../RealityKitContent.rkassets because 'The file "RealityKitContent.rkassets" couldn't be opened because you don't have permission to view it.'
error: Tool exited with code 1
The error message mentions "permission" — but permissions are not the issue. This appears to be a misleading error from realitytool masking a USD validation failure.
What I've ruled out
- File permissions — all files are -rw-r--r--, user has Read & Write on the folder
- Extended attributes / quarantine flag — other files with the same @ flag work fine
- Corrupted archive — unzip -t confirms the USDZ is valid (board.usdc + textures)
- Stale build cache — deleted DerivedData and com.apple.DeveloperTools cache, no change
Key observations
- The same file builds successfully on my colleague's machine running identical Xcode 26.3 - MacOS 26.3
- Other USDZ files in the same .rkassets bundle (downloaded from Sketchfab, or created in Reality Composer Pro) compile without any issue.
- Only USDZ files exported directly from Blender are affected.
- When the file is placed in Bundle.main and loaded via Entity(named:in:.main), it works perfectly — no errors
- Reality Converter flags the file with two errors: UsdGeomPointInstancers not allowed, and root layer must be .usdc with no external dependencies
The confusing part: the same file compiles fine on an identical Xcode 26.3 setup and importing method. This suggests either a machine-specific difference in Xcode's validation behavior, or a cached .reality bundle on my colleague's machine that isn't being recompiled.
Current workaround: Loading from Bundle.main instead of the RealityKitContent package bypasses realitytool entirely and works, but loses Reality Composer Pro integration:
if let entity = try? await Entity(named: "test", in: Bundle.main)