如何禁用Xcode UI测试的沙盒机制

3
对于我的macOS桌面应用程序的UI测试目标,我需要能够运行命令行工具(特别是git)来验证一些应用程序操作,但我得到一个错误,说它不能在应用程序沙盒中运行。
我从未明确为我的应用程序或测试目标启用过沙箱,所以我很难弄清如何关闭它。没有授权文件,我找不到任何似乎与沙盒有关的目标设置。
那么,是否可能为UI测试目标禁用沙箱?我知道解决方法可能包括将git复制到包中,或者让用户明确选择该工具,但这两种方法都不是非常理想的。
更新:我尝试将git复制到测试包中并从那里运行,但仍然收到相同的错误。
更新2:您可以关闭测试包的沙箱,但Xcode自动构建的测试运行程序仍然受到沙箱的限制(无法加载未签名的包),据我所知,没有改变构建器构建方式的办法,我错了吗?
2个回答

7
创建.entitlements文件并添加以下内容: <key>com.apple.security.app-sandbox</key> <false/> 通过xcconfig或Build Settings -> Signing为您的UI测试包指定CODE_SIGN_ENTITLEMENTS。Xcode会将此entitlement的值用于测试运行程序。

你能否澄清如何为UITests-Runner目标(而不是目标应用程序)执行此操作?正如@Uncommon所说,似乎没有办法为UITests-Runner指定权限,因此需要明确禁用沙盒。 - Paulius Liekis
忽略我 - 当您将过滤器从“自定义”切换到“全部”设置时,它会显示。 - Paulius Liekis

1
我使用的解决方法是将git复制到bundle中,并确保在构建过程中对其进行代码签名。然后可以从沙盒化的测试运行程序中运行它。
问题在于,位于/usr/bin/git的二进制文件不是真正的git工具,而是一个转发到xcrun的占位符,后者会找到您的活动Xcode安装并在该应用程序包内部运行git的副本,您无法在沙盒中执行任何操作。因此,您必须直接从Xcode中复制它。
像这样:
  • 通过导航到Xcode.app/Contents/Developer/usr/bin/git并将位置弹出菜单设置为“相对于开发人员目录”来从Xcode中添加git
  • 为UI测试目标添加一个复制文件构建阶段,将git复制到可执行文件目录中(如果将其放在其他位置,则不会将其作为可执行文件进行代码签名)
  • 确保在该构建阶段中选中“在复制时签署代码”(这是默认值)
  • 在运行时,使用Bundle(identifier: YourTestBundleID).url(forAuxiliaryExecutable: "git")查找git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接