iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
生成式 AI

30 天 Vibe Coding:全端 × 機器學習的實作挑戰系列 第 4

Day 4|30 天 Vibe Coding:換手機就失憶,帳本一定要上雲端

  • 分享至 

  • xImage
  •  

昨天的 MVP 記帳 App 只能乖乖存在手機裡,一旦換機或重灌就 GG 斯密打
今天要讓它升級成「雲端同步版」:登入 Google 帳號 → 紀錄存到 Firebase Firestore → 不管換哪支 iPhone,登入後都能看到同一份資料
聽起來很難,但其實就是把 localStorage/UserDefaults → Firestore。再加上 Google Sign-In,把帳號綁起來


今日目標

  1. 使用者可以用 Google 登入
  2. 登入後,支出紀錄存到 Firestore,而不是 UserDefaults
  3. 換裝置或刪掉 App,只要重新登入 Google,紀錄就能回來

為什麼要用 Firebase?

寫 App 時,只靠本機存資料(UserDefaults / CoreData)有幾個限制:

  1. 換手機資料就沒了
  2. 沒辦法跨裝置同步
    沒有登入系統,如果你的app要分享給別人使用就需要有登入功能,不然別人都可以看到我的資料。但如果你只是要自用就可以不用做這個啦~
    這就是為什麼要用 Firebase。它是 Google 出的後端即服務(BaaS, Backend as a Service),幫你省去自己架伺服器、寫 API 的麻煩,直接提供:
  3. Firebase Auth:整合 Google / Apple / Email 登入
  4. Firestore:雲端 NoSQL 資料庫,支援即時同步
  5. Hosting / Storage / Functions:進階功能(檔案、後端程式、前端託管)
    對「30 天 Vibe Coding」這種 side project 來說,最大的優勢就是:省時間,不用自己維護後端,就能馬上做出「登入 + 資料同步」的 App

替代品有哪些?

  • Supabase:常被稱為 Firebase 開源替代品,底層用 PostgreSQL,支援即時 API、Auth,適合要關聯式資料庫的人
  • AWS Amplify:Amazon 出的類似服務,功能強大,但上手門檻比 Firebase 高一些
  • Appwrite:另一個開源 BaaS,支援自架,適合想要完全掌控後端的人
  • 自己寫後端(Node.js / Rails / Django)+ 自管資料庫:彈性最高,但超花時間,對 30 天挑戰來說顯然不實際

必須的設定流程

Firebase 設定流程

  1. 到 Firebase Console 建立一個專案
  2. 在專案裡新增 iOS App:
  • Bundle ID 一定要跟 Xcode 專案的設定完全一致
  • 下載 GoogleService-Info.plist,放到 Xcode 專案根目錄並加入 target
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998ztrKhsaVt1.png

https://ithelp.ithome.com.tw/upload/images/20250903/20140998QdIzsYuuB6.png

https://ithelp.ithome.com.tw/upload/images/20250903/201409989KBqqJ2o7O.png
3. 在 Xcode → File > Add Packages… → 輸入 https://github.com/firebase/firebase-ios-sdk,安裝需要的套件:

  • FirebaseAuth(Google 登入用)
  • FirebaseFirestore(雲端資料庫用)
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998zJRlytp67c.png

https://ithelp.ithome.com.tw/upload/images/20250903/20140998JsXvzJrmW2.png
4. 再加上 https://github.com/google/GoogleSignIn-iOS,勾選 GoogleSignIn
https://ithelp.ithome.com.tw/upload/images/20250903/20140998NlGzl2AgJU.png

https://ithelp.ithome.com.tw/upload/images/20250903/20140998emxOPUGSjR.png
5. 在 Xcode → Target → Info → URL Types,新增一筆:

  • Identifier 任意填寫
  • URL Schemes 貼上 GoogleService-Info.plist 裡的 REVERSED_CLIENT_ID
    (這一步漏掉的話會出現 invalid_client 錯誤)
  1. 回到 Firebase Console → Authentication → Sign-in method,啟用 Google 登入供應商
  2. 確認 Firebase 專案的 Bundle ID 與 Xcode 專案一致

