為什么要寫這篇文章?
在RN
工程中枉圃,當我們使用cocoapods
來安裝一些RN
必須的第三方編譯庫(比如Folly
芜壁、boost
)礁凡,由于這些編譯庫是在國外高氮,并且無論翻墻與否,很多時候直接使用cocoapods
來自動下載安裝基本都會失敗把篓,最近嘗試在原來的RN
工程和新建的RN
工程上面都做了嘗試纫溃,結果嘗試了3
天,基本都是失敗的韧掩,報錯的原因都是一樣紊浩,這樣的話,項目根本沒法運行疗锐。因此坊谁,在這種自動安裝經(jīng)常失敗甚至一直失敗的情況下,了解手動下載安裝就必不可少了滑臊。
報錯:
? 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)
連接失敗口芍,基本可以判定是由于網(wǎng)絡原因,這種可能性很多雇卷,代理鬓椭、局域網(wǎng)等等,尤其是針對國外的一些資源关划,對于國內的開發(fā)者來說小染,很不友好。
環(huán)境
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
重現(xiàn)
我們就基于現(xiàn)有的環(huán)境新建一個項目來重現(xiàn)這個RPC
錯誤贮折。
創(chuàng)建
使用CLI
新建一個RN
項目裤翩,運行如下命令:
react-native init demo
在這里,我使用的是默認新建最新版本调榄,目前
RN
的最新版本是0.61.5
踊赠,你也可以使用react-native init 工程名 --version 版本
指定某一個具體的RN
版本,比如要創(chuàng)建一個0.59.9
的版本每庆,可以使用react-native init demo --version 0.59.9
筐带。
安裝依賴
進入到該/demo/ios
目錄下,運行如下命令:
pod install
注意:在
RN
版本大于0.6
的情況下缤灵,iOS
工程默認使用cocoapods
來集成項目環(huán)境伦籍,因此,在運行項目之前凤价,必須先使用cocoapods
安裝所需依賴,因此要運行pod install
命令拔创。對于0.6
以下的RN
項目利诺,也可以進入到/ios
目錄下運行pod init
生成一個Podfile
文件,在Podfile
文件里面添加依賴剩燥,然后運行pod install
安裝依賴慢逾,原理是一樣的立倍。
錯誤產(chǎn)生?
在運行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官網(wǎng)的目錄react-native/scripts/ios-install-third-party.sh下,你將能夠看到:
注意:左邊的
Branch
選擇是對應你當前是所用的RN
版本策添,比如你使用的是0.61.5
材部,那對應的就是上圖中的0.61-stable
,如果你使用的是0.59.9
唯竹,那對應的就是0.59-stable
乐导。但是,一般情況下浸颓,有部分連續(xù)的版本的ios-install-third-party.sh
對應的編譯庫是一樣的物臂,這個可以自己去查看。為了保險起見产上,盡量保持和你當前所使用的RN
版本一致棵磷。
進入到ios-install-third-party.sh
文件后,滑到最底部蒂秘,你將會看到如下圖所示:
注意:我們可以看到有
4
個對應的編譯庫文件就是相應的RN
版本所需要的編譯庫泽本,這4
個編譯庫都需要你下載。
接下來姻僧,我們有2
種方式來下載4
個編譯庫對應的壓縮包:
- 第一種方式
依賴庫下載鏈接:RN中文網(wǎng)作者的第三方依賴庫百度網(wǎng)盤鏈接
- 第二種方式
如果在第一種方式
中沒有找到對應的依賴庫版本(有可能隨著版本更新规丽,RN
中文網(wǎng)的作者沒來得及更新或者忘記了),那么你可以用另一種稍微麻煩一點但是100%
正確的方式來下載你所需要的依賴庫撇贺,繼續(xù)往下看
在上面的圖片中赌莺,我們看到了4
個依賴庫以及對應的鏈接,是的松嘶,沒錯艘狭,我們可以通過對應的鏈接找到相應的壓縮包版本,然后下載翠订。這里以第一個glog-0.3.5.tar.gz
為例巢音,它對應所在的github
鏈接地址是:https://github.com/google/glog
(后面的一串串不需要,我們只需要它所在的github
地址)尽超,打開之后如下:
點擊上圖中的releases
官撼,進入可以找到相應版本如下:
然后點擊紅圈中的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
創(chuàng)建一個就好了菠净。
-
RN
版本在<0.58
將壓縮包放到 ~/.rncache
目錄下禁舷,一般情況下.rncache
文件夾也是有的,如果沒有嗤练,同理榛了,使用 mkdir .rncache
創(chuàng)建一個就好。
注意:雖然我們可以使用環(huán)境變量的方式自定義路徑煞抬,但是我個人還是建議按照正常的這種全局方式去配置比較好霜大,畢竟,自定義路徑很可能因為個人疏忽而出錯革答,這個也因人而異战坤,如果想要使用具體環(huán)境變量自定義路徑,可前往:RN中文網(wǎng)作者的指導說明残拐,本文也主要來源于此的參考途茫。
完畢
運行 pod install
:
經(jīng)過上面的一番小折騰,到此為止溪食,基本告一段落囊卜,也應該可以稍微正常pod install
了。還是會有點慢错沃,甚至也有可能會失敗栅组,但是多嘗試幾次應該會成功。