Claude Code + MCP 协作iOS 应用程序开发模板
Claude Code 和MCP(Model Context Protocol)利用服务器,面向个人开发者的iOS 是应用程序开发模板。
特徴
- MVVM + Repository 模式 - SwiftUI 优化的体系结构
- MCP 服务器优化 -在节省上下文标记的同时提供所需的功能
- 斜线命令 -轻松添加屏幕、运行测试等
- GitHub操作CI -拉式请求自动测试
必要环境
- macOS 14+(索诺玛)
- Xcode 15+
- Node.js 18+
- 克劳德代码CLI
快速启动
1.设置模板
# このテンプレートをコピー
git clone my-ios-app
cd my-ios-app
# セットアップスクリプトを実行
./scripts/setup.sh MyAppName2.设置环境变量
设置脚本 /Users/admin/Documents/key/ 中所述修改相应参数的值。
自动装入的键:
GITHUB_PAT_key.txt→ GITHUB令牌Brave Search API Key 3.txt→ 制动_API_KEYanthropic_api_key.txt→ ANTHROPIC_API_键OPENAI_API_KEY.txt→ OPENAI_API密钥
手动重新生成关键帧:
./scripts/generate-env-mcp.shSupabase 的设置(后端协作时)
⚠️ 重要: Supabase关键点是由于安全原因无法自动加载。 每个项目都有自己的Supabase请使用项目。
设定手顺:
- Supabase 在中创建新项目
- Project Settings → API 从URL获取密钥
.env.mcp编辑并设置关键帧:
# .env.mcp を開いて以下の行のコメントを解除し、値を設定
SUPABASE_URL=https://your-project-id.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.your_key
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.your_key为什么需要手动设置?
- 防止不同项目之间的数据污染
- 错误地将其他项目的DB排除连接到的风险
- 安全最佳做法
将环境变量导入到当前壳中时:
source ./scripts/load-keys.sh3. Claude Code 启动
claude4.构建项目
Claude Code 其中:
/build目录配置
my-ios-app/
├── .claude/ # Claude Code 設定
│ └── commands/ # スラッシュコマンド
├── App/ # Xcode プロジェクト
│ ├── Sources/
│ │ ├── App/ # エントリーポイント
│ │ ├── Features/ # 機能別モジュール
│ │ │ ├── Home/
│ │ │ └── Settings/
│ │ └── Core/ # 共通コンポーネント
│ │ ├── Models/
│ │ ├── Repositories/
│ │ └── Extensions/
│ └── Tests/ # ユニットテスト
├── mcp-config/ # MCP 設定
│ └── profiles/ # minimal / standard / full
├── scripts/ # ユーティリティスクリプト
└── .github/workflows/ # CI/CDMCP 配置文件
提供了三个配置文件以节省上下文标记:
| 配置文件|令牌消耗|包含MCP | 用途 | ||
|---|---|---|---|
| 最小 | ~800 | XcodeBuildMCP | 最高速度。仅构建测试 |
| 标准 | ~2,600 | + GitHub, Context7 | 推奨。日常开発に最适 |
| 满的 | ~4,500 | + Supabase, Brave Search | 后端协作时 |
切换配置文件
./scripts/switch-mcp-profile.sh minimal # 最小構成
./scripts/switch-mcp-profile.sh standard # 標準構成(推奨)
./scripts/switch-mcp-profile.sh full # フル構成切换后Claude Code 中所述修改相应参数的值。
斜线命令
|命令|说明| |---------|------| | /add-screen ProfileScreen 添加新屏幕(View+ViewModel) | /add-feature Authentication |添加新功能模块| | /build 构建项目 | /build release 发布版本 | /run-tests 执行单元测试 | /lint | SwiftLint 代码质量检查
典型工作流
添加新屏幕
/add-screen Profile这将生成以下文件:
App/Sources/Features/Profile/ProfileView.swiftApp/Sources/Features/Profile/ProfileViewModel.swiftApp/Tests/ProfileViewModelTests.swift
API 添加协作
- 定义模型
// Core/Models/User.swift
struct User: Codable, Identifiable {
let id: String
let name: String
let email: String
}- Repository 创建
// Core/Repositories/UserRepository.swift
protocol UserRepositoryProtocol {
func fetchCurrentUser() async throws -> User
}- ViewModel 使用
@Observable
class ProfileViewModel {
private let repository: UserRepositoryProtocol
func loadUser() async {
user = try? await repository.fetchCurrentUser()
}
}后端协作
此模板包含 Supabase Swift SDK 对较大场景进行渲染期间已观察到该故障。
步骤1:设置环境变量
.env.mcp 的Supabase 添加设置:
SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=eyJhbGci...第2步:Supabase 创建表格
CREATE TABLE items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title TEXT NOT NULL,
subtitle TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Row Level Security を有効化
ALTER TABLE items ENABLE ROW LEVEL SECURITY;第3步:SupabaseItemRepository 使用
// ItemRepository から SupabaseItemRepository に切り替え
let repository = SupabaseItemRepository()
let items = try await repository.fetchItems()文件配置
文件/角色 |---------|------| | SupabaseService.swift | Supabase 客户机单字节 | SupabaseItemRepository.swift | Supabase 使用Item CRUD 操作
Info.plist 中的设置(可选)
代替环境变量Info.plist 可配置:
SUPABASE_URL
https://xxxxx.supabase.co
SUPABASE_ANON_KEY
$(SUPABASE_ANON_KEY)注意事项
- ⚠️ Service Role Key 仅在服务器端使用
- 在客户端应用程序中 匿名密钥 请使用
- Row Level Security (RLS) 必须启用
实时同步
可以在多个设备之间实时同步数据。
第1步:Supabase 启用实时
Supabase 在仪表板上:
- Database → Replication 移到
items表格Realtime 启用
第2步:RealtimeHomeView 使用
// ContentView.swift で RealtimeHomeView を使用
TabView {
RealtimeHomeView() // リアルタイム対応版
.tabItem {
Label("Home", systemImage: "house")
}
}文件配置
文件/角色 |---------|------| | RealtimeService.swift | Realtime 购読管理| | RealtimeItemRepository.swift | CRUD + 实时更新 | RealtimeHomeViewModel.swift 实时响应ViewModel | | RealtimeHomeView.swift 带连接状态显示UI |
机能
| 机能 | 说明 |
|---|---|
| 自动同期 自动接收其他客户端的更改 | |
| 接続状態表示 用绿色/红色指示器显示连接状态 | |
| 楽観的更新 立即,立即UI更新,失败时回滚 | |
| 再接続 可以在断开连接时手动重新连接 |
使用例
// ViewModelでリアルタイムを開始
await viewModel.startRealtime()
// アイテム追加(自動で他のクライアントにも反映)
viewModel.addItem()
// リアルタイムを停止
await viewModel.stopRealtime()社交登录(Apple/Google)
Apple ID 啊Google 支持帐户登录。
Sign in with Apple 设置
- 苹果开发者控制台:
- Identifiers → App IDs で Sign in with Apple を有効化 - Keys 的Sign in with Apple Key 创建
- Supabase仪表板:
- Authentication → Providers → Apple を有効化 - Service ID 和Secret Key 的规格化距离的幂函数
- 项目:
- Signing & Capabilities → Sign in with Apple を追加 - MyApp.entitlements 自动生成
Sign in with Google 设置
- 谷歌云控制台:
- OAuth 2.0 Client ID 创建 - Authorized redirect URIs 的 https://your-project.supabase.co/auth/v1/callback 添加
- Supabase仪表板:
- Authentication → Providers → Google を有効化 - Client ID 和Client Secret 的规格化距离的幂函数
- URL 方案:
- project.yml 的 myapp:// 已配置方案
文件配置
文件/角色 |---------|------| | SocialAuthService.swift | Apple/Google认证处理| | SocialAuthButtons.swift 社交登录按钮UI | | MyApp.entitlements | Sign in with Apple権限 |
使用例
// Sign in with Apple
try await SocialAuthService.shared.signInWithApple()
// Sign in with Google
try await SocialAuthService.shared.signInWithGoogle()
// OAuth コールバック処理(AppMain.swiftで自動処理)
try await SocialAuthService.shared.handleOAuthCallback(url)LLM 活用提示
有效提示示例
机能追加
Settings 画面に「通知設定」セクションを追加してください。
- プッシュ通知の ON/OFF トグル
- 通知頻度の選択(毎日/毎週/なし)
MVVM パターンに従い、テストも追加してください。重构
HomeViewModel を Repository パターンを使うようにリファクタリングしてください。
現在は直接 URLSession を呼んでいます。
ItemRepositoryProtocol を作成して、DI できるようにしてください。调试
この SwiftUI View が更新されません。
データは変更されているはずですが、UI に反映されません。
コードを分析して問題を特定してください。
[コードを貼り付け]CI/CD(GitHub操作)
在拉式请求时自动执行构建测试。
工作流程
|作业|内容|执行时机| |-------|------|--------------| | 构建和测试 |构建+40测试运行|Push/PR | | SwiftLint |代码质量检查|Push/PR | | 代码质量 | TODO/FIXME検出、统计|Push/PR | | 发行的组建 | Release构建确认|PR仅限于
自动更新(Dependabot)
每周星期一更新依赖关系PR将自动创建:
- Swift Package Manager 包装
- GitHub Actions 版本
徽章
在本地CI再现
# XcodeGenでプロジェクト生成
cd App
xcodegen generate
# ビルド
xcodebuild build \
-project MyApp.xcodeproj \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15' \
CODE_SIGNING_ALLOWED=NO
# テスト実行
xcodebuild test \
-project MyApp.xcodeproj \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15' \
CODE_SIGNING_ALLOWED=NO
# SwiftLint
swiftlint lint --config .swiftlint.yml故障排除
生成构建错误
# Derived Data をクリア
rm -rf ~/Library/Developer/Xcode/DerivedData
# クリーンビルド
/build cleanMCP 未检测到服务器
# MCP 設定を再適用
./mcp-config/setup-mcp.sh standard
# Claude Code を再起動模拟器未启动
# シミュレータをリセット
xcrun simctl erase all
# 利用可能なシミュレータを確認
xcrun simctl list devices参考链接
许可证
MIT许可证
