iOS interview practice

Real interview questions as two-minute exercises. Commit to an answer first, then check it and read the full explanation with current Swift code.

Prefer to just read? Every question has Show answer. Progress is saved on this device only.

  1. PredictPick what you think happens, or tap the line with the bug.
  2. CheckSee whether you were right, and why every other option is wrong.
  3. Learn itRead the 30-second answer, then the deep dive and follow-ups.

– interview-ready · 192 questions

– of 192 tried

Saved on this device. Interview-ready means you got it right on two different days. Guesses and hints count for less.

Daily 5

The same five questions for everyone today, with a grid to share. Needs JavaScript. Start with the first question.

Open today's Daily 5 page

Readiness by topic

Your progress is saved in this browser only. With JavaScript on, this shows each topic's readiness and lets you export your progress to a file or import it on another device.

Topics

Concurrency

async/await, tasks, actors, Sendable and the Swift 6.2 defaults, plus the GCD questions interviewers still ask.

17 questions

SwiftUI

State ownership, Observation, view identity, navigation, layout and the SwiftUI bugs interviewers love to show you.

22 questions

Swift language

Optionals, value semantics, protocols, generics, closures, error handling and the modern Swift features interviews test.

23 questions

Memory & ARC

How ARC counts references, how retain cycles form and break, weak vs unowned, and how to find leaks.

7 questions

UIKit

View controller lifecycle, Auto Layout, lists and collections, hit-testing and navigation in UIKit.

13 questions

Networking

URLSession with async/await, Codable, retries, background transfers, testable network layers and image pipelines.

11 questions

Combine

Publishers, operators and subscribers, cancellation, timing operators, errors, testing, and when to pick async/await instead.

12 questions

Persistence

Choosing storage, UserDefaults, Keychain, Core Data, SwiftData, files, migrations and safe data cleanup.

10 questions

Architecture & patterns

MVC to TCA, MVVM done right, coordinators, dependency injection, classic patterns and modularization.

9 questions

Testing

XCTest and Swift Testing, async and concurrent tests, test doubles, UI tests, TDD and LLDB.

8 questions

Security

Defence in depth on iOS: Keychain, pinning, biometrics, sandboxing, secrets and end-to-end encryption.

7 questions

Performance

Profiling with Instruments, smooth scrolling, rendering, launch time, app size and measuring before fixing.

10 questions

Platform & distribution

App lifecycle, push, background work, location, deep links, signing, App Review, interop and device integrations.

18 questions

Modern platform

Widgets, App Intents, Live Activities, StoreKit 2, privacy manifests, Liquid Glass, previews and on-device models.

9 questions

Accessibility & localization

VoiceOver, Dynamic Type, accessible custom components, String Catalogs, formatting and right-to-left layouts.

6 questions

System design scenarios

Big-tech style design rounds: feeds, caches, offline-first, maps, media, payments, chat and incident response.

10 questions

All questions

Concurrency

  1. Sequential await vs async letPredict · timeline
  2. async/await vs completion handlersPick the fix
  3. async let vs TaskGroupPick the fix · timeline
  4. Cooperative cancellationPredict · timeline
  5. Task {} vs Task.detachedPick the fix
  6. What is an actor?Pick the fix
  7. Actor reentrancy: check, await, then actPredict · timeline
  8. @MainActor view modelsSpot the bug
  1. Sendable and Swift 6 strict checkingPick the fix
  2. Swift 6.2: default MainActor and @concurrentPredict
  3. Mutex vs actorPick the fix
  4. Serial vs concurrent queuesPredict
  5. DispatchQueue.main.sync on the main threadPredict
  6. Reader-writer with a barrier vs an actorSpot the bug
  7. Bridging callbacks with AsyncStreamPredict
  8. OperationQueue vs GCDPick the fix
  9. Single-flight token refreshPick the fix

