统一iOS的开发环境

665 阅读2分钟

背景:在项目开始发时候,每当有新同学进入项目,或者是某些同学升级了某些软件,就可能会遇到一些环境问题。比如ruby环境、CocoaPods环境等,这些环境引起的问题有时候不好解决不好排查,会浪费很多不必要的时间。

目标:确保同一项目的所有成员在开发时的环境是一致的,实现自动化环境安装。

步骤

Xcode

确保同一项目组的所有同学使用同一个版本的Xcode。如果Xcode版本不同,可以到这里去找对应的Xcode版本。

有时候我们会同时开发多个项目,这样有可能要安装多个不同版本的 Xcode(这情况很少见)。为了保证所使用的版本一致,在每次执行自动化命令之前(如执行bundle exec fastlane test),要先使用xcode-select -s来选择该项目所对应版本的 Xcode。如xcode-select -s /Applications/Xcode13.0.app/Contents/Developer

rbenv

rbenv 是 Ruby 环境管理工具,能够安装、管理、隔离以及在多个 Ruby 版本之间切换,使用它来确保ruby环境的一致性

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
$ brew install rbenv ruby-build

参考:

ruby-china.org/wiki/rbenv-…

github.com/rbenv/rbenv

接着我们就可以安装和设置项目的 Ruby 环境了。

$ cd $(PROJECT_DIR)
$ rbenv install 2.7.2
$ rbenv local 2.7.2

此处把 ruby 的环境设置为 2.7.2,会在项目下生成一个 .ruby-version 文件,该文件就一个字符串 2.7.2。可以通过 rbenv local 进行修改,也可以直接修改这个文件的内容。该文件通过 git 进行管理,每个项目组同学通过这个文件就可以同步 ruby 版本了。

RubyGems 和 Bundler

RubyGems 和 Bundler 主要是用来安装和管理 CocoaPods 和 fastlane 等第三方工具。

  • RubyGems:是 Ruby 依赖包管理工具。
    • 在 Ruby 中,包叫作 Gem,我们可以通过gem install命令来安装
  • Bundler:用来检查和安装 Gem 的特定版本,以此为 Ruby 项目提供一致性的环境。
    • 执行gem install bundler命令安装Bundler
    • 执行bundle init就可以生成一个 Gemfile 文件,像 CocoaPods 和 fastlane 等依赖包,我们就可以添加到这个文件里面
    • 当使用各个 Gem 工具的时候,也需要使用 Bundler。例如在使用 CocoaPods 时要执行bundle exec pod,以保证我们使用的是项目级别而不是操作系统级别的 Gem 工具

如下:

source "https://rubygems.org"
gem "cocoapods", "1.11.3"
gem "fastlane", "2.166.0"

执行bundle install来安装各个 Gem。 Bundler 会自动生成一个 Gemfile.lock 文件来锁定所安装的 Gem 的版本。

DEPENDENCIES
  cocoapods (= 1.11.3)
  fastlane (= 2.166.0)

把 Gemfile 和 Gemfile.lock 一同提交到 Git,保证其他同学都可以使用版本号一致的 Gem。

而且上面这些工作都可以通过一个脚步就能完成

# 获取ruby版本
ruby_version=`cat .ruby-version`
rbenv install $ruby_version;

# 安装bunlder
gem install bundler

# 安装gems
bundle install

# 安装pods
bundle exec pod install

pod 安装完后会生成 Podfile.lock 文件,注意把 Podfile 和 Podfile.lock 文件都使用 git 管理。

执行完以上脚本,安装完所有的 pod 后就可以打开项目了

.gitignore 文件

可以在 github 上找到对应的文件,可以指定 git 管理的文件以及忽略的文件。如一些个人配置文件可以被忽略。

总结

通过以上步骤,使用Xcode、rbenv、RubyGems 和 Bundler 就可以搭建一个统一的 iOS 开发和构建环境。

  • Xcode
    • 确保编辑 IDE 的一致
  • rbenv
    • 确保 ruby 的一致性
  • RubyGems 和 Bundler
    • 确保 gems 的一致性
  • .gitignore
    • 确保一些无用的文件不被 git 管理