使用 Swift 和 xCode9 beta4 创建静态库

Create a static library with Swift and xCode9 beta4

我有一个使用命令行工具编译一些 C 和 ObjC 代码的静态库。

我想开始在此静态库中使用 Swift,因为它有助于 simplify/shorten 代码。 (好吧,这就是未来吧?)

我已经搜索并了解到无法将 Swift 文件包含在静态库中,直到我看到 a post 说现在可以使用 xCode 9 测试版 4。 ()

我的问题是:

注意:我已经探讨了如何从 C 调用 Objective-C 中的 Swift 的问题。我知道桥接 Header 的需要和 [= 的生成23=]项目-Swift.h header 文件(连同一些设置)。

就在命令行工具中使用此功能而言,我认为可以做到,但需要设置某些标志。我没有亲自做过,但我找到了一些很好的答案和信息 in this article

如前所述,自 Xcode 9 Beta 4 起,Apple 允许在静态库中使用 Swift。

我们尝试在具有 Objective-C-based 目标和 "child" 静态库项目的现有项目上执行此操作,并使 运行 陷入链接错误

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64

还有

ld: library not found for -lswiftDispatch for architecture x86_64

这是因为主要目标(应用程序)试图仅针对 Objective-C 进行构建,而静态库并未告知它需要包含 Swift 库。这是因为在我们的 Build Phases 应用程序目标的 Compile Sources 部分中没有任何 Swift 文件。

所以基本上你所要做的就是至少添加一个.swift文件到那个编译列表,它会为你包含Swift库.它甚至没有任何代码或值,它可以是一个空文件。

然后您可以开始将 Swift 个文件添加到您的 "child" 静态库项目中。我会让它首先为您生成桥接 header 然后您可以移动它并更改导入的内容(如果您移动它,请确保项目指向构建设置中的正确文件)。

您仍然应该记住,在 相同的 静态库中使用 Swift 和 Objective-C 可能有其自身的问题。我建议阅读 the Apple developer doc "Swift and Objective-C in the Same Project" 如何解决将 Objective-C 导入 Swift(使用桥接 header)以及如何在 [=43] 中使用 Swift 文件=] 代码(为您的库导入生成的 -Swift.h)。