一、统一配置
001 概念
所有的配置信息都以文本的格式存放在Git里面,开发者可以随时产看修改记录,以此帮助我们比较不同配置之间的差异性,然后在这个基础上不断更新迭代,这样做的好处是构建统一的开发环境,构建出功能一致的APP,可以按需扩展CI服务,极大降低了前期项目搭建的成本。
二、如何搭建
001 使用Ruby工具链为整个项目搭建一致性的开发和构建环境,因为在IIOS开发方面,目前流行的第三方工具CocoaPods和fastlane都是Ruby来开发,例如RubyGems和bundler,其中bundler可以有效管理CocoaPods和fastlane的版本。
002 Ruby环境管理工具RVM和rbenv。作者推荐rbenv,因为它使用shims文件来分离各个Ruby版本,相对RVM更轻装而方便使用,一定要使用相同的ruby环境管理工具,否则项目编译会出错。
rbenv 是 Ruby 环境管理工具,能够安装、管理、隔离以及在多个 Ruby 版本之间切换。要使用 rbenv,我们可以通过 Homebrew 来安装它,下面是安装 Homebrew 和 rbenv 的脚本。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install rbenv ruby-build rbenv-vars
一旦安装 rbenv 完毕,我们需要把以下的设置信息放到你的 Shell 配置文件里面,例如 ~/.bash_profile 或者 ~/.zshrc 等文件,这样能保证每次打开终端的时候都会初始化 rbenv。
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
接着我们就可以安装和设置项目的 Ruby 环境了。
$ cd $(PROJECT_DIR)
$ rbenv install 2.7.1
$ rbenv local 2.7.1
此处是把项目的 Ruby 环境配置为 2.7.1 版本。rbenv 会帮我们建立 一个叫作.ruby-version 的文件,该文件里面只保存一个版本号(例如2.7.1
)的字符串。这个包含了版本号的文件可以用 Git 进行管理。如果要更新版本,可以通过rbenv local
命令进行,每次更新也由 Git 统一管理,这样就能让其他开发者使用同一版本的 Ruby 开发环境了。
003 RubyGems和Budler
RubyGems和Bundler主要是用来安装和管理CocooaPods和fastlane等第三方工具,在Ruby宇宙中包叫做Gems,通过gem install进行安装,但是
RubyGems在管理版本的时候又bug,需要借助Bundler来检查和安装特定的版本,以此为Ruby项目提供一致性的环境。
source "https://rubygems.org"
gem "cocoapods", "1.10.0"
gem "fastlane", "2.166.0"
为了保证团队其他成员都可以使用版本号一致的 Gem,我们需要把 Gemfile 和 Gemfile.lock 一同保存到 Git 里面统一管理起来。
到此为止,我们已经知道怎样使用 Ruby 工具链配置一个统一的开发环境。但在真实的开发环境中,搭建环境只需要一个人来完成即可,其他成员执行以下脚本就能完成整套开发环境的搭建。
$ ./scripts/setup.sh
# Install ruby using rbenv
ruby_version=`cat .ruby-version`
if [[ ! -d "$HOME/.rbenv/versions/$ruby_version" ]]; then
rbenv install $ruby_version;
fi
# Install bunlder
gem install bundler
# Install all gems
bundle install
# Install all pods
bundle exec pod install
该脚本主要做了四件事情,第一步是在 rbenv 下安装特定版本的 Ruby 开发环境,然后通过 RubyGems 安装 Bunlder,接着使用 Bundler 安装 CocoaPods 和 fastlane 等依赖包,最后安装各个 Pod。这样,一个统一的项目环境就搭建完成了,接下来开发者就可以打开 Moments.xcworkspace进行开发了。
说完 Ruby 环境搭建以后,最后我们一起聊聊保证项目文件一致性的 .gitignore 文件。
004 .gitignore 文件
.gitignore 文件是一个配置文件,用来指定让 Git 需要忽略的文件或者目录。如果没有 .gitignore 文件,项目成员可能会不小心把一些自动生成等无关重要的文件或者具有个人信息(例如 xcuserdata)的文件保存到 Git 里面。这就大大增加了查看 Git 修改历史的难度。因此,在项目初期就配置一个合适的 .gitignore 文件,能减轻后续的管理工作。
三、总结
学习网址
学习项目