cocoapods-imy-bin功能点:
- 组件二进制化,
无入侵式
支持组件二进制化,完全自动化,无需手动操作。致力于解决Ci打包速度慢、研发编译慢等编译问题。 - 本地配置文件 -
Podfile_local
- 二进制源码调试
pod bin code
,类似美团 iOS 工程 zsource 命令背后的那些事儿的效果。 - 命令快捷键
pod bin imy
,如游戏快捷键,根据配置会在特定目录执行特定命令(如任意终端目录下,执行某个特定目录的pod update --no-repo-update命令),减少其他繁琐操作。支持任意个快捷键。
cocoapods-imy-bin插件所关联的组件二进制化策略:
预先将打包成 .a
的组件保存到静态服务器上,并在 install
时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件发布等操作的目的。
sudo gem install cocoapods-imy-bin
使用二进制时,本插件需要提供以下资源:
- 静态资源服务器( binary-server,附详细使用教程)
- 二进制私有源仓库(保存组件二进制版本 podspec)
xx:Demo slj$ pod bin init
====== dev 环境 ========
开始设置二进制化初始信息.
所有的信息都会保存在 /Users/slj/.cocoapods/bin_dev.yml 文件中.
%w[bin_dev.yml bin_debug_iphoneos.yml bin_release_iphoneos.yml]
你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
---
configuration_env: dev
code_repo_url: git@github.com:su350380433/example_spec_source.git
binary_repo_url: git@github.com:su350380433/example_spec_bin_dev.git
binary_download_url: http://localhost:8080/frameworks/%s/%s/zip
download_file_type: zip
编译环境
可选值:[ dev / debug_iphoneos / release_iphoneos ]
旧值:dev
按提示输入所属环境
、源码私有源、二进制私有源、二进制下载地址、下载文件类型后,插件就配置完成了。其中 binary_download_url
需要预留组件名称与组件版本占位符,插件内部会依次替换 %s
为相应组件的值。
cococapods-imy-bin
也支持从 url 下载配置文件,方便对多台机器进行配置:
➜ ~ pod bin init --bin-url=https://github.com/su350380433/cocoapods-imy-bin-configs/raw/master/bin_dev.yml
配置文件模版内容如下,根据不同团队的需求定制即可:
---
configuration_env: dev
code_repo_url: git@github.com:su350380433/example_spec_source.git
binary_repo_url: git@github.com:su350380433/example_spec_bin_dev.git
binary_download_url: http://localhost:8080/frameworks/%s/%s/zip
download_file_type: zip
配置时,不需要手动添加源码和二进制私有源的 repo,插件在找不到对应 repo 时会主动 clone。
记得启动 sudo mongod
服务,静态资源服务。
可以直接使用插件的 pod bin auto
命令,在插件初始化配置完成后,目录下只要有包含podspec文件,根据podspec文件的version版本号会自动化执行build、组装二进制组件、制作二进制podspec、上传二进制文件、上传二进制podspec到私有源仓库。
pod bin auto
会自动生成、上传,无需关心。
二进制存储服务:http://localhost:8080/frameworks/(默认本地8080端口)
二进制私有源参考:https://github.com/su350380433/example_spec_bin_dev(自定义)
在Podfile文件中,加入这两行代码,对已经制作二进制的就会生效,自动转换二进制组件依赖。
plugin 'cocoapods-imy-bin'
use_binaries!
本地组件配置文件 Podfile_local,目前已支持Podfile下的大部分功能,可以把一些本地配置的语句放到Podfile_local。
场景:
- 不希望把本地采用的源码/二进制配置、本地库传到远程仓库。
- 避免直接修改Podfile文件,引起更新代码时冲突、或者误提交。
如Podfile本地库的写法:
pod YYModel :path => '../' #提交的时候往往要修改回来才提交,操作繁琐
用法:
在与Podfile同级目录下,新增一个Podfile_local
文件
#target 'Seeyou' do 不同的项目注意修改下Seeyou的值
#:path => '../IMYYQHome',根据实际情况自行修改,与之前在podfile写法一致
plugin 'cocoapods-imy-bin'
#是否启用二进制插件,想开启把下面注释去掉
# use_binaries!
#设置使用【源码】版本的组件。
#set_use_source_pods ['YYKit','SDWebImaage']
#需要替换Podfile里面的组件才写到这里
#在这里面的所写的组件库依赖,默认切换为【源码】依赖
target 'Seeyou' do
#本地库引用
#pod 'YYModel', :path => '../YYModel'
#覆盖、自定义组件
#pod 'YYCache', :podspec => 'http://覆盖、自定义/'
end
以前的 pod update --no-repo-update 命令加个前缀 `bin` 变成
pod bin update --no-repo-update
or
pod bin install
支持 pod install/update 命令参数
并将其加入 .gitignore ,再也不用担心我误提交或者冲突了,Podfile_local 中的配置选项优先级比 Podfile 高,支持和 Podfile 相同的配置语句,同时支持pre_install or post_install。
如果您不习惯Podfile_local的使用方式,可以把命令写在Podfile里面,pod时不需要加bin,依旧是 pod update/install。
在项目根目录下,输入命令:
pod bin code YYModel
YYModel
为需要源码调试的组件库名称。成功之后像平时一样单步调试,控制台打印变量。让我们同时拥有使用二进制的便利和源码调试的能力。
$ pod bin code --help [11:37:50]
Usage:
$ pod bin code [NAME]
通过将二进制对应源码放置在临时目录中,让二进制出现断点时可以跳到对应的源码,方便调试。 在不删除二进制的情况下为某个组件添加源码调试能力,多个组件名称用空格分隔
Options:
--all-clean 删除所有已经下载的源码
--clean 删除所有指定下载的源码
--list 展示所有一级下载的源码以及其大小
--source 源码路径,本地路径,会去自动链接本地源码
在任意的终端执行命令,都能执行特定目录下特定命令
使用命令:
pod bin imy
or
pod bin imy 2 #2 是自定义的快捷键
使用场景:
1. 在任意目录下,执行项目A的pod update --no-repo-update命令
命令快捷键配置
$ pod bin inithk [11:37:58]
开始设置快捷键 pod bin imy.
所有的信息都会保存在 /Users/ci/.cocoapods/hot_key_1.yml 文件中.
%w[hot_key.yaml]
你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
---
hot_key_index: '1'
hot_key_dir: '/User/ci/自定义目录'
hot_key_cmd: pod bin update --no-repo-update
快捷键
可选值:[ 1 / 2 / 3... ]
旧值:1
首先,开发者需要在 Podfile 中需要使用 plugin 'cocoapods-imy-bin'
语句引入插件
plugin 'cocoapods-imy-bin'
顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。
cocoapods-bin
插件提供二进制相关的配置语句有 use_binaries!
、use_binaries_with_spec_selector!
以及 set_use_source_pods
,下面会分别介绍。
全部组件使用二进制版本。
支持传入布尔值控制是否使用二进制版本,比如 DEBUG 包使用二进制版本,正式包使用源码版本,Podfile 关联语句可以这样写:
use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true')
设置使用源码版本的组件。
实际开发中,可能需要查看 YYModel 组件的源码,这时候可以这么设置:
set_use_source_pods ['YYModel']
如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源:
Analyzing dependencies
Fetching podspec for `A` from `../`
Downloading dependencies
Using A (0.1.0)
Installing YYModel 1.0.4.2 (source changed to `git@git.xxxxxx.net:ios/cocoapods-spec.git` from `git@git.xxxxxx.net:ios/cocoapods-spec-binary.git`)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.
过滤出需要使用二进制版本组件。
假如开发者只需要 YYModel
的二进制版本,那么他可以在 Podfile 中添加以下代码:
use_binaries_with_spec_selector! do |spec|
spec.name == 'YYModel'
end
需要注意的是,如果组件有 subspec ,使用组件名作为判断条件应如下:
use_binaries_with_spec_selector! do |spec|
spec.name.start_with? == '组件名'
end
如果像上个代码块一样,直接对比组件名,则插件会忽略此组件的所有 subspec,导致资源拉取错误,这种场景下,最好通过 set_use_source_pods
语句配置依赖。
一个实际应用是,三方组件采用二进制版本,团队编写的组件依旧采用源码版本。如果三方组件都在 cocoapods-repo
组下,就可以使用以下代码过滤出三方组件:
use_binaries_with_spec_selector! do |spec|
git = spec.source && spec.source['git']
git && git.include?('cocoapods-repo')
end
#dev 初始化插件配置 默认dev环境
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_dev.yml
#Debug_iPhoneos 初始化插件配置
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_debug_iphoneos.yml
#release_iPhoneos 初始化插件配置
pod bin init --bin-url=https://gitlab.xxx.com/cocoapods-imy-bin-config/raw/master/bin_release_iphoneos.yml
使用时在podfile 或者 podfile_local指定设置
#在podfile 或者 podfile_local 文件下加这句话
set_configuration_env('debug_iphoneos')
插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可:
install! 'cocoapods', { install_with_multi_threads: false }