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

时间:2017-11-07 12:09:57

标签: ios objective-c swift static-libraries xcode9

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

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

我已经搜索并了解到,在我看到一个帖子表示现在可以使用xCode 9 beta 4 之前,无法将Swift文件包含在静态库中。 (Static Library and Swift

我的问题是:

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

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

1 个答案:

答案 0 :(得分:2)

至于在命令行工具中使用此功能,我认为可以完成,但有一些标志要设置。我没有亲自完成,但我找到了一些好的答案和信息in this article

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

我们尝试在具有基于Objective-C的目标和" child"的现有项目上执行此操作。静态库项目并一直遇到链接错误

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64

ld: library not found for -lswiftDispatch for architecture x86_64

这是因为主要目标(app)正在尝试仅针对Objective-C构建,并且静态库不告知它需要包含Swift库。这是因为我们Compile Sources的{​​{1}}部分中没有针对应用目标的任何Swift文件。

所以基本上你只需要在该编译列表中添加至少一个Build Phases文件,它将包含Swift库。它甚至没有任何代码或值,它可以是一个空文件。

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

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