SwiftUI

  1. SwiftUI vs UIKit: key differencesPredict
  2. Which property wrapper for which data?Pick the fix
  3. @State vs a plain varPredict
  4. @StateObject vs @ObservedObjectPredict
  5. @Observable model keeps resettingSpot the bug · Pick the fix
  6. @Observable vs ObservableObjectPredict
  7. @Bindable for passed-in modelsPick the fix
  8. @Binding and the $ prefixPick the fix
  1. View identity: if/else vs a modifierPredict
  2. Why body runs often, and keeping it cheapPredict
  3. .task vs .onAppear + TaskSpot the bug
  4. .task(id:) and built-in debouncingPredict
  5. NavigationStack and deep linksPick the fix
  6. Custom environment values with @EntryPick the fix
  7. ViewModifier vs AnyViewPick the fix
  8. .animation(_:value:) vs withAnimationPredict
  9. GeometryReader vs ViewThatFits and LayoutPick the fix
  10. UIViewRepresentable feedback loopsSpot the bug
  11. Loading and error state in SwiftUISpot the bug
  12. @FocusStateFill the blank
  13. @ViewBuilderPick the fix
  14. A timer that re-renders the whole screenPick the fix

Swift language

  1. Optionals and why Swift has themPredict
  2. Value types vs reference typesPredict
  3. Protocols vs abstract classesPick the fix
  4. Closures and capture listsPredict
  5. @escaping vs non-escaping closuresPick the fix
  6. GenericsPick the fix
  7. Associated types and primary associated typesPick the fix
  8. Enums with associated and raw valuesPredict
  1. willSet and didSetPredict
  2. Stored, computed and lazy propertiesPredict
  3. The defer statementPredict
  4. Result and typed throwsPick the fix
  5. inout parametersPredict
  6. Key pathsPick the fix
  7. Opaque types (some) vs existentials (any)Pick the fix
  8. @autoclosurePredict
  9. Copy-on-writePredict
  10. Property wrappersFill the blank
  11. == vs ===Predict
  12. Swift macrosPick the fix
  13. Phantom typesPick the fix
  14. HashableSpot the bug
  15. Noncopyable types (~Copyable)Pick the fix

Memory & ARC

  1. How ARC worksPredict
  2. Retain cycles and how to break themSpot the bug
  3. Retain cycles in closuresSpot the bug
  4. weak vs unownedPick the fix
  5. Autorelease pools todayPick the fix
  6. Finding memory leaksOrder the steps
  7. Responding to memory pressurePick the fix

UIKit

  1. The UIViewController lifecycleOrder the steps
  2. How Auto Layout worksPick the fix
  3. Content hugging and compression resistancePredict
  4. frame vs boundsPredict
  5. Table and collection view cell reuseSpot the bug
  6. UICollectionView vs UITableView and diffable data sourcesPick the fix
  7. UICollectionViewCompositionalLayoutPick the fix
  8. layoutSubviewsPick the fix
  1. Hit-testing and the responder chainPredict
  2. Passing data between view controllersPick the fix
  3. Modal presentation stylesPredict
  4. viewDidLoad vs initPick the fix
  5. intrinsicContentSizeFill the blank

Networking

  1. Making a network requestSpot the bug
  2. POST requests with a JSON bodyFill the blank
  3. Codable and mismatched keysPredict
  4. Retries with exponential backoffPick the fix
  5. App Transport Security (ATS)Pick the fix
  6. A testable network layerPick the fix
  7. URLSessionConfigurationPick the fix
  8. Rate limits and temporary outagesPick the fix
  1. Resilient large downloadsPick the fix
  2. Reliable photo uploadsPick the fix
  3. A fast image-loading pipelineOrder the steps

Combine

  1. What Combine is forPick the fix
  2. Publishers, operators and subscribersOrder the steps
  3. AnyCancellable and subscription lifetimeSpot the bug
  4. debounce vs throttlePredict
  5. combineLatestPredict
  6. merge vs zipPredict
  7. Error handling in CombinePredict
  8. eraseToAnyPublisherPick the fix
  1. PassthroughSubject vs CurrentValueSubjectPick the fix
  2. Testing Combine publishersPick the fix
  3. Combine vs async/awaitPick the fix
  4. Preventing stale search resultsSpot the bug

Persistence

  1. Choosing the right storagePick the fix
  2. Using UserDefaults correctlyPick the fix
  3. Storing secrets in the KeychainFill the blank
  4. The Core Data stackOrder the steps
  5. Core Data and threadingPick the fix
  6. SwiftDataFill the blank
  7. Reading and writing filesPick the fix
  8. Rolling out a breaking schema changeOrder the steps
  9. Feature flags that change stored dataPick the fix
  10. What to remove on logoutPick the fix

