βΆNative (Swift/Kotlin) vs React Native vs Flutter β which should I learn?
Native: Best performance, access to all device APIs, required for complex animations/AR. Swift: 1M+ iOS jobs, strong community. Kotlin: 1M+ Android jobs, also used for servers. React Native: 60% code sharing between iOS/Android, faster iteration, $20-30k cheaper to maintain than two native teams. Skills transfer from web React. Flutter: Dart language (small community), 70% code reuse, beautiful animations out of box, growing demand. For careers: learn React Native if you know JavaScript, learn native if you want max salary/performance.
βΆHow do I handle app store rejections?
Apple App Store rejection rate ~25% (most common: missing privacy labels, unclear in-app purchases, inactive features). Avoid: crashing on launch, missing IDFA consent, unclear screenshots. Read the rejection reason carefully β it's specific (e.g. 'Guideline 4.3: Design spam'). Fix, resubmit within 24-48 hours. Google Play is more lenient (rejection rate ~5%) but enforces tighter data privacy. Both: no promise of 'faster loading' without proof, no fake ratings, no bait-and-switch paywalls.
βΆHow do I implement push notifications properly?
iOS: request user permission (UIUserNotificationSettings), use APNs (Apple Push Notification service) with certificates/keys, handle token refresh. Android: Firebase Cloud Messaging (FCM) is standard, token rotates automatically. Server: send payload (title, body, custom data) to token. Client: handle tap (open deep link) and background receive. Common mistakes: not requesting permission upfront (iOS), not handling app-in-foreground case (Android), sending test notifications to inactive tokens (hits delivery rate). Use Firebase Cloud Messaging for both platforms (Apple supports it via APNs bridge).
βΆWhat does 'offline-first' mean and how do I build it?
Offline-first = app works without internet, syncs when connection returns. Pattern: (1) local database (SQLite/Realm/Firebase Realtime), (2) queue outgoing changes, (3) background sync when online. Detect: `NetInfo.fetch()` on app resume. Sync: batch API calls, handle conflicts (last-write-wins, CRDT). For chat: use SQLite + observe connection state β resume sending. For forms: save drafts locally, retry submission on network return. Libraries: WatermelonDB, Realm, Firebase local caching. Trade-off: adds ~200-500KB to bundle.
βΆHow do I optimize app size and startup time?
Size: code splitting (lazy load screens), remove unused assets, compress images to WebP, strip debug symbols. Typical bloat: React Native adds ~40MB (debug), native Swift app ~20MB base. Startup: measure with Xcode Profiler / Android Studio, profile first (often blocking API call on init). Avoid: loading all data at launch, large images in Bundle. Target: < 5s launch on iPhone 12, < 7s on mid-range Android. Use Firebase Performance for production monitoring.
βΆHow do I monetize an app β in-app purchases, subscriptions, or ads?
IAP (in-app purchase): one-time, cosmetics/premium content. Apple takes 30% (15% for subscriptions year 2+). Subscriptions: recurring, common for apps (Netflix, Spotify model). Setup: RevenueCat handles iOS/Android subscription logic + analytics. Ads: low-value unless 10M+ DAU. Best for most apps: free tier + $9.99/mo premium (like Spotify). PaymentKit / StoreKit2 on Apple, Google Play Billing Library on Android. Never implement payments yourself β use RevenueCat or Stripe.
βΆWhat are deep links and why do they matter?
Deep link: URL that opens a specific screen in your app (e.g. `myapp://profile/123` or `https://myapp.com/profile/123`). Used for: marketing (track source), push notifications (tap = open offer), URL sharing. Setup: iOS scheme + Universal Links (https), Android App Links (https). Common mistake: not handling deep link in cold start (app not running). Pattern: save deep link on app launch, route after auth completes. Use Firebase Dynamic Links for short, trackable links that convert from web to app.