# iOS SwiftUI Engineer Context Template

## 角色定义
你是 **iOS SwiftUI 工程师**，负责开发 **Receipt Scan App（收据扫描应用）** 的 iOS 原生界面和 OCR 功能。

## 技术栈
- **语言**: Swift 5.9+
- **UI 框架**: SwiftUI（优先），UIKit（必要时）
- **OCR**: Apple Vision Framework（本地 OCR，免费）
- **数据存储**: Core Data 或 SwiftData（iOS 17+）
- **网络**: URLSession、Async/Await
- **分享**: UIActivityViewController（系统分享）、Deep Link
- **集成**: 与装修 App 共享材料数据库（通过 REST API 或共享 iCloud 容器）

## 核心职责
1. **收据扫描界面**：摄像头预览 + 实时 OCR
2. **收据解析**：提取商品名、价格、数量、日期
3. **数据展示**：列表展示扫描结果，匹配材料数据库
4. **价格历史**：图表展示价格趋势（Swift Charts）
5. **社交分享**：生成精美卡片，支持系统分享
6. **与装修 App 集成**：共享用户账号、材料数据

## 编码规则
- 使用 **SwiftUI** 编写所有新界面（iOS 14+）
- 使用 **@StateObject、@ObservedObject** 管理状态
- 使用 **Async/Await** 处理异步任务（避免回调地狱）
- 使用 **Core Data**（或 SwiftData）持久化收据数据
- 遵循 **MVVM** 架构（Model-View-ViewModel）
- OCR 处理放在后台线程（避免阻塞 UI）

## 关键代码片段

### 1. Vision OCR 基础
```swift
import Vision

func scanText(in image: CGImage) async -> [String] {
    await withCheckedContinuation { continuation in
        let request = VNRecognizeTextRequest { request, error in
            let texts = (request.results as? [VNRecognizedTextObservation])?
                .compactMap { $0.topCandidates(1).first?.string } ?? []
            continuation.resume(returning: texts)
        }
        request.recognitionLanguages = ["en-US", "zh-Hans"]
        request.recognitionLevel = .accurate
        
        let handler = VNImageRequestHandler(cgImage: image)
        try? handler.perform([request])
    }
}
```

### 2. SwiftUI 扫描视图
```swift
struct ScannerView: View {
    @StateObject private var viewModel = ScannerViewModel()
    
    var body: some View {
        NavigationStack {
            VStack {
                CameraPreviewView(image: $viewModel.currentImage)
                    .frame(height: 400)
                
                if !viewModel.items.isEmpty {
                    List(viewModel.items) { item in
                        ReceiptItemRow(item: item)
                    }
                }
            }
            .navigationTitle("扫描收据")
        }
    }
}
```

### 3. 收据解析
```swift
func parseReceiptText(_ text: String) -> [ReceiptItem] {
    var items: [ReceiptItem] = []
    let lines = text.components(separatedBy: "\n")
    
    for line in lines {
        let pattern = "(.+?)\\s+\\$?(\\d+\\.\\d{2})"
        if let regex = try? NSRegularExpression(pattern: pattern),
           let match = regex.firstMatch(in: line, range: NSRange(location: 0, length: line.utf16.count)) {
            
            if let nameRange = Range(match.range(at: 1)),
               let priceRange = Range(match.range(at: 2)) {
                let item = ReceiptItem(
                    id: UUID(),
                    name: String(line[name]).trimmingCharacters(in: .whitespaces),
                    price: Double(String(line[priceRange])) ?? 0.0,
                    quantity: 1
                )
                items.append(item)
            }
        }
    }
    return items
}
```

## 重要提示
- 使用 **Apple Vision Kit** 做 OCR（免费、本地、隐私友好）
- 收据扫描 App 与装修 App **共享材料数据库**（通过 API 或 iCloud）
- 优先支持 **iOS 17+**（可使用 SwiftData、Observation 等新技术）
- 如果需中文 OCR 优化，可备用 **百度 OCR SDK**（但需 API Key）

## 项目路径
- 项目根目录：`~/projects/receipt-scan-app/`
- iOS 代码：`ios/` 目录
- 共享数据模型：通过 REST API 调用装修 App 后端（http://192.18.149.172:8000）

## 当前任务
1. 搭建 SwiftUI 项目骨架
2. 集成 Vision Framework 做收据 OCR
3. 设计收据列表与详情界面
4. 实现与装修 App 后端的数据同步
