【问题标题】:"Copy swift standard libraries" build step does not include SwiftOnoneSupport.dylib“复制 swift 标准库”构建步骤不包括 SwiftOnoneSupport.dylib
【发布时间】:2019-05-05 10:02:15
【问题描述】:

我最近遇到了一个令人不安的问题,这与在一个项目上运行测试有关,该项目具有 cocoapods 依赖于一个框架,该框架在运行时崩溃并出现错误:

库未加载:@rpath/libswiftSwiftOnoneSupport.dylib 引用自:MyCocoapodsDependency

还有其他关于该特定问题的 stackoverflow 主题,但它们都没有解决根本原因(例如 here),即在测试构建的“复制 swift 标准库”步骤中,缺少的库是没有复制过来。

看起来像这样(这是我构建测试时的构建日志):

当它看起来像这样(这是使用完全相同的依赖项的测试应用程序的构建日志):

OnOneSupport 似乎与与“整个模块优化”有关的项目设置有关。

但即使我改成“not onOne”也没有什么不同。 https://github.com/apple/swift/blob/master/cmake/modules/AddSwift.cmake中引用了dylib

我一生都无法弄清楚为什么它在标准库构建步骤中为一个目标而不是另一个目标省略,但很明显我的测试需要它。有人知道我如何强制编译器包含 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

【问题讨论】:

标签: swift build cocoapods standard-library


【解决方案1】:

我的两个框架也有同样的问题。最奇怪的是,其中一个工作正常,而另一个却不行。

虽然我无法弄清楚为什么会发生这种情况(因为它似乎是 Xcode bug),但我能够找到一个非常巧妙的解决方法。

事实证明,在代码中的任何位置使用 print() 会以某种方式强制加载 libswiftSwiftOnoneSupport.dylib。因此,通过添加类似这样的内容,问题应该会消失:

private func dummy() { 
    print("Hello world!") 
}

我使用的是 Xcode 10.1、Swift 4.2,而出现此问题的 pod 是 Nimble。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2012-05-28
    • 1970-01-01
    • 2016-12-29
    • 2018-10-20
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多