尝试创建一个在我公司的iOS应用程序之间共享的实用程序项目.我在之前的工作中完成了这项工作,但这种情况早于Swift.我显然希望将所有实现保留在swift中,而不是Obj-C.
我尝试了cocoapod路线,使用本指南,但在我甚至可以开始在主项目中使用我的实用程序代码之前存在构建问题.
我现在正在尝试使用"可可触摸静态库",其语言为Swift,但仍然没有运气.我将整个.xcodeproj文件导入我的工作区.现在,我只有一个.swift文件,加上由XCode生成的头文件.我的项目刚刚被调用IosUtilsTest.
特别是我的test util文件:
extension UIBarButtonItem {
class func flexible() -> UIBarButtonItem {
return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中:
import IosUtilsTest
....
toolbar.items = [UIBarButtonItem.flexible(), centeredButton, UIBarButtonItem.flexible()]
....
Run Code Online (Sandbox Code Playgroud)
我得到一个flexible不存在的编译器错误.
我试图既包括<IosUtilsTest/IosUtilsTest-swift.h>和<IosUtilsTest/IosUtilsTest.h>我的桥接报头.
基本上它似乎扩展没有包含在构建中.FWIW - 我记得有一个类别需要一个特殊的构建标志的问题,所以我尝试了一个我试图实例化的类,这是相同的基本错误.
我们有一个包含许多swift框架模块的项目,这些模块都被组合到一个应用程序中,所以我应该能够提供一些帮助.
首先,您要创建一个Cocoa Touch Framework作为项目类型.
第一个让我感到困惑的是,框架中的所有内容都必须公开,因为它默认是内部的.好吧,至少要向客户端公开API的各个部分.所以使用:
public extension UIBarButtonItem {
class func flexible() -> UIBarButtonItem {
return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
您不应该再这样做了,只需在.swift文件中导入您的模块,并在包含库的链接二进制文件中包含该框架.
我们也试过cocoapods并花了很多时间在它上面无济于事.很多构建错误,所以我们放弃并使用了Git子模块.你是对的,它不如cocoapod设置好 - 但它对我们来说很好,只是稍微增加一点.如果您愿意,可以将子模块标记为.gitmodules中的"自动获取".
如果让它起作用,要小心可可豆荚的一件事是,暂时,你的所有应用必须使用相同版本的Xcode构建.因此,如果您有一个使用旧版Xcode构建的模块然后放入可可pod,则需要确保在更新Xcode时重建它.这是由于与构建一起打包的swift运行时 - 请参阅Apples Swift博客了解更多详细信息.
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |