220 lines
8.7 KiB
Markdown
220 lines
8.7 KiB
Markdown
# SelfieCam
|
||
|
||
A modern, professional-grade selfie camera app for iOS featuring a customizable ring light overlay, premium camera controls, and beautiful branding. Built entirely with SwiftUI, Swift 6, and the MijickCamera framework.
|
||
|
||
Perfect for low-light selfies, content creation, video calls, makeup application, or professional portrait lighting on the go.
|
||
|
||
## Features
|
||
|
||
### Core Camera & Lighting
|
||
- Full-screen camera preview with front/back camera switching
|
||
- Configurable **screen-based ring light** with adjustable border thickness (10-120pt)
|
||
- Multiple color temperature presets (Pure White, Warm Cream, Ice Blue, Soft Pink, Warm Amber, Cool Lavender)
|
||
- **Ring light brightness control** with adjustable opacity
|
||
- **Flash modes**: Off, On, Auto
|
||
- **Front Flash**: Uses screen brightness for front camera flash effect
|
||
- Real-time camera preview with smooth performance
|
||
|
||
### Capture
|
||
- **Photo capture** with high-quality output
|
||
- Self-timer with 3-second (free), 5-second, and 10-second (Premium) options
|
||
- Pinch-to-zoom gesture support
|
||
- Rule-of-thirds grid overlay (toggleable)
|
||
- Post-capture preview with share functionality
|
||
- **Camera Control button** support (iPhone 16+): Full press to capture, light press to lock focus/exposure
|
||
- **Hardware shutter**: Volume buttons trigger capture
|
||
|
||
### Premium Features (Freemium Model)
|
||
- **Custom ring light colors** with full color picker
|
||
- **Premium color presets**: Ice Blue, Soft Pink, Warm Amber, Cool Lavender
|
||
- **Flash Sync**: Match flash color with ring light color
|
||
- **HDR Mode**: High Dynamic Range photo capture
|
||
- **High Quality Photos**: Maximum resolution output
|
||
- **True Mirror Mode**: Horizontally flipped preview like a real mirror
|
||
- **Skin Smoothing**: Real-time subtle skin smoothing filter
|
||
- **Center Stage**: Automatic subject tracking/centering
|
||
- **Extended Timers**: 5-second and 10-second self-timer options
|
||
- Ad-free experience
|
||
|
||
### iCloud Sync
|
||
- Automatic settings synchronization across all devices
|
||
- Real-time sync status with last sync timestamp
|
||
- Manual "Sync Now" option
|
||
- Available to all users (free and premium)
|
||
|
||
### Branding & Launch
|
||
- **Animated launch screen** with customizable design
|
||
- **App icon generator** for creating consistent branding
|
||
- Seamless transition from launch to main app
|
||
- Configurable colors, patterns, and layout styles
|
||
|
||
### Accessibility & Polish
|
||
- Full VoiceOver support with meaningful labels, hints, and announcements
|
||
- Dynamic Type and ScaledMetric for readable text at all sizes
|
||
- String Catalog localization ready (`.xcstrings`)
|
||
- Consistent design system using Bedrock framework
|
||
- Settings cards follow Bedrock’s row contract (`SettingsCard` + `SettingsCardRow` + `SettingsDivider`) for consistent insets and row rhythm
|
||
- Prevents screen dimming during camera use
|
||
|
||
## Screenshots
|
||
*(Add App Store-ready screenshots here once built)*
|
||
|
||
## Requirements
|
||
- iOS 18.0 or later
|
||
- Xcode 16+
|
||
- Swift 6 language mode
|
||
|
||
## Dependencies
|
||
- **[MijickCamera](https://github.com/Mijick/Camera)** - Modern SwiftUI camera framework
|
||
- **[RevenueCat](https://www.revenuecat.com)** - Subscription management
|
||
- **Bedrock** - Internal design system and UI components (local package)
|
||
|
||
## Setup
|
||
|
||
### 1. Clone the Repository
|
||
```bash
|
||
git clone https://github.com/yourusername/SelfieCam.git
|
||
cd SelfieCam
|
||
```
|
||
|
||
### 2. Configure API Keys
|
||
|
||
This project uses `.xcconfig` files to securely manage API keys. **Never commit your actual API keys to version control.**
|
||
|
||
1. Copy the template file:
|
||
```bash
|
||
cp SelfieCam/Configuration/Secrets.xcconfig.template SelfieCam/Configuration/Secrets.xcconfig
|
||
```
|
||
|
||
2. Edit `Secrets.xcconfig` with your actual API key:
|
||
```
|
||
REVENUECAT_API_KEY = appl_your_actual_api_key_here
|
||
```
|
||
|
||
3. The `Secrets.xcconfig` file is gitignored and will never be committed.
|
||
|
||
### 3. RevenueCat Setup
|
||
|
||
1. Create an account at [RevenueCat](https://www.revenuecat.com)
|
||
2. Create a new project and connect it to App Store Connect
|
||
3. Create products in App Store Connect (e.g., `com.yourapp.pro.monthly`, `com.yourapp.pro.yearly`)
|
||
4. Configure the products in RevenueCat dashboard
|
||
5. Create an entitlement named `pro`
|
||
6. Create an offering with your subscription packages
|
||
7. Copy your **Public App-Specific API Key** to `Secrets.xcconfig`
|
||
|
||
### 4. Debug Premium Mode
|
||
|
||
To test premium features without a real subscription during development:
|
||
|
||
1. Edit Scheme (⌘⇧<) → Run → Arguments
|
||
2. Add Environment Variable:
|
||
- **Name:** `ENABLE_DEBUG_PREMIUM`
|
||
- **Value:** `1`
|
||
|
||
This unlocks all premium features in DEBUG builds only.
|
||
|
||
### 5. Branding Configuration
|
||
|
||
The app uses the Bedrock branding system for launch screen and app icon:
|
||
|
||
1. **BrandingConfig.swift** defines colors, icons, and launch screen settings
|
||
2. **Launch Screen Background Color** is set in Assets.xcassets and project build settings
|
||
3. **Icon Generator** available in Settings → Debug (DEBUG builds only)
|
||
|
||
See `Bedrock/Sources/Bedrock/Branding/BRANDING_GUIDE.md` for complete documentation.
|
||
|
||
### 6. CI/CD Configuration
|
||
|
||
For automated builds, set the `REVENUECAT_API_KEY` environment variable in your CI/CD system:
|
||
|
||
**GitHub Actions:**
|
||
```yaml
|
||
env:
|
||
REVENUECAT_API_KEY: ${{ secrets.REVENUECAT_API_KEY }}
|
||
```
|
||
|
||
**Xcode Cloud:**
|
||
Add `REVENUECAT_API_KEY` as a secret in your Xcode Cloud workflow.
|
||
|
||
## Privacy
|
||
- Camera access required for preview and capture
|
||
- Photo Library access required to save photos
|
||
- Microphone access may be requested by the camera framework (not actively used)
|
||
- iCloud access for settings synchronization (optional)
|
||
- No data collection, no analytics, no tracking
|
||
|
||
## Monetization
|
||
Freemium model with optional "Pro" subscription:
|
||
- **Free**: Basic ring light, standard colors (Pure White, Warm Cream), photo capture, 3s timer, grid, zoom
|
||
- **Pro**: Full color palette, custom colors, HDR, high quality, flash sync, true mirror, skin smoothing, center stage, extended timers
|
||
|
||
Implemented with RevenueCat for reliable subscription management.
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
SelfieCam/
|
||
├── App/ # App entry point with launch screen
|
||
├── Configuration/ # xcconfig files (API keys)
|
||
├── Features/
|
||
│ ├── Camera/ # Main camera UI
|
||
│ │ ├── ContentView.swift # Main screen coordinator
|
||
│ │ ├── Views/ # Camera UI components
|
||
│ │ │ ├── CustomCameraScreen.swift
|
||
│ │ │ ├── RingLightOverlay.swift
|
||
│ │ │ ├── CaptureButton.swift
|
||
│ │ │ ├── ExpandableControlsPanel.swift
|
||
│ │ │ ├── CaptureEventInteraction.swift # Camera Control button support
|
||
│ │ │ └── ...
|
||
│ │ ├── GridOverlay.swift # Rule of thirds overlay
|
||
│ │ └── PostCapturePreviewView.swift
|
||
│ ├── Paywall/ # Pro subscription flow
|
||
│ │ └── ProPaywallView.swift
|
||
│ └── Settings/ # Configuration screens
|
||
│ ├── SettingsView.swift
|
||
│ ├── SettingsViewModel.swift
|
||
│ └── ...
|
||
├── Shared/
|
||
│ ├── BrandingConfig.swift # App icon & launch screen config
|
||
│ ├── DesignConstants.swift # Design tokens (uses Bedrock)
|
||
│ ├── Color+Extensions.swift # Ring light color presets
|
||
│ ├── Models/ # Data models
|
||
│ │ ├── CameraFlashMode.swift
|
||
│ │ ├── CameraHDRMode.swift
|
||
│ │ ├── PhotoQuality.swift
|
||
│ │ └── ...
|
||
│ ├── Protocols/ # Shared protocols
|
||
│ │ ├── RingLightConfigurable.swift
|
||
│ │ ├── CaptureControlling.swift
|
||
│ │ ├── CaptureEventHandling.swift # Hardware capture events
|
||
│ │ └── PremiumManaging.swift
|
||
│ ├── Premium/ # Subscription management
|
||
│ │ └── PremiumManager.swift
|
||
│ ├── Services/ # App services
|
||
│ │ └── PhotoLibraryService.swift
|
||
│ └── Storage/ # Persistence
|
||
│ └── SyncedSettings.swift # iCloud-synced settings model
|
||
└── Resources/ # Assets, localization
|
||
├── Assets.xcassets/
|
||
│ ├── AppIcon.appiconset/
|
||
│ ├── LaunchBackground.colorset/
|
||
│ └── ...
|
||
└── Localizable.xcstrings
|
||
```
|
||
|
||
## Key Technologies
|
||
|
||
| Technology | Purpose |
|
||
|------------|---------|
|
||
| SwiftUI | User interface framework |
|
||
| Swift 6 | Modern concurrency with strict checking |
|
||
| MijickCamera | Camera capture and preview |
|
||
| RevenueCat | Subscription management |
|
||
| Bedrock | Design system and branding |
|
||
| CloudKit | iCloud settings synchronization |
|
||
| AVFoundation | Low-level camera access |
|
||
|
||
## License
|
||
*(Add your license here)*
|