こんにちは。Diverseが提供する婚活サービス「 youbride 」でフロントエンドの開発している id:yukioya-dvs です。
youbrideは、運営19年目を迎えるサービスで、PC/SP/Androidアプリ/iOSアプリの4つのプラットフォームで提供しています。
この歴史あるサービスの Android/iOSアプリ を、マルチプラットフォームフレームワークのFlutterで書き換えるという大掛かりなプロジェクトを発足し、この度ついにリリースすることができました!
リプレイスに関する背景や詳細については、以下をご覧ください。
youbrideでは先にAndroidアプリをリリースして、それから約1ヶ月遅れてiOSアプリをリリースしました。
「Flutter使ってるんだから同時リリースできたのでは?」と疑問を抱かれたかもしれません。
今回は、AndroidアプリをリリースしてからiOSアプリをリリースするまでにつまづいた1ヶ月についてお話しようと思います。
Crash Report
youbrideでは、Flutterが公式で出しているpluginである firebase_crashlytics を採用しました。
iOSのインストール方法に関して、 README を参考に設定しましたが、レポートが反映されません。
この問題は、歴史的背景にありました。
youbrideでは、Firebase Crashlyticsを導入する前は、Crash Report ツールに Fabric Crashlytics を採用していました。
そして2017年1月、 GoogleがFabricを買収 したのを機に、FabricとFirebaseの統合が始まりました。
youbrideのように、Fabric Crashlyticsで使用していたアプリをFirebase Crashlyticsを利用する場合、Firebase公式の 移行に関する注意点 の記載にある通り、
Fabric Crashlytics従来の設定をしなければいけませんでした。
また、FirebaseとFabricは来年の3月末を目処に統合完了予定なので、今後SDKのアップデートとともに設定方法が変わるかもしれないです。
FirebaseとFabricの統合ロードマップについては、以下をご覧ください。
WebView
Flutterでは、WebViewを実装する際に、2018年12月、Flutter v1.0.0と同時にリリースされた webview_flutter pluginを使うことが多いと思います。
しかし、webview_flutter の前面にアニメーションするWidgetを表示させようとした際、高い頻度で画面が固まってしまいました。(実装当時、Flutter SDK v1.5.4-hotfix.2)
これは Flutter engine側の修正 で改善され、v1.6.7から解消されました。
Release Build
通常、CLIで flutter build ios --release をすると、ipaファイルが1つだけ生成されます。
Deploygateなど配信サービスなどではこれで十分なのですが、そのままApp Store Connectに上げようとすると、Appleから以下のエラーが返ってきます。
ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
Though you are not required to fix the following issues, we wanted to make you aware of them:
ITMS-90191: Missing beta entitlement - Your app does not include the beta-reports-active entitlement. If you intend to distribute this build via TestFlight for beta testing, please re-build this app with an App Store Distribution provisioning profile. Do not use ad-hoc profiles.
つまり、CLIでのビルドだけでは App Store Connect に上げるのに必要なファイルが不足しているため、flutter build ios --release に加えて、従来通りのXcodeを使ってのアーカイブをする必要があります。
アーカイブ方法に関して、以下の公式ドキュメントをご覧ください。
そしてさらに、注意が必要なのが、ビルドする前にcleanすること!
至って当たり前のことなのですが、これを疎かにした場合、通常通りApp Store Connectに上げることはできますが、このビルドでは正常に起動することができなくなっている場合があります。(スプラッシュから画面が遷移しなくなることがありました。)
なので、ビルドする前にcleanすること!(大事なことなので二回言いました)
iOS13対応
今月リリースされたiOS13で、テキスト入力できるWidget上でキーボードを表示させようとするとcrashする 不具合 が発生しました。
こちらは、Flutter SDK v1.9.0 で解消されました。
いかがだったでしょうか。こうした不具合に対応していたためiOS版のリリースは1ヶ月程遅れてのリリースになってしまいましたが、Flutterに限らず開発時にやってみて初めて気づく落とし穴にハマることは多々あると思いますが、
今回の事例が一人でも多くの方の参考になれば幸いです。
Flutterの開発はとても活発で、今月にはStable channelにv1.9.1+hotfix.2がリリースされました。
既にFlutter開発されてる方も、これからFlutter開発してみようかなという人も、ぜひ最新の安定板で開発しましょう!
We are hiring! \(^o^)/