在使用RN cli 初始化项目的时候经常遇到各种问题 尤其是IOS环境问题。
Homebrew
在知乎上有位大牛提供了 Homebrew 镜像源及工具,你可以通过如下命令一键安装。
$ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
Node 和 NVM
第二步是安装 Node 和 NPM。Node 是 React Native 应用程序中,JavaScript 相关服务的运行环境,比如构建服务就是通过 Node 环境提供的。安装的 Node,会自带 NPM 包管理器,它将帮助我们管理相关依赖。我们可以通过 Homebrew 来安装 Node。
$ brew install node
安装完成后,你可以通过如下命令检查 Node 和 NPM 是否安装成功。
$ node --version
$ npm --version
安装完 NPM 后,为保证后续网络的畅通,你需要将 NPM 的 registry 设置为淘宝源。切换命令如下:
npx nrm use taobao
Watchman
第三步,是安装一个名为 Watchman 的工具。它是由 Facebook 开发的一个工具,只要你的文件有一些变化,它就会自动重新运行你的项目。我们使用 Homebrew 来安装 watchman。
$ brew install watchman
安装完成后,通过如下命令检查是否安装成功。
$ watchman --version
Ruby
第四步,要安装的是 Ruby。Ruby 是一种常用编程语言。在 React Native iOS 应用的依赖管理中会使用到它。Mac 电脑上默认集成了 Ruby,但却和 React Native 所依赖的 Ruby 版本有些不一致。因此,你需要通过 rbenv 对 Ruby 进行版本管理,就像使用 NVM 工具用于管理 Node 的版本一样。首先,你可以运行如下命令查看当前的 Ruby 版本。
$ ruby --version
系统自带的 Ruby 是 2.6.10 版本,而 React Native 0.71 所依赖的 Ruby 版本是 2.7.6。因此,我们需要使用 rbenv 将 Ruby 版本切换到 2.7.6。接着,你可以使用 Homebrew 安装 rbenv,安装命令如下:
$ brew install rbenv ruby-build
安装完成后,运行 init 命令。运行完成后,它会提示你需要在 .zshrc 文件中执行 rbenv init 命令,因此你需要根据提示,使用 echo 将 init 命令添加到 Terminal 启动前。以保障 Terminal 启动时,rbenv 会生效。相关命令如下:
$ rbenv init
# 每人的提示信息不一定相同,根据提示信息进行相关操作
$ echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
命令执行完成后,重启 Terminal,安装并切换到 React Native 所依赖的 Ruby 版本。
$ rbenv install 2.7.6
$ rbenv global 2.7.6
切换完成 Ruby 版本后,再次重启 Terminal,再次运行 ruby --version 命令,确定 Ruby 版本是否切换成功。
Gem 和 Bundler
第五步,是切换 Ruby 包管理工具的镜像源。Ruby 有两种常用包管理工具,Gem 和 Bundler。这两种包管理工具都会用到,因此需要将这两种包管理工具的镜像源都切换到国内。切换 Gem 镜像源的方法是通过 gem sources 命令进行切换,命令如下:
$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com
这里我们使用 Ruby China 提供的镜像源进行安装。切换 Bundler 镜像源的方法是通过设置 config 进行切换,命令如下:
$ bundle config mirror.https://rubygems.org https://gems.ruby-china.com
具体来说,它会在 Bundler 的全局配置中添加一个 mirror.rubygems.org 的参数,将其值设置为 gems.ruby-china.com,表示在下载和安装包时使用 Ruby China 的镜像源地址。
CocoaPods
第七步,是安装 CocoaPods。在前面我们提到过,Ruby 有两种常用包管理工具,Gem 和 Bundler。CocoaPods 是另一种包管理工具,它虽然是用 Ruby 编写的,但不是 Ruby 的包管理工具,而是 iOS 的包管理工具。这里我们借助 Gem 来安装 CocoaPods。
$ sudo gem install cocoapods
安装完成后,运行如下命令确定 CocoaPods 是否已经安装成功。
$ pod --version
1.11.3
新建项目
npx react-native init AwesomeProject
经常出现的错误:
这是由于没有切换 CocoaPods 的镜像源导致的。解决方案是,切换到清华大学开源软件镜像站的镜像,切换方式如下:
$ cd ~/.cocoapods/repos
$ pod repo remove master
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master
执行完上述命令后,进入 AwesomeProject/ios 目录,找到 Podfile 文件,在文件第一行添加:
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
这时,再在 AwesomeProject/ios 目录下,运行 CocoaPods 安装命令即可。
$ bundle exec pod install
但是,此时仍可能会遇到报错,报错内容如下,例如:
报错的内容是,无法访问地址 github.com/lblasa/doub…
这是因为,即便配置了镜像,但镜像提供的地址仍然是 GitHub 地址。执行 pod install 时,没有访问到 GitHub 地址。那么该怎么办呢?
解决方案是,我们可以把所有的 GitHub 地址替换成 Gitee 地址,主要有以下四步(该方案由群友柯察提供):
-
将 GitHub 仓库导入到 Gitee将
-
GitHub 地址的相关配置,手动替换为 Gitee 地址
-
重新 pod install
-
如遇报错,继续重复上述步骤下面我们逐个步骤看一下。
第一步,将 GitHub 仓库导入到 Gitee (自己在gitee注册一个账号即可)
首先,登录 Gitee。从右上角的 “+” 号中找到“从 GitHub/GitLab 导入仓库”的功能。填写对应的 GitHub 地址,然后点击导入。
接着,进入该仓库后,找到 “克隆 / 下载” 按钮,复制其 HTTPS 地址,示例如下:
第二步,将 GitHub 地址的相关配置,手动替换为 Gitee 地址,详细操作如下。
首先,使用 VSCode 编辑器,打开目录 ~/.cocoapods/repos/master。
然后,点击 Search 一栏,将 GitHub 地址替换成 Gitee 地址。
Github地址:github.com/lblasa/double-conversion.git
Gitee地址:gitee.com/jhwleo/double-conversion.git
第三步,重新 pod install。由于下载地址已经改成了 Gitee,再次运行 pod install 时,就不会遇到 double-conversion 库无法访问的报错了。
在第二次安装的时候,已经安装成功。但是,我们又遇到了其他库的网络错误。因此,第四步是不断重复前三步的,我们现在要做的就是将所有下载不了的 GitHub 地址都逐一替换成 Gitee 地址,完成 pod install 的步骤。当然,由于在上述方案中,你需要一个个手动地进行更改和重试。所以建议有条件的同学,还是通过保持网络畅通的方式进行下载更为方便。