xcode で ReactNative のビルドに失敗する時の対応
少し前の話ですが、xcodeでReactNativeのビルドを行おうとした際にエラーが発生してしまい、ビルドが失敗する現象に出会いました。
エラーの内容とか確認しつつ、検索したら原因と解決方法がわかったので、備忘としてメモしておきます。
結論を先に言うと
原因はxcodeでビルドする際に動作する node のバージョンがおかしいことでした。 nvm ではなく homebrew で新しいバージョンのnodeをインストールすることで解決できました。
私の環境では nvm を使って、動かす node のバージョンを管理しています。 ただ、xcode の GUI によるビルドプロセス上で使われる node のバージョンは、nvmにてインストールしたものではありませんでした。homebrew でインストールした node のものになっていました。
ずっと homebrew の node についてはアップデートしていなかったので、バージョンは、0.1.1
とかになってました。それは動かなさそうですよね。
エラー
ざっくりとは const
とか strict mode
とかの場所でエラーが出ており、JavaScript の新しい書き方がことごとくエラーになっていました。新しいと言ってもだいぶ昔から使えるようものなので、おやっ?と思いました。
node が古そう。そう考えて調べてみた所、同様の現象を見かけたので解決を試しました。
node バージョンの確認
nvm で使っている defaultの node のバージョンは十分に新しかったのですが、xcode 上からビルドする際には nvm は利用できません。nvm で管理しているものではなく本体の node が動いていました。
すなわち最初からインストールされていたものや自分でインストールし直したもの。homebrewでインストールしたものと言ったところです。
私の場合は /usr/local/lib/node/bin
にあるもので、バージョンは0.1.1とかくらいになってました。絶対動かなさそうですね。
アップデートする
homebrew を使って node をアップデートします。私は一度アンインストールしてインストールし直しました。
ざっくりとはメッセージに従い以下のコマンドを実行することになるはず。
brew install node
brew link node
途中でファイルやディレクトリの権限関連でいくつかエラーが出ました。内容を確認しつつgroupや所有者を変更することで、無事に更新できました。
homebrew で node のバージョンを上げた結果、xcode でのビルドが正常に完了するようになりました。
おわりに
cuiからのビルドとかは正常に動いていたのに、xcode でのビルドは失敗するような状態でしたので、原因見つけるのに結構苦戦してしまいました。
node のバージョン管理に nvm 使っていたので正常なものが使えていると思っていましたが、思わぬ盲点でした。 たまには homebrew で管理しているパッケージとかの管理や整理をしようと思いました。
あと homebrew で update する際、権限関連で書き込み出来ない旨のエラーが出たので、出力に注意して行いましょう。多分 ですが、mac や 以前使っていた homebrew のバージョンが古かったりすると起きるようです。