Architecture & patterns

  1. MVC, MVVM, VIPER and TCA comparedPick the fix
  2. MVVM done rightSpot the bug
  3. The delegate patternPick the fix
  4. The observer patternPick the fix
  5. Factory and builder patternsPick the fix
  6. Dependency injectionSpot the bug
  7. Strategy and command patternsPick the fix
  8. The coordinator patternPick the fix
  9. Modularizing a growing appOrder the steps

Testing

  1. Writing good unit tests with XCTestSpot the bug
  2. Testing async codePick the fix
  3. Test-driven developmentOrder the steps
  4. Test doubles: stubs, spies, mocks and fakesPick the fix
  5. UI tests with XCUITestFill the blank
  6. Swift TestingFill the blank
  7. Testing concurrent code without sleepsPick the fix
  8. Debugging with LLDBPick the fix

Security

  1. The pillars of iOS app securityPick the fix
  2. Certificate and public key pinningPick the fix
  3. Face ID and Touch ID done securelyPick the fix
  4. Jailbreak detectionPick the fix
  5. Protecting API keysPick the fix
  6. App sandboxingPick the fix
  7. End-to-end encryption in a chat appPick the fix

Performance

  1. Profiling an iOS appPick the fix
  2. Dropped frames and hitchesPredict
  3. Smooth scrolling in listsPick the fix
  4. Offscreen renderingPick the fix
  5. Lazy loadingPick the fix
  6. Reducing app sizePick the fix
  7. Fixing a launch time regressionOrder the steps
  8. Measuring a slow screen without guessingPick the fix
  9. A 50,000-item list that stutters on updatesPick the fix
  10. From a tap to a pixel on screenOrder the steps

Platform & distribution

  1. App and scene lifecycle statesPredict
  2. How push notifications are deliveredOrder the steps
  3. Background work with BGTaskSchedulerPick the fix
  4. Getting the user's locationPick the fix
  5. Region monitoring and geofencingPick the fix
  6. Map annotations in SwiftUI and MapKitFill the blank
  7. The App Store review processPick the fix
  8. Code signing and provisioning profilesPick the fix
  1. Mixing Swift and Objective-CPick the fix
  2. KVC and KVOPick the fix
  3. Reliable universal linksPick the fix
  4. Routing a notification tap on cold startPick the fix
  5. Background sync without draining the batteryPick the fix
  6. Fixing a location feature that drains the batteryPick the fix
  7. Restoring navigation after the system kills the appPick the fix
  8. What an audio app must handlePick the fix
  9. Analytics that respect privacyPick the fix
  10. Syncing a phone app and a watch appPick the fix

Modern platform

  1. Building widgets with WidgetKitPick the fix
  2. App Intents and ShortcutsFill the blank
  3. Live ActivitiesOrder the steps
  4. In-app purchases with StoreKit 2Spot the bug
  5. Keeping subscription access correct everywherePick the fix
  6. Privacy manifestsPick the fix
  7. Adopting Liquid Glass in iOS 26Pick the fix
  8. SwiftUI previews with #Preview and @PreviewableFill the blank
  9. On-device models with Foundation ModelsPick the fix

Accessibility & localization

  1. Supporting VoiceOverFill the blank
  2. Supporting Dynamic TypePick the fix
  3. Localizing an iOS appPick the fix
  4. String Catalogs and pluralsPick the fix
  5. Making a custom card accessiblePick the fix
  6. Right-to-left languagesPick the fix

System design scenarios

  1. Designing an infinite-scroll social feedPick the fix
  2. A thread-safe LRU cachePredict
  3. Offline-first architectureOrder the steps
  4. A map with 10,000+ live pinsPick the fix
  5. Responding to a crash spikeOrder the steps
  6. An adaptive-bitrate player with Picture in PicturePick the fix
  7. A secure payment flowOrder the steps
  8. A 60 fps short-video feedPick the fix
  9. A chat timeline that survives retriesPick the fix
  10. A release that causes data lossOrder the steps