应用终止时出现Operation not permitted错误,求原因及解决方案
解决LLVM Profile Error: Failed to write file "default.profraw": Operation not permitted
别担心,这个问题我之前在Xcode 11系列版本上碰到过,先给你吃个定心丸:这个错误完全不会影响你的应用正常运行,它只是和代码覆盖率收集功能相关的权限小问题。
错误原因
这个报错是因为Xcode默认开启了代码覆盖率(Code Coverage)收集,当你手动终止应用时,LLVM尝试把覆盖率数据写入设备上的default.profraw文件,但iOS 13+的沙盒权限机制限制了它的写入路径,导致操作被系统拒绝。
可行的解决方案
结合你的环境(Xcode 11.3.1 + iOS 13.3.1),给你几个实测有效的解决办法:
1. 关闭代码覆盖率收集(最直接)
如果你不需要收集代码覆盖率数据,直接关掉这个功能就能彻底解决:
- 点击Xcode顶部菜单栏的
Product > Scheme > Edit Scheme - 在弹出的窗口中切换到
Test选项卡,取消勾选「Gather coverage data」 - 另外检查
Run选项卡,如果也有这个勾选框,同样取消
2. 指定合法的覆盖率文件路径(保留覆盖率功能)
如果需要继续使用代码覆盖率,可以通过设置环境变量让LLVM把文件写到有权限的位置:
- 打开
Edit Scheme > Run > Arguments面板 - 在
Environment Variables区域点击+,添加变量LLVM_PROFILE_FILE,值设为应用沙盒内的路径,比如:
(记得把$(HOME)/Library/Application Support/com.yourapp.bundleid/default.profrawcom.yourapp.bundleid替换成你自己应用的Bundle ID)
3. 升级Xcode版本(彻底修复根源)
这个权限问题在Xcode 12及以后的版本中已经被官方修复,如果你能升级到更高版本的Xcode(比如12.0以上),不仅能解决这个报错,还能获得更多iOS开发的新特性和bug修复。
对应用的影响重申
再次强调:这个错误只是覆盖率数据写入失败,不会影响应用的功能、性能,也不会影响应用的发布流程,你完全可以正常开发和测试应用。
内容的提问来源于stack exchange,提问作者Tushar Sharma
相关产品推荐
相关产品推荐

