React-Native 與 x86 指令執行於 M1 Chip (ARM)筆記
這邊紀錄一下一些目前 Apple M1 (ARM) 對於 React-Native 會用到的開發環境指令
前言
週末比較有空可以在 M1 CPU 上做更多的開發環境測試了,其中目前 React-Native 和 XCode 專案已經可以編譯與執行 iOS 模擬器,本文簡單筆記一下 Python / React-Native / Homebrew 相關安裝
執行 X86 指令 ( pyenv / homebrew / cocoapods )
如果是要單純執行以前 x86 的程式,可以用以下方法 ( zsh / bash 看個人喜好 )
注意:這只是暫時辦法,還是可能會有效能或是相容性問題
arch -x86_64 /bin/zsh
透過這個方法進入的 zsh / bash 就可以執行大多的 x86 指令了 ( 使用 x86_64 模式 )
Homebrew 安裝
如直接於 M1 上安裝 brew 可能會遇到以下錯誤
Homebrew is not (yet) supported on ARM processors!Rerun the Homebrew installer under Rosetta 2.If you really know what you are doing and are prepared for a very broken experience you can use another installation option for installing on ARM:https://docs.brew.sh/Installation
因為 Homebrew 還沒有支援 ARM 版本 (目前支援進度列表可以參考這邊 : https://github.com/Homebrew/brew/issues/7857?ref=dtf.ru )
所以折衷辦法就是先用 x86 方式執行
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
這樣就可以 x86 模式進行安裝了
(但是不保證其他套件沒問題,理論上很多都可以透過 x86 模式執行 )
Node.js 與 React-Native
Node 在 M1 CPU 上問題不大,直接安裝 nvm ( https://github.com/nvm-sh/nvm ) 然後安裝 15 版本即可
nvm install 15
Node 安裝成功後其他 module 也都沒啥問題
比較值得注意的是 React-Native 與 iOS 開發
Cocoapods 錯誤
如果遇到 ffi-1.13.1
之類的錯誤,可以參考以下
(或是初次安裝也可以,以下指令免 root 安裝 Cocoapods )
echo 'export GEM_HOME=$HOME/.gem' >> ~/.zshrc
echo 'export PATH=$PATH:$HOME/.gem/bin/' >> ~/.zshrc
source ~/.zshrcarch -x86_64 gem install ffi
arch -x86_64 gem install cocoapods
接下來執行
pod install
應該就會正常了
( 參考資料 : https://github.com/CocoaPods/CocoaPods/issues/10220 )
React-Native 專案編譯設定
如果在 arm 版本 XCode 可能遭遇以下錯誤
building for iOS Simulator, but linking in object file built for iOS, for architecture arm64
到專案中設定 ( 注意: Pods 與 專案 兩個都要)
將 Excluded Architectures > Debug 輸入 arm64
然後清除 build folder 之後應該就可以正常了
Python 安裝
這部分一樣可以透過 arch -x86_64 指令解決;或是去官方 github clone 最新版本的自行編譯也可以 ( 目前 3.10 alpha 本人測試可以成功 )
例如單純使用 pyenv 想要安裝 python 會遇到類似錯誤
checking size of pthread_t... 8
checking size of pthread_key_t... 8
checking whether pthread_key_t is compatible with int... no
configure: error: Unexpected output of 'arch' on OSXmake: *** No targets specified and no makefile found. Stop.
BUILD FAILED (OS X 11.0.1 using python-build 1.2.21-1-g943015eb)
可以使用上述的
arch -x86_64 /bin/zsh
然後任意執行 pyenv,或是執行
arch -x86_64 pyenv install 3.9.0
也可以
特別注意的是這邊安裝起來的 Python 還是 x86 版本,可以透過以下方法觀察
% lipo -info ./versions/3.9.0/bin/python3
Non-fat file: ./versions/3.9.0/bin/python3 is architecture: x86_64
結語
以上希望有幫助到想在 Apple M1 設備上開發的朋友 : )
相信日後支援度越來越高就不需要透過 x86 模式來執行其他指令了
題外話: 原來買 HomePod mini 內附的是一顆 Apple 20W USB-C 充電器…