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-binaryto-source 是与组件化平台的策略强相关的,由于影响面巨大,前期在头条业务线经过了一个月的灰度阶段,目前已经比较稳定。如果其他业务线接入的话,请联系wusizhen.arch