RN之[pod install]: Error installing DoubleConversion

为什么要写这篇文章?

RN工程中,当我们使用cocoapods来安装一些RN必须的第三方编译库(比如Follyboost),由于这些编译库是在国外,并且无论翻墙与否,很多时候直接使用cocoapods来自动下载安装基本都会失败,最近尝试在原来的RN工程和新建的RN工程上面都做了尝试,结果尝试了3天,基本都是失败的,报错的原因都是一样,这样的话,项目根本没法运行。因此,在这种自动安装经常失败甚至一直失败的情况下,了解手动下载安装就必不可少了。

报错:

➜  ios pod install
Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`
Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec`
Downloading dependencies
Installing DoubleConversion (1.1.6)

[!] Error installing DoubleConversion
[!] /usr/local/bin/git clone https://github.com/google/double-conversion.git /var/folders/mn/7jdnkyy91_n0bxkrgjgjk17c0000gn/T/d20191212-36568-33nxni --template= --single-branch --depth 1 --branch v1.1.6

Cloning into '/var/folders/mn/7jdnkyy91_n0bxkrgjgjk17c0000gn/T/d20191212-36568-33nxni'...
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: unpack-objects failed

报错原因:

RPC(Remote Procedure Call)连接失败,基本可以判定是由于网络原因,这种可能性很多,代理、局域网等等,尤其是针对国外的一些资源,对于国内的开发者来说,很不友好。

环境

info Fetching system and libraries information...
System:
    OS: macOS Mojave 10.14.5
    CPU: (4) x64 Intel(R) Core(TM) i3-8100B CPU @ 3.60GHz
    Memory: 221.88 MB / 8.00 GB
    Shell: 5.3 - /bin/zsh
  Binaries:
    Node: 12.10.0 - /usr/local/bin/node
    Yarn: 1.17.3 - ~/.yarn/bin/yarn
    npm: 6.11.3 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 12.2, macOS 10.14, tvOS 12.2, watchOS 5.2
    Android SDK:
      API Levels: 23, 26, 27, 28
      Build Tools: 23.0.1, 26.0.1, 27.0.3, 28.0.2, 28.0.3
      System Images: android-23 | Intel x86 Atom_64, android-23 | Google APIs Intel x86 Atom, android-23 | Google APIs Intel x86 Atom_64, android-26 | Google APIs Intel x86 Atom, android-27 | Intel x86 Atom_64, android-27 | Google APIs Intel x86 Atom, android-27 | Google Play Intel x86 Atom, android-28 | Google Play Intel x86 Atom
  IDEs:
    Android Studio: 3.5 AI-191.8026.42.35.5977832
    Xcode: 10.2.1/10E1001 - /usr/bin/xcodebuild
  npmPackages:
    react: 16.9.0 => 16.9.0
    react-native: 0.61.5 => 0.61.5
  npmGlobalPackages:
    react-native-cli: 2.0.1
    react-native-update-cli: 0.1.0

重现

我们就基于现有的环境新建一个项目来重现这个RPC错误。

创建

使用CLI新建一个RN项目,运行如下命令:

react-native init demo

在这里,我使用的是默认新建最新版本,目前RN的最新版本是 0.61.5,你也可以使用react-native init 工程名 --version 版本指定某一个具体的RN版本,比如要创建一个0.59.9的版本,可以使用react-native init demo --version 0.59.9

安装依赖

进入到该/demo/ios目录下,运行如下命令:

pod install

注意:在RN版本大于0.6的情况下,iOS工程默认使用cocoapods来集成项目环境,因此,在运行项目之前,必须先使用cocoapods安装所需依赖,因此要运行pod install命令。对于0.6以下的RN项目,也可以进入到/ios目录下运行pod init生成一个Podfile文件,在Podfile文件里面添加依赖,然后运行pod install安装依赖,原理是一样的。

错误产生❌

在运行pod install后,等待了大概十几分钟(特别慢),报错如下:

➜  ios pod install
Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`
Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec`
Downloading dependencies
Installing DoubleConversion (1.1.6)

