Cracking the iOS interview

Updated May 06, 2024#ios#swift#interview

iOS is a small niche in software development, the scope of knowledge you need to cover is quite stable over the years, and primarily using Swift and Objective-C as the main programming languages.



Preparing for an iOS interview is not much different from a frontend interview. Client-side development is a skill that we can easily show off, it follows that companies will often expect a portfolio of projects you’ve worked on.

Competition at prestigious companies is fierce with thousands applications from top engineers around the world. Regardless of your technical level and applying position, here are 5 factors that will have big influence on your way looking for a job:

  1. Technical proficiency - Problem solving, ios development.
  2. Years of experiences - The more the better, 3 to 5 is preferred.
  3. Personal projects - App Store apps, open source repos.
  4. Former employers - The more prestigious the better.
  5. Interviewing skills - Thinking out loud, telling stories, asking questions.

Recruiters often follow your decisions on date and time of interviews, so buy some time if you need to. Following are 5 common steps you’ll encounter for an iOS interview:

  1. Phone interview w/ hiring manager (0-1)
  2. Phone interview w/ team members (1-3)
  3. Take home assignment (0-1)
  4. Onsite interview (1)
  5. Offer negotiation (0-n)

One-shot interviews are rare these days unless you’re exceptional and invited to work by companies. Most of us will go through very long and grueling interview which might come in vain if we fail any step of it.

Technical Proficiency

Whether you love or hate data structures & algorithms, you have to take considerable amount of time to practice. Majority companies are using it and it’s not going to change anytime soon.

iOS is a small niche in software development, and the scope of knowledge you need to cover is quite stable over the years. You’re expected to have decent knowledge at following topics:

Design Principles

Basic Knowledge

  • Swift (Protocols, Generics)
  • Patterns (MVC, MVVM, VIPER)
  • Packages (SwiftPM, CocoaPods, Carthage)
  • Concurrency (GCD, Async/Await, Tasks, Actors)
  • Reactive Programming (Combine, RxSwift)
  • Storage (App, Scene, CoreData, Realm)
  • Network (URLSession, Alamofire)
  • Tools (Xcode, TestFlight, AppStore)
  • Guidelines (API, Interface, In-App Purchase)

iOS Frameworks

  • Foundation, SwiftUI, UIKit
  • XCTests, Combine, CoreData
  • CloudKit, StoreKit, PhotoKit
  • CoreGraphics, CoreAnimation

Open-source Libraries

Try to skim as many curated iOS interview questions as possible to familiarize yourself with everything. You can’t prepare for every possible question, but at least heard about it.

Take-Home Assignment

You should spend time working on your own app to put onto the App Store. It doesn’t have to be super-fancy: just something that works and has enough to show that you know your way around iOS. A good enough app, and you’ll never get these sort of crap challenges again.

Some of the most common examples of tasks to do are:

  • Fetch some JSON and display the results.
  • Add a new feature to an existing code base.
  • Find a bug in an existing project.
  • Implement a specific, core company feature.

With an open-ended, project-based task, ask clarifying questions first to ensure that you understand what the company is looking for. They might expect you to follow a certain coding style, see how you’d implement a particular architectural pattern or want you to use certain iOS-specific frameworks. Make sure you understand the requirements first; but once they’re clear, it’s off to the races!

For success in your take-home project, make sure it:

  • Must be easy to run, build, and profile.
  • Must be well tested and document accordingly.
  • Must follow a clear design pattern (MVC, MVVM).
  • Avoid using third-party libraries at all cost.
  • Codebase must be clean, no errors, no warnings.
  • Never exceed time limit assigned by interviewer.

Try your best to code beautifully and test appropriately. A little investment in UI/UX design would be awesome. Some people may think about cheating at this step. Don’t! You may end up very embarrassing later at onsite interview.