【react-native】pod instal 時の glog(0.3.5) でのエラー


最初に

新しい MacBook に react-native の環境を構築しようとしたところ謎のエラーが出て...丸1日ハマりました。

発生したエラー内容

Installing glog (0.3.5)
/bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory

pod install 時に glog(※) の ios-configure-glog.sh にて Windows でも馴染みの 改行コード CRLF で保存されたスクリプトが実行される ことで解析エラーとなっています。

   ※Google のログ出力用のライブラリ

試したこと

他の MacBook 環境では発生しなかったので完全に原因が不明でした。
この問題を解決させるために、

  • ruby の各バージョンのインストール
  • node.js の各バージョンのインストール
  • cocoapod の各バージョンのインストール
  • XCode 10.1, 10.2, 11.1 を再インストール
    • xcode-select で SDK ツールの切り替え

とやったのですが、全く効果が見られませんでした...(´;ω;`)

最終的にはこちらの記事を参考に、試行することで解決できたので謝辞とともに手順を記載していきます。
素晴らしい調査ありがとうございます。

対応策としては 「CRLF になってしまうなら LF に直せば良いよね」という発想です。

まずは変換ツールを入れよう

# Homebrew で CRLF=>LF に変換するツールをインストールします
brew install dos2unix

これが無いと始まらないです。

ツールを入れたら...

対象プロジェクトで yarn install は予め行っておき node_module が存在する 状態にしておきます。
その後「テキストエディタ」で下記ファイルを開き、

node_modules/react-native/scripts/ios-configure-glog.sh

31 行目の ./configure と記載されてる一つ前の行に

dos2unix -f *

上記コードをコピーし挿入します。編集後は、下記のようになります。

その後、ターミナルで iOS ディレクトリに移動し pod install を行うと....

無事、成功しました。

ただこの後 XCode でビルドエラーが起きてしまうことがあるので、その場合は node_module 内の glog/config.h を Pods に手動コピーする必要があります。

# プロジェクトの TOP ディレクトリに移動して実行する
cp node_modules/react-native/ReactAndroid/src/main/jni/third-party/glog/config.h ios/Pods/glog/src

※名前が ReactAndroid となっていますが正しいです。

終わりに

問題は解決したのですが、PC によってこの事象が発生したりしなかったりで根本的な原因がわからなかった。
glog が CRLF で保存されているなら、すべての MacBook で本事象が起きてもおかしくないハズ...

なぜこうなってしまうのか原因がわかる方がいましたら教えていただけますと幸いです。

参考記事:
pod install errors on newly detached app on MacOS installing GLog - : /bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory