iOS Developer Interview Questions: What to Ask

Every recruiter and hiring manager knows that companies around the world want an app for iOS, the operating system that powers Apple’s iPhone and iPad. Fortunately, iOS has been around for over a decade, which means there’s a rich layer of experienced tech pros who deal with the technology on a day-to-day basis.

Specifically, there are two programming languages that developers use to code in iOS: Objective-C, Apple’s longtime programming language, and Swift, the newer language designed to replace it. If you’re interviewing candidates for anything iOS-related, you should know that knowledge of Swift is vitally important; Objective-C is also useful for any company that must deal with legacy code (i.e., older iOS apps).

What kind of questions will pop up in a job interview with a candidate for an iOS-related job? Paulo Michels, EVP of engineering at ArcTouch, a San Francisco, Calif.-based mobile and blockchain developer, and Rob Pope, co-founder and CTO of Dogtown Media, a mobile media development company in Venice Beach, Calif., provided some insight into what they ask. They’ve offered these sample questions to help you get a sense of what’s important in such an discussion:

“How would you avoid retain cycles when using closures/blocks in Swift?”

Michels and Pope have found that a surprising number of candidates don’t have a good answer for this (important) question.

What candidates should say:

“Closures can cause retain cycles because they have a strong reference to the object that uses them.” The answer should also mention the use of “[unowned self]” or “[weak self].”

Why they should say it:

“Even though Apple greatly improved memory management with the introduction of ARC,” Michels said, “having a clear understanding of retain cycle and how to avoid it is a must for every developer.”

“What are the different ways to specify layout of elements in UIView?”

Michels has observed that most candidates only describe their own preferred approach. But whether it’s XIBs and storyboards, or layout in code, he needs to know the candidate isn’t committed to one path.

What candidates should say:

By giving a description of the pros and cons of each approach, the candidate shows flexibility if the team chooses different paths. For example, Michels said that understanding the challenges of using storyboards in large projects, and related problems with merge conflicts, is a big indicator of the candidate’s experience.

Why they should say it:

“UI layout is a very important aspect of iOS app development, and probably one of the most important skills a good developer must have,” Michels added. “Making proper use of the available tools will determine a candidate’s ability to design a scalable app architecture. Also, a clear understanding of auto-layout and implementing responsive layouts is critical.”

“Describe managed object context and its function.”

When asking iOS developer interview questions, both Pope and Michels often hear candidates give a brief description of what managed object context is, and what it’s used for. That narrow an answer doesn’t provide any insight.

What candidates should say:

Candidates should show they understand how managed object context works behind the scenes, with a focus on object lifecycle and multi-threading. Their answer should illustrate the key to a robust implementation of core data-based storage.

Why they should say it:

“The core data framework and managed object context may look simple and straightforward at first,” Michel’s noted, “but it can easily introduce obscure bugs when misused. Having a deeper understanding of how managed object context works is mandatory for any developer using core data.”

“What long-running tasks can iOS support in the background?”

Pope has found that his candidates nearly all talk about Bluetooth accessories and location services.

What candidates should say:

“I don’t expect people to recount the Apple documentation verbatim, but three to four out of the nine types of background tasks would be good enough for me,” Pope said. “There aren’t many developers who have used VOIP functionality, for example. But I expect senior candidates to have used location services, BLE and audio playback, and I would love to hear how they have used some of this in the real world.”

Why they should say it:

It demonstrates that the developer has worked on, or at least experimented with a broad range of iOS functionality. Mobile clients regularly ask for functionality that iOS doesn’t provide and the developer needs to understand the limits of the operating system. Among all iOS developer interview questions, that’s what makes this one particularly crucial.

“Explain what GCD is, and when and how you would use it.”

Michels has noted that less-experienced candidates don’t associate the Grand Central Dispatch (GCD) framework with frequently-used APIs such as “dispatch_sync” and “dispatch_async”.

What candidates should say:

“It’s expected that candidates can at least explain the use of methods ‘dispatch_sync,’ ‘dispatch_async,’ and how queues work,” Michels said. “We also expect that candidates will mention the use of the ‘main_queue’ to run code that makes UI updates. A senior candidate should explain that internally queues are implemented as thread pools.”

Why they should say it:

Proper handling of multi-threading is a crucial part of nearly every app, and a very important aspect in the design of responsive and robust apps.

“When would you use a third-party library or SDK in your development?”

It’s common for candidates to answer that a third-party library or SDK is used to speed up development.

What candidates should say:

Pope’s advice: “I use them sparingly when I feel that the library has a long history, is current, well-supported, and exceeds the functionality that is required.”

Why they should say it:

As new iOS versions and devices are released, maintaining applications in the medium- to long-term creates challenges. Candidates don’t want to compound the issue by adding a third-party library, and its attendant features, which will cease to be supported.