Skip to content

Mobile Developer interview questions

100 real questions with model answers and explanations for Junior candidates.

See a Mobile Developer resume example

Practice with flashcards

Spaced repetition · Hunter Pass

Questions

iOS and Android provide similar app capabilities through different SDKs, tools, and platform conventions.

  • iOS development normally uses Swift, Xcode, and Apple frameworks such as UIKit or SwiftUI.
  • Android development normally uses Kotlin, Android Studio, and AndroidX libraries such as Jetpack Compose.
  • Each platform has its own navigation, permission, background-work, and store-review rules, so a shared design still needs platform-specific decisions.

Why interviewers ask this: The interviewer is checking whether the candidate understands mobile platforms beyond naming their languages.

lifecycle

An application lifecycle describes platform-specific changes in whether an app or component is visible, interactive, backgrounded, or no longer running.

  • An app should start user-visible work when its screen becomes active and pause work such as camera capture when it leaves the foreground.
  • The operating system may terminate a background process to reclaim memory, so important state must not live only in RAM.
  • iOS reports application and scene phases, while Android provides lifecycle callbacks for activities and other components, so they are not one shared state machine.
  • Lifecycle callbacks are not a guarantee that every cleanup method will run before termination.

Why interviewers ask this: A strong answer connects lifecycle states to resource use and state restoration rather than only listing callback names.

reactflutter

I would choose native development when platform integration or platform-specific behavior matters more than sharing UI code.

  • Swift and Kotlin give direct access to new iOS and Android APIs without waiting for a cross-platform wrapper.
  • React Native or Flutter can share much of the product logic and UI across platforms, which helps a small team ship both apps.
  • Cross-platform code still needs native work for unsupported SDKs, widgets, background modes, or unusual hardware features.
  • The choice should reflect team skills, required device APIs, and how closely each app must follow its platform conventions.

Why interviewers ask this: The interviewer wants a balanced platform choice based on concrete constraints rather than loyalty to one framework.

swift

A junior iOS developer should be comfortable with Swift constants, optionals, functions, collections, structs, and classes.

  • Use let for an immutable binding and var only when the value must change.
  • Handle an optional with if let, guard let, optional chaining, or a default instead of force-unwrapping it.
  • Prefer a struct for simple value data such as a Profile and a class when shared identity or inheritance is required.
  • Use protocols to describe behavior that different types can implement without sharing a superclass.

Why interviewers ask this: The interviewer is evaluating whether the candidate can write safe, idiomatic Swift rather than merely recognize its syntax.

kotlin

Kotlin makes Android code safer and more concise through null safety, data classes, extension functions, and coroutines.

  • A nullable type is written with ?, and safe calls plus the Elvis operator handle absent values explicitly.
  • A data class generates value-oriented helpers such as equals, hashCode, copy, and a readable toString.
  • Extension functions add convenient operations to an existing type without modifying or inheriting from it.
  • Coroutines express asynchronous work sequentially while structured scopes control its lifetime.

Why interviewers ask this: The interviewer is checking whether the candidate understands Kotlin features used daily in Android projects.

flutterdart

Dart uses sound null safety and supports both mutable variables and immutable bindings.

  • final assigns a value once at runtime, while const creates a compile-time constant.
  • A type ending in ? may hold null; a non-nullable String cannot.
  • Named parameters make widget constructors readable, and required marks a named argument that callers must provide.
  • An async function returns a Future, and await reads its eventual result without blocking the UI thread.

Why interviewers ask this: A strong answer covers the Dart features that appear immediately in real Flutter widgets and data loading.

reacttypescript

TypeScript catches many shape and nullability mistakes before the React Native app runs.

  • Interfaces or type aliases can describe API responses, component props, and navigation parameters.
  • Union types model a small set of states, such as loading, success, or error, more safely than unrelated booleans.
  • Type narrowing checks a value before code uses properties available only on one union member.
  • TypeScript types disappear at runtime, so external JSON still needs validation when its contents are untrusted.

Why interviewers ask this: The interviewer is checking whether the candidate knows both the benefits and the runtime boundary of TypeScript.

missing-data

Nullable values must be explicit and checked before ordinary use; the exact syntax depends on the chosen stack.

  • Swift uses optionals such as String? and requires unwrapping before ordinary use.
  • Kotlin and Dart also mark nullable types with ?, while safe calls and explicit checks narrow them to non-null values.
  • TypeScript checks null only when strictNullChecks is enabled, and those checks do not validate runtime JSON.
  • Force operators such as Swift !, Kotlin !!, or Dart ! bypass safety and should be reserved for proven invariants.

Why interviewers ask this: The interviewer is testing whether the candidate can prevent a common class of mobile crashes across supported stacks.

