LoginSignup
3
1

More than 1 year has passed since last update.

Flutterアプリで、CrashlyticsにdSYMが送信されてなくて困った話

Posted at

https://firebase.google.com/docs/crashlytics/get-started?platform=flutter
の通りに手順を実行したはずが、Firebase consoleよりCrashlyticsの画面を見ると、dSYMが送信されてなかった。

前提

  • cocoapodsは、brew経由でインストールしていた
  • rubyはasdfでインストールしていた

どうなっていたか

ビルドは普通に成功し、
https://firebase.google.com/docs/crashlytics/get-started?platform=flutter#force-test-crash
に記載されている test crash を実行すると、Crashlytics上でクラッシュ自体は確認できる。
ただし、「dSYMがありません」的なエラーが表示されていた。

結論

asdf経由でインストールしていたrubyが、うまく動作していなかった。
(おそらく、asdfのバージョンアップ時に何かが起こっており、shimがきれいに切り替わっていなかった)

ruby --version などを実行すると、以下のような感じになっていた。

/Users/.../.asdf/shims/ruby: line 3: /opt/homebrew/Cellar/asdf/0.9.0/libexec/bin/asdf: No such file or directory
/Users/.../.asdf/shims/ruby: line 3: exec: /opt/homebrew/Cellar/asdf/0.9.0/libexec/bin/asdf: cannot execute: No such file or directory

一度 ~/.asdf/shims/ruby を削除して、 asdf reshim ruby 3.1.1 を実行すると、正常になった。

> rm /Users/.../.asdf/shims/ruby
> asdf reshim ruby 3.1.1
> ruby --version        
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [arm64-darwin21]

その後、対象のFlutter projectの ios ディレクトリにて、 pod install を再実行。
するとBuild Phasesに "[firebase_crashlytics] Crashlytics Upload Symbols" が作成された。

image.png

改めて、Flutterアプリをビルド、test crashを再度起こしてみたりしていると、Crashlyticsで詳細が確認できるようになった。

image.png

中身を見てみた

もともと、flutterfire configure で配置される firebase_app_id_file.json の意味を調べていた。

https://github.com/firebase/flutterfire. を押してVSCodeを起動、 firebase_app_id_file.json を検索すると、 crashlytics_add_upload_symbols というスクリプトで使っていた。
crashlytics_add_upload_symbols で再度検索すると、 firebase_crashlytics.podspec でrubyを利用して実行されており、おそらく pod install 時に実行されるんだろうと予想できた。
https://github.com/firebase/flutterfire/blob/f3a6bdc5fd2441ed3c77a9d0ece0d6460afd2ec4/packages/firebase_crashlytics/firebase_crashlytics/ios/firebase_crashlytics.podspec#L10

改めて、自分のプロジェクトで pod install を実行してみると、先のrubyのエラーが発生していたため、原因が特定できた。
(VSCode上でFlutterアプリとして実行していると、このあたりのエラー?警告?が表示されてない気がする。このせいで、なかなか気づけなかった。)

感想

おそらく、多くの開発者は cocoapods をrubyのgemとしてインストールするため、 pod コマンドが動いていれば、 ruby コマンドも成功するんだと思われる。
自分の環境では、M1 (Apple Silicon) でcocoapodsを gem install することに挫けてしまったので、Homebrew経由でインストールしていたため、こんな自体が発生したのだと思う。

FlutterアプリをiOSにビルドするために、cocoapodsが必要だと認識していたけど、単体のrubyも利用されていることまで気が回っていなかった。。。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1