Go to file
2026-02-09 22:15:22 -06:00
docs Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 17:03:33 -06:00
Screenshots Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 22:14:58 -06:00
SelfieCam Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 22:15:22 -06:00
SelfieCam.xcodeproj Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 17:03:33 -06:00
SelfieCamTests initial commit 2026-01-04 10:57:30 -06:00
SelfieCamUITests initial commit 2026-01-04 10:57:30 -06:00
.gitignore Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 14:51:54 -06:00
AGENTS.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 13:16:01 -06:00
APP_STORE_CONNECT.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 22:12:29 -06:00
Info.plist Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-03 17:25:43 -06:00
PRD.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 17:03:33 -06:00
README.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2026-02-09 17:03:33 -06:00

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 Bedrocks 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 - Modern SwiftUI camera framework
  • RevenueCat - Subscription management
  • Bedrock - Internal design system and UI components (local package)

Setup

1. Clone the Repository

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:

    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
  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:

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)