When you walk into an iOS engineer interview, the interviewers are looking for three things: technical depth, product sense, and team fit. The easiest way to cover all three is to structure your preparation around the four typical rounds you’ll encounter:
- Phone screen – a quick fit check and a few easy‑tech questions.
- Technical interview – deep dive on code, architecture, and debugging.
- Behavioral interview – story‑telling about past work and collaboration.
- Role‑specific interview – product‑focused or system‑design questions tailored to the team.
Below you’ll find 40 questions split into those categories. For each round we highlight the 15 questions that appear most often and provide a full‑sentence answer template you can adapt to your own experience. The remaining 25 are given as one‑line prompts to keep you from getting stuck.
Phone Screen
1. Walk me through your resume
A concise narrative that ties together the roles, projects, and technologies that make you a good fit for the position.
2. Why iOS? Why this company?
Focus on the platform’s strengths (Swift, SwiftUI, strong ecosystem) and the company’s product vision that excites you.
3. What’s the most recent iOS app you shipped?
Briefly describe the app, your role, the key feature you owned, and the impact (e.g., user adoption, performance improvement).
4. How do you stay current with iOS updates?
Mention WWDC, Apple developer documentation, open‑source libraries, and a habit of prototyping new APIs.
5. Explain the difference between frame and bounds.
frame is the view’s rectangle in its superview’s coordinate system; bounds is the rectangle in its own coordinate system.
6. What is ARC and how does it work?
Automatic Reference Counting inserts retain/release calls at compile time; the compiler inserts them based on ownership semantics.
7. How do you debug a crash that only happens on a user’s device?
Use symbolic crash logs, Xcode’s Devices window, and, if needed, remote logging frameworks to reproduce the state.
8. What’s a weak reference and when would you use it?
A reference that does not increase the retain count; typical for delegate patterns to avoid retain cycles.
9. Describe a time you shipped a feature under a tight deadline.
Sample answer: "When the marketing team needed a limited‑time promotion, I took ownership of the discount‑code UI. I scoped the work, built a SwiftUI view, wrote unit tests, and shipped in two days, which let the campaign launch on schedule and boosted sales by 12 %.
10. How do you handle memory warnings?
Release caches, clear image data, and optionally reduce view hierarchy complexity.
11. What’s the difference between struct and class in Swift?
struct is a value type with copy‑on‑write semantics; class is a reference type with inheritance.
12. Explain Result type usage.
Encapsulates success or failure; you return it from async APIs and handle it with switch or try?.
13. How would you improve app launch time?
Profile with Instruments, defer non‑essential work, use lazy loading, and reduce the size of the initial storyboard.
14. What’s your approach to code reviews?
Look for readability, correctness, test coverage, and consistency with the team’s style guide.
15. Do you use any CI/CD tools for iOS?
Mention Fastlane, GitHub Actions, or Bitrise and how they automate builds, tests, and App Store uploads.
Technical Interview
16. Write a function that debounces rapid UI events.
func debounce<T>(delay: TimeInterval, queue: DispatchQueue = .main, action: @escaping (T) -> Void) -> (T) -> Void {
var workItem: DispatchWorkItem?
return { param in
workItem?.cancel()
workItem = DispatchWorkItem { action(param) }
queue.asyncAfter(deadline: .now() + delay, execute: workItem!)
}
}
Explain how the closure captures the workItem and resets the timer on each call.
17. How does Combine differ from async/await?
Combine is a reactive stream library that can compose multiple asynchronous sources; async/await is language‑level syntax for single‑task async code. Both can interoperate, but Combine shines for complex pipelines.
18. Explain the MVC vs MVVM trade‑offs in iOS.
MVC keeps Controllers thin but can lead to massive view controllers; MVVM moves presentation logic into ViewModels, improving testability and separation, at the cost of extra boilerplate.
19. How would you design a caching layer for images?
Use an in‑memory NSCache for recent images, a disk cache for persistence, and a URLSession wrapper that checks caches before downloading.
20. What is @MainActor and why is it useful?
It guarantees that the annotated code runs on the main thread, simplifying UI updates in async contexts.
21. Show how you’d unit‑test a network service.
Inject a protocol for the URL session, provide a mock implementation that returns predefined data, and assert that the service parses the response correctly.
22. Explain how you’d avoid retain cycles with closures.
Capture self weakly ([weak self]) inside the closure, and guard against nil before using it.
23. Describe the steps to migrate a legacy Objective‑C project to Swift.
Add a bridging header, convert files incrementally, enable the Swift compiler flag, and keep both languages interoperable during the transition.
24. How do you profile a memory leak?
Run Instruments → Leaks, take a snapshot, and trace the retaining path to the offending object.
25. What is a ResultBuilder and where would you use it?
A Swift feature that lets you build DSL‑style declarative syntax, used by SwiftUI’s view builders.
26. Explain the difference between lazy var and computed property.
lazy var is stored and evaluated once on first access; a computed property runs its getter every time.
27. How would you implement dark mode support?
Use asset catalogs with light/dark variants, respect UITraitCollection, and test UI on both appearances.
28. What is the purpose of App Clips?
Provide a lightweight, fast‑loading entry point for a specific task without installing the full app.
29. Describe a situation where you used Swift Package Manager.
Add a third‑party library as a package dependency, configure the target, and let Xcode resolve versions automatically.
30. How do you handle concurrency bugs?
Reproduce with thread sanitizers, add synchronization (serial queues, actors), and write deterministic tests.
Behavioral Interview
31. Tell me about a time you disagreed with a teammate.
Sample answer: "During a feature planning session, a designer wanted to postpone accessibility testing. I presented data on how early accessibility work reduces rework, and we agreed to integrate a quick audit into the sprint, which kept the release timeline intact.
32. Give an example of a project that failed and what you learned.
Briefly describe the goal, the misstep (e.g., insufficient stakeholder alignment), and the concrete improvement you applied later.
33. How do you prioritize work when you have multiple deadlines?
Explain using a simple matrix (impact vs effort) and communicating trade‑offs with the product owner.
34. Describe a time you mentored a junior engineer.
Highlight setting up regular code‑review sessions, pair programming, and tracking progress.
35. How do you handle ambiguous requirements?
Ask clarifying questions, create a minimal viable definition, and iterate with rapid prototypes.
Role‑Specific Interview
36. How would you design the architecture for a real‑time chat app?
Use a layered approach: UI (SwiftUI), business logic (actors handling message streams), networking (WebSocket service with reconnection logic), and persistence (Core Data for offline storage). Diagram the flow in a simple table.
37. What considerations are unique to building an iPad‑only app?
Leverage multi‑window support, adopt split‑view layouts, and test with larger touch targets.
38. Explain how you’d implement offline‑first syncing.
Queue local changes, use a conflict‑resolution strategy (e.g., last‑write‑wins or operational transforms), and sync when connectivity returns.
39. How do you measure the success of a new feature?
Define KPIs (e.g., retention, conversion), set up analytics events, and run A/B tests to compare against baseline.
40. What’s your process for reviewing a pull request from a teammate?
Check for functional correctness, readability, test coverage, and adherence to the team’s architectural guidelines.
Quick‑Reference One‑Liners (questions 5‑15, 21‑30, 32‑35, 37‑40)
- Explain
@objc– It exposes Swift declarations to the Objective‑C runtime for interoperability. - What is a
UIHostingController? – A bridge that lets you embed SwiftUI views inside UIKit hierarchies. - How do you prevent UI jank? – Keep heavy work off the main thread, use Instruments to spot bottlenecks, and pre‑warm views.
- What is
Core Dataconcurrency? – Use separate contexts per thread/queue and merge changes viaNSManagedObjectContextDidSavenotifications. - Explain
deep linking– URL schemes or universal links that open a specific screen inside the app. - How do you secure API keys? – Store them in the Keychain or fetch them from a secure server at runtime; avoid hard‑coding.
- What’s
SceneDelegateused for? – Managing multiple UI scenes (windows) in iOS 13+. - Explain
App Transport Security– Enforces HTTPS connections; you can configure exceptions in the plist when needed. - What is
SPMvsCocoaPods? – Both are dependency managers; SPM is built into Xcode and prefers Swift packages, while CocoaPods works with pods and a separate installation step. - Describe
Feature Flags– Runtime toggles that let you enable/disable functionality without redeploying. - How do you handle push notifications in the background? – Use silent notifications (
content‑available) to trigger background fetches. - What’s the purpose of
UIAccessibility– Provides semantic information for VoiceOver and other assistive technologies. - Explain
App Store Connect– The portal for submitting builds, managing TestFlight, and viewing analytics. - What’s a
StoryboardvsProgrammatic UIdebate? – Storyboards give visual layout but can become merge‑conflict heavy; code offers version‑control friendliness. - How do you measure battery impact? – Profile with Instruments → Energy Log and avoid unnecessary background tasks.
How to practice this
- Chunk your prep – Spend a week on each interview round. Use the sample answers to rehearse aloud; recording yourself helps catch filler words.
- Simulate the interview – Pair with a friend or use Call Assistant to listen and prompt you with the next question, keeping the conversation natural.
- Iterate on feedback – After each mock run, refine the stories to be tighter, add concrete metrics, and ensure every answer ties back to a resume bullet.
FAQ
- Q: How many questions should I memorize for a phone screen? A: Focus on 5–7 core questions. Knowing the exact wording isn’t as important as having a clear, concise story you can adapt.
- Q: Is SwiftUI required knowledge for all iOS roles? A: Most teams expect at least a basic grasp of SwiftUI, but many still use UIKit. Be ready to discuss both.
- Q: How deep should my architecture answers go? A: Aim for a high‑level diagram (layers, data flow) and be prepared to dive into one or two components if the interviewer asks.
- Q: What’s the best way to handle unexpected follow‑up questions? A: Pause, repeat the question for clarity, and anchor your response to a concrete example from your work.
Frequently asked questions
How many questions should I memorize for a phone screen?
Focus on 5–7 core questions. Knowing the exact wording isn’t as important as having a clear, concise story you can adapt.
Is SwiftUI required knowledge for all iOS roles?
Most teams expect at least a basic grasp of SwiftUI, but many still use UIKit. Be ready to discuss both.
How deep should my architecture answers go?
Aim for a high‑level diagram (layers, data flow) and be prepared to dive into one or two components if the interviewer asks.
What’s the best way to handle unexpected follow‑up questions?
Pause, repeat the question for clarity, and anchor your response to a concrete example from your work.
#iOS Engineer#question bank#interview prep#technical interview#behavioral