diff --git a/README.md b/README.md index cb5e225..0f3bd85 100644 --- a/README.md +++ b/README.md @@ -4,26 +4,12 @@ - 2020-11-02 v0.3.0.11 支持纯Swift、纯Object-C、Swift-OC混编 - -# Cocoapods-imy-bin - -关于 插件具体的架构部署实践和更详细的资源,可以参考 - -> [iOS编译速度如何稳定提高10倍以上](https://juejin.cn/post/6903407900006449160) -> -> [iOS美团同款"ZSource"二进制调试实现](https://juejin.im/post/5f066cfa5188252e893a136e) -> -> [iOS教你如何像RN一样实时编译](https://juejin.im/post/6850037272415813645) -> -> [Swift编译慢?请看这里,全套开源](https://juejin.im/post/6890419459639476237) -> -> [OC-Demo](https://github.com/su350380433/cocoapods-imy-bin-demo) -> -> [Swift-OC-Demo](https://github.com/su350380433/Swift-OC-Demo) - +# 只要两行代码,便可提升10倍以上编译速度 +time +Podfile ### 特色: @@ -33,414 +19,31 @@ 4. **一步步教你使用,新手也能欢乐玩转** 5. **提供几个特色服务** 6. **支持 使用与不使用 use_frameworks!** - 7. **少数支持swift项目二进制化编译的开源项目之一** - -## 一、概要 - - -cocoapods-imy-bin功能点: - - 1. 组件二进制化,`无入侵式`支持组件二进制化,完全自动化,无需手动操作。致力于解决Ci打包速度慢、研发编译慢等编译问题。 - 2. 本地配置文件 - `Podfile_local` - 3. 二进制源码调试`pod bin code`,类似[美团 iOS 工程 zsource 命令背后的那些事儿](https://juejin.im/post/6847897745987125262)的效果。 - 4. 命令快捷键`pod bin imy`,如游戏快捷键,根据配置会在特定目录执行特定命令(如任意终端目录下,执行某个特定目录的pod update --no-repo-update命令),减少其他繁琐操作。支持任意个快捷键。 - -cocoapods-imy-bin插件所关联的组件二进制化策略: - -预先将打包成 `.a` 的组件保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件发布等操作的目的。 - - - -## 二、准备工作 - - - -### 1、安装插件 - -```shell -sudo gem install cocoapods-imy-bin -``` - - - -## 三、使用二进制组件 - - -### 1、环境搭建 - -
- -[环境搭建详细教程](https://github.com/su350380433/cocoapods-imy-bin-demo) - -使用二进制时,本插件需要提供以下资源: - -- 静态资源服务器( [binary-server](https://github.com/su350380433/binary-server),附详细使用教程) -- 二进制私有源仓库(保存组件二进制版本 podspec) - - - -### 2、初始化插件 - -``` shell -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 下载配置文件,方便对多台机器进行配置: - -```shell -➜ ~ pod bin init --bin-url=https://github.com/su350380433/cocoapods-imy-bin-configs/raw/master/bin_dev.yml -``` - -配置文件模版内容如下,根据不同团队的需求定制即可: - -```shell ---- -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`服务,静态资源服务。 - - -
- -## 四、制作二进制组件 - -
- -[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) - -### 1、制作命令 - -可以直接使用插件的 `pod bin auto`命令,在插件初始化配置完成后,目录下只要有包含podspec文件,根据podspec文件的version版本号会自动化执行build、组装二进制组件、制作二进制podspec、上传二进制文件、上传二进制podspec到私有源仓库。 - -```shell -pod bin auto -``` - -
- -### 2. 二进制Podspec - -会自动生成、上传,无需关心。 - - -
- -### 3、查看结果 - -二进制存储服务:[http://localhost:8080/frameworks/](http://localhost:8080/frameworks/)(默认本地8080端口) - -二进制私有源参考:[https://github.com/su350380433/example_spec_bin_dev](https://github.com/su350380433/example_spec_bin_dev)(自定义) - - -
- -### 4、使用二进制 - -
- -[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) - -在Podfile文件中,加入这两行代码,对已经制作二进制的就会生效,自动转换二进制组件依赖。 - -``` ruby -plugin 'cocoapods-imy-bin' -use_binaries! -``` - - -
- -## 五、扩展功能 - -
- -### 1、本地配置文件 - Podfile_local - -本地组件配置文件 Podfile_local,目前已支持Podfile下的大部分功能,可以把一些本地配置的语句放到Podfile_local。 - - - -场景: - -1. 不希望把本地采用的源码/二进制配置、本地库传到远程仓库。 -2. 避免直接修改Podfile文件,引起更新代码时冲突、或者误提交。 - -如Podfile本地库的写法: -```ruby -pod YYModel :path => '../' #提交的时候往往要修改回来才提交,操作繁琐 -``` -用法: - -在与Podfile同级目录下,新增一个`Podfile_local`文件 - -```ruby -#target 'Seeyou' do 不同的项目注意修改下Seeyou的值 -#:path => '../IMYYQHome',根据实际情况自行修改,与之前在podfile写法一致 + 7. **少数支持swift项目二进制化编译的开源项目之一* - 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 -``` - -```ruby -以前的 pod update --no-repo-update 命令加个前缀 `bin` 变成 -``` - -```shell -pod bin update --no-repo-update -``` -or -```shell -pod bin install -``` - -支持 pod install/update 命令参数 - -并将其加入 .gitignore ,再也不用担心我误提交或者冲突了,Podfile_local 中的配置选项优先级比 Podfile 高,支持和 Podfile 相同的配置语句,同时支持**pre_install** or **post_install**。 - - -如果您不习惯Podfile_local的使用方式,可以把命令写在Podfile里面,pod时不需要加bin,依旧是 pod update/install。 - - -
- -### 2、二进制源码调试 - -
- -[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) - -在项目根目录下,输入命令: - -```ruby -pod bin code YYModel -``` - -`YYModel`为需要源码调试的组件库名称。成功之后像平时一样单步调试,控制台打印变量。让我们同时拥有使用二进制的便利和源码调试的能力。 - -``` shell - $ pod bin code --help [11:37:50] -Usage: - - $ pod bin code [NAME] - - 通过将二进制对应源码放置在临时目录中,让二进制出现断点时可以跳到对应的源码,方便调试。 在不删除二进制的情况下为某个组件添加源码调试能力,多个组件名称用空格分隔 - -Options: - - --all-clean 删除所有已经下载的源码 - --clean 删除所有指定下载的源码 - --list 展示所有一级下载的源码以及其大小 - --source 源码路径,本地路径,会去自动链接本地源码 -``` - -效果与演示参考[链接1](https://juejin.im/post/5eccceb9f265da76f30e4e13#heading-48)、[视频](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) - - -
- -### 3、快捷键命令 - -
- -在任意的终端执行命令,都能执行特定目录下特定命令 - -使用命令: - -```shell -pod bin imy -``` - -or - -``` shell -pod bin imy 2 #2 是自定义的快捷键 -``` - -使用场景: - - 1. 在任意目录下,执行项目A的pod update --no-repo-update命令 - -命令快捷键配置 - -```shell - $ 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 -``` - - -
- -## 六、 DSL参数解释 - - - -首先,开发者需要在 Podfile 中需要使用 `plugin 'cocoapods-imy-bin'` 语句引入插件 - -```ruby -plugin 'cocoapods-imy-bin' -``` - -顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。 - -`cocoapods-bin `插件提供二进制相关的配置语句有 `use_binaries!`、`use_binaries_with_spec_selector!` 以及 `set_use_source_pods`,下面会分别介绍。 - -##### use_binaries! - -全部组件使用二进制版本。 - -支持传入布尔值控制是否使用二进制版本,比如 DEBUG 包使用二进制版本,正式包使用源码版本,Podfile 关联语句可以这样写: - -```ruby -use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true') -``` - -##### set_use_source_pods - -设置使用源码版本的组件。 - -实际开发中,可能需要查看 YYModel 组件的源码,这时候可以这么设置: - -```ruby -set_use_source_pods ['YYModel'] -``` - -如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源: - -```ruby -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. -``` - -##### use_binaries_with_spec_selector! - -过滤出需要使用二进制版本组件。 - -假如开发者只需要 `YYModel` 的二进制版本,那么他可以在 Podfile 中添加以下代码: - -```ruby -use_binaries_with_spec_selector! do |spec| - spec.name == 'YYModel' -end -``` - -**需要注意的是,如果组件有 subspec ,使用组件名作为判断条件应如下**: - -```ruby -use_binaries_with_spec_selector! do |spec| - spec.name.start_with? == '组件名' -end -``` - -如果像上个代码块一样,**直接对比组件名,则插件会忽略此组件的所有 subspec,导致资源拉取错误**,这种场景下,最好通过 `set_use_source_pods` 语句配置依赖。 - -一个实际应用是,三方组件采用二进制版本,团队编写的组件依旧采用源码版本。如果三方组件都在 `cocoapods-repo` 组下,就可以使用以下代码过滤出三方组件: - -```ruby -use_binaries_with_spec_selector! do |spec| - git = spec.source && spec.source['git'] - git && git.include?('cocoapods-repo') -end -``` - -##### 切换Dev/Debug_iPhoneos/Release_iPhoneos环境初始化设置 - - -```shell -#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指定设置 - -```shell -#在podfile 或者 podfile_local 文件下加这句话 -set_configuration_env('debug_iphoneos') -``` +关于 插件具体的架构部署实践和更详细的资源,可以参考 -##### 其他设置 +> [iOS编译速度如何稳定提高10倍以上](https://juejin.cn/post/6903407900006449160) +> +> [iOS美团同款"ZSource"二进制调试实现](https://juejin.im/post/5f066cfa5188252e893a136e) +> +> [iOS教你如何像RN一样实时编译](https://juejin.im/post/6850037272415813645) +> +> [Swift编译慢?请看这里,全套开源](https://juejin.im/post/6890419459639476237) +> +> [OC-Demo](https://github.com/su350380433/cocoapods-imy-bin-demo) +> +> [Swift-OC-Demo](https://github.com/su350380433/Swift-OC-Demo) -插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可: -```ruby -install! 'cocoapods', { install_with_multi_threads: false } -``` +### 一、使用教程 -
+[使用教程]() -## 七、感谢 +## 二、感谢 diff --git a/img/Podfile.png b/img/Podfile.png new file mode 100644 index 0000000..e30a181 Binary files /dev/null and b/img/Podfile.png differ diff --git a/img/time.png b/img/time.png new file mode 100644 index 0000000..0529823 Binary files /dev/null and b/img/time.png differ diff --git "a/\344\275\277\347\224\250\346\225\231\347\250\213.md" "b/\344\275\277\347\224\250\346\225\231\347\250\213.md" new file mode 100644 index 0000000..391aba3 --- /dev/null +++ "b/\344\275\277\347\224\250\346\225\231\347\250\213.md" @@ -0,0 +1,419 @@ +## 一、概要 + + +cocoapods-imy-bin功能点: + + 1. 组件二进制化,`无入侵式`支持组件二进制化,完全自动化,无需手动操作。致力于解决Ci打包速度慢、研发编译慢等编译问题。 + 2. 本地配置文件 - `Podfile_local` + 3. 二进制源码调试`pod bin code`,类似[美团 iOS 工程 zsource 命令背后的那些事儿](https://juejin.im/post/6847897745987125262)的效果。 + 4. 命令快捷键`pod bin imy`,如游戏快捷键,根据配置会在特定目录执行特定命令(如任意终端目录下,执行某个特定目录的pod update --no-repo-update命令),减少其他繁琐操作。支持任意个快捷键。 + +cocoapods-imy-bin插件所关联的组件二进制化策略: + +预先将打包成 `.a` 的组件保存到静态服务器上,并在 `install` 时,去下载组件对应的二进制版本,以减少组件编译时间,达到加快 App 打包、组件发布等操作的目的。 + + + +## 二、准备工作 + + + +### 1、安装插件 + +```shell +sudo gem install cocoapods-imy-bin +``` + + + +## 三、使用二进制组件 + + +### 1、环境搭建 + +
+ +[环境搭建详细教程](https://github.com/su350380433/cocoapods-imy-bin-demo) + +使用二进制时,本插件需要提供以下资源: + +- 静态资源服务器( [binary-server](https://github.com/su350380433/binary-server),附详细使用教程) +- 二进制私有源仓库(保存组件二进制版本 podspec) + + + +### 2、初始化插件 + +``` shell +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 下载配置文件,方便对多台机器进行配置: + +```shell +➜ ~ pod bin init --bin-url=https://github.com/su350380433/cocoapods-imy-bin-configs/raw/master/bin_dev.yml +``` + +配置文件模版内容如下,根据不同团队的需求定制即可: + +```shell +--- +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`服务,静态资源服务。 + + +
+ +## 四、制作二进制组件 + +
+ +[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) + +### 1、制作命令 + +可以直接使用插件的 `pod bin auto`命令,在插件初始化配置完成后,目录下只要有包含podspec文件,根据podspec文件的version版本号会自动化执行build、组装二进制组件、制作二进制podspec、上传二进制文件、上传二进制podspec到私有源仓库。 + +```shell +pod bin auto +``` + +
+ +### 2. 二进制Podspec + +会自动生成、上传,无需关心。 + + +
+ +### 3、查看结果 + +二进制存储服务:[http://localhost:8080/frameworks/](http://localhost:8080/frameworks/)(默认本地8080端口) + +二进制私有源参考:[https://github.com/su350380433/example_spec_bin_dev](https://github.com/su350380433/example_spec_bin_dev)(自定义) + + +
+ +### 4、使用二进制 + +
+ +[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) + +在Podfile文件中,加入这两行代码,对已经制作二进制的就会生效,自动转换二进制组件依赖。 + +``` ruby +plugin 'cocoapods-imy-bin' +use_binaries! +``` + + +
+ +## 五、扩展功能 + +
+ +### 1、本地配置文件 - Podfile_local + +本地组件配置文件 Podfile_local,目前已支持Podfile下的大部分功能,可以把一些本地配置的语句放到Podfile_local。 + + + +场景: + +1. 不希望把本地采用的源码/二进制配置、本地库传到远程仓库。 +2. 避免直接修改Podfile文件,引起更新代码时冲突、或者误提交。 + +如Podfile本地库的写法: + +```ruby +pod YYModel :path => '../' #提交的时候往往要修改回来才提交,操作繁琐 +``` + +用法: + +在与Podfile同级目录下,新增一个`Podfile_local`文件 + +```ruby +#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 +``` + +```ruby +以前的 pod update --no-repo-update 命令加个前缀 `bin` 变成 +``` + +```shell +pod bin update --no-repo-update +``` + +or + +```shell +pod bin install +``` + +支持 pod install/update 命令参数 + +并将其加入 .gitignore ,再也不用担心我误提交或者冲突了,Podfile_local 中的配置选项优先级比 Podfile 高,支持和 Podfile 相同的配置语句,同时支持**pre_install** or **post_install**。 + + +如果您不习惯Podfile_local的使用方式,可以把命令写在Podfile里面,pod时不需要加bin,依旧是 pod update/install。 + + +
+ +### 2、二进制源码调试 + +
+ +[视频演示](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) + +在项目根目录下,输入命令: + +```ruby +pod bin code YYModel +``` + +`YYModel`为需要源码调试的组件库名称。成功之后像平时一样单步调试,控制台打印变量。让我们同时拥有使用二进制的便利和源码调试的能力。 + +``` shell + $ pod bin code --help [11:37:50] +Usage: + + $ pod bin code [NAME] + + 通过将二进制对应源码放置在临时目录中,让二进制出现断点时可以跳到对应的源码,方便调试。 在不删除二进制的情况下为某个组件添加源码调试能力,多个组件名称用空格分隔 + +Options: + + --all-clean 删除所有已经下载的源码 + --clean 删除所有指定下载的源码 + --list 展示所有一级下载的源码以及其大小 + --source 源码路径,本地路径,会去自动链接本地源码 +``` + +效果与演示参考[链接1](https://juejin.im/post/5eccceb9f265da76f30e4e13#heading-48)、[视频](https://github.com/MeetYouDevs/cocoapods-imy-bin/tree/master/%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91) + + +
+ +### 3、快捷键命令 + +
+ +在任意的终端执行命令,都能执行特定目录下特定命令 + +使用命令: + +```shell +pod bin imy +``` + +or + +``` shell +pod bin imy 2 #2 是自定义的快捷键 +``` + +使用场景: + + 1. 在任意目录下,执行项目A的pod update --no-repo-update命令 + +命令快捷键配置 + +```shell + $ 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 +``` + + +
+ +## 六、 DSL参数解释 + + + +首先,开发者需要在 Podfile 中需要使用 `plugin 'cocoapods-imy-bin'` 语句引入插件 + +```ruby +plugin 'cocoapods-imy-bin' +``` + +顺带可以删除 Podfile 中的 source ,因为插件内部会自动帮你添加两个私有源。 + +`cocoapods-bin `插件提供二进制相关的配置语句有 `use_binaries!`、`use_binaries_with_spec_selector!` 以及 `set_use_source_pods`,下面会分别介绍。 + +##### use_binaries! + +全部组件使用二进制版本。 + +支持传入布尔值控制是否使用二进制版本,比如 DEBUG 包使用二进制版本,正式包使用源码版本,Podfile 关联语句可以这样写: + +```ruby +use_binaries! (ENV['DEBUG'].nil? || ENV['DEBUG'] == 'true') +``` + +##### set_use_source_pods + +设置使用源码版本的组件。 + +实际开发中,可能需要查看 YYModel 组件的源码,这时候可以这么设置: + +```ruby +set_use_source_pods ['YYModel'] +``` + +如果 CocoaPods 版本为 1.5.3 ,终端会输出以下内容,表示 YYModel 的参照源从二进制私有源切换到了源码私有源: + +```ruby +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. +``` + +##### use_binaries_with_spec_selector! + +过滤出需要使用二进制版本组件。 + +假如开发者只需要 `YYModel` 的二进制版本,那么他可以在 Podfile 中添加以下代码: + +```ruby +use_binaries_with_spec_selector! do |spec| + spec.name == 'YYModel' +end +``` + +**需要注意的是,如果组件有 subspec ,使用组件名作为判断条件应如下**: + +```ruby +use_binaries_with_spec_selector! do |spec| + spec.name.start_with? == '组件名' +end +``` + +如果像上个代码块一样,**直接对比组件名,则插件会忽略此组件的所有 subspec,导致资源拉取错误**,这种场景下,最好通过 `set_use_source_pods` 语句配置依赖。 + +一个实际应用是,三方组件采用二进制版本,团队编写的组件依旧采用源码版本。如果三方组件都在 `cocoapods-repo` 组下,就可以使用以下代码过滤出三方组件: + +```ruby +use_binaries_with_spec_selector! do |spec| + git = spec.source && spec.source['git'] + git && git.include?('cocoapods-repo') +end +``` + +##### 切换Dev/Debug_iPhoneos/Release_iPhoneos环境初始化设置 + + +```shell +#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指定设置 + +```shell +#在podfile 或者 podfile_local 文件下加这句话 +set_configuration_env('debug_iphoneos') +``` + +##### 其他设置 + +插件默认开启多线程下载组件资源,如果要禁用这个功能,Podfile 添加以下代码即可: + +```ruby +install! 'cocoapods', { install_with_multi_threads: false } +``` + + +
+ +## 七、感谢 + + + +**[cocoapods-bin](https://github.com/tripleCC/cocoapods-bin)** + +[美团 iOS 工程 zsource 命令背后的那些事儿](https://tech.meituan.com/2019/08/08/the-things-behind-the-ios-project-zsource-command.html) + +#### 您有什么更好的想法,可以提出来,我们一起来实现,共创一个强大的工具平台,同时也欢迎给我们提PR。 +