cocoapods-BDTransform
cocoapods-BDTransform 是一款由组件化平台的提供的Pods辅助开发工具,可以方便地将二进制、源码、开发模式状态下的Pods进行转化。
Feature
- [x] 一键切换
- [x] 无需重复pod install
- [x] 增量编译
- [x] 查看Pods Log
Installation
$ sudo gem install cocoapods-BDTransform
Usage
cocoapods-BDTransform是一款CocoaPods的插件,可以直接嵌入到pod指令中,同时也提供了详细的使用说明
➜ pod bdtransform
Usage:
$ pod bdtransform COMMAND
An awesome tool for transforming Pods from source to binary or binary to
source without pod install && re-complier.Note: only support for .a
currently .Warning: You should use 👉 bd_pod_extentions (~>5.1.0) 👈 to
install your Project
Commands:
+ to-binary Transform Pods from source to Binary Note: only support for
`.a` currently
+ to-dev Transform Pods from normal to Developer Pods Note: maybe not
stable,connect with wusizhen by any problems
+ to-source Transform Pods from binary to source Note: only support for
`.a` currently
+ to-log 可以在 Xcode 中展示出 Pods 中的Log信息,便于追查问题
Options:
--silent Show nothing
--verbose Show more debugging information
--no-ansi Show output without ANSI codes
--help Show help banner of specified command
Example
由于头条的组件化进度比较快,因此以头条业务为例。目前头条业务中几乎所有的Pods都是以二进制状态存在,在日常开发迭代中经常会碰到下面的几种场景
To-source
当RD开完后一个Feature进行打包测试时,发现CI产出的包有异常的边界Case。通常的做法是切换到CI打包的时候的commitID,将认为有问题的Pods改成源码进行Debug。但是在Debug过程中,发现需要调试其他Pods的源码,这时又需要把另外一个Pods切换到 pod_source状态,重新进行 pod install、rebuild等,如果又遇到新的Pods可能还要重复上述操作「当然还有同学为了避免这种问题,直接从开始就用源码编译。。。」
cocoapods-BDTransform插件可以避免上述的低效操作,比如Debug过程中发现BDWebImage需要进行调试,只需要在Podfile同级目录下运行下面指令,就可以进行Debug,而且是增量编译.
pod bdtransform to-source BDWebImage
To-bianry
切换源码到二进制过程的场景相对比较少。比如有业务同学想要调试二进制包问题,可以随意的进行二进制和源码切换。
To-dev
任意模式切换到Development Pods模式。在日常的组件化开发中,待开发的组件经常会以
pod 'xxx',:path => 'xxx'
的方式集成到主工程进行开发,但是如果遇到需要调试并且开发的的Pods时,常常需要再次修改Podfile,重新pod install、rebuild等。
基于此,cocoapods-BDTransform提供了一件切换Dev模式的功能。
➜ pod bdtransform to-dev
[!] A Podspec path is required.
Usage:
$ pod bdtransform to-dev
Transform Pods from normal to Developer Pods Note: maybe not
stable,connect with [email protected] by any problems. Warning: You
should use `bd_pod_extentions (~>5.0.0)` to install your Project
Options:
--podspec= the absolute path of your podspec to dev. i.e
--podspec=xxx/xxx.podspec
--subspecs= build with given subspecs. i.e --subspecs=Core,Monitor
--targets= the effected target of this operation. Default action effects
all your target of Project
以头条项目中的TTUIWidget为例,在全部使用二进制编译完成后,如果RD想要进行TTUIWidget功能的修改,可以使用下面命令
pod bdtransform to-dev --podspec=/Users/bob/Git/ios/tt_pods_ui/TTUIWidget.podspec --targets=NewsInHouse
--podspec指令表示待开发的podspec绝对路径,与:path用法相同; --targets的作用与哪个Target生效,比如头条中有 NewsInHouse、NewsSocialTodayExtenstion 等Target
修改完成后使用Xcode自带的Source Control功能可以自动关联到tt_pods_ui这个仓库,解决了以往的需要两处提交的问题
To-log
在进行组件化开发时常常有这种场景,当 RD 开发完集成完主工程后,发现需要开发 组件 A ,这时候有需要将 Podfile 改为 「或是通过 mbox add A 的方式」
pod 'A',:path => 'xxx/A.podspec'
然后重新进行 Pod install,重新构建。
上面的原因是由于 Cocoapods 在构建时不保留 git 信息,因此对于集成在仓库下的 git 是无法提交和查看修改记录的。
通过 to-log 功能可以很简单的避免这种低效的操作
pod bdtransform to-log
[!] A Pod name is required.
Usage:
$ pod bdtransform to-log podName
可以在 Xcode 中展示出 Pods 中的 Log 信息,便于追查问题,目前只适用于源码以及打开了 showCode! 功能的项目
warning: 部署成功后,需要重启 Xcode
Options:
--silent Show nothing
--verbose Show more debugging information
--no-ansi Show output without ANSI codes
--help Show help banner of specified command
比如要对 YYCache 进行提交和查看历史,只需要这样
➜ Example git:(master) ✗ pod bdtransform to-log YYCache
-- 正在部署 YYCache
[!] 部署完毕,请重启 Xcode
部署完毕后重新 Xcode,如下图所示
同时还可以直接通过 Xcode 提交代码
Warn:
目前对于xib以及bundle语法支持有限,因此在待开发的Pods的版本差别很大时,会出现小概率的编译缓存问题
Note
BDTransform中的to-binary、to-source 是与组件化平台的策略强相关的,由于影响面巨大,前期在头条业务线经过了一个月的灰度阶段,目前已经比较稳定。如果其他业务线接入的话,请联系wusizhen.arch