Xcode 12.3:测试计划指定的 .xcappdata 未加载到模拟器中

问题描述

我使用 Xcode 测试计划为我的应用程序设置了一个新的测试目标,以指定要用于每个目标的 .xcappdata 文件。我们在 iPad 和 iOS 模拟器中运行测试,每次测试运行之前都会从头开始重新创建。

然而,Xcode 从未真正将应用数据(例如 com.ourCompany.ourApp.plist 和其他文件)从 .xcappdata 文件复制到 ~/Library/Developer/CoreSimulator/Devices/SIMULATED_DEVICE_GUID/data/Containers/Data/Applications/OUR_APP'S_CONTAINER_GUID/ 中模拟器容器的相应目录中。>

因此,我们的测试失败了,因为例如,生成一个新的应用程序 .plist 而不是使用我们的 .xcappdata 中的应用程序,导致 UserDefaults 设置值不符合预期。

我做错了吗?我们怎样才能让它真正起作用......?

我发现多个其他线程(例如 this one on Apple Dev Forums from four years ago)和 Stack Overflow 上的多个线程(例如 this post)表明此功能已被破坏 since at least Xcode 6

但是……他们不是在 Xcode 11 中将每个目标的 .xcappdata 功能添加为测试计划的一部分吗?它怎么会在 Xcode 12.3 中再次被破坏? Apple 是否不会围绕自己的测试计划功能进行测试?

我希望有人能启发我...这是权限问题吗?由于大苏尔的回归?我是否需要在“安全与隐私”>“隐私”>“完整磁盘访问”中添加一些神秘的可执行文件(隐藏在 /Applications/Xcode.app/Contents/Some/Deeply/nested/Toolchain/usr/bin 的无数子文件夹中)?

任何帮助将不胜感激...谢谢!

我确实找到了以下解决方法,但似乎都没有很好的可扩展性:

  • 在测试方案中将 HOMECFFIXED_USER_HOME 环境变量设置为 $(SRC_ROOT)/path/to/myData.xcappdata/AppData/(这会导致该文件夹现在成为模拟应用的容器目录,从而导致这些文件修改为将其作为实际位置而不是通常的容器位置运行的测试结果!)
  • 使用脚本将文件从嵌套在 .xcappdata 内的子文件夹复制到嵌套在 ~/Library/Developer/CoreSimulator/Devices/SOME-GUID/data/Containers/Data/Applications/ANOTHER-GUID/ 内的相同子文件夹中(当然,由于这些 GUID 是随机的并且在测试时确定,如何编写这样的一个脚本并让它在 CI 机器 [使用 Fastlane 脚本执行测试] 和本地开发人员机器[从 Xcode 内执行测试] 上可靠地工作,会很烦人)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)