使用 Swift 和 xCode9 beta4 创建静态库
Create a static library with Swift and xCode9 beta4
我有一个使用命令行工具编译一些 C 和 ObjC 代码的静态库。
我想开始在此静态库中使用 Swift,因为它有助于 simplify/shorten 代码。 (好吧,这就是未来吧?)
我已经搜索并了解到无法将 Swift 文件包含在静态库中,直到我看到 a post 说现在可以使用 xCode 9 测试版 4。 ()
我的问题是:
- 这是真的吗?
- 如果它现在可以工作,谁能解释我应该如何将 Swift 包含到静态库中?
- 此功能是否扩展到命令行工具,我的意思是我可以在命令行中做同样的事情吗?
- 如果可以的话,我应该怎么做?或者有人可以提供有关如何操作的链接吗?
注意:我已经探讨了如何从 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
)。
我有一个使用命令行工具编译一些 C 和 ObjC 代码的静态库。
我想开始在此静态库中使用 Swift,因为它有助于 simplify/shorten 代码。 (好吧,这就是未来吧?)
我已经搜索并了解到无法将 Swift 文件包含在静态库中,直到我看到 a post 说现在可以使用 xCode 9 测试版 4。 (
我的问题是:
- 这是真的吗?
- 如果它现在可以工作,谁能解释我应该如何将 Swift 包含到静态库中?
- 此功能是否扩展到命令行工具,我的意思是我可以在命令行中做同样的事情吗?
- 如果可以的话,我应该怎么做?或者有人可以提供有关如何操作的链接吗?
注意:我已经探讨了如何从 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
)。