My personal (opinionated) iOS Interview Questions in interviewing iOS Engineers

Agung Pratama
6 min readNov 20, 2022

--

Disclaimer: This is my own personal checklist/interview questions. While in my professional career I did lead interview rounds for the companies where I work/had worked on, this list by any means is neither correlated nor affiliated to them.

This list doesn’t really contain the straightforward answer but it is listed in a way that what the interviewers are looking for in each question.

This article contains a list of standard usual questions that are usually asked in iOS interviews and tries to give out the interviewer’s perspective (at least mine) to dig out the candidate’s expertise and experiences.

Photo by Sora Shimazaki: https://www.pexels.com/photo/woman-filling-job-application-form-in-office-with-boss-5668858/

General / Fundamental questions

Here are some of the fundamental questions that I usually like to ask when I’m in the driver’s seat of user interview rounds:

What do you know about SOLID principles?

The all-time favorite question from all software engineering disciplines, yet usually misused in interviews. It is often misued in a sense that both the candidate and the interviewer only want to talk about the textbook definition, not the real usage in their own experience.

  • It is expected that at least the candidate knows about the principles
  • What I look for: for the candidate explain NOT by the textbook definition but by their own experience and real world implementation while developing iOS applications using each principles.

What do you know about “xxx design pattern/practice”?

I usually and intentionally throw out some patterns that are “controversial” in software engineering like singleton pattern, interface with optional methods, subclassing.

  • What I look for: for the candidate to explain the essence of the pattern and when to use it on real world implementation.
  • Follow up questions: I ask follow up questions or give out statements that would makes that particular design pattern seems bad / not efficient, and would like to know their opinion regarding the design pattern when presented with it’s cons and know when it is okay or not to use one.

When and what do you use protocol for?

Since there are many usages of protocol in iOS development, if the candidate didn’t mention some of the usages that I was looking for then I would try to give hint about the missed out answer that I’m looking for, especially for decoupling for testing.

  • What I look for: for the candidate to have experience in using protocol for various usage, start from (but hopefully not only) the basic of delegate pattern, composition over inheritance/protocol oriented programming (POP), and lastly “decoupling object”.
  • Follow up questions: if they mentioned something about delegate pattern, I would usually ask about if “wether delegate should be strong or weak” questions, if they mention about POP I would ask the difference between POP and OOP, and when they answer about decoupling object I would ask about the advantages of loosely decoupled object implementations in Unit Testing, A/B testing, or modularization.

What is the difference between open and public keyword in Swift?

What I look for: While this may sounds like a simple straightforward question, sometimes it may reveal wether if a candidate is experienced in working on modularized iOS codebase or not due to the nature of open, public, and the default access of internal in Swift.

What are the differences between struct and class?

Another classic interview question yet are not fully utilized. It is actually expected for the interviewer to ask follow up questions after the initial answer.

  • What I look for: It is expected that the candidate know about the textbook differences like value based and reference based object. I usually ask follow up question on when to use class and struct in various situations
  • Follow up questions: Which one to use when you want to create: singleton/model/viewmodel/etc? And why? What would happen if I use the counterpart? Which one is more performant? Which one is more thread friendly and why?

What do you know about closure in Swift?

What I look for: For the candidate know about when to use closure in real implementation, the differences about escaping vs non escaping closure, and whether if the candidate knows when “weak self” is necessary or not.

Follow up questions: What is the difference between escaping and non escaping closure? When to use weak self (or not)?

What are the UI architectural patterns that you know in iOS Development?

This question could lead to varied expectation and follow up questions depends on candidate’s experiences and the interviewers’ team current codebase.

  • What I look for: Ideally the candidate has the experience using the same or similar UI architectural pattern to the interviewer’s team code base but it is totally fine if the candidate can show strong fundamental and understand that each architectural pattern may have different goals, may solve different problems, and has their own uniqueness on their own.

Personally I would really like if my candidate can show their own opinion regarding this architectural pattern and understand that it is so much more to discuss on the whole iOS architectural things rather than debating on MV** abbreviations.

How do you store persistence data in iOS Development?

  • What I look for: Candidate knows at least various options how to save persistence data in iOS and each of respective usecase and differences. It is better if they can put out DO’s and DON’Ts regarding saving persistence data, understand the access control, risk, and availability to the users or malicious users.
  • Follow up questions: What are the differences between those options? Can you tell me (or show a pseudocode/code-snippet) how to manage and render information using cache and API interchangeably in real usage?

Niche Optional Questions

Aside from the fundamentals, sometimes different team could have different needs for specific iOS Engineering related skills, which sometimes could be vary from team to team. Depending on what the position is for this could make or break whether a candidate pass the interview if the knowledge regarding towards it deemed necessary.

What do you know about iOS Modularization?

This could be needed to ask if the position somehow needs a senior position that could contribute to help designing and separating the codebase.

  • What I look for: For the candidate to understand the implication of putting things on different level of modules, high level or low level frameworks. Knows about techniques to manage dependencies such as Dependency Injection, Dependency Inversions (inversions of controls).

What do you know about performance enhancement in iOS Development?

  • What I look for: Ideally candidates show his knowledge or experiences to use some of the Instrument such as time profiler, understand about potential bottleneck in CPU/GPU/Disk usage, memory management and memory leak debugging techniques, debug view rendering tools, etc.

What do you know about CI/CD pipeline in iOS Development?

  • What I look for: For the candidates show experience and knowledge regarding how to configure (or ideally setup) a workflow/pipeline. While it is good if candidate shows experience in using specific popular tools like Fastlane or popular CI cloud like Bitrise, I personally like if the candidates show knowledge in the fundamental things and can script the basic alternative of the tools rather than depending on specific tools.

How to handle concurrency issues in Swift?

While this may be a thing to be included in fundamental list, I decided to put this as niche instead. Since most of iOS Engineers should ever experienced a thing or two in asynchronous case, not all of the them ever experienced an advance kind of concurrency that involving a very fast data push like in a realtime from websocket, chaining multiple API requests with dependencies, or heavy usage of disk read/write operations .

  • What I look for: candidate is at least knows about async and how it needs to be treated or knows about race conditions or similar use cases. It might be better if candidates show knowledge on how to make their thread labeling/grouping and how to make collection of data more thread safe during read & write using various techniques.

What do you know about security in Swift?

  • What I look for: candidates can understand that even though security on the front end is always limited, it is always good to think one or two thing about it, and understand what are the options to do.
  • Follow up questions: Where to put secret keys in iOS Development? What do you know about MITM? What do you think about “secure conclave”? What do you know about SSL Pinning? What are the options to store sensitive personal information in persistence data?

While this list is obviously can’t cover all of the aspects in iOS Development interview questions and doesn’t contain straightforward answer (which could be pages and can be separated into its own article for each topics!), yet I hope this could helpful for iOS Engineers out there that are looking for a new job to prepare themselves or at least some refreshment on for their future interviews.

I might add other things like live code tips and what the user usually look for, or update with other iOS Development aspects that are not covered here in the future when I feel like it.

Then again good luck for your interviews!

--

--