A value is copied as independent data, while a reference lets multiple variables point to the same object.

  • Swift structs have value semantics, so changing a copied settings struct does not change the original.
  • Swift classes, Kotlin class instances, and Dart objects use reference identity, so mutations can be visible through every reference.
  • Kotlin data classes provide copy helpers but their instances are still references, and nested mutable objects can still be shared.
  • Immutable value-style models make UI state changes easier to reason about because updates replace data instead of mutating it secretly.

Why interviewers ask this: A strong answer explains the observable effect on state rather than reciting memory terminology.

asyncconcurrency

Asynchronous work keeps network and disk operations from freezing the main UI thread.

  • Swift async and await, Kotlin coroutines, and Dart Futures suspend a task while it waits instead of blocking the interface.
  • React Native commonly represents async results with Promises and consumes them with async and await.
  • UI updates belong on the platform's main thread or main actor even when the data was loaded elsewhere.
  • Errors and cancellation must be handled explicitly because a screen may disappear before the operation completes.

Why interviewers ask this: The interviewer is evaluating whether the candidate connects async syntax to responsiveness and lifecycle safety.

uikit

UIKit commonly builds a screen from a UIViewController and a hierarchy of UIView objects.

  • Controls such as UILabel, UIButton, and UITableView are created in code or connected from a storyboard.
  • Auto Layout constraints describe positions and sizes relative to guides, siblings, or the parent view.
  • The controller responds to lifecycle callbacks and user actions, then updates views imperatively.
  • Keeping data and business rules outside the view controller prevents it from becoming an oversized catch-all class.

Why interviewers ask this: The interviewer is checking whether the candidate understands UIKit's core objects and imperative update model.

typesswiftswiftui

SwiftUI declares a view as a function of current state and recomputes its body when observed state changes.

  • VStack, HStack, and ZStack compose child views vertically, horizontally, or in layers.
  • A view-owned simple value can use @State, while shared model data should come from an observable source.
  • Modifiers return new view descriptions, so their order can change layout and appearance.
  • The body may be evaluated many times, so it should describe UI rather than start uncontrolled side effects.

Why interviewers ask this: A strong answer distinguishes declarative rendering from manually mutating UIKit controls.

composejetpack

Compose recomposes composable functions that read state whose value has changed.

  • remember retains a value across recompositions, while rememberSaveable can also restore supported values after activity recreation.
  • Mutable state should be changed through its state holder so Compose can observe the update.
  • Compose can skip unaffected composables when their inputs remain stable.
  • Expensive calculations should be moved out of frequently recomposed code or memoized for the inputs they use.

Why interviewers ask this: The interviewer is checking whether the candidate understands Compose state and avoids treating recomposition as a full screen rebuild.

react

React Native renders platform views from React components rather than displaying ordinary HTML in a browser.

  • View, Text, and Pressable map to native-backed interface primitives instead of div, span, and button elements.
  • Layout uses Yoga's Flexbox model, with defaults that differ from browser CSS, such as a column main axis.
  • TypeScript or JavaScript handles React logic, while native modules expose device APIs that the framework does not provide directly.
  • A WebView is a separate component for web content and is not how a normal React Native screen is rendered.

Why interviewers ask this: The interviewer wants to confirm that the candidate does not confuse React Native with a website wrapped as an app.

flutterwidgets

A Flutter widget is an immutable description of part of the user interface.

  • StatelessWidget has no mutable State object of its own, but it can still depend on inherited context such as Theme or MediaQuery.
  • Widgets form a configuration tree that Flutter turns into element and render-object structures for updates and layout.
  • Common composition widgets include Row, Column, Stack, Padding, and ListView.
  • Building small widgets with explicit constructor inputs keeps rebuilds and reuse understandable.

Why interviewers ask this: The interviewer is checking whether the candidate understands that a widget is a description, not a mutable screen object.

reactcomposeswiftui

Declarative UI means describing what the interface should look like for the current state rather than issuing a sequence of view mutations.

  • A loading state returns a spinner, while loaded state returns content, so the state model drives the visible branch.
  • The framework compares or reevaluates descriptions and applies the necessary updates to the rendered interface.
  • State should have a clear owner; duplicating the same value in several components creates conflicting sources of truth.
  • Rendering code should remain free of uncontrolled side effects because it may run repeatedly.

Why interviewers ask this: A strong answer identifies the shared model without pretending that all four frameworks have identical internals.

uisystem-design

Mobile layouts express relationships and flexible space instead of relying on fixed pixel coordinates.

  • UIKit uses Auto Layout constraints, while SwiftUI and Compose compose stacks, frames, and flexible modifiers.
  • React Native uses Flexbox, and Flutter uses constraints flowing down with sizes flowing up through its layout tree.
  • Fixed sizes are appropriate for controls such as icons, but content areas should expand, wrap, or scroll.
  • Test narrow phones, large phones, landscape, and enlarged text because screen width alone does not cover every layout constraint.

