Skip to content

Instantly share code, notes, and snippets.

@hectorddmx
Last active April 16, 2025 18:29
Show Gist options
  • Save hectorddmx/fcde48864d479f96d5c4cf2d2956fa00 to your computer and use it in GitHub Desktop.
Save hectorddmx/fcde48864d479f96d5c4cf2d2956fa00 to your computer and use it in GitHub Desktop.
Document to help you prepare for iOS interviews

Questions about this format, send me a message: https://www.linkedin.com/in/hectorddmx

For technical interviews, let's ask candidates to refresh the following:

Q&A on iOS or mobile topics

Tasks:

  • reply brief answers on iOS topics to share your understanding
  • how and when to apply certain tools inside the swift programming language and the iOS SDK
  • low level understanding on performance, optimization, possible issues and how to debug them

Key Goals:

  • be concise
  • be upfront on things you don't know
  • share your work experience through the different concepts

Examples and guides:

System design interview

High level, how would you implement a new feature or a new module

Tasks:

  • model a new module or feature and it's different layers
  • consider data flow, entrypoints and API to consume the module
  • plan for reusability if required
  • ask how the interviewer wants to see the information
  • you can do it by writing by either writing pseudo code, a list of layers and their components, or create diagram of the different layers

Key goals:

  • ask questions to the interviewer about
  • general module requirements,
  • about possible future requirements,
  • consumers of said module, and
  • if there are current rules or patterns you should adopt to keep it consistent
  • display your though process
  • share what worked and didn't work for you before
  • show your communication skills
  • show your diagram skills if required

Examples and guides:

Code interview en SwiftUI or UIKit

Tasks:

  • logic, knowledge of iOS SDK and APIs
  • forms and validations.
  • UI with UIKit or SwiftUI
  • web services consumption, JSON parsing, networking, concurrency
  • unit testing, adding new tests for new features, focused on

Key goals:

  • ask question to the interviewer at the problem domain, things to do and don't
  • make sure the code works frequently
  • make it work first, then if time allows it, optimize
  • if there is focus on tests, run tests early and frequently
  • don't break previous unit tests unless required by change on the definition

Examples and guides:

Cultural fit interview and behavioral interview

Tasks:

  • Share a pitch of your work experience
  • What would you do in different situations

Key goals:

  • Display your experience, work ethics and what drives you as a person

Examples and guides:

Take home tests

Tasks:

  • code a working solution to the proposed problem in a short time frame

Key goals:

  • ask questions if requirements are fuzzy and document desired outcomes
  • under pressure show that you can resolve a problem
  • focus on functionality first
  • after finishing the core requirements, you can focus on add nice to have features, optimize, add tests, refactor and make it look pretty
  • if you are asked to present your solution:
    • guide the interviewer through the code,
    • share with them what was your thought process to solve the issue,
    • allow them to ask questions related to some of the decisions you took
  • if no session is planned to share your solution:
    • record a video with the previous contents, or write a small intro in the readme file to guide through the different files and the thought process of your solution.

Examples:

A

Build a UI that can:

  • Fix a bug in the provided project
  • Add a new view based on a given model
  • Refactor the project to separate concerns (e.g., ViewModel, Network Layer)

Plus:

  • If you can add unit tests with XCUITest for the refactored components
  • If you can explain your thought process and handle general team questions while solving the challenge
  • Show a loading/skeleton screen when loading, and switch to the actual content when content is loaded, or switch to an > error screen when the content has failed to load

B

Build a UI that can:

  • Capture user data
  • Validate input locally
  • Send to the cloud and send it to a web service
  • Display a picker view, select the value and display it as is

Plus:

  • If there are errors, display received error messages below each the corresponding text field
  • If you can mask/rewrite the input
  • If you can make it look good

C

Build a UI that can:

  • On load, call an API for movies and present each movie in a row
  • Each movies should have a name and thumbnail
  • When clicking a movie, it should redirect you to a DetailView where it should show
  • Category, rating and a bigger version of the movie poster

Plus:

  • If you can make pull to refresh work
  • Cache the movies and the thumbnails
  • Add a way to locally edit or delete a movie
  • Add a search bar that can send a filtered query to the web request, then display only a subset of the values
  • If you can make it look good

Skills to train/refresh for this interview type:

  • SwiftUI views: TextFields, Picker, Buttons, List, LazyVStack, VStack, HStack, etc
  • SwiftUI modifiers: onAppear, onDisappear, onChange, onTapGesture, task, onSubmit
  • SwiftUI navigation: With iOS 16 as MIN SDK: NavigationStack’s APIs and iOS 16 Observation framework
  • Reactivity: Combine or RxSwift, EventBus pattern
  • Networking & concurrency: Async/await, Task, URLRequest, URLCache, caching policies, Codable, Encodable, Decodable
  • Architecture Patterns: MVVM-C, Coordinators (with SwiftUI and UIKit), Interactors, ViewModels, Dependency Injection
  • Refactoring: write code that works, add unit tests, refactor code, check that tests continue to pass, explain your thought process
  • Other: Validation patterns, Regex, CharacterSet, Search and filter

Comments are disabled for this gist.