# 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 - 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)*