swift - "Copy swift standard libraries"构建步骤不包括 SwiftOnoneSupport.dylib

标签 swift build cocoapods standard-library

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

Library not loaded: @rpath/libswiftSwiftOnoneSupport.dylib Referenced from: MyCocoapodsDependency

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

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

missing dylib

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

enter image description here

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

enter image description here

但即使我更改为“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

enter image description here

最佳答案

我的两个框架也遇到了同样的问题。最奇怪的是,其中一个人一切正常,但另一个人却不行。

虽然我无法弄清楚为什么会发生这种情况(因为它似乎是 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/

相关文章:

ios - 如何从 Storyboard单元测试单元

Xcode 12 更新破坏了 Pod 和产品

ios - "Code signing "GoogleToolboxForMac.framework "failed"上传到 Itunes Connect 时

visual-studio-2008 - 如何在 Visual Studio 2008 中将所有项目的默认构建目标设置为 x86?

xcode - 如何重新添加 Copy Pods 资源?

ios - 扩展中的延迟加载属性(Swift)

json - 如何使用 iOS Swift 访问设备中的 vpn api url?

objective-c - Objective-C 类中的 Swift 协议(protocol)

build - CMake:如何防止直接使用错误的子目录 CMakeLists?

java - 帮助设置 Java 构建环境