Skip to content
cocoapods 组件二进制辅助插件 (不维护)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.bundle
.vscode
example/test
lib
spec
.gitignore
.travis.yml
Gemfile
Gemfile.lock
LICENSE.txt
README.md
Rakefile
cocoapods-tdfire-binary.gemspec
explore.md

README.md

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 配置。
  • --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
    • 使用源码依赖的组件。在采用二进制版本时,如果想某些组件采用源码,可以向该方法传入组件名数组。
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.