[!] Error installing DoubleConversion
[!] /usr/local/bin/git clone https://github.com/google/double-conversion.git /var/folders/mn/7jdnkyy91_n0bxkrgjgjk17c0000gn/T/d20191212-36568-33nxni --template= --single-branch --depth 1 --branch v1.1.6

Cloning into '/var/folders/mn/7jdnkyy91_n0bxkrgjgjk17c0000gn/T/d20191212-36568-33nxni'...
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: unpack-objects failed

解决

为了能够尽可能安装成功,在自动安装失败的情况下,我们采用手动安装来解决这个问题。

首先,进入Github: react-native官网的目录react-native/scripts/ios-install-third-party.sh下,你将能够看到:

shot.png

注意:左边的Branch选择是对应你当前是所用的RN版本,比如你使用的是0.61.5,那对应的就是上图中的0.61-stable,如果你使用的是0.59.9,那对应的就是0.59-stable。但是,一般情况下,有部分连续的版本的ios-install-third-party.sh对应的编译库是一样的,这个可以自己去查看。为了保险起见,尽量保持和你当前所使用的RN版本一致。

进入到ios-install-third-party.sh文件后,滑到最底部,你将会看到如下图所示:

shot.png

注意:我们可以看到有4个对应的编译库文件就是相应的RN版本所需要的编译库,这4个编译库都需要你下载。

接下来,我们有2种方式来下载4个编译库对应的压缩包:

  • 第一种方式

依赖库下载链接:RN中文网作者的第三方依赖库百度网盘链接

  • 第二种方式

如果在第一种方式中没有找到对应的依赖库版本(有可能随着版本更新,RN中文网的作者没来得及更新或者忘记了),那么你可以用另一种稍微麻烦一点但是100%正确的方式来下载你所需要的依赖库,继续往下看

在上面的图片中,我们看到了4个依赖库以及对应的链接,是的,没错,我们可以通过对应的链接找到相应的压缩包版本,然后下载。这里以第一个glog-0.3.5.tar.gz为例,它对应所在的github链接地址是:https://github.com/google/glog(后面的一串串不需要,我们只需要它所在的github地址),打开之后如下:

shot.png

点击上图中的releases,进入可以找到相应版本如下:

shot.png

然后点击红圈中的Source code(tar.gz)下载,完成。(其他3个依赖库类似)

下载完4个依赖压缩包之后,不用解压,我们直接放到相应的目录当中:

  • RN版本在>=0.58

将压缩包放到 ~/Library/Caches/com.facebook.ReactNativeBuild

➜  ~ cd ~/Library/Caches/com.facebook.ReactNativeBuild
➜  com.facebook.ReactNativeBuild pwd
/Users/langke/Library/Caches/com.facebook.ReactNativeBuild
➜  com.facebook.ReactNativeBuild ls
boost_1_63_0.tar.gz  double-conversion-1.1.6.tar.gz folly-2018.10.22.00.tar.gz  glog-0.3.5.tar.gz

注意:或许在~/Library/Caches目录下,你并没有com.facebook.ReactNativeBuild文件夹,怎么办?进入到cd ~/Library/Caches目录下,然后使用mkdir com.facebook.ReactNativeBuild创建一个就好了。

  • RN版本在<0.58

将压缩包放到 ~/.rncache目录下,一般情况下.rncache文件夹也是有的,如果没有,同理,使用 mkdir .rncache创建一个就好。

注意:虽然我们可以使用环境变量的方式自定义路径,但是我个人还是建议按照正常的这种全局方式去配置比较好,毕竟,自定义路径很可能因为个人疏忽而出错,这个也因人而异,如果想要使用具体环境变量自定义路径,可前往:RN中文网作者的指导说明,本文也主要来源于此的参考。

完毕

运行 pod install:

shot.png

经过上面的一番小折腾,到此为止,基本告一段落,也应该可以稍微正常pod install了。还是会有点慢,甚至也有可能会失败,但是多尝试几次应该会成功。

个人博客地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容