cocoapods-tdfire-binary
已不维护,参考 cocoapods-bin
组件二进制化辅助 CocoaPods 插件,通过提前将组件打包成静态 framework,加快正式打包、组件 lint、组件发布的编译速度。
提供简易的源码/二进制依赖切换功能,方便开发调试。
安装
$ gem install cocoapods-tdfire-binary
使用
插件分为 pod binary 命令, 二进制 DSL 两部分。
由于组件的二进制版本并不存放在 GitLab 上,插件需要一个二进制服务器进行上传和下载,服务器部分可查看 binary-server 。使用插件前,需要先启动二进制服务器,否则插件二进制相关的功能将不可用。
pod binary 命令
以下命令都可以追加 --verbose
查看执行的详细流程。
执行 pod binary
:
➜ TDF pod binary
Usage:
$ pod binary COMMAND
2Dfire 二进制工具库,提供打包、lint、推送、拉取、发布等命令
Commands:
+ assemble 执行二进制组件发布操作集合
+ delete 删除二进制版本
+ init 初始化二进制插件
+ lib 二进制模版库操作
+ lint 对本地组件进行 Lint
+ list 查看所有二进制版本信息
+ package 二进制打包
+ publish 正式发布二进制组件
+ pull 下载二进制 zip 包
+ push 推送二进制 zip 包
+ search 查找二进制版本信息
Options:
--silent Show nothing
--verbose Show more debugging information
--no-ansi Show output without ANSI codes
--help Show help banner of specified command
pod binary init
初始化二进制插件(公司内部可以忽略此步骤,插件内部会下载默认配置文件)。执行命令后,展示以下交互界面:
开始设置二进制化初始信息.
所有的信息都会保存在 binary_config.yaml 文件中.
你可以在 /Users/songruiwang/.cocoapods/binary_config.yml 目录下手动添加编辑该文件.
/Users/songruiwang/.cocoapods/binary_config.yml 文件包含配置信息如下:
---
server_host: 输入二进制服务器地址 (比如 http://xxxxx:8080)
repo_url: 输入私有源 Git 地址 (比如 https://github.com/tripleCC/PrivateSpecRepo.git)
template_url: 输入 pod 模版 Git 地址 (比如 https://github.com/CocoaPods/pod-template.git)
third_party_group: 输入三方库所在的 group (比如 cocoapods-repos)
输入二进制服务器地址 (比如 http://xxxxx:8080)
>
使用者需要提供以下信息:
- server_host
- 二进制服务器地址,供插件的二进制功能部分使用
- repo_url
- 私有源 Git 地址,通过插件 lint 、发布等功能时使用
- template_url
- pod 模版 Git 地址,通过插件创建模版时使用
- three_party_group:
- 三方库所在的 group ,设置三方组件使用二进制时使用
如果存在旧值,直接键入回车键表示采用旧值。
输入二进制服务器地址 (比如 http://xxxxx:8080)
旧值:http:xxxxxx
>
http:xxxxxx
pod binary lib create
pod binary lib create NAME
创建二进制模版库。内部为 pod lib create --template-url=xxx
的一层简单包装,其中的 --template-url
对应上一小节 binary_config.yaml
中的 template_url
配置项。
推荐在模版库中预置项目组开发常用信息,如添加 CI/CD 配置文件,在 Podfile 中设置业务组件常见底层依赖等。
pod binary lib import
pod binary lib import [PATH]
根据 podspec 生成与组件同名伞头文件。在没有指定 PATH 的情况下,默认在执行命令目录生成伞头文件。当指定目录伞头文件已存在时,会执行替换操作。
pod binary lib upgrade
pod binary lib upgrade
更新 podspec 版本。
-
--type
更新版本类型,可选值为 patch/minor/major ,优先级比--version
低 -
--version
更新版本号,优先级比--type
高,设置之后会忽略--type
-
--commit
提交 commit 日志,没有设置则不执行git add / commit
pod binary list
查看所有二进制版本信息。和 pod list
输出格式一致。
pod binary lint
pod binary lint --sources=xxxx --binary-first
对本地组件进行 lint。内部为 pod lib lint
的封装。
-
--binary-first
- 在没有指定
--binary-first
的情况下,和pod lib lint
效果一致,指定之后,插件会优先采用依赖组件的二进制版本加快 lint ,lint 组件自身依然会采用源码。如果依赖的某些组件没有二进制版本,插件会对这些组件采用源码依赖。
- 在没有指定
-
--sources
- 私有源地址,在没有指定
--sources
的情况下,使用的 sources 为binary_config.yaml
中的repo_url
配置。
- 私有源地址,在没有指定
pod binary search
pod binary search NAME
查找二进制版本信息。和 pod search
输出格式一致。
pod binary package
pod binary package --spec-sources=xxxx --subspecs=xxxx --use-carthage --clean --binary-first
将源码打包成二进制,并压缩成 zip 包。其中二进制为静态 framework 封装格式。
-
--spec-sources
- 私有源地址,在没有指定的情况下,使用的 sources 为
binary_config.yaml
中的repo_url
配置。
- 私有源地址,在没有指定的情况下,使用的 sources 为
-
--subspecs
- 打包目标子组件,默认会打包所有组件
-
--use-carthage
- 使用 carthage 进行打包,三方库提供 carthage 的优先。没有指定的话,使用
cocoapods-packager
插件进行打包。
- 使用 carthage 进行打包,三方库提供 carthage 的优先。没有指定的话,使用
-
--binary-first
- 打包时,依赖组件优先采用二进制版本,加快编译。如果依赖的某些组件没有二进制版本,插件会对这些组件采用源码依赖。
-
--clean
- 执行成功后,删除 zip 文件外的所有生成文件
pod binary pull
pod binary pull NAME VERSION
下载二进制 zip 包。
pod binary push
pod binary push [PATH] --name=xxxx --version=xxxx --commit=xxxx
将二进制 zip 包推送至二进制服务器。 PATH 为 zip 包所在地址。
-
--name
- 推送二进制的组件名,没指定时,采用当前 podspec 中的组件名
-
--versio
- 推送二进制的版本号,没指定时,采用当前 podspec 中的版本号
-
--commit
- 推送二进制的版本日志,没指定时,采用当前分支最新 commit sha
pod binary publish
pod binary publish [NAME.podspec] --commit=xxxx --sources=xxxx --binary-first
正式发布二进制组件版本。内部为 pod repo push
的封装。
-
--commit
- 发布的 commit 信息
-
--binary-first
- 发布时,依赖组件优先采用二进制版本,加快编译。如果依赖的某些组件没有二进制版本,插件会对这些组件采用源码依赖。
-
--sources
- 私有源地址,在没有指定的情况下,使用的 sources 为
binary_config.yaml
中的repo_url
配置。
- 私有源地址,在没有指定的情况下,使用的 sources 为
pod binary delete
pod binary delete NAME VERSION
将二进制从服务器中删除。
二进制 DSL
在二进制化前,需要先在组件仓库中的 .gitignore
中添加 :
*.framework
*.zip
由于插件内部下载缓存机制,如果 tag 中存在 .framework 文件,则不下载二进制服务器的二进制文件。这就容易出现二进制版本和源码对不上问题,所以忽略 .framework 文件是必要的。
推荐将 .gitignore
放到 pod-template
中,使用 pod binary lib create
创建新组件工程。
podspec DSL
只支持 iOS 平台, Objective-C 项目(插件内部也会进行限制)
一份标准的二进制组件 podspec 如下所示:
....
tdfire_source_configurator = lambda do |s|
# 源码依赖配置
s.source_files = '${POD_NAME}/Classes/**/*'
s.public_header_files = '${POD_NAME}/Classes/**/*.{h}'
# s.private_header_files =
# 资源依赖必须使用 bundle
# s.resource_bundles = {
# '${POD_NAME}' => ['${POD_NAME}/Assets/*']
# }
# s.dependency 'TDFModuleKit'
end
unless %w[tdfire_set_binary_download_configurations tdfire_source tdfire_binary].reduce(true) { |r, m| s.respond_to?(m) & r }
tdfire_source_configurator.call s
else
s.tdfire_source tdfire_source_configurator
s.tdfire_binary tdfire_source_configurator
#s.tdfire_binary tdfire_source_configurator do |s|
# 额外配置 (一般不用)
#end
s.tdfire_set_binary_download_configurations
end
以上代码,除了 lambda tdfire_source_configurator
中的代码由使用者配置外,剩余代码都是固定的。使用者只需要将原来的源码配置,挪进 lambda 中即可。
Podfile DSL
一份采用二进制组件的 Podfile 如下所示:
...
plugin 'cocoapods-tdfire-binary'
tdfire_use_binary!
# tdfire_third_party_use_binary!
tdfire_use_source_pods ['AFNetworking']
...
plugin
方法为 CocoaPods 原生 DSL ,表示引入二进制化插件。
-
tdfire_use_binary!
- 所有组件优先采用二进制版本。
-
tdfire_third_party_use_binary!
- 三方组件优先采用二进制版本。
-
tdfire_use_source_pods
- 使用源码依赖的组件。在采用二进制版本时,如果想某些组件采用源码,可以向该方法传入组件名数组。