如何在 Xcode 中的 UITest 目标中链接自定义框架 - 另一个“库未加载 - @rpath”问题

nay*_*oti 4 xcode frameworks rpath swift uitest

我的项目使用 Xcode 11.3.1,结构如下:

MyProject
 - MyProject.xcworkscapce
 - MyFramework 
 - MyApp
   -MyApp (main-target)
   -MyAppUITests (uiTest-target)
Run Code Online (Sandbox Code Playgroud)

MyAppMyFramework可以导入并且可以很好地构建和运行。为此,我将MyFrameworkmain-target添加到 main-targets General/Frameworks 和 Libraries 中

在我的 UITest 目标中,我需要从 访问一些类(Accessibility-Identifier-Definitions)MyFramework,所以我需要以某种方式导入这些类。

两个目标都在构建中,主要目标正常工作没有任何问题。我还可以在模拟器上运行 ui-tests。不幸的是,我被迫在真实设备上运行我的测试,在这里我得到了这个运行时错误

The bundle “MyAppUITests” couldn’t be loaded because it is damaged or missing necessary resources. Try reinstalling the bundle.

(dlopen_preflight(/var/containers/Bundle/Application/E581B3BA-A9A2-4AA3-A1BA-91C57DCD3846/MyAppUITests-Runner.app/PlugIns/MyAppUITests.xctest/FHCommunityUITests): Library not loaded: @rpath/MyFramework.framework/MyFramework

  Referenced from: /var/containers/Bundle/Application/E581B3BA-A9A2-4AA3-A1BA-91C57DCD3846/MyAppUITests-Runner.app/PlugIns/MyAppUITests.xctest/MyAppUITests
  Reason: image not found)
Run Code Online (Sandbox Code Playgroud)

我对这个框架事物(以及 ui-tests)相当陌生,我现在处理这个问题已经两天了。大多数关于类似问题的帖子都与错误指定的 Podfile 相关,但在我设置为不破坏我的真实项目的准系统示例项目中,我没有使用任何 Pod。我可能尝试了所有建议的解决方案(以及几乎所有组合:(),但它们似乎都不起作用。

我花了一段时间才弄清楚,在我的 uiTest-target构建阶段中,我实际上可以添加一个新的运行脚本阶段,并且我假设我需要以某种方式将 MyFramework 链接到这里。这样对吗?有人可以帮我定义运行脚本吗?

是的,我试图清理我的应用程序(我还删除了派生数据)。

非常感谢帮助。谢谢!

nay*_*oti 8

好吧,我终于想通了。解决方案相当简单,我还没有看到有人提出这个建议。开始了:

要在您的应用程序目标中使用您的自定义框架,只需将其添加到Frameworks, Libraries, and Embedded Content

在此处输入图片说明

现在您可以从主目标访问 MyFramework。我也可以从模拟器运行我的 ui-tests,但在我的真实设备上执行我的 ui-tests 时仍然出现上述错误。

为了摆脱-ErrorThe bundle “xxxUITests” couldn’t be loaded because it is damaged or missing necessary resources. Try reinstalling the bundle.我不得不转到我的uiTest-target并在我的构建阶段链接框架。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

作为Destination选择Frameworks并选择要在 uiTest-target 中使用的 Framework。

现在您应该能够从您的设备运行您的 ui-Test。

  • 这个答案是一颗埋藏的宝石!谢谢你! (2认同)