Expo > ローカルビルドが失敗する件の解決


Expo SDK 50に対応するため作業を行なっていたところ、ローカルビルドが失敗するようになりました。

以下のようなエラーログが出て行き詰まってしまいました。


```
[INSTALL_PODS] ――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
[INSTALL_PODS] [!] Oh no, an error occurred.
[INSTALL_PODS] Search for existing GitHub issues similar to yours:
[INSTALL_PODS] https://github.com/CocoaPods/CocoaPods/search?　
	中略
%2Fopt%2Fhomebrew%2FCellar%2Fcocoapods%2F1.12.1%2Flibexec%2Fgems%2Fffi-1.15.5%2Flib%2Fffi_c.bundle&type=Issues
[INSTALL_PODS] If none exists, create a ticket, with the template displayed above, on:
[INSTALL_PODS] https://github.com/CocoaPods/CocoaPods/issues/new
[INSTALL_PODS] Be sure to first read the contributing guide for details on how to properly submit a ticket:
[INSTALL_PODS] https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md
[INSTALL_PODS] Don't forget to anonymize any private data!
[INSTALL_PODS] Searching for inspections failed: undefined method `map' for nil
[INSTALL_PODS] [!] `<PBXResourcesBuildPhase UUID=`13B07F8E1A680F5B00A75B9A`>` attempted to initialize an object with an unknown UUID. `AF3AEBEE3B8041BCA17D5E54` for attribute: `files`. This can be the result of a merge and the unknown UUID is being discarded.
[INSTALL_PODS] Looking for related issues on cocoapods/cocoapods...
[INSTALL_PODS] 
Error: pod install exited with non-zero code: 1
    at ChildProcess.completionListener (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/spawn-async/build/spawnAsync.js:42:23)
    at Object.onceWrapper (node:events:632:26)
    at ChildProcess.emit (node:events:517:28)
    at maybeClose (node:internal/child_process:1098:16)
    at ChildProcess._handle.onexit (node:internal/child_process:303:5)
    ...
    at spawnAsync (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/spawn-async/build/spawnAsync.js:7:23)
    at spawn (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/turtle-spawn/dist/index.js:16:47)
    at installPods (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/ios/pod.js:11:38)
    at /Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/builders/ios.js:69:41
    at BuildContext.runBuildPhase (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/context.js:98:34)
    at buildAsync (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/builders/ios.js:68:19)
    at async runBuilderWithHooksAsync (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/builders/common.js:12:13)
    at async Object.iosBuilder (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/@expo/build-tools/dist/builders/ios.js:28:16)
    at async buildIosAsync (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/eas-cli-local-build-plugin/dist/ios.js:66:12)
    at async buildAsync (/Users/user1/.npm/_npx/994d822063d9f19d/node_modules/eas-cli-local-build-plugin/dist/build.js:56:29)

Build failed
Unknown error. See logs of the Install pods build phase for more information.
npx exited with non-zero code: 1
    Error: build command failed.
```

Expo SDKを50へ上げたタイミングでエラーになるようになったので、SDK周りを疑い、Package.jsonから依存関係を抜いたりしつつビルドを試していきました。

`expo-updates`を削除したらビルドが通るところまで行きましたが、`expo-updates`は必要なモジュールなので根本解決には至りませんでした。

cocoapodのキャッシュを削除しても、入れ直しても現象は変わらず。

そうこうしていると、次の日には、`expo-updates`を削除してもビルドが通らなくなりました。（その間、何も環境はさわっていないのに）

複数のMacでビルドを試しても同じ状況。これはまずいと腰を据えて問題解決することにしました。

`spawnAsync.js`に着目して調べてましたが、どうにも違うっぽい。

まったく同じようなエラーを吐くISSUEを見つけたが、日付が2023年10月
https://github.com/OneSignal/react-native-onesignal/issues/1595


ということは、SDK50は関係ないようだ。

## cocoapodsのISSUEへ

さまざまなISSUEを見ては彷徨い続け、たどり着いたのが以下のISSUE

https://github.com/CocoaPods/CocoaPods/issues/12226#issuecomment-1915787809

```
Solved by downgrading cocoapods.

sudo gem uninstall cocoapods
sudo gem install cocoapods -v 1.14.3
```

1.14.3にダウングレードで問題解決とある。

cocoapodsのバージョン履歴を調べる。
https://rubygems.org/gems/cocoapods/versions?locale=ja

```
cocoapodsの全バージョン履歴
1.15.0 - January 28, 2024 (291KB)
1.14.3 - November 19, 2023 (291KB)
1.14.2 - October 27, 2023 (291KB)
```

Macにインストールバージョンを調べる。

```
pod --version
1.15.0
```

1.14.3にダウングレードしてみる。
ビルドが通った！！


1.15.0、俺はいつのまに入れたんだ！！


# 解決

brewでcocoapodsを入れていたのだが、
brewではバージョン指定できないらしいので、gemにてインストールしました。


やった方法は以下。


brew版のcocoapodsを削除

```
brew uninstall cocoapods
```


gemでcocoapodsのインストール

```
sudo gem install drb -v 2.0.6
sudo gem install activesupport -v 6.1.7.6
sudo gem install cocoapods -v 1.14.3
```

バージョン確認

```
pod --version
1.14.3
```

ビルドを試してみます。

```
eas build --profile development --platform ios --local

...
中略
....


Build successful
You can find the build artifacts in /Users/user1/project/build-1706792343593.tar.gz
```

ビルドができました！！


# 余談

さて、つい最近に`cocoapods 1.15.0`が出たばかりのようですが、入れた記憶がまったくありません。
いつのまにか無意識に、brewでcocoapodがアップデートをしたのかもしれないです。
（brewの自動アップデートはしていない）

ひとまず、Expoでローカルビルドに失敗する人は、cocoapodsのバージョンを疑ってみてはいかがでしょうか。