早找展覽(TaiwanArtion)是一個專為台灣地區設計的藝術展覽資訊平台,採用 iOS 原生開發,結合 AI 智能推薦系統,提供便捷的展覽查詢、個人化推薦、收藏、評價和地圖導航功能。應用程式使用現代化的 MVVM 架構和響應式編程,並整合 Claude AI 和政府開放資料,為用戶帶來智能且流暢的使用體驗。
- 個人化推薦:基於 Claude AI 的智能推薦系統
- 自動資料更新:每日自動同步台灣政府開放資料
- 偏好學習:根據用戶喜好和收藏歷史推薦展覽
- 智能快取:24 小時推薦快取,確保流暢體驗
- 成本優化:批次處理和快取策略,控制運營成本
- 多維度展覽列表:熱門展覽、最新資訊、AI 推薦列表
- 智能搜尋:快速找到感興趣的展覽
- 進階篩選:依日期、地點、類別篩選
- 月曆視圖:自訂月曆組件,直觀查看展覽檔期
- 展覽詳情:完整的展覽資訊和高解析度圖片
- Email 登入/註冊:傳統帳號密碼登入
- Google 第三方登入:快速便捷
- Facebook 第三方登入:社交帳號整合
- Email 驗證:確保帳號安全
- 密碼重置:忘記密碼快速找回
- 展覽地點標記:在地圖上查看所有展覽位置
- 地標高亮:重要展覽館特別標示
- 導航整合:一鍵導航到展覽地點
- 收藏展覽:保存喜愛的展覽
- 收藏新聞:收藏藝術相關新聞
- 搜尋歷史:快速查看過往搜尋
- 個人資料管理:編輯個人資訊
- 通知中心:接收展覽提醒
- 星級評分:為參觀過的展覽評分
- 多維度評價:
- 內容豐富度
- 設備品質
- 地理位置
- 價格合理性
- 服務品質
| 技術 | 版本 | 用途 |
|---|---|---|
| Swift | 5.0+ | 開發語言 |
| iOS | 13.0+ | 目標平台 |
| Xcode | 14.0+ | 開發工具 |
- MVVM (Model-View-ViewModel): 業務邏輯與 UI 完全分離
- RxSwift: 響應式編程,優雅的事件處理
- Repository Pattern: 統一的數據存取介面
- SnapKit 5.7.1: 聲明式 Auto Layout
- Kingfisher 7.12.0: 高效圖片緩存和下載
- 全域配置:100MB 記憶體快取、500MB 磁碟快取
- 自動降採樣和背景解碼優化
-
Supabase (規劃中):
- PostgreSQL 數據庫
- Row Level Security
- Vector Search (AI 推薦)
- Real-time subscriptions
-
Firebase 11.15.0 (目前使用):
- FirebaseCore: 核心服務
- FirebaseAnalytics: 數據分析
- FirebaseAuth: 身份認證
- FirebaseFirestore: NoSQL 雲端數據庫
- 支援分頁載入和查詢優化
-
Claude 3 Haiku API:
- 展覽資料標準化
- 智能推薦生成
- 內容生成與優化
-
台灣政府開放資料平台:
- 文化部展覽活動資訊
- 各縣市藝文活動
- 每日自動同步
-
Google Places API:
- 展覽館地點資訊
- 地址和座標補充
- RxSwift 6.9.0: 核心響應式庫
- RxCocoa 6.9.0: UIKit 擴展
- RxRelay 6.9.0: Subject 包裝
- RxDataSources 5.0.0: TableView/CollectionView 數據源
- RxGesture 4.0.4: 手勢識別擴展
- Google Sign-In 8.0.0: Google 帳號登入
- Facebook SDK 17.4.0: Facebook 帳號登入
- FBSDKCoreKit
- FBSDKLoginKit
TaiwanArtion/
├── ViewController/ (29 個檔案) - 頁面控制器
│ ├── LoginViewController.swift
│ ├── RegisterViewController.swift
│ ├── HomeViewController.swift
│ ├── ExhibitionDetailViewController.swift
│ └── ...
│
├── ViewModel/ (18 個檔案) - 業務邏輯層
│ ├── LoginViewModel.swift
│ ├── ExhibitionViewModel.swift
│ └── ...
│
├── View/ (54 個檔案) - 自訂視圖組件
│ ├── ExhibitionCardView.swift
│ ├── CalendarView.swift
│ └── ...
│
├── Model/ (5 個檔案) - 數據模型
│ ├── Exhibition.swift
│ ├── User.swift
│ └── ...
│
├── TableViewCell/ (38 個檔案) - TableView Cell
├── CollectionViewCell/ (24 個檔案) - CollectionView Cell
│
├── Firebase/ (2 個檔案) - Firebase 整合
│ ├── FirebaseAuth.swift
│ └── FirebaseDatabase.swift
│
├── Map/ (4 個檔案) - 地圖功能
├── Alerts/ (4 個檔案) - 彈窗組件
├── CustomObject/ (7 個檔案) - 自訂月曆組件
├── UserFeature/ (4 個檔案) - 用戶管理
├── Extension/ (3 個檔案) - 擴展
├── Enum/ (5 個檔案) - 枚舉定義
└── Protocol/ (1 個檔案) - 協議定義
- macOS 12.0+
- Xcode 14.0+
- Swift 5.0+
- CocoaPods 1.12.1+
- Clone 專案
git clone https://github.com/yourusername/TaiwanArtionV1.git
cd TaiwanArtionV1- 安裝依賴
pod install- 開啟專案
open TaiwanArtion.xcworkspace- 配置 Firebase
- 在 Firebase Console 創建專案
- 下載
GoogleService-Info.plist - 將檔案放到專案目錄(不要提交到 Git)
- 更新
.gitignore確保敏感檔案不被追蹤
- 配置第三方登入
Google Sign-In:
- 在 Firebase Console 啟用 Google 登入
- 配置 OAuth 2.0 Client ID
Facebook Login:
- 在 Facebook 開發者平台 創建應用
- 取得 App ID 和 Client Token
- 在 Info.plist 中配置(使用環境變數)
- 運行專案
- 選擇目標設備或模擬器
- 按
⌘ + R運行
# 使用 Xcode 或命令列
xcodebuild -workspace TaiwanArtion.xcworkspace \
-scheme TaiwanArtion \
-configuration Debug \
-sdk iphonesimulatorxcodebuild -workspace TaiwanArtion.xcworkspace \
-scheme TaiwanArtion \
-configuration Release \
-sdk iphoneos \
archive重要: 本專案正在導入 AI 智能推薦系統,預計 12-15 個工作天完成。
- 🤖 AI 資料架構設計 - AI 推薦系統完整設計
- 💰 成本分析 - Supabase + Claude AI 成本評估
- 📋 實作規格書 - 完整的 Phase 和 Task 規劃
- 📊 專案狀態 - 當前專案狀態
- 🚀 上線行動計劃 - 2週上線時間表
| Phase | 工期 | 狀態 | 說明 |
|---|---|---|---|
| Phase A: 安全性修復 | 2天 | ⏸️ 待開始 | KeychainManager、環境變數配置 |
| Phase B: Supabase 建設 | 3天 | ⏸️ 待開始 | 資料表、iOS SDK 整合 |
| Phase C: 資料源整合 | 3天 | ⏸️ 待開始 | 政府API、Google Places API |
| Phase D: AI 推薦引擎 | 3天 | ⏸️ 待開始 | Claude API、推薦快取系統 |
| Phase E: 省錢優化 | 2天 | ⏸️ 待開始 | 批次處理、成本監控 |
| Phase F: 測試與上線 | 2天 | ⏸️ 待開始 | 完整測試、效能優化 |
預估完成: 2025-12-13 預估成本: $2/月 (測試) → $35/月 (1000用戶)
| 階段 | 狀態 | 說明 |
|---|---|---|
| Phase 2: 代碼清理 | ✅ 已完成 | 替換 93 處 print() 為 AppLogger |
| Phase 4: 依賴更新 | ✅ 已完成 | Firebase 11.x、RxSwift 6.9、Kingfisher 7.x |
| Phase 5: 效能優化 | ✅ 已完成 | Firebase 分頁、Kingfisher 配置、記憶體優化 |
| Phase 6: 測試與文檔 | ✅ 已完成 | 專案文檔完整建立 |
- ✅ 更新 Firebase SDK 至 11.15.0
- ✅ 更新 RxSwift 生態系至 6.9.0
- ✅ 更新 Kingfisher 至 7.12.0
- ✅ 更新 Google Sign-In 至 8.0.0
- ✅ 更新 Facebook SDK 至 17.4.0
- ✅ 修復所有
import Firebase改為import FirebaseCore
- ✅ Firebase 查詢優化
getRandomDocuments()使用 limit 查詢- 實作分頁載入
getPaginatedDocuments() - 添加 AppLogger 性能追蹤
- ✅ Kingfisher 全域配置
- 記憶體快取: 100 MB
- 磁碟快取: 500 MB
- 快取過期: 7 天
- ✅ 修復 RxSwift 記憶體洩漏
- 5 處 closure 記憶體洩漏修復
- 添加
[weak self]防止 retain cycle
詳細計劃請參考:
// ViewController
class ExhibitionDetailViewController: UIViewController { }
// ViewModel
class ExhibitionDetailViewModel { }
// View
class ExhibitionCardView: UIView { }
// Model
struct Exhibition: Codable { }// 避免記憶體洩漏
button.rx.tap
.subscribe(onNext: { [weak self] in
self?.handleButtonTap()
})
.disposed(by: disposeBag)
// 使用 Driver 確保主線程
viewModel.exhibitions
.asDriver(onErrorJustReturn: [])
.drive(tableView.rx.items(cellIdentifier: "cell")) { index, model, cell in
// 配置 cell
}
.disposed(by: disposeBag)# 運行所有測試
xcodebuild test -workspace TaiwanArtion.xcworkspace \
-scheme TaiwanArtion \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 14'
# 使用 Xcode
⌘ + U目標測試覆蓋率:
- ViewModel: 70%+
- Repository: 60%+
- Utility: 80%+
main- 穩定版本develop- 開發版本feature/*- 功能分支bugfix/*- Bug 修復分支
[類型] 簡短描述
詳細說明(可選)
類型:
- feat: 新功能
- fix: Bug 修復
- docs: 文檔更新
- style: 代碼格式調整
- refactor: 代碼重構
- test: 測試相關
- chore: 建構/工具變更
- Fork 專案
- 創建功能分支
- 提交變更
- 推送到分支
- 創建 Pull Request
- 等待代碼審查
本專案為私有專案,未經授權不得使用、複製或散佈。
- 專案維護者: 開發團隊
- 問題回報: GitHub Issues
- 文檔更新: Pull Request
Built with ❤️ for Taiwan's Art Community
讓藝術展覽資訊觸手可及