表題のとおり、react-native run-ios したら、The following build commands failed: PhaseScriptExecution Start\ Packager と怒られて先に進めなかった時のメモ。
結論を言うと、使いたいポートがnodeに使われていた。sunproxyadminなるプロセスとかぶっているらしい…killしたらとおった。
環境
- MacBook Pro 2019
- macOS 10.15.7
- react-native 0.62.0
- node.js 12.20.0
やりたいこと
いつものように react-native run-ios を走らせたところ、The following build commands failed: PhaseScriptExecution Start\ Packager…… などと怒られた。やたら長いシェルスクリプトの実行に失敗している。いつもはこんなことなかったのに……。
React Nativeのインストールとweb版からの移植ではまったこと - Qiitaによると、8081のポートが埋まっているために起きるエラーらしい。実際に、実行しようとしているスクリプトの中を見たらこんなだった。
#!/bin/sh
export RCT_METRO_PORT="${RCT_METRO_PORT:=8081}"
echo "export RCT_METRO_PORT=${RCT_METRO_PORT}" > "${SRCROOT}/../node_modules/react-native/scripts/.packager.env"
if [ -z "${RCT_NO_LAUNCH_PACKAGER+xxx}" ] ; then
if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then
if ! curl -s "http://localhost:${RCT_METRO_PORT}/status" | grep -q "packager-status:running" ; then
echo "Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly"
exit 2
fi
else
open "$SRCROOT/../node_modules/react-native/scripts/launchPackager.command" || echo "Can't start packager automatically"
fi
fi
なんかよくわからんが8081番を使っている。
$ sudo lsof -i :8081
Password:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 1979 xxxx 24u IPv6 0x2219967c326c265d 0t0 TCP *:sunproxyadmin (LISTEN)
なるほど。nodeのsunproxyadminなるものが動いている。なんだろう……。「macos - Can't package react native because of port 8081 sunproxyadmin - Stack Overflow」を見ると、sunproxyadminが使うポートで、80と同じ役割をしている、らしい。で、プロセスをkillしたりなんだりして頑張っている。でも、いままでこんなことなかったのに。たまたまかぶっただけだったりしないのだろうか……。
ということで、伝家の宝刀再起動をした。再起動後、再度8081番が使われているか見ると、使われていない。で、改めて react-native run-ios を走らせたところ、うまくいった。
なんだが……もう1回Archiveしてみると、また同じ失敗エラーが起きた。で、8081を見てみたらまたsunprocyadmin。oh……。
ということで、lsofで得られるPIDをkill -9して殺し、再度Archiveを実行。どうなるかな、と思っていたが、今度はなんとかいけた。。。
コメント