Why interviewers ask this: The interviewer is evaluating whether the candidate can build adaptive layouts rather than tune one screenshot.

ui

Logical units keep controls at a similar perceived size across screens with different pixel densities.

  • iOS lays out in points, Android uses dp for geometry and sp for text, and Flutter uses logical pixels.
  • The operating system maps those units to a device-specific number of physical pixels.
  • An image asset may need multiple density variants so it stays sharp without changing its layout size.
  • Text should respect the user's font scaling rather than being forced into a fixed physical height.

Why interviewers ask this: The interviewer is checking whether the candidate understands density independence and accessible text sizing.

Safe areas and insets describe screen regions obstructed by system UI or device hardware.

  • Status bars, camera cutouts, navigation bars, and the home indicator can overlap content drawn edge to edge.
  • iOS exposes safe-area guides, while Android exposes window insets for system bars and display cutouts.
  • Flutter SafeArea and framework-specific inset APIs can add the required padding around important content.
  • Backgrounds may extend behind system UI, but tappable controls and essential text should remain reachable and visible.

Why interviewers ask this: A strong answer shows how to support modern edge-to-edge screens without blindly padding the entire interface.

State should live at the lowest shared owner that needs to coordinate all readers and writers.

  • Keep temporary control state, such as whether a menu is open, inside the component that owns the menu.
  • Lift shared form or selection state to a parent or screen model and pass values plus events downward.
  • Derive values such as a filtered count from source state instead of storing a second copy that can become stale.
  • Recomposition or rebuild is expected after state changes, so expensive I/O must not be started directly by ordinary rendering.

Why interviewers ask this: The interviewer is testing whether the candidate can avoid duplicated state and accidental work during rendering.

