Go to file
Matt Bruce 829770b6b7 Integrate MijickCamera library, remove custom camera code
Major refactor: Replace custom camera implementation with MijickCamera

Added:
- MijickCamera Swift package (v3.0.3)
- MijickTimer dependency (required by MijickCamera)

Changed:
- ContentView now uses MCamera() from MijickCamera
- Ring light wraps around MijickCamera view with padding
- MijickCamera handles all camera logic:
  - Permissions
  - Capture (photo/video)
  - Camera switching
  - Orientation/rotation
  - Zoom/focus gestures
  - Flash

Removed:
- CameraViewModel.swift (replaced by MijickCamera)
- CameraPreview.swift (replaced by MijickCamera)

Kept:
- Ring light background (settings.lightColor)
- Ring size control (settings.ringSize)
- Grid overlay
- Post-capture preview workflow
- Settings view
- Premium features and paywall
- iCloud sync

Benefits:
- Less code to maintain
- Battle-tested camera implementation
- Better rotation handling built-in
- More camera features available (filters, exposure, etc.)
2026-01-02 16:16:31 -06:00
SelfieRingLight Integrate MijickCamera library, remove custom camera code 2026-01-02 16:16:31 -06:00
SelfieRingLight.xcodeproj Integrate MijickCamera library, remove custom camera code 2026-01-02 16:16:31 -06:00
SelfieRingLightTests Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00
SelfieRingLightUITests Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00
.gitignore Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00
AGENTS.md Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00
AI_Implementation.md Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00
README.md Initial commit: SelfieRingLight app 2026-01-02 13:01:24 -06:00

SelfieRingLight

A modern, professional-grade selfie camera app for iOS that simulates a high-quality ring light using the device's screen. Built entirely with SwiftUI, Swift 6, and AVFoundation.

Perfect for low-light selfies, video calls, makeup checks, or professional portrait lighting on the go.

Features

Core Camera & Lighting

  • Full-screen front-camera preview with true mirror option
  • Configurable screen-based ring light with adjustable border thickness
  • Multiple color temperature presets (Pure White, Warm Cream, Ice Blue, Rose Pink, etc.)
  • Directional gradient lighting for flattering portrait effects
  • Real-time screen brightness control (overrides system brightness while in use)
  • Flash burst on capture for extra fill light

Capture Modes

  • Photo capture (saved to Photo Library)
  • Video recording
  • Boomerang mode (3-second looping short video)
  • 3-second and 10-second self-timer with countdown overlay and VoiceOver announcements
  • Pinch-to-zoom gesture
  • Volume button shutter support (photo or video start/stop)
  • Rule-of-thirds grid overlay (toggleable)

Premium Features (Freemium Model)

  • All advanced color presets + custom colors
  • Gradient and directional lighting
  • Advanced beauty filters (coming soon)
  • Unlimited boomerang length
  • No watermarks
  • Ad-free experience

Accessibility & Polish

  • Full VoiceOver support with meaningful labels, hints, and announcements
  • Dynamic Type and ScaledMetric for readable text
  • String Catalog localization ready (.xcstrings)
  • Prevents screen dimming during use
  • Restores original brightness on background/app close

Screenshots

(Add App Store-ready screenshots here once built)

Requirements

  • iOS 18.0 or later
  • Xcode 16+
  • Swift 6 language mode

Setup

1. Clone the Repository

git clone https://github.com/yourusername/SelfieRingLight.git
cd SelfieRingLight

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 SelfieRingLight/Configuration/Secrets.xcconfig.template SelfieRingLight/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. 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/videos
  • Microphone access required for video recording
  • No data collection, no analytics, no tracking

Monetization

Freemium model with optional "Pro" subscription:

  • Free: Basic ring light, standard colors, photo/video, timer, zoom
  • Pro: Full color palette, gradients, advanced features, future updates

Implemented with RevenueCat for reliable subscription management.

Project Structure

SelfieRingLight/
├── App/                          # App entry point
├── Features/
│   ├── Camera/                   # Camera preview, capture, view model
│   ├── Paywall/                  # Pro subscription flow
│   └── Settings/                 # Configuration screens
├── Shared/
│   ├── Configuration/            # xcconfig files (API keys)
│   ├── Premium/                  # PremiumManager (RevenueCat)
│   ├── Protocols/                # Shared protocols
│   ├── Color+Extensions.swift    # Ring light color presets
│   └── DesignConstants.swift     # Design tokens
└── Resources/                    # Assets, localization

License

(Add your license here)