cocoapods-tdfire-binary
辅助组件二进制组件化的 CocoaPods 插件,适合希望解决以下业务场景的开发者:
通过提前将组件打包成 static-framework,减少主 App 打包时间
提供源码和二进制依赖切换功能,方便开发调试
尽量减少二进制化的工作量,以及对原发布流程的影响
规避维护两套 podspec 和对应的 tag
体验尽量贴近 CocoaPods 原生 DSL
安装
$ gem install cocoapods-tdfire-binary
使用
此插件需要结合二进制服务器使用,其中主要接口如下:
Usage:
$ pod binary COMMAND
2Dfire 二进制工具库,提供打包、lint、推送、拉取、发布等命令
Commands:
+ assemble 执行二进制组件发布操作集合
+ delete 删除二进制版本
+ init 初始化二进制插件
+ lib 二进制模版库操作
+ lint 对本地二进制进行 Lint
+ list 查看所有二进制版本信息
+ package 二进制打包
+ publish 正式发布二进制组件
+ pull 下载二进制 zip 包
+ push 推送二进制 zip 包
+ search 查找二进制版本信息
For .gitignore
...
*.framework
*.zip
For Podfile
...
plugin 'cocoapods-tdfire-binary'
tdfire_use_binary!
tdfire_use_source_pods ['AFNetworking']
use_frameworks!
...
For podspec
目前只支持 iOS 平台 (插件内部也会进行限制)
...
tdfire_source_configurator = lambda do |s|
# source configuration
# s.source_files = 'PodA/Classes/**/*'
# s.resource_bundles = {
# 'PodA' => ['PodA/Assets/*']
# }
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_set_binary_download_configurations
end
tdfire_source_configurator
- 配置源码依赖
tdfire_binary
- 配置二进制依赖,其中
vendored_framework
、source_files
、public_header_files
内部设置成如下路径
- 配置二进制依赖,其中
s.vendored_framework = "#{s.name}.framework"
#
# 这两句 framework 不需要,cocoapods-packager 插件生成的 framework 中, Headers 是一个软连接 ,所以即使设置了也不生效
# 这样就需要使用者都以 < > 的形式引用头文件了,而且需要是 umbrella 头文件,否则会出现警告
# s.source_files = "#{s.name}.framework/Headers/*"
# s.public_header_files = "#{s.name}.framework/Headers/*"
- 提取 subspec 中的依赖、frameworks、 libraries、 weak_frameworks,至二进制组件对应属性中
- 在组件源码依赖有 subspec 的情况下,插件会在二进制依赖时,动态创建 default subspec
TdfireBinary
,以及源码依赖时的 subspec ,并且让后者的所有 subspec 依赖TdfireBinary
- 由于此方案对二进制中的 subspec 并不做区分,统一打包成一个二进制文件,所以如果在使用二进制依赖时,依赖了 subspec ,插件还是会去下载完整的二进制文件,并且从最终生成的结果看,目录中只有
TdfireBinary
subspec - 此插件不支持嵌套 subspec 场景,如
Pod::Spec.new do |s|
s.name = 'Root'
s.subspec 'Level_1' do |sp|
sp.subspec 'Level_2' do |ssp|
end
end
end
- tdfire_set_binary_download_configurations
- 强制设置 static_framework 为 true,规避使用 use_frameworks! 时,动态库依赖链(动态库依赖静态库问题)、影响启动时间问题
- 设置 preserve_paths,让 cache 保留源码、资源、二进制全部文件
- preserve_paths 由组件,子组件的源码、资源路径,以及 Framework 路径组成
- 设置下载 prepare_command,未发布组件将会略过这一步骤
For Lib Env
Warning: 在发布二进制组件前,走二进制依赖流程,无法下载到对应 framework
- Env Key
- tdfire_use_binary
- 使用二进制依赖,确认值 1
- tdfire_unpublished_pods
- 未发布的组件,用
|
隔开 (如 PodA|PodB, 一般只有一个,即当前开发组件),设置后对应组件走源码依赖流程。 - 二进制 lint 时,无法通过 Podfile 的 plugin 获取当前的 development pod (即当前开发组件) ,在发布对应二进制版本前,走二进制依赖流程,是下不到对应二进制版本的,所以需要自己设置当前开发组件名,对这一部分进行源码依赖。
- tdfire_force_use_source
- 强制使用源码依赖,确认值 1
- 源码 lint 、未发布二进制组件前 CI 中 pod install / update (优先级比 Podfile 中的设置高) 时可使用
- tdfire_force_use_binary
- 强制使用二进制依赖,确认值 1
- 基本无用,在验证当前版本是否有对应二进制版本时可使用
例子:
env tdfire_use_binary=1 tdfire_unpublished_pods=PodA pod lib lint xxxx
env tdfire_force_use_source=1 pod install