我有一个静态库,可以使用命令行工具编译一些C和ObjC代码。
我想在这个静态库中开始使用Swift,因为它有助于简化/缩短代码。 (好吧,这是未来的权利吗?)
我已经搜索并了解到,在我看到一个帖子表示现在可以使用xCode 9 beta 4 之前,无法将Swift文件包含在静态库中。 (Static Library and Swift)
我的问题是:
注意:我已经探讨了如何从Objective-C从C调用Swift的问题。我知道需要一个桥接头并生成一个项目 -Swift.h头文件(以及一些设置)。
答案 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
)