Visual feedback for non-premium users: - Premium colors show lock overlay with darkened circle - Crown icon is hollow (outline) when locked, filled when unlocked - Text is dimmed for locked colors - Custom color shows rainbow gradient with lock overlay Interaction behavior: - Tapping locked premium color opens paywall - Tapping locked custom color opens paywall - Non-premium presets (Pure White, Warm Cream) remain fully accessible - Premium users see unlocked UI with filled crown icons This helps users: 1. See what premium features are available 2. Easily distinguish free vs premium colors 3. Test both states by toggling ENABLE_DEBUG_PREMIUM env var |
||
|---|---|---|
| SelfieRingLight | ||
| SelfieRingLight.xcodeproj | ||
| SelfieRingLightTests | ||
| SelfieRingLightUITests | ||
| .gitignore | ||
| AGENTS.md | ||
| AI_Implementation.md | ||
| README.md | ||
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.
-
Copy the template file:
cp SelfieRingLight/Configuration/Secrets.xcconfig.template SelfieRingLight/Configuration/Secrets.xcconfig -
Edit
Secrets.xcconfigwith your actual API key:REVENUECAT_API_KEY = appl_your_actual_api_key_here -
The
Secrets.xcconfigfile is gitignored and will never be committed.
3. RevenueCat Setup
- Create an account at RevenueCat
- Create a new project and connect it to App Store Connect
- Create products in App Store Connect (e.g.,
com.yourapp.pro.monthly,com.yourapp.pro.yearly) - Configure the products in RevenueCat dashboard
- Create an entitlement named
pro - Create an offering with your subscription packages
- Copy your Public App-Specific API Key to
Secrets.xcconfig
4. Debug Premium Mode
To test premium features without a real subscription during development:
- Edit Scheme (⌘⇧<) → Run → Arguments
- Add Environment Variable:
- Name:
ENABLE_DEBUG_PREMIUM - Value:
1
- Name:
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)