如何为Xcode UI测试禁用沙箱

对于我的macOS桌面应用程序的UI测试目标,我需要能够运行命令行工具(特别是git)来验证一些应用程序操作,但是我收到一个错误,指出它无法在应用程序沙箱中运行。

我从未为我的应用程序或测试目标明确启用沙箱功能,因此我在弄清楚如何将其关闭方面遇到困难。没有授权文件,我找不到任何与沙箱相关的目标设置。

那么是否可以为UI测试目标禁用沙箱?我知道解决方法可能包括将git复制到捆绑包中,或让用户明确选择工具,但似乎都不是很理想。

更新:我尝试将git复制到测试包中以从那里运行,但是仍然遇到相同的错误。

更新2:您可以关闭测试 bundle 的沙箱功能,但是Xcode自动构建的测试 runner 仍处于沙箱状态(并且无法加载未签名的捆绑软件) ,并且AFAICT无法更改转轮的构建方式。我错了吗?

mengyingyu2009 回答:如何为Xcode UI测试禁用沙箱

创建具有.entitlements文件的文件

<key>com.apple.security.app-sandbox</key> <false/>

,然后为UI测试包指定CODE_SIGN_ENTITLEMENTS(通过xcconfig或“构建设置”->“签名”)。 Xcode将为测试运行程序应用程序的此权利使用值。

,

对我有用的解决方法是将git复制到分发包中,确保在构建过程中对它进行了代码签名。然后可以从沙盒测试运行器运行它。

要注意的是,/usr/bin/git上的二进制文件不是真正的git工具,而是一个占位符,该占位符转发到xcrun,该{找到的Xcode会找到您正在使用的Xcode安装并运行副本该应用包中的git,您将无法在沙盒中执行任何操作。因此,您必须将其直接从Xcode中复制出来。

赞:

  • 通过导航到Xcode.app/Contents/Developer/usr/bin/git并将“位置”弹出窗口设置为“相对于开发人员目录”,从Xcode添加git
  • 在“ UI测试”目标中添加“复制文件”构建阶段,以将git复制到Executables目录中(如果将其放置在其他位置,则不会将代码签名为可执行文件)
  • 确保在该构建阶段中选中了“复制时进行代码签名”(默认设置)
  • 在运行时,使用Bundle(identifier: YourTestBundleID).url(forAuxiliaryExecutable: "git")
  • 查找git
本文链接:https://www.f2er.com/3115317.html

大家都在问