欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS开发 - 创建自定义的brew仓库oclint-0.15

程序员文章站 2022-07-13 21:52:25
...

背景

项目需要使用 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 拷贝至仓库,并提交
iOS开发 - 创建自定义的brew仓库oclint-0.15

使用

//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文件夹里。

参考文档

  1. YouTube上一个视频讲的很清楚 https://www.youtube.com/watch?v=fbyrLo6yx8M
  2. 在 Homebrew 上发布自己的 App
  3. https://docs.brew.sh/Formula-Cookbook
    https://rubydoc.brew.sh/Formula