Mobile App Developer
Mobile app development questions
208 questions on Mobile app development for mobile app developers, easiest first.
Easy 63
- StatelessWidget or StatefulWidgeteasy
- When to ask for permissionseasy
- Showing a long listeasy
- Where to store an auth tokeneasy
- Flutter hot reload vs restarteasy
- Why list items need keyseasy
- What AndroidManifest.xml is foreasy
- Crash when asking for the cameraeasy
- Why use dp and pointseasy
- Reading another app's fileseasy
- Saving a theme preferenceeasy
- Decoding JSON with extra keyseasy
- What a push token is foreasy
- Play Console rejects the build versioneasy
- Why apps are code signedeasy
- Minimum touch target sizeeasy
- Supporting dark mode properlyeasy
- Making a composable reusableeasy
- Counter jumps back to zeroeasy
- Showing 5,000 orderseasy
- Letting users pick a photoeasy
- Saving an object in AsyncStorageeasy
- Remote image does not appeareasy
- Material 3 theming from one coloureasy
- onPause versus onStopeasy
- iOS app moved to the backgroundeasy
- viewDidLoad or viewWillAppeareasy
- Cold start versus warm starteasy
- Tabs that forget their scroll positioneasy
- Minimum text contrasteasy
- Margins that work in RTLeasy
- Points to pixels on a @3x iPhoneeasy
- Icons that stay sharpeasy
- Loading images in a feedeasy
- Where to keep a cart of productseasy
- Files vanish from the cache foldereasy
- Spinner that never stopseasy
- Splash screens on Android 12 and latereasy
- Right keyboard for a phone numbereasy
- Who actually delivers a pusheasy
- Sending one alert to many userseasy
- Badge shows the wrong numbereasy
- Daily reminder without a servereasy
- Users disable all notificationseasy
- Runtime permissions on Androideasy
- Google Play Data safety sectioneasy
- Secret key in the app codeeasy
- HTTP request blocked on iOSeasy
- Blocking screenshots of sensitive screenseasy
- Logging the login requesteasy
- Copying a one-time passwordeasy
- A standard for mobile app securityeasy
- What to clear on logouteasy
- Validation only in the appeasy
- Google Play release trackseasy
- Reading crash-free userseasy
- Finding where users give upeasy
- Urgent fix waiting in revieweasy
- Rejected for app completenesseasy
- Why cut a release brancheasy
- Sharing test builds with QAeasy
- Writing release noteseasy
- ForEach over a custom structeasy
Medium 83
- remember vs rememberSaveablemedium
- @State vs @Binding in SwiftUImedium
- Offline-first data flowmedium
- Reliable background uploadmedium
- Verified links that open the appmedium
- Out of memory with imagesmedium
- LaunchedEffect keyed on Unitmedium
- Room version bump without migrationmedium
- Unreadable iOS crash stack tracesmedium
- Relying on silent pushes for syncmedium
- Notifications missing on Android 13medium
- Turning off a feature without a releasemedium
- What fastlane match solvesmedium
- Adding to a list in statemedium
- Mixed item types in a LazyColumnmedium
- Cleaning up a sensor listenermedium
- Passing an order to the detail screenmedium
- Type-safe routes in Navigation Composemedium
- User denied the camera oncemedium
- Analytics logged dozens of timesmedium
- Getting a result back from a screenmedium
- navigate versus push in a stackmedium
- Passing a callback as a route parammedium
- Refreshing when a screen regains focusmedium
- Mapping URLs to screensmedium
- Why teams adopt MMKVmedium
- Requesting the right image sizemedium
- Protecting routes with go_routermedium
- Expo push token or FCM tokenmedium
- What a ViewModel survivesmedium
- Why SceneDelegate existsmedium
- State hoisting in Jetpack Composemedium
- The @Observable macro in SwiftUImedium
- What triggers an ANRmedium
- Supporting Dynamic Type on iOSmedium
- Supporting Arabic in a UAE appmedium
- Formatting dates for usersmedium
- Layouts for tablets and foldablesmedium
- Converting dp to pixelsmedium
- Room query on the main threadmedium
- Why move to DataStoremedium
- Slow filter on a local tablemedium
- Inserting 5,000 rows slowlymedium
- Showing data instantly on openmedium
- Optimistic like buttonmedium
- Which app process is killed firstmedium
- Shrinking bundled imagesmedium
- Background jobs delayed for some usersmedium
- Podcast stops when the screen locksmedium
- Pushes stop after a reinstallmedium
- Asking for push without a promptmedium
- Reply from the notificationmedium
- Push payload too largemedium
- APNs key or certificatemedium
- Explaining why after a denialmedium
- Permission permanently deniedmedium
- Which iOS location permission to askmedium
- User grants only approximate locationmedium
- Choosing a profile photo on Androidmedium
- Using the advertising identifier on iOSmedium
- OAuth login from a mobile appmedium
- Cleartext HTTP fails on Androidmedium
- Trusting a debug proxy only in debugmedium
- What R8 obfuscation gives youmedium
- Encrypting a local databasemedium
- Sensitive data in device backupsmedium
- Deep link sets the payment amountmedium
- Adding a free analytics SDKmedium
- Card number in the app switchermedium
- TestFlight internal and external testersmedium
- How iOS phased release worksmedium
- Upload rejected for the same versionmedium
- Play target API requirementmedium
- Paying for groceries in an iOS appmedium
- Account deletion in the appmedium
- Making users updatemedium
- Obfuscated Android crash tracesmedium
- Remote config on first launch offlinemedium
- Asking for a store ratingmedium
- CI build differs from a laptop buildmedium
- Choosing devices to test onmedium
- Opening a deep link three screens inmedium
- Handling the APNs device tokenmedium
Hard 62
- Testing process deathhard
- Offline edit conflictshard
- Crash spike during a releasehard
- Certificate pinning trade-offhard
- Wrong row expanded after inserthard
- Stale callback in a long effecthard
- PendingIntent crash on Android 12hard
- Foreground service fails on Android 14hard
- Exported activity loading any URLhard
- Keychain read fails in backgroundhard
- When a BGAppRefreshTask runshard
- Stopping cheaters calling the APIhard
- Duplicate orders from offline retrieshard
- FCM handler skipped in backgroundhard
- Deep link lost after loginhard
- Back goes to the login screenhard
- Back handler stopped workinghard
- Jumping to row 800 in a FlatListhard
- Tuning FlatList windowSizehard
- State leaking in FlashList rowshard
- Selected row does not highlighthard
- Blocking back with unsaved changeshard
- Using SavedStateHandlehard
- App killed during a slow launchhard
- Speeding up first launch on Androidhard
- Duplicate screens from notification tapshard
- Toolbar under the status bar on Android 15hard
- Core Data objects across threadshard
- Readers blocked by a writerhard
- Large downloads in Documents on iOShard
- Downloads that continue after the app closeshard
- Periodic sync every 5 minuteshard
- Trusting a connectivity checkhard
- Replaying queued offline actionshard
- App killed in the background on iOShard
- Deleted items come back after synchard
- Trusting the phone's clockhard
- Changing a channel's importancehard
- Images in iOS push notificationshard
- Alarm app on Android 14hard
- Requesting background locationhard
- Gallery app on Android 13hard
- User selects "Limited" photo accesshard
- Apple privacy manifesthard
- Login page inside a WebViewhard
- Detecting a stolen refresh tokenhard
- Relying on jailbreak detectionhard
- Exposing native code to a WebViewhard
- Attacker installs a CA certificatehard
- Overlay tricks the user into tappinghard
- Biometric login that can be bypassedhard
- Reading roles from a JWT in the apphard
- Lost the Android upload keyhard
- Renaming a field in the APIhard
- Play vitals thresholdshard
- Shrinking the install with feature moduleshard
- Fastest fix for a live bughard
- Rolling back a bad releasehard
- New Play developer account cannot publishhard
- Raising the minimum OS versionhard
- Rows showing the wrong datahard
- @State ignores the new valuehard