Zero to App Store

The complete guide to building and shipping production-ready iOS apps with Velocity. Your app running on your phone in 15 minutes. 📱

1Quick Start (2 Minutes)

Clone, install, and run. Velocity works on Windows—no Mac needed.

Clone the repositorygit clone https://github.com/jahustleracademy/velocity.git my-app
Navigate into the foldercd my-app
Setup environment variablesCopy-Item .env.example .env
Install dependencies (2-3 minutes)npm install
Start the dev server 🏎️npx expo start
Done! Scan the QR code with Expo Go (iOS/Android) → Your app is live!

2Environment Setup

Required Tools

📦

Node.js 18+

JavaScript runtime for development

Download LTS
🐙

Git

Version control system

Download
💻

VS Code

Recommended code editor

Download

API Keys Configuration

Configure your services in .env:

EXPO_PUBLIC_API_URL=https://your-backend.com/v1
EXPO_PUBLIC_REVENUECAT_APPLE_KEY=appl_your_key
EXPO_PUBLIC_ANALYTICS_ID=your_analytics_id

3Customize Your App

🎨 Change Colors

Open src/config/theme.ts to modify the design tokens:

primary: '#FF5F1F', // Your brand color
accent: '#F43F5E', // CTA color
background: '#0F172A' // Dark mode base

📝 App Name & Bundle ID

Edit app.json:

"name": "YourAppName",
"slug": "your-app-name",
"ios": {
  "bundleIdentifier": "com.yourcompany.yourapp"
}
⚠️ Important: Bundle ID must be unique and can't be changed after first submission!

🖼️ App Icon & Splash Screen

Replace assets/images/icon.png (1024x1024) and splash.png (1284x2778)

4Glassmorphism Components

Velocity includes 45+ premium UI components ready to use. All located in src/core/ui/

Essential Components

GlassBackground - Animated gradient backgrounds
GlassCard - Frosted glass cards
GlassInput - Elegant text inputs
GradientButton - High-impact CTAs
ActionSheet - iOS-style bottom sheets
Carousel - Swipeable image carousel
OTPInput - Verification code input
ProgressSteps - Multi-step forms
RatingPicker - Star rating component
DatePicker - Native date selection

Example Usage

import { GlassCard, GradientButton } from '@/core/ui';

<GlassCard>
  <Text>Beautiful glassmorphic card</Text>
  <GradientButton onPress={handlePress}>
    Get Started
  </GradientButton>
</GlassCard>
📖 Full Component Docs: Check BOILERPLATE_GUIDE.md for detailed API documentation

5Apple Compliance Tricks

Apple rejects 25% of submissions. Follow these to get approved on first try:

🔒 1. Privacy Policy (Top Rejection Reason)

Required before submission. Must include:

  • What data you collect (email, location, etc.)
  • Why you collect it
  • How you use/share it
  • User rights (delete data, etc.)
Add privacy policy URL in app.json → "privacyPolicy": "https://yoursite.com/privacy"

📱 2. Permission Descriptions

Explain why you need each permission in app.json:

"ios": {
  "infoPlist": {
    "NSCameraUsageDescription": "We need camera access to let you upload profile photos",
    "NSLocationWhenInUseUsageDescription": "We use your location to show nearby events"
  }
}

🧪 3. Provide Demo Account

In App Store Connect → "Review Information" → Add:

Username: demo@yourapp.com
Password: Demo1234!
Notes: "App requires login. Use demo account to test all features."

📸 4. Perfect Screenshots

Required sizes for iPhone:

  • 6.7" Display: 1290 x 2796 pixels (iPhone 15 Pro Max)
  • 6.5" Display: 1242 x 2688 pixels
  • 5.5" Display: 1242 x 2208 pixels

⚡ 5. Fast & Stable

  • ✅ No crashes or freezes (test with TestFlight first!)
  • ✅ App loads in under 3 seconds
  • ✅ All features work without backend errors
🎯 Pro Tip: Use eas submit --auto-submit to skip manual uploads. Apple reviews in 24-48 hours.

6Deploy to App Store

Prerequisites

  • Apple Developer Account ($99/year)
  • App fully tested via Expo Go
  • Privacy policy live on your website

Build & Submit

Install EAS CLI globallynpm install -g eas-cli
Login to Expoeas login
Configure project (first time only)eas build:configure
Build for iOS (15-20 min)eas build --platform ios --profile production
Submit to App Storeeas submit --platform ios
💡 TestFlight First: Build with --profile preview and test internally before production!

Version Management

Before each new build, increment version in app.json:

"version": "1.0.1", // User-facing version
"ios": {
  "buildNumber": "2" // Must increment each build
}
🎉 Congratulations! You just built a production iOS app in record time. Now go ship and scale your business!

📚 Additional Resources