iOS组件化系列之RubyMine如何调试Cocoapods插件

前言

Cocoapods大家应该非常熟悉了,但是一般很少有人去看源码,那就更少人去写插件了,如果要全局掌控工程架构,那必须熟悉这些插件的使用,而且还有个问题,即使你写插件,但是网上根本找不到资料告诉你如何调试插件源码,本文根据找到的极少数的资料,做了一丢丢笔记。

Cocoapods-Plugins开发

首先介绍下关于插件的开发,这一点官方资料根本少的可怜,或者是压根没有How to use CocoaPods plugins,仅有这个文章可以看看。

RVM环境安装

首先,由于Mac自带的Ruby环境,你如果要装包,每次需要 sudo命名,所以这里推荐大家使用rvm进行环境管理。
中文版安装教程
或者参考官方的教程

\curl -sSL https://get.rvm.io | bash -s stable

可以先跳过gpg的安装,这里直接进行安装,如果提示什么错误或者步骤,跟着提示安装即可。
安装rvm后,这里我安装了一个2.7.0的ruby环境进行测试,系统的还是2.6版本

$ rvm list
=* ruby-2.7.0 [ x86_64 ]

rvm use system
rvm use 2.7.0

需要注意的是,rvm切换的环境,各自的包都是独立管理的,比如你系统2.6下面安装了1.7.5的Cocoapods,那么你就需要重新再2.7.0的环境中再次安装新的所需的Cocoapods,这个安装过程就不多说了,直接通过命令查看,缺什么就装什么
gem list查看安装的gem包
pod plugins installed 查看已有的插件

插件编写

1.模板创建

pod plugins create jxbin

2.进入文件夹目录分析
在这里插入图片描述
这里的lib文件夹就是核心工作目录,有两种形式,一种是终端命令形式,一种就是Cocoapods的插件形式。

3.命令行形式
修改command/jxbin.rb

def run
	UI.puts "命令行插件"
	UI.puts "Add your implementation for the cocoapods-jxbin plugin in #{__FILE__}"
end

4.编译安装

gem build cocoapods-jxbin.gemspec
gem install cocoapods-jxbin-0.0.1.gem
# 查看已安装插件
pod plugins installed
# 测试插件命令 就能打印出我们添加的log
pod jxbin .

5.Podfile插件
lib/cocoapods_plugin.rb中添加hook操作

module CocoapodsJXBin
  Pod::HooksManager.register('cocoapods-jxbin', :post_install) do |context|
    a=100
    b=200
    c=a+b
    Pod::UI.puts "断点进来啦"
    Pod::UI.puts "恭喜你,pod install 成功 做点什么吧"
  end
end

这里是hook的pod install,我们还可以hook其他的,至于hook了哪些操作,可以在pod plugins installed中体现出来
在这里插入图片描述
同上面的命令行一样,这次我们需修改对应的版本号,然后执行buildinstall操作就把最新的本地插件安装好了。
然后我们可以通过pod lib create xxx或者自己手动建一个项目,打开podfile文件,添加插件


plugin 'cocoapods-jxbin'
platform :ios, '8.0'

target 'MKJManager_Example' do
  pod 'MKJManager', :path => '../'
  target 'MKJManager_Tests' do
    inherit! :search_paths
  end
end

然后执行pod install就可以执行插件的内容了,编写插件的步骤不多,主要是结合这个框架写对应的功能,还有一个就是如何调试自己编写的插件或者Cocoapods源码。

插件源码调试

1.准备源码

这里我们先用别人已经提交到Gem仓库的第三方插件,看看是如何调试CocoapodsCocoapods-plugins的。

  • 下载Cocoapods源码
    github上下载对应的tag,比如这里我们用1.9.3进行调试
  • 下载Cocoapods-bin插件
    github上下载对应的插件
  • 新建Demo工程
    pod lib create xxx新建一个测试工程

那么结构现在看起来是这样的

├── CocoaPods-1.9.3
├── MKJManager
└── cocoapods-bin-master

这里你随便建一个文件夹,把这三个文件放到一起即可。

2.Gemfile

在同级目录下新建Gemfile,内容如下

source 'https://gems.ruby-china.com'
gem 'cocoapods', path: '/Users/mikejing/Desktop/RubyDemo/CocoaPods-1.9.3'
gem 'cocoapods-bin', path: '/Users/mikejing/Desktop/RubyDemo/cocoapods-bin-master'
group :debug do
	gem 'ruby-debug-ide'
	gem 'debase'
end

