之前总结了 iOS framework开发流程,当然,开发完了还需要发布和更新版本,以便开发者能快速方便地使用。
包管理工具
目前苹果生态下的包管理工具有:Cocoapods、Carthage、Swift Package Manager。Cocoapods是老牌的包管理工具,ruby写的,中心化包管理工具;Carthage是随着Swift的诞生出现的,swift写的,与Cocoapods不同,它是去中心化的;而Swift Package Manager,是苹果官方推出的Swift包管理工具,目前只支持OSX和macOS开发,包括Swift server开发的包管理。
因此,我们需要支持Cocoapods和Carthage。
Cocoapods
Cocoapods的framework发布流程有两种,一种是Cocoapods官方提供的 pod lib create命令,优点是会自动生成framework发布工程,包含demo工程、测试框架以及符号重命名,缺点是必须把源码文件添加进去以便打framework。当你不想发布源码时,就得使用第二种方式:自己建framework发布工程。
1.在github上创建git仓库,目录结构:
2.生成podspec:进入新建的git仓库,执行以下命令
pod spec create DTTracker
3.编辑新生成的podspec文件,添加必要的依赖和编译参数
Pod::Spec.new do |s|
s.name = "DTTracker"
s.version = "0.0.1"
s.summary = "DTTracker SDK"
s.description = "you can use DTTracker to track your user behavior in your app"
s.homepage = "https://www.dtstack.com/"
s.license = "MIT"
s.author = { "liuyunclouder" => "liuyunclouder@gmail.com" }
s.platform = :ios, "8.0"
s.source = { :git => "https://github.com/liuyunclouder/DTTracker.git", :tag => s.version }
s.vendored_frameworks = "frameworks/cocoapods/DTTracker.framework"
s.frameworks = "Foundation", "UIKit", "CoreTelephony"
s.libraries = "sqlite3", "z"
s.requires_arc = true
s.pod_target_xcconfig = { "OTHER_LDFLAGS" => "-ObjC -all_load" }
end
4.提交修改,打上tag,再次带上tag提交(tag要和podspec里的version匹配)
5.本地校验podspec:
pod lib lint DTTracker.podspec —verbose
6.再次远程校验:
pod spec lint DTTracker.podspec —verbose
7.推送到Cocoapods:
pod trunk push DTTracker.podspec
8.验证是否推送成功:
rm ~/Library/Caches/CocoaPods/search_index.json
pod search DTTracker
Carthage
Carthage目前只支持动态库,而在iOS framework开发流程中,我们新建的framework是静态库,因此,我们需要新建一个framework工程:
1.创建Cocoa touch framework:DTTrackerForCarthage
2.添加valid architecture类型
3.添加compile source(.m文件)和header文件
4.添加link库
5.我们需要让生成的framework名称为DTTracker,而不是DTTrackerForCarthage,因此还需要修改framework名称
6.修改scheme为shared
7.生成framework:进入framework开发工程根目录,执行以下命令
carthage build --no-skip-current
carthage archive DTTracker
8.找到生成的DTTrack.framework.zip文件,放入最开始我们创建的framework发布工程,这时我们的目录结构是这样的
9.打tag,提交远程
10.创建 github release,提交DTTracker.framework.zip
当然,每次还要打开命令行去执行carthage命令,显然是浪费时间,为节省时间同时也方便其它同事打framework,我们可以再添加一个aggregate target:
set -e
carthage build --no-skip-current
carthage archive ${PROJECT_NAME}
mkdir -p "${PROJECT_DIR}/frameworks/carthage"
mv "${PROJECT_DIR}/${PROJECT_NAME}.framework.zip" "${PROJECT_DIR}/frameworks/carthage"
这样,每次我们只需要运行一下这个target对应的scheme就能生成我们需要的DTTracker.framework.zip文件
当然,目前的流程还可以再改进,我们可以再建一个target,修改framework开发工程的版本号后同时为Cocoapods和Carthage打包并copy到framework发布工程,然后修改podspec版本号并打好tag并提交。然而目前就我一个人开发,基本够用,有时间再弄。
参考:
https://guides.cocoapods.org/syntax/podspec.html
https://github.com/Carthage/Carthage#supporting-carthage-for-your-framework