こんにちは、株式会社カミナシのエンジニア @imuです。
はじめに
アプリケーションが急にクラッシュすることありますよね? 昨日まで動いていたのに何故かクラッシュ…。 アプリケーションがOSSの場合、特に切り分けが大変ですよね。
カミナシでは『Expo Go』を使ったアプリケーションの開発を行っており、急にアプリケーションがクラッシュしてしまい解決に至るまでの話をしてみようと思います。
突然クラッシュするアプリケーション
まずはこちらをご覧ください。
ローカル環境でExpoを起動した後、iPadでQRコード読み込んでアプリケーションが起動する間もなくクラッシュしています。始めは古いキャッシュでも残っているのかな?と思って、再起動やアプリケーションの削除を行いましたが、この事象は直りませんでした。
何かしら問題が起きていると思い調査を始めました!
どういう調査をしたか
- シミュレーター等の起動確認
問題なく起動し、設定等は問題ないと思っていました。(最終的にはここに問題であることを知ります)Expo Publish(OTA Update)の確認や、developmentモードでの起動やリリースに問題ありませんでした。
- 利用しているPackage問題
まっさらなExpoプロジェクトを作成して、『カミナシ』で使っている『package.json』を入れて起動してみると起動できる…。どうやら『package.json』が悪さをしているわけじゃない。
『Expo Go』側に問題があるのではと思って確認したところ、2日前に『Expo Go』がバージョンアップしていることを知り、これが影響しているのではないかと思い始めました。Github issueを検索したり、インターネットで『Expo Go Crash』等で検索してみたりしました。最終的には有益な情報はなく、ひたすらクラッシュしていたので開発者にクラッシュレポート届け!と思っていました。
- カミナシのアプリケーションの修正履歴
アプリケーションがクラッシュしているので設定かなと思い、設定ファイルの履歴を洗いましたが直近での変更はなく、アプリケーションの問題じゃなさそう…と決めつけていました。早く『Expo Go』の変更リリースないかなと思う日々でした。
ある日舞い降りてきた解決の糸口
エンジニアメンバーにクラッシュするんですよね…早く変更リリースないですかねー。と会話していたとき、クラッシュした様子を見ると『Splash Screen』が表示される前にクラッシュしてないかと思いました。
『app.json』でファイルを参照しているところは『Splash ScreenとGoogleService-Info.plist』でした。
まずはファイルを読み込んでいるプロパティを削除したところ…
起動した!!!
ということは、ファイルがおかしいと思い1つずつ確認したところ『GoogleService-Info.plist』ファイルが悪さをしていることが分かりました。
『GoogleService-Info.plist』ファイルの確認
ローカル起動の場合、ファイルはダミー値を入れて利用していました。
- developmentで使っているファイルに差し替える
当然ではありますが、起動しました。
- localとdevelopmentの差分を確認
ローカルとdevelopmentでプロパティの不足があり、ダミー値を追加しましたが起動しませんでした。
よく見ると一部プロパティ名が…
『痛恨のスペルミス』
ここにたどり着くまで時間が掛かりましたが、完全に思い込みでした。これまでは起動していたので設定ファイルのミスはない、と思っていたが実は最初から起きてもおかしくなかった事象でした。 (それなら『Expo Go』で最初からクラッシュして欲しかった気持ちはありますが、OSSなので利用する側の問題ですから何にも言えませんね…)
スペルミスを修正すればちゃんと起動しました(笑)
おわりに
思い込みから入る調査は時間が掛かることが身にしみて分かりました。まずは何事も疑うことから始めて調査に取り組みたいと思いました!個人的にはこういった調査は好きなので苦痛じゃなかったですが(笑)
解決してスッキリです!
最後に弊社ではエンジニアを募集しております。 興味がある、話を聞いてみたい、応募したいという方はお気軽にご応募ください!