🥣

[個人開発]SwiftUI+firebaseで3ヶ月でアプリをリリースしました

2022/05/08に公開

概要

献立を記録・共有管理できるiOSアプリをSwiftUI + firebaseで作成しました。
https://apps.apple.com/jp/app/recipo-献立管理アプリ/id1614269395

技術スタック

パッケージ管理 CocoaPods, SwiftPM
View SwiftUI
DB firestore, storage
対象OS iOS15.0以上

きっかけ

晩御飯をよく作るのですが、献立を考えるのが面倒だと思うことが多々あり、せめて日々食べたものを記録して、それを検索できるようなものはないかと思いました。
また、ユーザ間で献立の内容を共同編集できる仕組みも欲しいと思いました。
調べてみたのですが、いいアプリが見つからなかったので、自分で作ろうかと思ったのがきっかけです。

アプリの機能

  • 献立日記の作成。献立日記とは、カレンダー形式で日々の献立を管理する単位
  • 献立の登録。画像や参考リンク、タグの登録が可能
  • 献立日記を共有して別ユーザと共同編集が可能
  • 献立の検索

技術選定

バックエンド

  • 最も求めたのは、開発スピードです。そのため、バックエンドを作らない選択肢を検討しました。
    • ※複数端末からのデータ共有は必要だったので、DBは必須
  • その結果、firebaseを選択しました

フロントエンド

  • 自分とパートナーが利用するOSがiOSなので、iOSで動作することが前提
  • UIKitを使用したアプリ開発は経験がありましたが、SwiftUI使ってみたかったので、SwiftUIを選択しました
  • スピード優先なのに、未経験の技術を選択するのは、仕事だとなかなかしないですが、個人開発なので、経験よりもSwiftUIの開発体験を取りました
  • アーキテクチャはStoreパターンをベースに部分的にMVVMを利用するパターンを選択しました。
    • MVVMはViewに閉じたローカルステートとViewが肥大化した時にロジックを分離する目的で利用してます
    • The Composable Architecture(TCA)も検討しましたが、アプリの規模に対してやり過ぎ感を感じたので、却下
  • 非同期処理はPromiseKitなどを使わずに、async/awaitですべて実装してます

開発期間

  • 開発開始から、2.5ヶ月ほどで初版のリリースをしました
    • 2022年1月末:開発開始
    • 2022年4月11日:1.0.0リリース
    • 2022年5月7日:1.1.0リリース
  • 1.0.0のリリースまでの期間は2.5ヶ月ですが、平日は本業で仕事しているので、開発に使えるのは週末のみです。なので、実際は20営業日ぐらいの開発期間です。

開発フロー

  • MiroとFigmaをツールとして利用しました

Miro

  • 開発に必要な機能の整理
  • カンバンボードを使ってタスクの管理
    • backlogという名の、メモ帳です。改善とか不具合とか忘れちゃうので。

Figma

  • ワイヤーフレームやデザインの作成
  • いきなり開発するよりは、どの要素を置くかとかFigmaで描いてからの方が効率よかったです

よかったとこ

firestoreのリアルタイム更新すごい

SwiftUIの開発体験

  • この期間で1つのアプリを開発できたのは、SwiftUIの開発体験がありきでした。
  • Previewを使うことで、1画面のUIを組むのが本当に速くできます。

はまりポイント

ソーシャルログインを実装する場合は、SignInWithAppleが必須

  • 当初、Googleログインのみを実装して審査に提出しましたが、SignInWithAppleの実装が必須とのことで、リジェクト。

4.8 Sign in with Apple
Apps that use a third-party or social login service (such as Facebook Login, Google Sign-In, Sign in with Twitter, Sign In with LinkedIn, Login with Amazon, or WeChat Login) to set up or authenticate the user’s primary account with the app must also offer Sign in with Apple as an equivalent option. A user’s primary account is the account they establish with your app for the purposes of identifying themselves, signing in, and accessing your features and associated services.

https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple

プライバシーポリシー・サポートサイトが必須

  • 審査提出にはプライバシーポリシー・サポートサイトのURLが必須。
  • Reactでページを作って、Firebase Hostingで公開しました。

今後について

  • 月額100円で広告を削除できるサブスクプランをリリース予定です。
  • レシピのブックマークやお買い物リストといった機能改善をしたら、Android版を開発しようかなと思ってます

Discussion