ios - 使用 Swift 和 xCode9 beta4 创建静态库

标签 ios objective-c swift static-libraries xcode9

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

我想开始在这个静态库中使用 Swift,因为它有助于简化/缩短代码。 (好吧,这就是 future ,对吗?)

我已经搜索并了解到不可能将 Swift 文件包含在静态库中,直到我看到一篇文章说 xCode 9 beta 4 现在可以实现这一点。 (Static Library and Swift)

我的问题是:

  • 这真的是真的吗?
  • 如果现在有效,有人可以解释一下应该如何将 Swift 包含到静态库中吗?
  • 此功能是否已扩展到命令行工具,我的意思是我可以在命令行中执行相同的操作吗?
  • 如果可以的话我该怎么做?或者有人可以提供如何操作的链接吗?

注意:我已经探讨了如何从 Objective-C 从 C 调用 Swift 的问题。我知道需要桥接 header 以及项目-Swift.h 头文件的生成(以及一些设置)。

最佳答案

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

如上所述,从 Xcode 9 Beta 4 开始,Apple确实允许在静态库中使用 Swift。

我们尝试在具有基于 Objective-C 的目标和“子”静态库项目的现有项目上执行此操作,但一直遇到链接错误

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64

还有

ld: library not found for -lswiftDispatch for architecture x86_64

这是因为主要目标(应用程序)试图仅针对 Objective-C 进行构建,并且静态库没有告知它需要包含 Swift 库。这是因为应用目标的构建阶段编译源部分中没有任何 Swift 文件。

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

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

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

关于ios - 使用 Swift 和 xCode9 beta4 创建静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157647/

相关文章:

ios - 如何在 tableview iOS 中设置节标题而不重复数据?

objective-c - 发送 POST 后重新加载 UITableView

arrays - 如何制作类对象的快速数组的副本

swift - 使用 swift 4 检索 NSDictionary 值

ios - Branch.io 统计数据

c++ - 如何在 iOS Objective-C 中捕获 C++ 异常代码?

objective-c - 自定义 UIProgressView 绘图怪异

ios - 带有 UIWebPaginationModeLeftToRight 的 UIWebView 背景颜色始终为白色

iphone - Objective-C 预处理器指令

ios - 是否可以将 SwiftUI 列表项文本选择性地设置为常见问题解答部分的粗体?