【问题标题】:Swift UI tests failing to launch on pre iOS 12.3 devicesSwift UI 测试无法在 iOS 12.3 之前的设备上启动
【发布时间】:2025-12-29 18:20:13
【问题描述】:

我正在尝试设置一些 UI 测试,但无法让它们在运行 iOS 12.3 之前的设备上运行。

即使我开始一个新的 swift 项目并勾选“包含 UI 测试”并尝试立即在 iOS 12.3 之前的设备上运行 UI 测试,我也会得到以下结果:

2019-05-22 15:42:41.543630+0100 testUITests-Runner[461:45630] 运行测试... 2019-05-22 15:42:41.601954+0100 testUITests-Runner[461:45630] 捆绑包“testUITests”无法加载,因为它已损坏或缺少必要的资源。尝试重新安装捆绑包。 2019-05-22 15:42:41.602043+0100 testUITests-Runner[461:45630] (dlopen_preflight(/var/containers/Bundle/Application/50D1F2AB-69B9-4C3D-B36B-F84F838E3301/testUITests-Runner.app/PlugIns/ testUITests.xctest/testUITests): 库未加载:@rpath/libswiftCore.dylib 引用自:/var/containers/Bundle/Application/50D1F2AB-69B9-4C3D-B36B-F84F838E3301/testUITests-Runner.app/PlugIns/testUITests.xctest/testUITests 原因:找不到图片

在 Xcode 6 的 beta 版本中,我看到了针对相同错误的各种问题和答案,但其中的建议都没有帮助,包括:

  • 干净的构建
  • 更改证书信任规则
  • 导入CoreLocation
  • 包括一个虚拟 swift 文件
  • 更改运行路径搜索路径(似乎已在 Xcode 中修复)
  • 更改“始终嵌入 Swift 标准库”构建设置

我开始使用 Xcode 10.2 并发现问题,升级到 Xcode 10.3 并没有帮助。

它在 12.2 模拟器上运行良好,但在设备上失败。

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    这个问题的答案非常简单。只需确保在您的构建设置中,UI 测试目标与应用具有相同的部署目标。

    我已将应用程序更改为针对 iOS 10,但没想到我需要对 UI 测试目标进行相同的更改。

    我想这是应该为我们自动同步的东西,大概没有理由让他们真正针对不同的版本

    【讨论】:

    • 我的主要目标支持iOS 9.3+。使用 Xcode 10.2 创建新的 XCUITest 目标时,将默认设置为 12.2。这个答案很有帮助。
    【解决方案2】:

    我有两个猜测,

    1. dyld: Library not loaded: @rpath/libswiftCore.dylib

    2. 你在组件中下载了ios版本的组件吗?

    打开和关闭您的计算机,在更糟糕的情况下卸载并重新安装 xcode。

    【讨论】:

    • 感谢您的评论。 Guess 1 是我已经解决的问题,尽管它是由不同问题引起的不同错误。我不太明白猜测 2 ...“组件”是指首选项中的模拟器列表吗?不知道这会有什么帮助!
    【解决方案3】:

    我已经找到了解决这个问题的方法,虽然它对于未来版本的 Xcode 不一定可靠,所以如果你决定尝试这个,请小心(也许你需要在 Xcode 升级后重复这个过程)。

    如果您转到以下目录,您将找到所有适用于 iPhone 设备的 swift 库:

     Applications⁩ ▸ ⁨Xcode⁩ ▸ ⁨Contents⁩ ▸ ⁨Developer⁩ ▸ ⁨Toolchains⁩ ▸ XcodeDefault.xctoolchain⁩ ▸ ⁨usr⁩ ▸ ⁨lib⁩ ▸ ⁨swift⁩ ▸ ⁨iphoneos
    

    您可以将它们复制到您的 UI 测试目标(不是正在测试的应用程序),然后添加复制文件构建阶段以将库捆绑到测试运行器中,以便可以在运行时找到它们。您不需要所有的 swift 库,下图显示了我发现需要的库:

    还值得注意的是,这会扰乱在模拟器上运行测试(毫无疑问,部分原因是这些被复制的 swift 库是设备的版本),尽管可能有一种方法可以解决这个问题,或者也许如果你不打算在模拟器上运行它们也没关系

    【讨论】: