本文與 HomePod mini 無關,我只是想放封面圖片

React-Native 與 x86 指令執行於 M1 Chip (ARM)筆記

這邊紀錄一下一些目前 Apple M1 (ARM) 對於 React-Native 會用到的開發環境指令

Seachaos
tree.rocks
Published in
6 min readNov 21, 2020

--

前言

週末比較有空可以在 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 ~/.zshrc
arch -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 OSX
make: *** 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 充電器…

--

--