Appendix B: App Store & Play Store Setup
Step-by-step guide to setting up your developer accounts and configuring your apps.
Apple Developer Account
1. Create Account
- Go to developer.apple.com
- Click "Account" → "Create Apple ID" (if needed)
- Enroll in Apple Developer Program ($99/year)
- Wait for approval (usually 24-48 hours)
2. Create App ID
- Go to Certificates, Identifiers & Profiles
- Click "+" to add new identifier
- Select "App IDs" → Continue
- Select "App" → Continue
- Fill in:
- Description: Your App Name
- Bundle ID: com.yourcompany.yourapp (must match app.json)
- Enable capabilities you need:
- Push Notifications
- Sign in with Apple
- Associated Domains (for deep links)
- Click "Continue" → "Register"
3. Create App in App Store Connect
- Go to App Store Connect
- Click "My Apps" → "+" → "New App"
- Fill in:
- Platform: iOS
- Name: Your App Name (30 chars max)
- Primary Language: English (or your language)
- Bundle ID: Select the one you created
- SKU: A unique ID (e.g., yourapp-ios-001)
- User Access: Full Access
- Click "Create"
4. Configure App Information
In App Store Connect → Your App:
App Information:
- Subtitle (30 chars)
- Category (Primary & Secondary)
- Content Rights
- Age Rating (complete questionnaire)
Pricing and Availability:
- Price: Free or select price tier
- Availability: Select countries
App Privacy:
- Privacy Policy URL (required)
- Complete Data Collection survey
Google Play Developer Account
1. Create Account
- Go to play.google.com/console
- Sign in with Google Account
- Pay registration fee ($25 one-time)
- Complete account details
- Verify identity (may take 48 hours)
2. Create App
- Click "Create app"
- Fill in:
- App name
- Default language
- App or Game
- Free or Paid
- Accept declarations
- Click "Create app"
3. Set Up Store Listing
Main store listing:
- Short description (80 chars)
- Full description (4000 chars)
- App icon (512x512)
- Feature graphic (1024x500)
- Screenshots
Store settings:
- App category
- Contact details
- External marketing
4. Complete Required Sections
Before you can release:
App content:
- Privacy policy URL
- Ads declaration
- App access (demo credentials if login required)
- Content rating (complete questionnaire)
- Target audience
- News apps declaration
- COVID-19 apps declaration
- Data safety
Setting Up In-App Purchases
iOS: ASC CLI (Recommended)
Use the asc CLI to create subscriptions programmatically. This is faster and more repeatable than the App Store Connect web UI.
Create subscription group + weekly plan
asc subscriptions setup \
--app APP_ID \
--group-reference-name "App Premium" \
--reference-name "Weekly" \
--product-id "com.silpho.yourapp.ios.weekly" \
--subscription-period ONE_WEEK \
--locale "en-US" \
--display-name "Weekly Plan" \
--description "Unlimited Access To All Features" \
--price "7.99" \
--price-territory "USA" \
--territories "USA"Add yearly plan to existing group
asc subscriptions setup \
--app APP_ID \
--group-id GROUP_ID \
--reference-name "Yearly" \
--product-id "com.silpho.yourapp.ios.yearly" \
--subscription-period ONE_YEAR \
--locale "en-US" \
--display-name "Yearly Plan" \
--description "Unlimited Access To All Features" \
--price "49.99" \
--price-territory "USA" \
--territories "USA"Equalize prices across 175 territories
Apple has different price tiers for each country. Use the equalize command to set Apple's recommended equivalent prices everywhere.
# Equalize weekly subscription pricing
asc subscriptions pricing equalize \
--subscription-id WEEKLY_SUB_ID \
--base-price 7.99 \
--confirm \
--workers 16
# Equalize yearly subscription pricing
asc subscriptions pricing equalize \
--subscription-id YEARLY_SUB_ID \
--base-price 49.99 \
--confirm \
--workers 16Review screenshots required: Both subscriptions MUST have review screenshots uploaded before submission. In App Store Connect, go to each subscription and upload a screenshot showing the paywall with prices visible. Without this, Apple will reject with "IAP not submitted for review."
Attach IAPs to version: Subscriptions must be submitted WITH the app version. In App Store Connect > In-App Purchases tab, select each subscription and click "Submit for Review." They cannot be submitted separately.
iOS: Manual Setup (App Store Connect UI)
- Go to App Store Connect → Your App → Features → In-App Purchases
- Click "+" to add:
- Select type (Auto-Renewable Subscription recommended)
- Reference Name: Internal name
- Product ID: com.yourcompany.yourapp.ios.weekly
- Configure subscription:
- Subscription Group: Create new (e.g., "App Premium")
- Duration: 1 Week
- Price: Select tier
- Localizations: Add display name and description
- Repeat for yearly plan in the same group
- Upload review screenshot for each subscription
Add free trial to yearly plan
In App Store Connect: Subscriptions > Your Group > Yearly > Subscription Prices > Introductory Offers > Free Trial > 1 Week.
Android: Google Play Console
- Go to Play Console → Your App → Monetize → Products → Subscriptions
- Click "Create subscription"
- Fill in:
- Product ID: pro_monthly (must match RevenueCat)
- Name: Pro Monthly
- Description: Full access to all features
- Add base plan:
- Duration: 1 month
- Price: $4.99
- Free trial: Optional (e.g., 7 days)
- Activate subscription
Connecting to RevenueCat
1. Create RevenueCat Account
- Go to revenuecat.com
- Sign up for free account
- Create new project
2. Add iOS App
- Go to Project Settings → Apps → "+ New"
- Select "App Store"
- Enter:
- App name
- Bundle ID (from App Store Connect)
- App Store Connect App-Specific Shared Secret
- Save
Get Shared Secret: App Store Connect → Your App → App Information → App-Specific Shared Secret → "Manage" → Generate and copy secret
3. Add Android App
- Go to Project Settings → Apps → "+ New"
- Select "Play Store"
- Enter:
- App name
- Package name (from app.json)
- Service Account Credentials JSON
- Upload JSON and save
Get Service Account JSON: Play Console → Setup → API access → Create new service account → Grant "View financial data" permission → Download JSON key
4. Create Products in RevenueCat
- Go to Products → "+ New"
- Add each product:
- Identifier: pro_monthly
- App Store Product ID: com.yourcompany.yourapp.pro_monthly
- Play Store Product ID: pro_monthly
5. Create Entitlements
- Go to Entitlements → "+ New"
- Create "pro" entitlement
- Attach all products that grant pro access
6. Create Offerings
- Go to Offerings → "+ New"
- Create "default" offering
- Add packages:
- Monthly ($monthly package)
- Annual ($annual package)
7. Get API Keys
- Go to Project Settings → API Keys
- Copy:
- iOS public key: appl_xxxxx
- Android public key: goog_xxxxx
- Add to your app's environment variables
EAS Configuration
1. Configure eas.json
{
"cli": {
"version": ">= 5.0.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false
}
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {
"ios": {
"appleId": "your@email.com",
"ascAppId": "1234567890",
"appleTeamId": "XXXXXXXXXX"
},
"android": {
"serviceAccountKeyPath": "./path-to-key.json",
"track": "internal"
}
}
}
}2. Get Required Values
iOS:
- appleId: Your Apple ID email
- ascAppId: From App Store Connect URL (the number after /app/)
- appleTeamId: From developer.apple.com/account → Membership → Team ID
Android:
- serviceAccountKeyPath: Path to the JSON key file from Play Console
3. Build and Submit
# Build for production
eas build --platform all --profile production
# Submit to stores
eas submit --platform ios
eas submit --platform androidPre-Submission Checklist
iOS
- App icon uploaded (1024x1024)
- Screenshots for required device sizes
- App description and keywords
- Privacy policy URL
- Age rating completed
- Export compliance answered
- IDFA declaration (if using ads/analytics)
- Sign in with Apple implemented (if any auth)
- In-app purchases configured (if applicable)
- App review notes (demo account if needed)
Android
- App icon (512x512)
- Feature graphic (1024x500)
- Screenshots (phone + tablet if applicable)
- Short and full descriptions
- Privacy policy URL
- Content rating completed
- Target audience declared
- Data safety form completed
- App access instructions (if login required)
Common Rejection Reasons & Fixes
iOS — From Real Submissions
| Rejection | Fix |
|---|---|
| IAP not submitted for review | Attach subscriptions to app version in ASC. Upload review screenshots for each. Submit WITH the binary. |
| ChatGPT/OpenAI in metadata (China) | Remove ALL AI brand references from title, subtitle, keywords, description, and screenshot captions. Use "AI-powered" instead. |
| Same prices for different periods | Run asc subscriptions pricing equalize for each subscription. Fix explicit WEEKLY package type lookup in code. |
| Guideline 4.8 - No Apple Sign-In | Add Apple Sign-In if you have ANY third-party auth |
| Guideline 3.1.1 - External payments | Use IAP for digital goods |
| Guideline 2.1 - App Completeness | Fix crashes, add content |
| Guideline 5.1.1 - No privacy policy | Add privacy policy URL |
| Missing subscription disclosure | Add subscription terms paragraph to description (prices, renewal, cancellation) |
Android
| Rejection | Fix |
|---|---|
| Policy violation - Deceptive | Update description to match app |
| Data safety inaccurate | Complete data safety form |
| Missing target audience | Declare target audience |
| APK invalid | Rebuild with correct signing |
Testing Before Release
iOS TestFlight
# Build for TestFlight
eas build --platform ios --profile production
# Submit to TestFlight
eas submit --platform iosThen in App Store Connect:
- Wait for processing (15-30 min)
- Add testers (internal or external)
- External testing requires App Review
Android Internal Testing
# Build for Android
eas build --platform android --profile production
# Submit to internal track
eas submit --platform androidThen in Play Console:
- Go to Release → Testing → Internal testing
- Create release
- Add testers by email
Pro Tip: Set up your accounts and in-app purchases early. Apple's review for subscription apps can take longer, and Play Console identity verification can take 48+ hours.
Store-Ready
One command to submit
EAS configured for both App Store and Play Store submissions.
EAS Build setup
Credentials managed
One-command deploy
Get ShipReactNative
Save 40+ hours of setup