Locked questions

  • 21

    How do navigation stacks work in a mobile app?

    navigation
  • 22

    What should happen when a user opens a mobile app from an external route?

  • 23

    Why does a screen or component have its own lifecycle?

    componentslifecycle
  • 24

    What is an Android configuration change, and why can it recreate an activity?

    android-componentslifecycleconfig
  • 25

    What makes a mobile interface accessible?

    types
  • 26

    How should an app handle taps, swipes, and more complex touch gestures?

    interaction
  • 27

    How do you keep a form usable when the software keyboard appears?

    forms
  • 28

    How would you structure validation for a mobile form?

    formsvalidationswift
  • 29

    Why should a long mobile list use a virtualized list component?

    componentsvirtualization
  • 30

    Why do items in a declarative list need stable keys?

  • 31

    What happens when a mobile app makes an HTTP request?

    http
  • 32

    What makes an HTTP API RESTful from a mobile client's point of view?

    resthttpui
  • 33

    What should a mobile developer watch for when decoding JSON?

  • 34

    Which HTTP status codes should a junior mobile developer recognize?

    httpstatus-codes
  • 35

    How should a mobile screen present API errors?

    api
  • 36

    How do you load API data without freezing a mobile screen?

    api
  • 37

    Why should a network request be cancellable when a screen closes?

  • 38

    How should a mobile app load and cache remote images?

    caching
  • 39

    When should an app use preferences versus ordinary files?

  • 40

    When should a mobile app use SQLite, Keychain, or Android Keystore?

    secure-storage
  • 41

    How should a mobile app request a runtime permission?

    permissions
  • 42

    What steps are involved in adding a basic camera capture feature?

  • 43

    What should a junior developer consider when adding location to an app?

  • 44

    How do push notifications reach a mobile app?

    android-components
  • 45

    What is the difference between a custom-scheme deep link and a verified web link?

    navigation
  • 46

    What does the testing pyramid look like for a mobile app?

    testing
  • 47

    How do you use a debugger to investigate a wrong value on a mobile screen?

    debugging
  • 48

    What are build variants or configurations used for in mobile development?

    config
  • 49

    How do signing and beta distribution work for iOS and Android apps?

    distributions
  • 50

    What Git workflow should a junior mobile developer know?

    git
  • 51

    A user taps Save, the data changes in memory, but the screen still shows the old value. What would you check first?

    memory
  • 52

    A React Native screen adds an AppState listener again after every render, and one state change triggers several callbacks. How would you fix it?

    reactcallbacks
  • 53

    After deleting one row from a list, the next row displays the deleted row's toggle state. What is the likely cause and fix?

  • 54

    The profile screen crashes only for users who have no avatar URL. How would you diagnose and fix it?

  • 55

    On Android, a form is cleared when the phone rotates although the user has not submitted it. What would you change?

    forms
  • 56

    A checkout draft disappears after the app stays in the background and the operating system later kills it. How would you fix that?

    system-design
  • 57

    On the sign-up screen, the keyboard covers the last input and the Continue button. What practical fix would you make?

  • 58

    A product card looks correct on a large emulator but its price overlaps the button on a small phone. How would you fix it?

  • 59

    After switching the phone to dark mode, a custom label becomes nearly invisible. What would you change?

    theming
  • 60

    With the largest system text size enabled, the settings row clips its title and hides the switch. How would you address it?

    system-design
  • 61

    A network request sometimes stays pending forever and the spinner never stops. What would you add?

  • 62

    The feed briefly shows an empty-state message before its first request finishes. How would you fix that UI state?

    state
  • 63

    The API returns HTTP 401, but the app shows a generic Something went wrong message. What should the client do?

    httpgenerics
  • 64

    A request succeeds with HTTP 200, but decoding fails after the backend changes price from a number to a string. How would you handle it?

    http
  • 65

    A Flutter screen throws "Vertical viewport was given unbounded height" after a ListView is placed inside a Column. How would you fix it?

    cssflutterschema
  • 66

    A message send fails when the phone briefly goes offline. How would you provide a safe retry?

    resilience
  • 67

    Some remote images show blank boxes when their URLs fail. What should the image component do?

    components
  • 68

    The profile screen keeps showing an old display name after the user edits it successfully. How would you investigate stale cache data?

    caching
  • 69

    When loading the next page of a feed, several posts appear twice. What would you check and fix?

  • 70

    A pull-to-refresh request and an older page request finish in the opposite order, causing refreshed items to disappear. How would you fix the race?

  • 71

    A notification preference appears saved, but returns to its default after the app restarts. What would you check?

    android-components
  • 72

    A notes screen should show only unfinished notes, but its SQLite query returns every row. How would you correct it?

    queries
  • 73

    After adding a non-null category column, existing users crash when the app opens its local database. What is the safe fix?

    databaseschemafundamentals
  • 74

    Exporting a report works on the emulator but fails on a real phone with a file permission error. How would you fix it?

    permissionslinux
  • 75

    During review you find an access token saved in plain preferences. Where should it go?

    tokens
  • 76

    The user denies microphone permission and the recording screen becomes unusable. What should the app do?

    permissions
  • 77

    After taking a photo, the app returns to the form but the preview remains empty. How would you debug the camera result?

    forms
  • 78

    A nearby-stores screen spins forever when location services are disabled. How would you handle that case?

    android-components
  • 79

    Opening a product deep link while the app is already running shows the home screen instead of that product. What would you fix?

    navigation
  • 80

    Tapping an order push notification opens the app but not the referenced order. How would you fix the navigation?

    navigationandroid-components
  • 81

    A list scrolls smoothly with 20 rows but stutters with 500. What basic checks and fixes would you try?

  • 82

    Opening a gallery of camera photos causes an out-of-memory crash. What would you change first?

    memory
  • 83

    The app freezes for two seconds when a large JSON file is opened. How would you fix the main-thread work?

    concurrency
  • 84

    A screen feels slow, but you do not know whether layout, networking, or code is responsible. How would you use a profiler?

    ui
  • 85

    A login bug happens only on one device, and the current log only says Login failed. What logging would you add?

    logging
  • 86

    A validation branch should run for an empty email, but it never does. How would a breakpoint help?

    validation
  • 87

    A production crash report points to ItemScreen line 42 with an index-out-of-range exception. How would you use the stack trace?

    indexeserror-handlingdebugging
  • 88

    A unit test for a price formatter expected 10.00 but now receives 10,00 on one machine. How would you fix the test?

    unit
  • 89

    A UI test sometimes taps Continue before the button becomes enabled. How would you reduce the flake?

  • 90

    You need to test a weather screen without calling the real API. How would you use a mock API?

    mockingapi
  • 91

    Git reports a conflict in the navigation file after you pull a teammate's changes. What steps would you take?

    navigationgit
  • 92

    An Android debug build works, but the release build cannot find a class from a library. What would you check?

  • 93

    A test build sends requests to the production API. How would you correct the environment configuration?

    configapi
  • 94

    An archive build fails with a signing error even though the app runs on the simulator. What would you inspect?

  • 95

    A TestFlight build finishes uploading but never appears for testers. What would you check?

  • 96

    A build uploaded to Google Play is not visible to your internal tester. What would you verify?

  • 97

    The store rejects an app because the reviewer cannot access the account-only features. How would you respond?

  • 98

    The iOS submission reports missing privacy manifest information for a newly added SDK. What would you do?

    android-components
  • 99

    A screen reader announces three Icon buttons with no names, so users cannot tell them apart. What is the fix?

    a11y
  • 100

    You are preparing a small app update for release tomorrow. What basic checklist would you follow?