尝试创建一个在我公司的 iOS 应用程序之间共享的实用程序项目。我在以前的工作中做过这个,但那早于 Swift。我显然希望保持所有的快速实现,而不是 Obj-C。
我尝试了 cocoapod 路线,使用 this guide ,但在我什至可以开始在主项目中使用我的实用程序代码之前存在构建问题。
我现在正在尝试使用语言为 Swift 的“Cocoa Touch 静态库”,但仍然没有成功。我导入了整个 .xcodeproj
文件到我的工作区。现在,我只有一个 .swift
文件,加上 XCode 生成的头文件。
我的项目名为 IosUtilsTest
.
特别是我的测试 util 文件:
extension UIBarButtonItem {
class func flexible() -> UIBarButtonItem {
return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
}
}
在我的应用中:
import IosUtilsTest
....
toolbar.items = [UIBarButtonItem.flexible(), centeredButton, UIBarButtonItem.flexible()]
....
我得到一个编译器错误 flexible
不存在。
我试过同时包含 <IosUtilsTest/IosUtilsTest-swift.h>
和 <IosUtilsTest/IosUtilsTest.h>
在我的桥接头中。
基本上,扩展似乎没有包含在构建中。 FWIW——我记得 Categories 有一个问题需要一个特殊的构建标志,所以我只用一个我试图实例化的类来尝试这个,它是相同的基本错误。
最佳答案
我们有一个项目包含许多 swift 框架模块,这些模块全部构建到一个应用程序中,因此我应该能够提供一些帮助。
首先,您要创建一个 Cocoa Touch Framework 作为项目类型。
我遇到的第一个问题是框架中的所有内容都必须声明为公开的,因为默认情况下它是内部的。好吧,至少要向客户端公开 API 的部分。所以使用:
public extension UIBarButtonItem {
class func flexible() -> UIBarButtonItem {
return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
}
}
您不需要做更多的事情,只需将您的模块导入 .swift 文件,并将框架包含在带有库的链接二进制文件中。
我们还尝试了 cocoapods 并在其上花费了相当多的时间但无济于事。很多构建错误,所以我们放弃并使用 Git 子模块。你是对的,它不像 cocoapod 设置那么好 - 但它对我们来说工作得很好,只是多了一点开销。如果愿意,您可以在 .gitmodules 中将子模块标记为“自动获取”。
在使用 cocoa pods 时需要注意的一件事是,目前,您的所有应用程序都必须使用相同版本的 Xcode 构建。因此,如果您有一个使用旧版本 Xcode 构建的模块,然后将其放入 cocoa pods,则需要确保在更新 Xcode 时重建它。这是由于与构建一起打包的 swift 运行时 - 有关更多详细信息,请参阅 Apples Swift 博客。
关于ios - swift 静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27153953/