在较旧的 iOS 模拟器上运行时 Xcode 10 测试失败 - “无法加载测试包......找不到合适的图像”

Posted

技术标签:

【中文标题】在较旧的 iOS 模拟器上运行时 Xcode 10 测试失败 - “无法加载测试包......找不到合适的图像”【英文标题】:Xcode 10 test failure when running on older iOS simulators - "Failed to load test bundle... no suitable image found" 【发布时间】:2019-02-20 15:06:13 【问题描述】:

我已安装 Xcode 10 并将我的 ios 应用程序升级到 Swift 4.2。当我通过 Xcode 在运行 iOS 12 的 iPhone 模拟器上运行我的测试(UI 和 Unit)时,测试成功启动。当我尝试在运行早期 iOS 版本(例如 iOS 10.3.1)的模拟器上运行测试时,我收到“加载测试包失败”。这些测试在 Xcode 9.4 上成功运行。我可以毫无问题地在这个旧模拟器上运行我的应用程序。

Xcode输出如下(“Reading List”为应用名称):

2018-09-16 15:11:36.667 ReadingList[11401:11478426] 无法从文件加载测试包:///Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/ Debug-iphonesimulator/ReadingList.app/PlugIns/ReadingList_UnitTests.xctest/: 错误域=NSCocoaErrorDomain Code=3587 "dlopen_preflight(/Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ ReadingList.app/PlugIns/ReadingList_UnitTests.xctest/ReadingList_UnitTests):没有找到合适的图像。确实找到了: /Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ReadingList.app/PlugIns/ReadingList_UnitTests.xctest/ReadingList_UnitTests:mach-o,但不是为 iOS 模拟器构建的“UserInfo= NSLocalizedFailureReason=捆绑包损坏或缺少必要的资源。, NSLocalizedRecoverySuggestion=尝试重新安装捆绑包。, NSFilePath=/Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ReadingList. app/PlugIns/ReadingList_UnitTests.xctest/ReadingList_UnitTests, NSDebugDescription=dlopen_preflight(/Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ReadingList.app/PlugIns/ReadingList_UnitTests.xctest ): 没有找到合适的图片。确实找到了: /Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ReadingList.app/PlugIns/ReadingList_UnitTests.xctest/ReadingList_UnitTests:mach-o,但不是为 iOS 模拟器构建的,NSBundlePath= /Users/andrewbennet/Library/Developer/Xcode/DerivedData/ReadingList-edsxqugqvkymbgfrbivbjmzebuya/Build/Products/Debug-iphonesimulator/ReadingList.app/PlugIns/ReadingList_UnitTests.xctest, NSLocalizedDescription=无法加载包“ReadingList_UnitTests”,因为它是损坏或缺少必要的资源。

mach-o, but not built for iOS simulator 行似乎是关键。我该如何解决这个问题?

【问题讨论】:

类似的事情发生在我身上,我无法使用命令行运行测试。它对我有用的是清理 delvery 数据文件夹,因此无需更改您的应用支持的 iOS 版本 【参考方案1】:

测试目标将iOS Deployment Target 设置保留为默认值。

在 Xcode 9.4 中,这等于“iOS 11.4”,但由于某种原因,测试仍然可以在“iPhone 7 (10.3)”模拟器上运行。在 Xcode 10 中,行为似乎发生了变化,因为测试不再在运行默认“iOS 12”之前的 iOS 版本的模拟器上运行。

【讨论】:

我有一个very similar issue,我的 UI 测试可以在任何模拟器上正常运行,但不能在 iOS 低于 12.3 的设备上运行。事实证明,UI 测试部署目标设置为 iOS 12 的默认值,而我只是将被测应用的部署目标更改为 iOS 10。当我将 UI 测试目标部署目标设置为 iOS 10 时,它开始运行良好也在设备上。 绝对的救命稻草!【参考方案2】:

在项目导航器中,选择项目文件。 在项目配置窗口中选择目标。 选择构建设置选项卡,(基本和级别) 向下滚动到 iOS 部署目标,然后选择所需的操作系统版本。

这为我解决了问题。 干杯 rgds戴夫

【讨论】:

以上是关于在较旧的 iOS 模拟器上运行时 Xcode 10 测试失败 - “无法加载测试包......找不到合适的图像”的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 10 中创建本地通知的方法是啥。它在较旧的iOS版本中有效吗? [关闭]

如何在较旧的IOS /旧浏览器上使用Graphql Vue Apollo?

较旧的模拟器下载是不是会下载相应的sdk更改

如何在较旧的 GPU 上测试 OpenGL 应用程序?

为啥在较新的 Android 设备上预检失败,但在较旧的设备和台式机上却没有?

在较旧的 Postgres (9.4) 上使用 Django 3+