【断食トラッカー】共通で同じ機能を実現できるの難関
今回のテーマは第一段階の成功までの難題です。
目標
タイマーとデータストアを使って、iOS、Androidとも動けるプログラム
技術
- Jetpack Compose + Coroutine + Flow
- Google Datastore (新しいライブラリ:1.1.0-alpha04)
- 共通の時間ライブラリ(kotlinx.datetime)
- 大体一週間ぐらい動ける
難関
- ライブラリの配置:今回の考えはUseCaseまで共通部を持って、ViewModelはそれぞれを実装する(共通viewModelのライブラリはGoogle管理ではない懸念があります)→他のプロジェクトはViewModelまで共通にするケースが多いみたいです。
- 初のFlowで学習時間が必要です。(既存のプロジェクトはLiveData + 強引にコールーチン変換)
- UIStateの本格的採用はすこく楽しいかったですが、最適化が必要です。
- 時間のフォーマットは本来JavaのTimeFormatterを利用すべきですが、原因未究明の前提で、中学時代の計算レベルで処理しました。(意外に面白いですよ)
- 曖昧な時期が長いですが、同じ機能レベルまでは大体一週間
難関
- 初のSwiftUIですが、慣れたUI部品なので、軽めに使えるアイコンを調査すると、Androidの仮画面より納得できる(Figmaと似てる)
- Android共有部のライブラリ配置が影響大きいでした。(それぞれのUseCaseでも共通部でKoin導入しないといけない)
- コンセプトの共通変換(Flow vs Publish)
→ここだけ2−3日かかりました。
→いろいろな情報ですが、実際iOS側で変換クラスだけで解決 - 2−3年だけほとんど触ってないだけで、新しい部分は多すぎて、新しい言語として扱ってもいいと思います。
- 実機で試してみたいですが、いろいろエラーがあって…一時的には無料でもリリース前に実機で検証できますが、現在多分課金が必要そうですね。(ゆくゆく調べてみます)
参考文献