我最近遇到了一个令人不安的问题,该问题与在一个项目上运行测试有关,该项目依赖于一个框架,该框架在运行时崩溃并出现错误:
Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib Referenced from: MyCocoapodsDependency
还有其他关于该特定问题的 stackoverflow 主题,但没有一个解决根本原因(例如 here ),即在测试构建的“复制 swift 标准库”步骤中,缺少的库是没有复制过来。
它看起来像这样(这是我构建测试时的构建日志):
当它看起来像这样时(这是使用完全相同的依赖项的测试应用程序的构建日志):
OnOneSupport 似乎与项目设置有关,而项目设置又与“整个模块优化”有关。
但即使我更改为“not onOne”也没有什么区别。 dylib 在 https://github.com/apple/swift/blob/master/cmake/modules/AddSwift.cmake 中引用。
我一生都无法弄清楚为什么它被从一个目标的标准库构建步骤中省略,而不是另一个目标,但很明显我的测试需要它。有人知道如何强制编译器包含 SwiftOnoneSupport 吗?
解决方法
将构建阶段添加到测试目标(在项目文件中),将 libswiftSwiftOnoneSupport.dylib 复制到框架。 dylib 可以在以下位置找到:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/bitcode_strip/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/libswiftSwiftOnoneSupport.dylib
最佳答案
我的两个框架也遇到了同样的问题。最奇怪的是,其中一个人一切正常,但另一个人却不行。
虽然我无法弄清楚为什么会发生这种情况(因为它似乎是 Xcode bug ),但我能够找到一个非常简洁的解决方法。
事实证明,在代码中的任何位置使用 print()
都会以某种方式强制加载 libswiftSwiftOnoneSupport.dylib。因此,通过添加类似的内容,问题就会消失:
private func dummy() {
print("Hello world!")
}
我使用的是 Xcode 10.1、Swift 4.2,而给我带来这个问题的 pod 是 Nimble。
希望这有帮助!
关于swift - "Copy swift standard libraries"构建步骤不包括 SwiftOnoneSupport.dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605123/