40+ Mobile Developer Interview Questions for iOS, Android & Cross-Platform Roles
Mobile interviews test more than coding—they assess your understanding of platform constraints, user experience, and performance. Here's what top companies actually ask.
Mobile development in 2026 spans native iOS (Swift/SwiftUI), native Android (Kotlin/Compose), and cross-platform frameworks (React Native, Flutter). This guide covers questions for all paths, focusing on concepts that transfer across platforms.
What Interviewers Evaluate
- Platform Knowledge: Understanding of iOS/Android specifics
- Architecture: MVVM, Clean Architecture, state management
- Performance: Memory management, battery optimization
- UX Sensibility: Platform design guidelines, accessibility
- Testing: Unit tests, UI tests, snapshot testing
Core Mobile Concepts (Questions 1-12)
1. Explain the mobile app lifecycle (iOS and Android).
iOS: Not Running → Inactive → Active → Background → Suspended. Key callbacks: didFinishLaunching, willResignActive, didEnterBackground, willEnterForeground.
Android: onCreate → onStart → onResume → onPause → onStop → onDestroy. Plus onSaveInstanceState for configuration changes.
2. How do you persist data locally on mobile?
- Key-value: UserDefaults/SharedPreferences for settings
- Database: Core Data, Room, SQLite, Realm for structured data
- Files: Documents/cache directories for large files
- Secure storage: Keychain/Keystore for credentials
3. What is the difference between strong, weak, and unowned references?
Strong: Increases retain count, keeps object alive (default)
Weak: Doesn't increase retain count, becomes nil when deallocated. Use for delegates, avoiding retain cycles.
Unowned: Like weak but never nil—crashes if accessed after deallocation. Use when reference outlives owner.
4. Explain MVVM architecture for mobile apps.
Model: Data and business logic
View: UI components (UIKit/SwiftUI, Android Views/Compose)
ViewModel: Transforms model data for view, handles user actions, survives configuration changes
Benefits: Testable ViewModels, separation of concerns, reactive data binding.
5. How do you handle deep linking in mobile apps?
URL Schemes: Custom schemes (myapp://). Simple but can be hijacked.
Universal Links (iOS) / App Links (Android): Use HTTPS domain, verified ownership. More secure, fallback to web.
Implementation: Register domains, handle incoming URLs in app delegate/activity, parse and navigate.
6. What are memory leaks? How do you detect and fix them?
Memory leaks occur when objects are retained longer than needed, often from retain cycles.
Detection: Instruments (iOS), LeakCanary/Profiler (Android), memory graphs.
Common causes: Closures capturing self strongly, delegates not weak, NotificationCenter observers not removed.
7. Explain push notifications architecture.
- App registers with APNs/FCM, receives device token
- Token sent to your backend
- Backend sends notification to APNs/FCM with token
- APNs/FCM delivers to device
- App handles in foreground/background differently
8. How do you handle offline functionality?
- Local database as source of truth
- Queue actions for sync when online
- Conflict resolution strategy
- Network reachability monitoring
- Optimistic UI updates with rollback
9. What is the responder chain (iOS) / touch event system (Android)?
iOS: Events travel up view hierarchy until handled. First responder, next responder chain. Used for keyboard, gestures.
Android: Touch events dispatched down view tree (dispatchTouchEvent), then up (onTouchEvent). Parent can intercept (onInterceptTouchEvent).
10. How do you secure sensitive data in mobile apps?
- Keychain (iOS) / Keystore (Android) for credentials
- Certificate pinning for network security
- Encrypt local databases
- Obfuscate code (ProGuard/R8)
- Don't hardcode secrets—use secure config
- Biometric authentication where appropriate
11. Explain dependency injection in mobile apps.
DI provides dependencies externally rather than creating them internally, improving testability.
Tools: Hilt/Dagger (Android), Swinject (iOS), or manual constructor injection. Key: Program to interfaces, inject via constructor.
12. What's the difference between frames and bounds?
Frame: Position and size in superview's coordinate system
Bounds: Position and size in view's own coordinate system (origin usually 0,0)
iOS Specific (Questions 13-22)
13. Explain SwiftUI vs UIKit. When would you choose each?
SwiftUI: Declarative, less code, live previews, newer APIs. Best for new projects targeting iOS 15+.
UIKit: Imperative, mature, full control, better for complex custom UI. Required for older iOS support.
14. What is Combine? How does it compare to RxSwift?
Combine is Apple's reactive framework for processing values over time using Publishers and Subscribers.
vs RxSwift: Combine is native (no dependency), better performance, but iOS 13+ only. RxSwift has larger ecosystem, cross-platform with RxJava.
15. Explain @State, @Binding, @ObservedObject, and @StateObject in SwiftUI.
@State: Local view state, view owns it
@Binding: Reference to parent's state, two-way binding
@ObservedObject: External ObservableObject, doesn't own lifecycle
@StateObject: ObservableObject owned by view, survives view updates
16. How does Core Data work? What are its main components?
NSManagedObjectModel: Schema definition
NSPersistentStoreCoordinator: Manages storage
NSManagedObjectContext: Scratchpad for changes
Modern: NSPersistentContainer wraps all three. CloudKit integration available.
17. What are Swift actors and how do they help with concurrency?
Actors isolate mutable state, ensuring only one task accesses state at a time. Compiler enforces isolation.
@MainActor: Runs on main thread—use for UI updates. Prevents data races without manual locking.
18. Explain Auto Layout. What are priorities and content hugging?
Content Hugging: Resistance to growing beyond intrinsic size (high = won't grow)
Compression Resistance: Resistance to shrinking below intrinsic size
Priority: 1000 = required, <1000 = optional. Lower priority constraints break first.
19. How do you implement a custom URLSession for network requests?
Create URLSessionConfiguration (set timeouts, headers, cache policy), create URLSession with delegate for advanced handling (auth challenges, background downloads), create URLRequest and dataTask/downloadTask.
20. What is App Transport Security (ATS)?
ATS enforces secure network connections—requires HTTPS, TLS 1.2+, forward secrecy.
Can configure exceptions in Info.plist but Apple reviews carefully. Best practice: use HTTPS everywhere.
21. How do you optimize table/collection view performance?
- Reuse cells (dequeueReusableCell)
- Pre-calculate cell heights
- Avoid layout passes in cellForRow
- Async image loading with caching
- Diffable data sources for efficient updates
- Prefetching for smooth scrolling
22. Explain the difference between GCD and OperationQueue.
GCD: Low-level, lightweight, fire-and-forget tasks. DispatchQueue, async/sync.
OperationQueue: Higher-level, dependencies between tasks, cancellation, KVO on state. Use for complex task graphs.
Android Specific (Questions 23-32)
23. Explain Jetpack Compose vs XML Views.
Compose: Declarative UI, less code, single source of truth for state. Modern approach.
XML Views: Imperative, mature, larger ecosystem. Still needed for some complex customizations.
24. What are Android Architecture Components?
- ViewModel: Survives configuration changes
- LiveData/StateFlow: Observable data holders
- Room: SQLite abstraction with compile-time verification
- Navigation: Type-safe navigation between destinations
- WorkManager: Deferrable background work
25. Explain coroutines and Flow in Kotlin.
Coroutines: Lightweight threads for async code. suspend functions, structured concurrency with scopes.
Flow: Cold asynchronous data stream. Replaces RxJava for many cases. StateFlow/SharedFlow for hot streams.
26. What happens during a configuration change (rotation)?
Activity is destroyed and recreated. Data loss without proper handling.
Solutions: ViewModel (survives), onSaveInstanceState (small data), handle config changes manually (android:configChanges).
27. Explain the difference between Service, IntentService, and WorkManager.
Service: Long-running operations, runs on main thread by default
IntentService: Deprecated. Used worker thread, stopped when done.
WorkManager: Modern solution for deferrable work. Survives app restarts, respects Doze mode.
28. What is the difference between Fragments and Activities?
Activity: Entry point, manages window, has its own lifecycle
Fragment: Modular UI component within Activity, reusable, can combine multiple fragments. Modern: Single Activity + multiple Fragments/Compose screens.
29. Explain Android memory management and how to avoid ANRs.
ANR: Application Not Responding—main thread blocked >5 seconds.
Prevention: Move I/O, network, database to background threads. Use coroutines/RxJava. Profile with StrictMode.
30. How does ProGuard/R8 work?
Code optimization and obfuscation for release builds.
Features: Shrinking (removes unused code), optimization, obfuscation (renames classes/methods), requires keep rules for reflection/serialization.
31. What are Content Providers?
Interface for sharing data between apps securely. URI-based access, permissions controlled.
Use cases: Sharing data with other apps, FileProvider for secure file sharing, required for widgets accessing app data.
32. Explain Hilt dependency injection.
Hilt is built on Dagger, simplified for Android. Predefined components matching Android lifecycles.
Annotations: @HiltAndroidApp, @AndroidEntryPoint, @Inject, @Module, @Provides, @Singleton, @ViewModelScoped.
Cross-Platform (Questions 33-40)
33. Compare React Native vs Flutter.
React Native: JavaScript/TypeScript, uses native components, larger ecosystem, hot reload.
Flutter: Dart, custom rendering engine (Skia), consistent UI across platforms, faster performance in complex animations.
34. How does the React Native bridge work?
JavaScript runs in JSC/Hermes, communicates with native via async JSON bridge.
New Architecture: JSI (JavaScript Interface) enables synchronous calls, TurboModules for lazy loading, Fabric for concurrent rendering.
35. How do you handle native functionality in cross-platform apps?
React Native: Native Modules (write native code exposed to JS), community packages.
Flutter: Platform Channels (method channels for async communication), plugins.
36. Explain Flutter widget lifecycle.
StatefulWidget: createState → initState → didChangeDependencies → build → didUpdateWidget → dispose. setState triggers rebuild. build can be called many times.
37. How do you manage state in React Native?
- Local: useState, useReducer
- Global: Context API, Redux, Zustand, Jotai
- Server state: React Query, SWR
- Navigation state: React Navigation
38. What are the performance considerations for cross-platform apps?
- Minimize bridge crossings (React Native)
- Use FlatList/SectionList, avoid ScrollView for long lists
- Memoize expensive computations
- Optimize images (caching, proper sizing)
- Profile with Flipper/DevTools
- Use Hermes engine (React Native)
39. How do you handle different screen sizes and orientations?
Use relative sizing (flex, percentages), responsive breakpoints, safe area handling, test on multiple devices/simulators. Consider tablets and foldables.
40. What testing strategies do you use for mobile apps?
- Unit: Business logic, ViewModels (Jest, XCTest, JUnit)
- Integration: Multiple components together
- UI: XCUITest, Espresso, Detox
- Snapshot: Visual regression testing
- E2E: Full user flows on real devices
Ace Your Mobile Interview
Mobile interviews often include live coding and architecture discussions. LastRound AI helps you practice explaining your design decisions and coding solutions in real-time.
