7.2 KiB
Example: RevenueCat Configuration
This file contains example configurations for different build scenarios.
Development Environment
Local Development (Terminal)
# Set environment variable for current session
export REVENUECAT_API_KEY="appl_YourDevelopmentKeyHere"
# Run the app
flutter run
# Or in one line
REVENUECAT_API_KEY="appl_YourDevelopmentKeyHere" flutter run
VS Code Launch Configuration
Add to .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Flutter (Development with RevenueCat)",
"request": "launch",
"type": "dart",
"program": "lib/main.dart",
"args": [
"--dart-define=REVENUECAT_API_KEY=appl_YourDevelopmentKeyHere"
]
},
{
"name": "Flutter (Development without RevenueCat)",
"request": "launch",
"type": "dart",
"program": "lib/main.dart"
}
]
}
Android Studio / IntelliJ
- Go to Run → Edit Configurations
- Select your Flutter configuration
- Add to Additional run args:
--dart-define=REVENUECAT_API_KEY=appl_YourKeyHere
Production Builds
iOS Production
# Build for App Store
flutter build ios \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY \
--no-codesign
# Build and archive with Xcode
xcodebuild archive \
-workspace ios/Runner.xcworkspace \
-scheme Runner \
-archivePath build/Runner.xcarchive \
-configuration Release
macOS Production
# Build for Mac App Store
flutter build macos \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY
Android Production
# Build App Bundle for Google Play
flutter build appbundle \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY
# Build APK
flutter build apk \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY
Windows Production
Windows builds don't need RevenueCat configuration (uses Windows Store IAP):
flutter build windows --release
CI/CD Configuration
GitHub Actions
name: Build and Release
on:
push:
branches: [ main ]
jobs:
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.9.0'
- name: Build iOS
env:
REVENUECAT_API_KEY: ${{ secrets.REVENUECAT_API_KEY }}
run: |
flutter build ios \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY \
--no-codesign
build-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: '17'
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.9.0'
- name: Build Android
env:
REVENUECAT_API_KEY: ${{ secrets.REVENUECAT_API_KEY }}
run: |
flutter build appbundle \
--release \
--dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.9.0'
- name: Build Windows
run: flutter build windows --release
Don't forget to add REVENUECAT_API_KEY to GitHub Secrets:
- Go to repository Settings → Secrets and variables → Actions
- Click New repository secret
- Name:
REVENUECAT_API_KEY - Value: Your RevenueCat API key
GitLab CI
stages:
- build
build:ios:
stage: build
tags:
- macos
script:
- flutter build ios --release --dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY --no-codesign
only:
- main
build:android:
stage: build
image: cirrusci/flutter:stable
script:
- flutter build appbundle --release --dart-define=REVENUECAT_API_KEY=$REVENUECAT_API_KEY
only:
- main
Add REVENUECAT_API_KEY to GitLab CI/CD Variables:
- Go to project Settings → CI/CD → Variables
- Click Add variable
- Key:
REVENUECAT_API_KEY - Value: Your RevenueCat API key
- Check Mask variable and Protect variable
Fastlane
Add to your Fastfile:
lane :build_ios do
flutter_build(
platform: :ios,
dart_defines: {
"REVENUECAT_API_KEY" => ENV["REVENUECAT_API_KEY"]
}
)
end
lane :build_android do
flutter_build(
platform: :android,
dart_defines: {
"REVENUECAT_API_KEY" => ENV["REVENUECAT_API_KEY"]
}
)
end
Testing Configurations
Sandbox Testing (iOS/macOS)
Use a different API key for sandbox testing:
# Development/Sandbox builds
flutter run --dart-define=REVENUECAT_API_KEY=appl_YourSandboxKeyHere
# Production builds
flutter build ios --dart-define=REVENUECAT_API_KEY=appl_YourProductionKeyHere
Test Without RevenueCat
To test the fallback to legacy IAP:
# Simply don't provide the API key
flutter run
# Or explicitly unset it
unset REVENUECAT_API_KEY
flutter run
The app will automatically use the legacy IAP service.
Security Best Practices
-
Never commit API keys to source control
- Add
.envfiles to.gitignore - Use environment variables or CI/CD secrets
- Add
-
Use different keys for different environments
- Sandbox/Development key for testing
- Production key for releases
-
Rotate keys periodically
- RevenueCat allows generating new keys
- Update in all CI/CD pipelines
-
Limit key permissions
- Use read-only keys where possible
- Separate keys for different purposes
Verifying Configuration
After building with RevenueCat configured, check the logs:
✅ Success indicators:
- "Using RevenueCat service for IAP"
- "RevenueCat initialized successfully"
- Paywall displays when clicking "Unlock Full Version"
❌ Fallback indicators (no key):
- "Using legacy IAP service (no RevenueCat key)"
- "RevenueCat API key not configured"
- Standard purchase dialog instead of paywall
❌ Error indicators:
- "Failed to initialize RevenueCat"
- Check API key is correct
- Verify network connectivity
- Check RevenueCat Dashboard configuration
Troubleshooting
"API key not configured" in logs
Cause: Environment variable or dart-define not set correctly
Solution:
# Verify key is set
echo $REVENUECAT_API_KEY
# If empty, set it
export REVENUECAT_API_KEY="your_key_here"
# Or use dart-define
flutter run --dart-define=REVENUECAT_API_KEY=your_key_here
Key works locally but not in CI/CD
Cause: Secret not configured or not accessible
Solution:
- Verify secret is added to CI/CD platform
- Check secret name matches exactly
- Ensure job has permission to access secrets
- Check if running on forked repository (secrets may not be available)
Different behavior in release vs debug
Cause: Different API keys or missing configuration in release build
Solution:
- Ensure
--dart-defineis included in release build command - Verify production API key is correct
- Check RevenueCat Dashboard for production vs sandbox configuration