使用Swift和xCode9 beta4创建一个静态库



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

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

我已经搜索并了解到不可能在静态库中包含Swift文件,直到我看到一篇帖子,说现在可以使用xCode 9 beta 4。(静态库和Swift)

我的问题是:

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

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

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

如前所述,苹果确实允许Swift在Xcode 9 Beta 4的静态库中使用。

我们试图在一个现有的项目上这样做,该项目有一个基于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库。这是因为在应用程序目标的Build PhasesCompile Sources部分中没有任何Swift文件。

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

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

您仍然应该记住,在相同的静态库中使用Swift和Objective-C可能会有自己的问题。我建议阅读苹果开发人员的文档"Swift and Objective-C in the Same Project",了解如何将Objective-C导入Swift(使用桥接头),以及如何在Objective-C代码中使用Swift文件(为库导入生成的-Swift.h)。

最新更新