140 lines
4.6 KiB
Markdown
140 lines
4.6 KiB
Markdown
# 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
|
|
```bash
|
|
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:
|
|
```bash
|
|
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](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. 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/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)*
|