Xcode单元测试:尝试将测试数据从单元测试写入项目文件夹时,权限被拒绝

Xcode单元测试:尝试将测试数据从单元测试写入项目文件夹时,权限被拒绝,xcode,unit-testing,cocoa,sandbox,xctest,Xcode,Unit Testing,Cocoa,Sandbox,Xctest,我对macOS上运行的Cocoa应用程序进行了Xcode单元测试。当单元测试运行时,我想将一些数据保存到应用程序的项目文件夹中,以便在下次测试运行时可以将其读回(我正在尝试使用这个) 但是,尝试创建输出目录失败,出现权限被拒绝错误: Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “TestOutput” in the folder “__Snapshots__”." Us

我对macOS上运行的Cocoa应用程序进行了Xcode单元测试。当单元测试运行时,我想将一些数据保存到应用程序的项目文件夹中,以便在下次测试运行时可以将其读回(我正在尝试使用这个)

但是,尝试创建输出目录失败,出现权限被拒绝错误:

Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “TestOutput”
in the folder “__Snapshots__”." 
UserInfo={NSFilePath=/Users/test/code/TestApp/TestOutput/__Snapshots__/SimpleTest,
NSUnderlyingError=0x600000c0c0c0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
我假设这是因为单元测试运行沙盒,不允许访问临时目录之外的文件和目录


有没有办法扩展单元测试的沙箱,以包括对应用程序项目文件夹中特定目录的访问?

只需将文件存储在应用程序支持文件夹中即可。此文件夹位于沙箱中,用于存储应用程序所需的数据

您可以使用
NSSearchPathForDirectoriesInDomains
获取它的路径,并应检查它是否存在(在返回的路径上),如果需要,创建它

评论后的附录:

有一个不推荐的权利可能对你有用,但不要试图在你通过苹果发布的任何东西中使用它!使用此选项可能会影响您的测试,因为他们也可以访问所有内容。。。从历史上看,有授权访问特定路径的权利,网络上的一些考古学可能也会发现这些权利


正确的方法是存储一个文件夹,但您确实需要一些用户交互来启动它:在第一次运行时,弹出一个标准的文件打开对话框,供用户选择要存储文件的文件夹,然后构造并保存(例如,在用户默认设置下)一个社会范围的书签。在以后的跑步中,只需加载书签并激活它。

谢谢您的建议。问题是这些文件是项目源代码的一部分,并且受版本控制。我目前的解决方法是在运行测试之前将它们复制到$TMPDIR,然后再将它们复制回源文件夹。“我希望有一种方法可以扩展沙箱,这样这个步骤就没有必要了。”马克补充道。嗯