Firestore 設定流程

  1. Firebase Console → Firestore Database → 建立資料庫
  2. 選擇 Standard edition(一般就夠用)
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998leBGIM3vbP.png
  3. 選擇資料庫位置(region 建議選靠近使用者,例如 asia-east1,建立後不能改)
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998MHo0m793wf.png
  4. 設定安全規則:
  • 測試階段可先用 Test mode(30 天內自動關閉)
  • 若要直接用 Production mode,需要自己設定 rules(例如只允許登入使用者存取自己的資料)
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998l3N86oOijJ.png

Google 登入流程

  1. 在 Firebase Console → Authentication → Sign-in method 啟用 Google
    https://ithelp.ithome.com.tw/upload/images/20250903/20140998cFDqEwzqbH.png
  2. 在 專案設定 → 支援電子郵件,選定開發者的支援信箱(不設定會報錯)
  3. 回到 Xcode,確保剛剛的 GoogleService-Info.plist 已經加入

給 Cursor 的 Prompt(僅供參考)

幫我把原本的 SwiftUI 記帳 App 升級成「Google 登入 + Firebase Firestore 儲存」。

=== 功能需求 ===
1. 使用者登入
- 在 App 啟動畫面提供「使用 Google 登入」按鈕。
- 登入後顯示主畫面(記帳功能)。
- 登出後回到登入畫面。

2. Firestore 儲存
- 登入後所有支出紀錄存放在 Firestore,文件結構:
  Collection: users/{userId}/expenses/{expenseId}
- 每筆紀錄欄位:id、amount、category、date。
- 新增/刪除/讀取都要即時更新(用 Firestore snapshot listener)。

3. UI
- 登入畫面:簡單顯示 App 名稱 + 「使用 Google 登入」按鈕。
- 主畫面:同昨天記帳 App,有輸入表單 + 清單 + 總支出。
- 新增/刪除紀錄後立即更新 Firestore。

4. 程式架構
- 使用 SwiftUI + Firebase SDK。
- App 啟動時檢查使用者登入狀態,若已登入直接進入主畫面。
- 定義 Expense 型別 & FirestoreService 類別,封裝 CRUD。
- 以 @StateObject 管理使用者狀態與紀錄。
- 資料同步靠 Firestore snapshot 監聽。

在 Xcode 開模擬器測試

選一台模擬器(例:iPhone 16 Pro)→ Cmd + R
第一次跑會先看到「登入畫面」,按 Google Sign-In(模擬器會跳瀏覽器登入)
登入成功 → 進到記帳主畫面
測試新增一筆紀錄,確認 Firestore Console 有新增文件


今日驗收 ✅

App 有登入畫面,能用 Google 登入/登出
登入後能新增/刪除紀錄,資料存進 Firestore
換模擬器或刪 App,重新登入 Google → 紀錄仍然存在
https://ithelp.ithome.com.tw/upload/images/20250903/201409986kdE4TuG7j.pnghttps://ithelp.ithome.com.tw/upload/images/20250903/20140998MtAxt9etVN.png
https://ithelp.ithome.com.tw/upload/images/20250904/20140998KRajNbq1Il.pnghttps://ithelp.ithome.com.tw/upload/images/20250904/20140998yeSd1gyNeM.png

我的程式碼放在這裡:2025ithome-ExpenseTracker


明日預告

Day 5 要繼續加強記帳 App:
做一個簡單的「統計圖表」(圓餅圖 or 長條圖)
分析不同類別的支出比例
這樣不只是清單,而是能一眼看出「我到底都花在吃上還是買衣服」

今天就把記帳 App 帶上雲端了 /images/emoticon/emoticon08.gif
之後就算手機容量爆炸,只要 Google 在,錢錢紀錄也在!我只是想知道自己錢花哪,結果搞得像在做 SaaS XD


上一篇
Day 3|30 天 Vibe Coding:記帳 App MVP
下一篇
Day 5|30 天 Vibe Coding:到底是固定支出還是我又亂花
系列文
30 天 Vibe Coding:全端 × 機器學習的實作挑戰5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言