一款温暖的天气关怀 App,根据天气为你生成贴心的问候文案。
- 🌦️ 智能天气感知: 使用 WeatherKit 获取实时天气
- 💬 AI 关怀文案: 基于 Gemini 2.5 生成个性化关怀文案
- 🎨 天气主题: 7 种天气类型对应不同视觉主题
- ❤️ 收藏功能: 保存喜欢的文案
- 📤 一键分享: 复制或分享给关心的人
- 📸 卡片保存: 将精美卡片保存到相册
- SwiftUI + SwiftData
- WeatherKit
- Supabase Swift SDK
- iOS 17+
- Supabase Edge Functions
- Supabase Auth (Anonymous)
- Google Gemini 2.5 API
- Xcode 15+
- iOS 17+ 设备或模拟器
- Apple Developer Program 账号(WeatherKit 需要)
- Supabase 账号
- Google AI Studio 账号(Gemini API)
- 创建 Supabase 项目
- 启用 Anonymous Auth
- 部署 Edge Function
- 配置 Secrets
- 打开
WeatherWhisper.xcodeproj - 编辑
WeatherWhisper/App/Secrets.swift:
enum Secrets {
static let supabaseURL = "https://your-project.supabase.co"
static let supabaseAnonKey = "your-anon-key"
static let useRealAPI = true
}- 在 Xcode 中配置 Team 和 Signing
- 运行项目
默认开启 Mock 模式,无需配置即可开发测试:
// AppConfig.swift
static let useMockData = true // Mock 模式WeatherWhisper/
├── App/ # 应用入口和配置
├── Models/ # 数据模型 (SwiftData)
├── Services/ # 服务层
│ ├── NetworkMonitor # 网络监控
│ ├── WeatherProvider # 天气数据
│ ├── CardsAPIClient # API 客户端
│ └── SupabaseSessionManager # 会话管理
├── ViewModels/ # 视图模型
├── Views/ # UI 视图
│ ├── Home/ # 首页
│ ├── Detail/ # 详情页
│ ├── Favorites/ # 收藏页
│ └── Settings/ # 设置页
├── Theme/ # 主题配色
└── Utils/ # 工具类
supabase/
├── functions/
│ └── cards-generate/ # Edge Function
├── config.toml # 本地配置
└── README.md # 配置指南
Home 页面实现 7 状态状态机:
bootstrappingSession- 初始化会话emptyRecipient- 无关怀对象loadingWeather- 加载天气noNetwork- 无网络loadingCards- 生成卡片ready- 就绪llmError- 生成失败
生成关怀文案。
请求头:
Authorization: Bearer {access_token}X-Device-Id: {uuid}X-Request-Id: {uuid}
请求体:
{
"requestId": "uuid",
"locale": "zh-CN",
"cardsCount": 5,
"recipient": { "nickname": "小明", "relationType": "friend" },
"tone": "gentle",
"city": { "name": "北京", "lat": 39.9, "lon": 116.4 },
"weather": { "triggerType": "rain", ... },
"constraints": { "maxCharsPerCard": 80, ... }
}响应:
{
"groupId": "uuid",
"triggerType": "rain",
"cards": [{ "cardId": "uuid", "text": "...", "tone": "gentle", "triggerType": "rain", "source": "llm" }],
"meta": { "model": "gemini-2.5", "latencyMs": 1234, "cached": false }
}- 在
TriggerType枚举中添加新类型 - 在
TriggerTheme中添加对应颜色 - 在
TriggerResolver中添加映射规则
- 在
RelationType枚举中添加新类型 - 更新 Edge Function 中的 Prompt
如需帮助或反馈问题,请查看 SUPPORT.md。
MIT License