Features: - Camera preview with ring light effect - Adjustable ring size with slider - Light color presets (white, warm cream, ice blue, soft pink, warm amber, cool lavender) - Light intensity control (opacity) - Front flash (hides preview during capture) - True mirror mode - Skin smoothing toggle - Grid overlay (rule of thirds) - Self-timer options - Photo and video capture modes - iCloud sync for settings across devices Architecture: - SwiftUI with @Observable view models - Protocol-oriented design (RingLightConfigurable, CaptureControlling) - Bedrock design system integration - CloudSyncManager for iCloud settings sync - RevenueCat for premium features
68 lines
3.4 KiB
Markdown
68 lines
3.4 KiB
Markdown
# AI_Implementation.md
|
|
|
|
## How This App Was Architected & Built
|
|
|
|
This project was developed following strict senior-level iOS engineering standards, with guidance from an AI assistant (Grok) acting as a Senior iOS Engineer specializing in SwiftUI and modern Apple frameworks.
|
|
|
|
### Guiding Principles (from AGENTS.md)
|
|
- **Protocol-Oriented Programming (POP) first**: All shared capabilities defined via protocols before concrete types
|
|
- **MVVM-lite**: Views are "dumb" — all logic lives in `@Observable` view models
|
|
- **No third-party dependencies**: Pure Apple frameworks only (SwiftUI, AVFoundation, StoreKit 2, CoreImage)
|
|
- **No magic numbers**: All dimensions, opacities, durations from centralized `Design` constants
|
|
- **Full accessibility**: Dynamic Type, VoiceOver labels/hints/traits/announcements
|
|
- **Modern Swift & SwiftUI**: Swift 6 concurrency, `@MainActor`, `foregroundStyle`, `clipShape(.rect)`, `NavigationStack`
|
|
- **Testable & reusable design**: Protocols enable mocking and future SPM package extraction
|
|
|
|
### Architecture Overview
|
|
|
|
Shared/
|
|
├── DesignConstants.swift → Semantic design tokens (spacing, radii, sizes, etc.)
|
|
├── Color+Extensions.swift → Ring light color presets
|
|
├── Protocols/
|
|
│ ├── RingLightConfigurable.swift → Border, color, brightness, mirror, smoothing
|
|
│ ├── CaptureControlling.swift → Timer, grid, zoom, capture mode
|
|
│ └── PremiumManaging.swift → Subscription state & purchase handling
|
|
└── Premium/
|
|
└── PremiumManager.swift → Native StoreKit 2 implementation
|
|
Features/
|
|
├── Camera/ → Main UI, preview, capture logic
|
|
├── Settings/ → Configuration screens
|
|
└── Paywall/ → Pro subscription flow
|
|
|
|
|
|
### Key Implementation Decisions
|
|
|
|
1. **Ring Light Effect**
|
|
- Achieved by coloring the safe area background and leaving a centered rectangular window for camera preview
|
|
- Border width controlled via user setting
|
|
- Gradient support added for directional "portrait lighting"
|
|
|
|
2. **Camera System**
|
|
- `AVCaptureSession` with front camera default
|
|
- `UIViewRepresentable` wrapper for preview with pinch-to-zoom
|
|
- Video data output delegate for future real-time filters (skin smoothing placeholder)
|
|
|
|
3. **Capture Enhancements**
|
|
- Timer with async countdown and accessibility announcements
|
|
- Volume button observation via KVO on `AVAudioSession.outputVolume`
|
|
- Flash burst: temporarily sets brightness to 1.0 on capture
|
|
|
|
4. **Freemium Model**
|
|
- Built with pure StoreKit 2 (no RevenueCat)
|
|
- `PremiumManaging` protocol enables easy testing/mocking
|
|
- Clean paywall with benefit list and native purchase flow
|
|
|
|
5. **Reusability Focus**
|
|
- All shared logic extracted to protocols
|
|
- Ready for future extraction into SPM packages:
|
|
- `SelfieCameraKit`
|
|
- `SelfieRingLightKit`
|
|
- `SelfiePremiumKit`
|
|
|
|
### Development Process
|
|
- Iterative feature additions guided by competitive analysis of top App Store selfie apps
|
|
- Each new capability (timer, boomerang, gradient, subscriptions) added with protocol-first design
|
|
- Strict adherence to no magic numbers, full accessibility, and clean separation
|
|
- Final structure optimized for maintainability and future library extraction
|
|
|
|
This app demonstrates production-quality SwiftUI architecture while delivering a delightful, competitive user experience. |