使用Carthage发布Framework
最近开始尝试使用 Carthage 来管理 Swift 项目中的依赖包,对于这种去中心化的包管理还是比较喜欢的,因为很多时候项目的依赖就比较简单,虽然 CocoaPods 提供更多的功能,但是在现有的网络环境下,下载或者更新一次还是比较麻烦的。
因为 Carthage 旨在用最简单的方式添加frameworks到Cocoa应用,所以官方只支持Dynamic frameworks。Dynamic frameworks在 OSX 上支持任何版本,iOS 上只支持 iOS8 及以上版本。
加上最近在写一个 HTTPDNS 的库,就想尝试一下使用 Carthage 来发布相应的包。
创建 Framework 工程
由于 Carthage 没有中心化的package list,没有项目说明格式,大部分frameworks应该自动构建。 HTTPDNS 项目一开始使用的还是之前 CocoaPods 的开发思维,没有创建一个Dynamic frameworks,所以切换到 Carthage 的第一步就是将工程转换成Dynamic frameworks。
转换的方式其实也不复杂,就是新建一个Project,并选择Framework & Library中的Cocoa Touch Framework,其他的设置跟新建其他项目一致,新建完项目后就把原有的代码放到Framework工程中,能 Build 成功就基本没问题了。
Carthage 对于framework的特定要求
分享你的 Xcode schemes
Carthage 只构建从.xcodeproj分享出来的 Xcode schemes。可以通过运行carthage build --no-skip-current来检测所有的 intended schemes 是否构建成功,然后检查Carthage/Build文件夹。
如果运行命令的时候,一个重要的scheme没有构建成功,打开 Xcode 在构建菜单选择Manage Schemes(如下图)
对于需要构建的scheme勾选Shared(如下图)
这样 Carthage 可以发现它。
解决构建失败
如果运行carthage build --no-skip-current时遇到构建失败,尝试运行xcodebuild -scheme SCHEME -workspace WORKSPACE build或者xcodebuild -scheme SCHEME -project PROJECT build (用具体值)看是否出现同样的错误。这很有可能提供足够的信息来解决问题。
如果 Apple developer tools 安装有多个版本(比如安装了Xcode beta),使用xcode-select来选择 Carthage 最终使用哪个版本。
给稳定版本打标签
Carthage 通过搜索发布到仓库中的tag来决定framework的哪个版本是可用的,并试着将每个tag翻译成semantic version。比如,tag v1.2,语义版本是1.2.0。
没有数字版本号的tag,或者 有任何字符跟在数字版本号后边(比如:1.2-alpha-1)目前是不支持的,将会被忽略。
将预构建的 frameworks 归档到 zip 文件
如果依附于一个 GitHub Release,Carthage 自动使用预构建framework,而不是从头构建。
为了给预构建framework提供一个指定的tag,所有支持的平台的二进制文件被压缩成一个archive,这个archive依附于一个发布的响应那个tag的Release。附件应该包含.framework在它们的名字(比如:ReactiveCocoa.framework.zip),来表明 Carthage 它包含了二进制包。
声明你的兼容性
如果想声明你的项目支持 Carthage,可用添加一个兼容性的 badge 到 README文件,只需简单插入如下 Markdown:
![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
CarthageKit
Carthage 大部分的功能都被打包到一个称作 CarthageKit 的 framework 中了。 如果喜欢使用 Carthage 作为另一个工具的一部分,或者扩展 Carthage 的功能,看一下 CarthageKit 源码中的 API 是否符合你的需求。
参考:
原文链接:http://blog.yourtion.com/public-frameworks-with-carthage.html