iOS中使用Model IO转USDZ为STL时出现‘Client not entitled’错误
问题分析与解决方案
1. 核心代码错误:USDZ文件路径无效
你代码里的newUsdz变量直接使用相对路径"Room.usdz",但这个路径指向的是当前进程的工作目录,并非你之前创建的临时Export文件夹。Model I/O找不到正确的USDZ文件,进而触发了后续的权限关联错误。
修正后的代码
let destinationFolderURL = FileManager.default.temporaryDirectory.appending(path: "Export") let destinationURL = destinationFolderURL.appending(path: "Room.usdz") let capturedRoomURL = destinationFolderURL.appending(path: "Room.json") // 改用正确的完整路径指向已生成的USDZ文件 let newUsdz = destinationURL let asset = MDLAsset(url: newUsdz) let stl = destinationFolderURL.appending(path: "Room.stl") do { try FileManager.default.createDirectory(at: destinationFolderURL, withIntermediateDirectories: true) // 先确认USDZ文件存在再执行导出 guard FileManager.default.fileExists(atPath: newUsdz.path) else { print("USDZ文件不存在") return } try asset.export(to: stl) } catch { print("Error = \(error)") }
2. 权限问题排查(修正路径后仍报错时)
如果上述修正后还是出现Client not entitled错误,检查以下内容:
- 开启App Sandbox权限:在Xcode的
Signing & Capabilities中添加App Sandbox,并勾选User Selected File的读写权限(若需访问用户选择的文件)。 - 线程安全检查:确保Model I/O的导出操作未在UI线程阻塞执行,虽然导出本身可在后台执行,但需保证文件访问的线程安全。
- 目录权限验证:iOS临时目录默认允许App读写,若使用自定义目录,需确保创建时设置了正确的权限(如
withIntermediateDirectories: true已包含权限处理)。
内容的提问来源于stack exchange,提问作者fordat
相关产品推荐
相关产品推荐

