有时我们需要自己开发Cocoapods插件,对pod的流程进行定制化,那么开发过程就不然要对ruby代码进行debug,如果只是通过puts打印,那效率就太拉胯了。因此,熟悉一下如何时候IDE工具进行ruby debug就很有必要了。
在了解开发插件之前,我们也许也需要了解Cocoapods的源码,运行打点debug源码也对我们了解cocospod的逻辑可以有更深入的理解。
一、Cocoapods源码
下载源码
git clone https://github.com/CocoaPods/CocoaPods.git
这里我们下载pod源码路径为 /Users/lupeihong/Documents/git/CocoaPods
这里要提一下,Cocoapods 的代码并不全都在 Cocoapods/Cocoapods 项目中,而是拆分为了多个 Repo。在 Cocoapods README 的最后,对这些项目进行了简述:
- CocoaPods: Cocoapods 命令行工具
- CocoaPods Core: 处理 space 与 podfile,比如 Podfile DSL 的定义就在这个项目中
- CocoaPods Downloader: 下载器
- Xcodeproj: 解析 .xcodeproj 文件解析
- CLAide: 命令行参数解析器
- Molinillo: 依赖分析
- CocoaPods.app: 比较像 Cocoapods 的 UI 版本,包含一些功能增强,比如 Podfile 联想
- Master repository: Spec 仓库
其中最后两个都不是源代码,可以先不去关心。 剩下的仓库,有需要debug就可以 clone 相应源码下来。
二、环境准备
1、基于RubyMine Ruby IDE RubyMine 下载:https://www.jetbrains.com/ruby/ 2、在本地新建个xcode工程作为pod的工作目录,目录RubyTestDemo 3、在RubyTestDemo下新建podfile文件,随便pod个库如:
platform :ios, '8.0'
#source 'https://github.com/CocoaPods/Specs.git'
target 'RubyTestDemo' do
pod 'AFNetworking'
pod 'Masonry'
end
4、Gemfile,在工程目录下执行bundle init,生成Gemfile文件,在Gemfile文件中指定cocopods源码路径的方式进行bundle
source "https://gems.ruby-china.com/"
# gems for cocoapods
gem 'cocoapods', path: '/Users/lupeihong/Documents/git/CocoaPods'
如果这里你也有其他的插件或者CocoaPods子项目(如CocoaPods Core或者XcodeProj),那么,Gemfile也要指定对应的源码路径。
有子项目时的版本问题 在 clone 过程中,注意 CocoaPods/Gemfile.lock 中依赖的组件版本。
比如在 CocoaPods 1.8.4 中,XcodeProj 依赖的是 1.13.0 这个 tag,而不是最新的 master。如果直接进行接下来的 bundle install 可能会出现版本仲裁错误。做法是,checkout XcodeProj 到 1.13.0 这个 tag。
然后,在RubyTestDemo目录下,执行bundle install 安装ruby环境 输入可看到项目的ruby环境pod已经是指定的本地cocospod源码,因为源码工程是配置了gemspec的文件了。
三、Debug 配置
1、我们通过rubyMine打开Cocospod的源码工程,点击上方的debug config添加配置。 RubyMine 主界面右上角 → Add Configuration → + → Ruby,新增 Ruby 的调试配置 2、创建新的config配置 Ruby script: 使用我们pod源码路径下的pod工具 Script arguments:填写插件命令的参数 Working directory:添加工作路径,就是刚才的Demo路径 Ruby SDK:一定要填写pod所对应的ruby版本 其他的选项使用默认设置即可 3、勾选Bundler一栏中 bundle exec,否则执行的就不是源码的对应的插件 4、保存配置后,点击小虫子开始调试 因为我们这里配debug配置命令是install,所以会在工作目录下执行pod install。 pod 命令的入口大多在 CocoaPods/lib/cocoapods/command/ 目录下。比如 pod install 对应着 install.rb 中的 run 方法。因此我们在源码的installer.rb打点 可看到IDE成功断点到了
四、调试插件
同理,如果你是自定义的pod插件,也不关心cocospod的调用过程,只是想debug 插件代码。 1、假设你本地有插件 cocoapods-packager的工程源码 只需要调整一下Demo工程的Gemfile,把cocospod修改为
gem 'cocoapods-packager', path: '../cocoapods-packager'
然后重新 bundle install
2、用ruby打开cocoapods-packager工程,修改debug配置
- Ruby script:如果你这里不需要使用cocospod的源码来调试了,所以我们直接默认的pod路径
不知道路径的可以在终端中执行:which pod 命令的生成的pod路径 - Script arguments:因为我们这里要调试插件,所以修改为触发插件的命令
保存后就可打点debug了
|