iOS开发 - 创建自定义的brew仓库oclint-0.15
背景
项目需要使用 oclint 0.15
版本,并添加一定的规则 rule ,这里oclint 0.13版本之后就没有再更新了,两个版本由于clang版本不同,不能共用,如果让每个人去拉包,然后替换,太繁琐了,这里创建一个brew库用于快速集成。
在 Homebrew
的架构下,至少有 4 层概念
- Keg(酒桶):安装好的脚本、软件等;
- Cellar(酒窖):所有用 Homebrew 安装在本地的脚本、软件组成的集合;
- Formula(配方):定义如何下载、编译和安装脚本或软件的 Ruby 脚本;
- Tap:一个包含若干 Formula 的 GitHub 专案。
我们平时使用brew install foobar
安装软件时,实际上是从Homebrew/homebrew-core
这个 Tap 中获取相应的Formula
,然后将 Keg 安装在 Cellar 中。现在的问题是,Homebrew/homebrew-core
不允许普通用户提交自己写的小众脚本、软件。所以,我们需要建立一个新的Tap(GitHub 专案)
,包含对应我们软件的Formula
,然后将Keg
放入本地的Cellar
中。
于是我们知道,我们要做的事情是:
理顺安装程序的步骤;
创建一个 Formula
,将上述步骤用 Ruby 表述出来;
创建一个 GitHub 专案
,将上述 Formula 纳于该专案的版本控制之下。
创建仓库
github上创建一个仓库,https://github.com/growingio/oclint-growing.git,根据之前编译好的oclint 0.15
,发布一个release
,然后复制其链接地址 https://github.com/growingio/oclint-growing/releases/download/v1.0/oclint-growing.zip
这里发布的release没有源码,就直接拖的一个zip包,包含了oclint 0.15编译后release部分的内容
brew create
命令行输入
brew create https://github.com/growingio/oclint-growing/releases/download/v1.0/oclint-growing.zip
创建我们的formula
文件oclint-growing.rb
由于我们需要参考oclint的配置,所以参考其 formula文件
class Oclint < Formula
desc "OCLint static code analysis tool for C, C++, and Objective-C"
homepage "http://oclint.org"
version '0.13'
sha256 '7a8a2645e47d069e17b9239e8a8f7bfee642124337ac5b451bc1ed2accd7da66'
url "https://github.com/oclint/oclint/releases/download/v#{version}/oclint-#{version}-x86_64-darwin-16.7.0.tar.gz"
head "https://github.com/oclint/oclint.git"
def install
clang_version = '5.0.0'
include.install Dir['include/c++'] unless File.directory? "#{include}/c++"
"#{include}/c++".install Dir['include/c++/v1'] unless File.directory? "#{include}/c++/v1"
lib.install Dir['lib/clang'] unless File.directory? "#{lib}/clang"
"#{lib}/clang".install Dir['lib/clang/#{clang_version}'] unless File.directory? "#{lib}/clang/#{clang_version}"
lib.install Dir['lib/oclint']
bin.install Dir['bin/*']
end
test do
system "#{bin}/oclint", "-version"
end
end
最终修改的oclint-growing.rb
内容就如下:
# Documentation: https://docs.brew.sh/Formula-Cookbook
# https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class OclintGrowing < Formula
desc "oclint version 0.15 support , growing rule add"
homepage "http://oclint.org"
url "https://github.com/growingio/oclint-growing/releases/download/v1.0/oclint-growing.zip"
sha256 "3d7dc7cba2d994332a5bbac57508db009f6440ae95b52106a81b7b2ed92b7ae7"
license ""
# depends_on "cmake" => :build
def install
clang_version = '10.0.0'
include.install Dir['include/c++'] unless File.directory? "#{include}/c++"
"#{include}/c++".install Dir['include/c++/v1'] unless File.directory? "#{include}/c++/v1"
lib.install Dir['lib/clang'] unless File.directory? "#{lib}/clang"
"#{lib}/clang".install Dir['lib/clang/#{clang_version}'] unless File.directory? "#{lib}/clang/#{clang_version}"
lib.install Dir['lib/oclint']
bin.install Dir['bin/*']
end
end
更多的配置可以参考 Documentation:
https://docs.brew.sh/Formula-Cookbook
https://rubydoc.brew.sh/Formula
因为我们不需要添加bin
,所以没有写脚本。
创建tap
github上创建一个仓库,以homebrew-
开头来命名,例如:https://github.com/growingio/homebrew-oclint
然后将上面的 formula
拷贝至仓库,并提交
使用
//1. 先拉下专案
brew tap growingio/homebrew-oclint
//2. 然后安装库
brew install oclint-growing
这样 oclint-growing
就安装成功了,就安装在 /usr/local/Cellar/oclint-growing
,formula
中的配置实际就是安装了oclint 0.15
,我们输入
oclint -help
进行验证即可。
我添加了自定义的规则 libGrowingIORuleRule.dylib
,将oclint自带的规则放在了ignored文件夹里。
参考文档
上一篇: OCLint+Xcode实现Code Review
下一篇: OCLint自定义规则的调试方法