ios - swift 静态库

标签 ios swift

尝试创建一个在我公司的 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/

相关文章:

ios - 如何在ios中的UITableview中聚焦最后一个单元格

ios - 在 SceneKit 编辑器中更改枢轴点,而不是以编程方式

ios - 检测 iOS 设备上是否安装了其他应用程序

arrays - swift:平均连续正数

ios - 具有与多个子类共享的 BaseGame 类的单个 GKScene

ios - ScrollView 以及 Collection View 单元格

ios - Swift GameKit 在 Arc 中移动 Sprite

ios - 使用Facebook SDK的iOS应用程序,应在iTunes Connect IDFA上选择哪些选项?

ios - 将大量 GPS 数据异步转换为城市/国家

ios - UIFontPickerViewController 在 Catalyst 中工作吗?