---
id: mobile-firebase-distribution
title: Firebase App Distribution / Pre-launch / App Review
category: Coding
status: draft
source_trust_level: B
verification_status: conceptual
created_at: 2026-05-09
updated_at: 2026-05-09
tags: [mobile, firebase, vibe-coding]
tech_stack: { language: "process", applicable_to: ["Mobile"] }
applied_in: []
aliases: [Firebase App Distribution, Pre-launch report, App Store review, common rejections, expedited review]
---
# Firebase Distribution / Pre-launch / Review
> Beta tester + automated test + store review. **Firebase App Distribution (cross-platform), Pre-launch report (Android), App Store review tips**.
## π ν΅μ¬ κ°λ
- Firebase Distribution: free, cross-platform.
- Pre-launch report: μλ device test (Android).
- Apple App Review: 1-2 days, common rejection.
- Expedited review: emergency fix.
## π» μ½λ ν¨ν΄
### Firebase App Distribution setup
```bash
firebase login
firebase init appdistribution
```
### Distribute (CLI)
```bash
# Android
firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk \
--app 1:1234567890:android:abcdef \
--release-notes "Bug fixes" \
--groups "internal-testers"
# iOS
firebase appdistribution:distribute MyApp.ipa \
--app 1:1234567890:ios:abcdef \
--release-notes "Bug fixes" \
--testers "alice@example.com,bob@example.com"
```
### Fastlane integration
```ruby
lane :distribute do
build_app
firebase_app_distribution(
app: 'YOUR_APP_ID',
groups: 'internal',
release_notes: 'Bug fixes',
)
end
```
### Tester groups
```bash
firebase appdistribution:groups:create internal
firebase appdistribution:testers:add --group internal alice@example.com
```
β Email κ° group μ. Group β distribute.
### Tester experience
```
1. Email "Beta available".
2. App Tester app (iOS / Android) λ€μ΄λ‘λ.
3. App Tester κ° list.
4. 1-tap install.
5. Feedback button (in-app screenshot).
```
### vs TestFlight / Play Internal
```
Firebase:
- Cross-platform (1 tool λ λ€).
- Free.
- μμ ecosystem.
TestFlight: iOS μ μ©, Apple μΉν.
Play Internal: Android μ μ©, Google μΉν.
β Cross-platform team κ° Firebase.
```
### Firebase Crashlytics ν΅ν©
```swift
// iOS
import FirebaseCrashlytics
Crashlytics.crashlytics().log("Login attempted")
// Force crash for test
fatalError()
```
β Beta crash κ° μλ 보μ.
### Pre-launch report (Android)
```
Play Console β App β Pre-launch reports.
μ
λ‘λ ν (15-30 min):
- Crash report (λ€λ₯Έ device, λ€λ₯Έ Android version)
- Performance metric
- Accessibility issue
- Security warning
β λ§€ μ€ device κ° 5 min μλ navigate.
```
### Pre-launch login (auto fill)
```
Play Console β Setup β Pre-launch report credentials.
- Test username + password.
- Robo crawler κ° μ¬μ©.
```
β Login ν page λ test.
### Robo script (custom)
```json
{
"actions": [
{ "type": "click", "elementText": "Login" },
{ "type": "input", "elementId": "email", "text": "test@example.com" },
{ "type": "input", "elementId": "password", "text": "password" },
{ "type": "click", "elementText": "Submit" }
]
}
```
β Custom flow test.
### App Review μ€λΉ
```
- App icon (1024x1024)
- Screenshot (λͺ¨λ size)
- App preview video (μ ν)
- Description (4000 char)
- Keyword (100 char)
- Support URL
- Privacy URL
- App Store Connect μ Test Information
β λ§€ νλͺ© κ° review checklist.
```
### Common Apple rejections
```
1. Crash (κ°μ₯ νν). Fix β resubmit.
2. Metadata mismatch (screenshot β app).
3. Functionality (broken feature).
4. Privacy (NSUsageDescription λλ½).
5. Sign in with Apple (3rd party login + κ°).
6. Subscription (clear pricing).
7. Hidden purchase (IAP outside StoreKit).
8. Misleading (hyperbolic claim).
9. Info.plist key λλ½.
10. Beta software (not production-ready).
```
### Privacy nutrition label
```
App Store Connect β App Privacy.
- Data linked to user (track)
- Data not linked (analytics)
- Data used for tracking (advertising)
β μ ν μμ±.
```
### App Tracking Transparency
```swift
// Track νκΈ° μ :
import AppTrackingTransparency
ATTrackingManager.requestTrackingAuthorization { status in
if status == .authorized {
// Track
}
}
```
```xml
NSUserTrackingUsageDescription
Used for personalized ads.
```
β iOS 14.5+ μ무. Reject νν¨.
### Sign in with Apple
```
ToS: λ€λ₯Έ social login (Google, Facebook) + κ° μμΌλ©΄ Apple λ.
- Skip κ°λ₯ = κ±°μ λͺ¨λ login flow κ° μΆκ°.
- Native UI κ° Sign in with Apple button.
```
### Expedited review
```
App Store Connect β Resolution Center β Request expedited review.
μ΄μ :
- Critical bug (μ¬μ©μ μν₯)
- Time-sensitive (event)
- Legal / regulatory
β λ³΄ν΅ 24 hr μ review.
1λ
1-2ν λ§.
```
### App Review reply
```
Reject β Resolution Center.
- λͺ
ν λ΅.
- "Fixed in build 1.5.0" μ.
- Screenshot / video κ° λμ.
β λ©°μΉ ν μ¬ review.
```
### Beta μ app store κ° λ€λ¦
```
TestFlight beta κ° review (1-2 day, first build only).
μ΄ν build = quick review (λͺ hour).
App Store full review κ° 1-2 day.
```
### Phased release (App Store)
```
Submit β Approve β Phased release:
- Day 1: 1%
- Day 2: 2%
- Day 3: 5%
- Day 4: 10%
- Day 5: 20%
- Day 6: 50%
- Day 7: 100%
β λ§€ day crash κ° μ§ν€λ©΄ halt κ°λ₯.
```
β Bug λ°κ²¬ = halt + new build (expedited).
### Play Store review
```
Apple λ³΄λ€ λΉ λ¦ (1-3 hour νκ· ).
Manual review:
- Permissions (νΉν background location).
- Privacy policy.
- Restricted content.
λ§€ update = same.
```
### Version bump
```
1.2.3 β 1.2.4 (patch)
1.2.4 β 1.3.0 (minor)
1.3.0 β 2.0.0 (major)
Build number κ° λ§€ upload (CFBundleVersion).
```
β TestFlight κ° build number λ§ λ€λ₯΄λ©΄ OK.
### Reject β fix flow
```
1. Reject λ°μ (email + Resolution Center).
2. μ΄μ λΆμ (screenshot, log).
3. Fix code.
4. New build (build number++).
5. Same version λλ patch μμΉ.
6. Resubmit.
7. Quick re-review (1 day).
```
### Apple Developer Forum
```
forums.developer.apple.com
Common rejection κ²μ.
"Guideline 4.0 β Design" μ search.
```
### App Store Connect API
```bash
# CLI λ‘ metadata update / build upload
xcrun altool --upload-app -f app.ipa --apiKey ABC --apiIssuer XYZ
```
β Fastlane κ° wrap.
### ν¨μ : Privacy λ³κ²½
```
Update κ° μ SDK μΆκ°:
- μ tracking?
- μ data collection?
- App Privacy νλͺ© update.
β App Privacy μ actual code κ° mismatch = reject μν.
```
### ν¨μ : Subscription
```
- Free trial λͺ
ν.
- Auto-renew λͺ
μ.
- Cancel link.
- Restore purchase button.
β Subscription rejection νν¨.
```
### Test build κ° reject?
```
TestFlight first build = review.
- Production-quality.
- Crash μμ.
- Required content.
β "test only" λΌλ quality.
```
## π€ μμ¬κ²°μ κΈ°μ€
| μμ
| μΆμ² |
|---|---|
| Cross-platform beta | Firebase App Distribution |
| iOS only | TestFlight |
| Android only | Play Internal Track |
| Auto Android test | Pre-launch report |
| Critical fix | Expedited review |
| Slow launch | Phased release |
| Manual review concerns | Common rejection κ²μ |
## β μν°ν¨ν΄
- **Production κ° first beta**: bug κ° λͺ¨λ μ¬μ©μ.
- **NSUsageDescription λλ½**: reject.
- **Hidden purchase**: reject + ban.
- **Misleading screenshot**: reject.
- **Privacy nutrition κ°μ§**: μ¬μ©μ μ λ’° β.
- **No phased release**: bug κ° 100%.
- **Reject μμ£Ό 무μ**: μκ° λλΉ.
## π€ LLM νμ© ννΈ
- Firebase Distribution = cross-platform free beta.
- Pre-launch report = Android free auto-test.
- App Review checklist λ§€λ².
- Phased release + crash monitor = safe.
## π κ΄λ ¨ λ¬Έμ
- [[Mobile_TestFlight_Distribution]]
- [[Mobile_App_Store_Optimization]]
- [[Mobile_Crash_Free_SLO]]