使用MonkeyDev调试App Store应用时遇LLVM Profile错误求助
解决LLVM Profile Error: Failed to write file "default.profraw"权限问题
这个问题我之前在类似的调试场景里碰到过,本质是App Store应用的沙箱限制在搞事情——LLVM默认要把profile文件写到应用沙箱外的路径,而iOS9.3.2的沙箱权限管控很严格,直接就给拦住了。结合你的Xcode9-beta + iOS9.3.2环境,给你几个可行的解决办法:
方法1:指定Profile文件到应用沙箱可写目录
最稳妥的方式是让LLVM把profile文件输出到应用沙箱内明确允许写入的目录,比如Documents。
在你的Tweak主代码里,添加启动时的环境变量配置:
%ctor { // 获取应用的Documents目录路径 NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *profFilePath = [docsDir stringByAppendingPathComponent:@"default.profraw"]; // 告诉LLVM要把profile文件写到这个路径 setenv("LLVM_PROFILE_FILE", [profFilePath UTF8String], 1); // 你的其他初始化代码... }
重新编译安装Tweak后,LLVM就会乖乖把文件写到沙箱内的Documents目录,不会再触发权限错误。
方法2:关闭LLVM代码覆盖率生成(如果不需要的话)
要是你只是单纯调试应用,不需要收集代码覆盖率数据,直接关掉相关编译选项就行:
- 打开MonkeyDev项目的Makefile,找到
CFLAGS或OTHER_CFLAGS配置项,删掉里面的-fprofile-instr-generate和-fcoverage-mapping参数; - 或者在Xcode的Build Settings里,搜索
Generate Test Coverage Files和Instrument Program Flow,把这两个选项都设为NO。
这样LLVM就不会尝试生成profile文件,自然也就不会出现写入权限问题。
方法3:确保MonkeyDev适配Xcode9-beta
Xcode9-beta属于早期测试版本,部分旧版MonkeyDev可能存在兼容性bug,导致沙箱权限处理异常。建议你把MonkeyDev更新到适配Xcode9的最新版本,避免工具层面的坑。
额外小提示
如果之后需要导出生成的profile文件,可以用iExplorer这类工具连接设备,找到对应应用的Documents目录就能导出default.profraw了。
内容的提问来源于stack exchange,提问作者jeff
相关产品推荐
相关产品推荐

