cocoapods-tdfire-binary

组件二进制化辅助 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 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 配置。
  • --subspecs
    • 打包目标子组件,默认会打包所有组件
  • --use-carthage
    • 使用 carthage 进行打包,三方库提供 carthage 的优先。没有指定的话,使用 cocoapods-packager 插件进行打包。
  • --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 配置。

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
    • 使用源码依赖的组件。在采用二进制版本时,如果想某些组件采用源码,可以向该方法传入组件名数组。