这个内容可以参考我们平时写的Podfile文件,source就是下载包的源,gem 'xxxxx'的形式是默认从源仓库下载,那么我们一样可以通过path指向本地源码,上面我们把cocoapodscocoapods-bin做了特殊指向。
然后在根目录下执行bundle install,把所有依赖安装到这个项目中。

以下是更合理的做法

因为我们是调试某个gem库,为了不影响我们已经安装的,安装依赖的时候,最好是安装到当前文件夹下的执行目录中去 ruby的依赖包管理工具
bundle,如果配置了config文件的话,是可以在配置文件中声明安装的目录的 在当前目录 建立./bundle/config文件
text BUNDLE_PATH: "vendor/bundle"随后执行bundle install会把依赖安装到./vender/bundle目录下

3.配置RubyMine

网上仅有的资料也是VSCode进行调试,这里咱们用RubyMine来测试。
RubyMine打开整个根目录,然后编辑以下配置
在这里插入图片描述
在这里插入图片描述
这个是Gem Command的模板,点击右上角Create configuration创建一个实体

  • Gem Name
    这个是咱们要调试插件的名称列表,我们这里输入cocoapods-bin,图上是提供的cocoapods-binary,这里可以根据需要选择,但是前提是,你输入的时候,这里是会有提示的,如果没有提示,只能说明插件你还没安装成功
    在这里插入图片描述

  • Executable name
    输入 pod(这个可以固定,因为这是宿主程序,这个也是输入,就出现可选项,如果没出现pod,那么应该是你的Ruby SDK没有选好)
    在这里插入图片描述

  • Arguments
    这里我们测试一下Podfile中插件的调试,因此我们需要在宿主Demo中执行pod install,所以这里我们参数直接填写install即可。

  • Working directory
    和上面的参数对应,如果是pod install,那么这里,我们需要指定Demo工程podfile文件所在的目录,不然执行的时候会报错,找不到podfile文件。

  • Ruby SDK
    这里的SDK有默认值,如果像我们这样用RVM安装多环境,就需要选择对应的环境SDK,一般都是和Demo工程或者下载下来的Cocoapods-master版本一致(podlock文件中可以查看当前安装版本),也就是需要选择和cocoapods所存在的当前Ruby环境,这里是1.9.3,存在于RVM Ruby 2.7.0的环境中
    在这里插入图片描述

  • Bundler tab
    勾选对应的Bundler选项
    在这里插入图片描述

OK,一切就绪,我们捋一下整个配置过程以及会生效的Ruby文件。

  1. Gem选项选择我们需要调试的插件
  2. 添加执行命令和参数pod install或者pod bin init
  3. 查看是否需要指定目录执行命令
  4. 勾选Bundler执行脚本
  5. 配置好后点击小爬虫进行调试

4.调试源码

上面我们配置了pod install的参数来调试cocoapods-bin插件,而且在Demo工程的podfile文件中添加了plugin 'cocoapods-bin'参数,这里我们可以在cocoapods-bin-master/lib/cocoapods-bin/source_provider_hook.rb中看到这里Hook了两个方法,打上断点,点击小爬虫,就能看到如下调试信息
在这里插入图片描述
那么如果想调试单条命令比如pod bin init,那么只需要更改或者配置新的configuration,区别于把argumentsinstall改成bin initworking directory就不需要了,因为我们现在是命令行调试,不依赖于任何Demo中的Podfile,然后再次点击小爬虫即可。
在这里插入图片描述

5.调试自己编写的插件

上面已经描述了第三方插件的调试,那么我们自己写的插件cocoapods-jxbin也是同理,前提是我们需要把我们编写的插件安装好

gem build xxxxxx.gemspec
gem install xxxxxx.0.0.1-gem
# 以下命令能查看到即可
pod plugins installed

然后把目录移到上面的根目录下,那么他看起来是这样的
在这里插入图片描述
记得在Gemfile中添加一条执行源码的命令
gem 'cocoapods-jxbin', path: '/Users/mikejing/Desktop/RubyDemo/cocoapods-jxbin'
然后还是配置configuration,咱们自己写的插件有两种形式,分别是podfile插件和命令行插件,分别对应cocoapods-jxbin/lib/cocoapods-plugin.rbcocoapods-jxbin/lib/cocoapods-jxbin/command/jxbin.rb,打上断点,前者配置pod install,或者配置pod jxbin .就可以进行源码调试了,如下图

在这里插入图片描述
在这里插入图片描述

以上就是自己实践的调试方式了,后续咱就可以愉快的进行Ruby脚本或者插件开发了。

参考文章:
Cocoapods 插件调试环境配置
带瓶老师的调试总结

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页