eas buildでBuild failed: The "Run fastlane" step failed with an unknown error.

TL;DR

  • 古いexpo sdkのプロジェクト
  • eas buildで Build failed: The "Run fastlane" step failed with an unknown error.
  • eas buildで使われるXcodeのバージョンが上がったため
  • patch-packageを使ってyogaにパッチを当てる

経緯

古いexpoのアプリをbuildしようとしたら Build failed: The "Run fastlane" step failed with an unknown error. が出てエラーになった。

調べるとeas buildする環境におけるXcodeのバージョンがあがり、それが原因でエラーになっている模様。

expoのbuildログを見ると以下のように出ていた。

❌  (node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp:2289:9)

  2287 |         generationCount);
  2288 |     node->setLayoutHadOverflow(
> 2289 |         node->getLayout().hadOverflow() |
       |         ^ use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
  2290 |         currentRelativeChild->getLayout().hadOverflow());
  2291 |   }
  2292 |   return deltaFreeSpace;

react-nativeに含まれるyogaの中のオペレーターの記述方法に誤りがある。

react-nativeを 0.69 以上に更新すれば治るらしいが、 reactや他のパッケージもアップグレードしないといけなくなってしまうので今回は難しかった。

そのため、パッチを当てて修正することにした

発生した環境

修正内容

まず patch-package をインストール

npm i patch-package --save-dev

該当のファイル node_modules/react-native/ReactCommon/yoga/yoga/Yoga.cpp を直接開いて修正する。

hadOverflow で検索すると該当箇所が見つかるので以下のように修正する

node->getLayout().hadOverflow() |
↓
node->getLayout().hadOverflow() ||

ファイルを修正後、以下を実行

npx patch-package react-native

すると プロジェクトルート/patches/react-native+0.64.3.patch というファイルができる

最後に npm install された後もpatchが適用されるように package.json に以下を追加

{
  ...
  scripts: {
    ...
    "postinstall": "patch-package"
  }
}

これで eas build での該当エラーが解消した