SwiftUI预览报错XOJITError权限拒绝,求方案及Legacy模式解析
SwiftUI预览权限错误解决方案及Legacy预览模式说明
问题描述
新建仅包含默认ContentView(显示“Hello World”)的SwiftUI项目后,出现“Cannot preview in this file”错误,诊断详情如下:
== PREVIEW UPDATE ERROR: FailedToLaunchAppError: Failed to launch com.local.MyApp /Users/XXXXX/Library/Developer/Xcode/DerivedData/MyApp-dbwwfnvmshlirjbstcdluihkoslf/Build/Products/Debug/MyApp.app ================================== | [Remote] JITError | | ================================== | | | [Remote] XOJITError | | | | XOJITError: Could not create code file directory for session: Permission denied
未发现文件权限设置异常,需解决该错误并了解临时方案Editor -> Canvas -> Use Legacy Previews Execution的含义。
解决方案
- 清理项目DerivedData:找到诊断信息中给出的DerivedData路径,删除对应文件夹,重启Xcode后重新构建预览;也可通过Xcode偏好设置(
Preferences -> Locations)点击DerivedData旁的箭头打开文件夹,全选删除所有内容。 - 赋予Xcode完全磁盘访问权限:打开系统设置→隐私与安全性→完全磁盘访问权限,确认Xcode已在列表中且权限开启,若未添加则点击“+”按钮找到Xcode应用添加。
- 重启Mac:部分系统权限缓存问题可通过重启解决,重启后重新打开项目尝试预览。
- 重置Xcode模拟器:打开Xcode的
Window -> Devices and Simulators,选中所有模拟器点击右键选择“Erase All Content and Settings”,之后重新构建预览。
Legacy Previews Execution模式说明
Use Legacy Previews Execution是Xcode保留的旧版预览执行机制,和新版预览的核心区别:
- 执行环境:新版预览采用独立的JIT(即时编译)沙盒进程运行预览代码,而Legacy模式将预览代码嵌入项目主编译进程,不依赖独立的沙盒JIT环境,因此能绕开权限相关的JIT错误。
- 性能与独立性:Legacy模式预览启动速度通常稍慢,且预览进程与项目编译进程绑定;新版预览为独立进程,理论上资源隔离更彻底、性能更优,但对系统权限配置要求更高。
- 兼容性:Legacy模式对旧项目、特殊权限配置的环境兼容性更好,适合作为临时方案解决新版预览的权限或JIT编译问题,但苹果官方推荐优先使用新版预览机制。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

