Become an iOS Developer in 2022: The Ultimate Guide

The mobile market is exploding, and iOS developers are in high demand.

The talent shortage keeps driving salaries higher and higher, even for entry-level positions. Software development is also one of the lucky jobs that you can do remotely. It’s understandable then that more and more people want to become iOS developers.

Money and freedom are great, of course, but they are not everything. Many of us make iOS apps to create something we are proud of and make a difference in many people’s lives.

Becoming an iOS developer takes some effort, though. So it’s crucial to focus on the right things and not waste time on useless activities. That’s why I wrote this detailed, step-by-step guide.

Architecting SwiftUI apps with MVC and MVVM



Chapter 1

Decide if it’s the right career for you

Chapter 2

The technical requirements

Chapter 3

The first step: learn programming in Swift

Chapter 4

The foundations of iOS development

Chapter 5

Getting to the next level

Chapter 6

How to get a job in iOS development

Chapter 1:

Decide if it’s the right career for you

The first thing you need to decide is whether iOS development is for you.

While the salaries for iOS developers can be attractive, money is often not the only motivation. Software development requires certain skills and personality traits.

Why should you listen to me in the first place?

As the old proverb goes:

Those who can, do; those who can’t, teach.

I think there couldn’t be anything further from the truth.

Sure, some teachers have no idea what they are talking about. Nobody wants to hear fitness advice from their fat uncle. So, you should apply a healthy dose of skepticism.

Still, if that proverb were true, all teachers would be terrible, and we would never learn anything.

I use a more straightforward metric: does that person have a proven record of getting something I want? That does not necessarily make one a great teacher, but it’s far better than clueless.

So, here I’ll introduce myself and let you decide. If, understandably, you don’t care about me, feel free to jump to the next section. You won’t miss any critical information.

I have been teaching iOS development since 2015, and I created premium courses with hundreds of students. One of those even tripled his salary two months after taking one of my courses (No, I can’t guarantee that for everyone. That was a pleasant surprise for me as well).

Before I started teaching, I worked as a freelancer for several years for smallmedium, and big clients. Before that, I worked as an iOS developer for an agency making apps for top companies and for a Dutch social network like Facebook (that does not exist anymore).

Oh, I also have a master’s degree in computer science and computational logic. That’s not necessary if you want to become an iOS developer, especially in today’s market, but it helps.

A funny question I get when I say I am an iOS developer is: did you publish any apps? While it’s not required to publish apps on your own to be an iOS developer, I do have an app to make iOS apps (a bit meta, I know).

So, can I do, or can I only teach?

Enough about me. Let’s focus on you.

Demand and salaries for iOS developers are high

One of the main reasons why people want to become iOS developers is because of salaries. Apps have created a new economy expected to reach $6.3 trillion in 2021. On its website, Apple brags about creating two million jobs in the U.S. alone.

Apple’s website talking about jobs

It’s not surprising that everyone and their dog wants to be part of it.

But how much does an iOS developer actually make?

Salaries for software developers are, in general, quite high. That is true also for iOS developers. How much you can earn depends on many factors, though. The main ones are your location and your experience.

Luckily, there are a few websites where you can get a ballpark figure. According to Glassdoor, in the United States, these are the salaries for iOS developers:

  • entry level: $64.000
  • average: $96.000
  • high: $140.000

iOS developer salary in the USA on Glassdoor

Be sure to check for your specific location. Tech hubs like Silicon Valley drive salaries up, so the high-end listed above is probably only possible at big companies like Apple, Google, or Facebook. Payscale, for example, shows lower figures.

iOS developer salary in the USA on Payscale

Of all the salary websites, Indeed has the highest figures, placing the average at a whopping $119.585, plus cash bonuses, stock options, and other benefits.

iOS developer salary in the USA on Indeed

But don’t take those figures as absolute, or you will be disappointed. I knew a guy that wanted that kind of salary here in The Netherlands, where I live. That’s just not possible.

Here, I never heard of an iOS developer salary higher than €60.000, and Glassdoor agrees. (Although I am sure you could negotiate a higher salary. More on that later)

iOS developer salary in the Netherlands on Glassdoor

It’s not just about the money, but passion is not enough either.

While money is a good motivator, many iOS developers do not get into the job because of it.

In the past years, I spent a lot of time interacting with my email list subscribers to understand what motivates them and what problems they have (get on my list here).

Some admit they do it for the money, and there is nothing wrong with that. But it’s not uncommon to hear many others say that they want to:

  • create apps that can impact the daily life of many people;
  • increase their creativity;
  • work on exciting projects;
  • start their own business;
  • become independent and stop working at a large corporation.

In general, developers take pride in their craft. They do not treat their profession just as a way of making money.

What I can’t stand, though, are the people that tell you to follow your passion.

Let’s be honest. Passion is overrated.

You definitely need to be interested in software development if you want to become an iOS developer. If you hate it, you won’t go far. But passion is fleeting. You need something else to keep you going when you will inevitably lose your initial motivation.

And passion does not always come at the beginning anyway. Often, it only happens after you master a skill.

What you need instead is to be deliberate and follow a system that will help you push through the many times when you won’t feel like studying. Proven psychological tools like Dr. Peterson’s Future Authoring are also much more helpful than relying on “passion” and “inspiration.”

What does an iOS developer do, exactly?

This might look like a dumb question, but it isn’t. I can hear some of you saying: “An iOS developer makes iOS apps, duh.”

Yes. But what does that mean?

As a developer, you will spend most of your time programming. That means typing text in a text editor. 

Not any type of text, mind you. You write programs in the Swift programming language, which is a formal language you use to write instructions for a computer. Here is what a piece of Swift code looks like:

struct Account {
	private (set) var transactions: [Transaction]
	var balance: Int {
		var balance = 0
		for transaction in transactions {
			balance += transaction.amount
		return balance
	mutating func add(_ transaction: Transaction) {

What you won’t be doing is designing iOS apps. That is the job of a user interface designer, not a developer.

UI design is a field in and of itself, which also takes time to study. It’s a skill that can be helpful (much) later in your career, or if you want to make your own apps. But if all you want to do is design apps like the ones you find on Dribbble, you are trying to become a designer, not a developer.

As a developer, you will work with designers that take care of the visual appearance of an app. You will, instead, work on its functionality. That means you don’t need to learn how to use design tools like Sketch, Figma, or Omnigraffle. 

While you will be using some visual tools to build apps, you will spend most of your time typing code.

What does it take to be an iOS developer?

Typing code does not mean being a writer of literature or poetry, despite what some slogan might say.

The significant traits of a software developer are:

  • logical thinking and problem-solving;
  • spatial reasoning and system design;
  • abstract thought, imagination, and creativity to find solutions.

These traits are all related to intelligence. On top of that, you might also want to consider your personality.

I’m going to base this discussion on the Big Five personality model, which is the most reliable and scientific model.

Those online tests you might have done with acronyms like ENFP and INTJ are instead based on the Myers-Briggs model. Those tests have no scientific validity and can give you different results if taken more than once, so they are not reliable.

Different personality traits can be optimal for different types of work.

  • High openness is a requirement. This trait is anyway correlated to intelligence and to the intellectual characteristics I listed above.
  • High agreeableness can make you a better team player in a company or when freelancing. But low agreeableness can help negotiate a higher salary, a raise, or a promotion, or push you to start your own business to do things on your terms.
  • Conscientiousness is usually helpful in any field, being the second most significant indicator of life success (the first is IQ). Self-discipline, orderliness, and attention to detail are also going to be helpful to write, organize, and debug code. If you are low in conscientiousness, you are best suited for a job where someone decides what you should do. Otherwise, you might take on the organizational struggles of freelancing or starting a business.
  • Most developers have low extraversion. This helps with programming, which is often a solitary job. That does not mean that developers are asocial, and it does not mean you can’t be high in extraversion. If you are, running your own business might also not be the best choice, since you won’t have any colleagues.
  • If you are high in neuroticism, you should get a stable job. Low neuroticism is instead synonymous with low risk-aversion and can help you in freelancing or starting a business.

You can find free personality tests online, but I recommend this one. It’s affordable and more accurate than free tests.

Chapter 2:

The technical requirements

To be an iOS developer you don’t need much.

Many of the software tools you will use will be free, but getting a new Mac computer and an iPhone or an iPad can be expensive. Luckily, there are cheaper alternatives.

To learn iOS development, you need a Mac computer

While it’s technically possible to run macOS on a Windows or Linux machine, that’s not that easy to set up. Moreover, it’s not allowed by Apple’s license.

Think what you want of it, but, in my opinion, starting with something illegal is not the best way of becoming an iOS developer (or anything else).

Taking shortcuts will have harmful psychological consequences in the long term. And if you don’t invest in yourself, how can you expect others to invest in you?

That said, I know that Macs are expensive computers.

But you don’t need the newest Mac on the market. You can find some cheap, second-hand machine on eBay, like a Mac mini, for a fair price. At the time of writing, I can see options for less than $200.

cheap Mac minis on eBay

Mac minis with the Apple M1 processor are the best and beat even professional computers, but they are still expensive. Check also Apple’s refurbished Macs for some discounts.

Make sure that the Mac you buy can run the latest version of macOS, and possibly the next one if Apple has already announced it.

At the moment, I recommend a computer that runs at least macOS Catalina so that you can learn new technologies like SwiftUI (more on this later). Since Catalina runs on Mac minis from 2012 onward, it should not be hard to find one.

Apple announces new versions of iOS and macOS every year at its Worldwide Developer Conference (WWDC) around June, so keep an eye on their website for further announcements.

You create iOS apps using Xcode, provided by Apple for free.

Once you have a Mac, you will need to install Xcode on it.

Xcode is the integrated development environment (IDE) used by most developers to make iOS apps. You can get it for free on the Mac App Store or directly on Apple’s website.

xcode is the tool to make iOS apps

I recommend getting it on the App Store since you won’t need to create an Apple account (at some point though you’ll need it anyway). You also get automatic updates for Xcode from the App Store as you do other apps on your Mac.

You can find the Xcode guide here, but it’s not a guide I recommend reading now, so keep the link for future reference. That is a user manual, so it assumes you already know how to make apps, which you don’t know yet, or you wouldn’t be reading this section.

It’s hard to understand why Xcode’s features are useful when you don’t know what they are for. It’s better to learn to use Xcode as you learn iOS development.

An iOS device can be helpful but is optional

And finally, a common question: do you need an iPhone or an iPad?

If you own one already, it can be useful. But you don’t need to buy one to learn. Xcode comes with an iOS simulator that allows you to run all the apps you make on your computer.

I developed my first iOS app using only the simulator. I also worked for many clients where I rarely, if ever, ran apps on real devices.

The iOS simulator covers most of your learning needs. You need a real device only to do the final testing before submitting an app to the App Store.

And actually, Apple keeps adding featured to the simulator, so you can test your apps in ways that are not easy with a real device. For example, you can quickly change settings for dark mode or accessibility. Or, if you create apps that use the GPS location, you can create a file with a track to simulate movement, which is better than running around your neighborhood.

Sometimes, though, you might need to test features that are not available in the simulator.  For functions like multitouch, the gyroscope, the camera, or the Apple pencil, you need a device. 

These are advanced features, so you should not be learning them at the beginning anyway. (I’ll tell you what to learn and in which order later in the article). In any case, a second-hand device can still be an affordable choice.

Make sure that the device you buy can run the latest version of iOS so that you can use the latest features. At the time of writing, that is iOS 14, which includes features, like widgets, not available on previous versions.

If you want to develop apps with SwiftUI, you need at least iOS 13. iOS 13 runs on devices going back to the iPhone 6S, which you can find on eBay for less than $100. I still have one as my primary device, and it works great.

cheap iPhones on eBay

If you want an iPad, get a device that runs iPadOS 13 instead.

Chapter 3:

The first step: learn programming in Swift

The first necessary step for any software developer is to learn programming. This is a crucial part of being an iOS developer, so I recommend focusing on it before you try to learn anything else.

Don’t panic: you are not going to become obsolete

Let’s clear something that seems to worry many people that want to become iOS developers.

Apple moves at a fast pace, releasing new stuff every year. By now, you might have heard about SwiftUI, the new UI framework Apple released at WWDC 2019, which radically changes the way iOS apps are made.

So, you might feel that you need to learn things quickly, or “the next big thing” will make what you are learning now obsolete.

That’s not how the world of software works.

The foundations of computer science and programming have been the same for decades and won’t change anytime soon.

The history of computers indeed went through massive forward steps. In a few decades, we went from huge mainframes as large as a room to modern, Internet-connected mobile devices we can carry in our pockets.

But while technology moves fast, the foundations of software development always stay the same. Once you are familiar with them, you can jump to any new technology you like.

Significant shifts like Swift and SwiftUI do happen, but only once every five years or so. Yes, you will have to keep your knowledge up-to-date. That’s a requirement for an iOS developer. But you usually get plenty of time.

Do one thing at a time: how constraints and deep work can benefit your learning

One of the worst things I see again and again online is people teaching Swift programming and iOS development at the same time. Apple is guilty of that too.

Their reasoning is probably: “since you should learn both to make apps, why not learn them together?”

I’ll tell you why.

Both Swift programming and the iOS platform are two massive beasts. It’s going to be hard to learn both at the same time. iOS development is an umbrella term for many disparate activities I will discuss later in this article.

I met many people that got confused following that approach. They put a ton of effort into learning both topics simultaneously, but they don’t understand either.

And that’s not the only reason.

Let’s say that you have to learn the following five common iOS development topics:

  • Swift programming;
  • a UI framework (SwiftUI or UIKit);
  • data storage;
  • networking;
  • algorithms and data structures.

Let’s also assume they take one month each (no, they don’t take only one month. They’ll probably take you far more. It’s just for the sake of the example).

If you learn bits of this and that, it will take you, at best, five months in total. It will actually take you far more because many of these topics assume you know previous ones. So you’ll constantly be jumping around, and task switching has a high cost.

What happens, instead, if you learn them one by one?

After one month, you can cross the first one off your list. Boom. First goal accomplished. Instant gratification.

Sure, you still didn’t make any cool app. But you can reap the benefits already after one month. Now, you can learn the next topic with solid foundations, making it faster.

This concept is called constraint theory, which was introduced in the book The Goal: A Process of Ongoing Improvement. You should use it for everything you do in your life, not just learning iOS development. Another recommended read is Deep Work: Rules for Focused Success in a Distracted World.

So, do one thing at a time.

Which language should you learn? Swift or Objective-C?

As I mentioned above, as an iOS developer, you will spend most of your time writing code. So, the first thing you have to learn is programming.

Computer programs are written using formal language in which you give instructions to a computer. 

There are a plethora of programming languages out there, but programming is mostly the same on any platform. That makes your programming skills transferrable from one language to another, so it does not matter which language you learn first. 

Still, it’s best to learn programming in the language you will use to make apps on iOS and other Apple platforms, which is Swift.

A few years ago, when Swift was first introduced to replace Objective-C, there was a debate on which one of the two to learn first. Swift won that debate long ago. The recent introduction of SwiftUI made the argument even stronger, so if you happen to find articles on the internet about this discussion, you can safely ignore them.

In any case, don’t forget that Objective-C was the language of choice for Apple platforms for decades. You might still have to learn it at some point to work on long-standing projects. Until then, forget it.

Learn Swift programming separately from iOS development

Having stated that you should learn only one thing at a time (if you skipped that section, go and read it), the first one Swift programming.

My recommendation is to focus for a few weeks on getting a solid foundation of these programming concepts:

  • The basics: numbers, strings, constants, variables, and operators.
  • Collections: arrays and dictionaries.
  • Control flow statements: if-else, switches, and for/while loops.
  • Types and interfaces: structures and enumerations, functions, methods, protocols, and extensions.
  • Object-Oriented programming concepts: classes, inheritance, and polymorphism.

I am currently developing a free Swift course in collaboration with Cosmin Pupaza. Be sure to register to get extra free material and to be notified when I release new lessons.

While my course is under development, you can try reading a book on Swift programming. Since I learned programming in university a long time ago, I don’t have any books I can recommend. But the Big Nerd Ranch guide seems to be a good choice that many recommend. It only focuses on Swift programming, and it has good reviews, so you can start from there.

What I can tell you though it to avoid the Swift Language Guide unless you know to program already. That’s only a reference manual, and it does not teach programming step-by-step.

Don’t waste time blogging or with other superfluous activities

While it’s important to know what to do to become an iOS developer, it is as essential to understanding what you are not required to do.

Internet articles are full of advice like “start a blog” or “publish your own app in the App store.” It sounds like good advice, and everyone thinks: “Well, it can’t hurt, right?”

Actually, it can.

Learning iOS app development is a massive task by itself (don’t believe the people that tell you that you can learn it in a couple of weeks). Anything that gets in your way is going to make it harder and demoralize you when you don’t get results.

So, things, like starting a blog, a podcast, or jumping on Twitter, are superfluous.

Obviously, it is helpful to take notes about what you learn. Many use a blog as an excuse to take such notes. If you feel that you want to share what you learn with the world, please go on. But it’s not a requirement for learning, or even to find a job, despite what some claim.

Publishing everything you learn takes time away from what you are trying to do: learning. Plus, using pen and paper works better than taking notes on your computer. And finally, there are more effective ways to find a job than writing a blog, which I will describe later.

Yes, I know that there are people like Natasha. She became well-known in the iOS development world by blogging about everything she learned in Swift. So, I am not saying that you should not do it. What I am saying is that you don’t need to.

What you need is a plan, not a blog.

Chapter 4:

The foundations of iOS development

After learning to program in Swift, the next step is learning how to make iOS apps.

iOS development is a vast topic, so there is a lot to learn. But not everything is equally important. Here is what you should focus on.

Focus on the fundamentals you need to build any iOS app

You can’t be an iOS developer if you only know Swift programming. After that, it’s time to tackle the iOS platform.

iOS is vast and filled with technologies, frameworks, and design patterns. Every software platform is different, so even if you are already a developer, you will have to learn how things work in iOS.

Online, you will find articles on pretty much any topic. But not all are important. You must focus first on the fundamental concepts you will need for every app you will ever make.

Sure, things like augmented reality, machine learning, or video game technologies are cool. But you won’t be able to use them until you learn the foundations of iOS development.

I never touched them in my 10+ years of iOS development. 

The reality is that the majority of apps are not innovative, but simple Create-Read-Update-Delete (CRUD) apps.

So, some of what you learn will apply to every app you will ever write, while there are technologies that you might never use in your career. This is known as the Pareto Principle.

As a first step, I recommend you get familiar with Apple’s Human Interface Guidelines for iOS. That will give you an overview of the conventional iOS interface paradigms that you find in any app. After that, you can tackle the fundamental topics of iOS development, which I am going to cover next.

Should you learn to make apps using SwiftUI or UIKit?

To create the user interface of iOS apps, you need to use a UI framework. The problem is that now Apple provides two of those.

The old framework is UIKit. While it’s somewhat true that “newer is better”, UIKit has existed as long as the iOS platform. That means that the majority of iOS apps created in the past decade use UIKit. If you want to get a job as an iOS developer, you will probably need to work on one of these apps.

At WWDC 2019, Apple introduced a new framework called SwiftUI, which replaces UIKit. Since SwiftUI is more recent, it is not yet as mature as UIKit. Some of the features offered by UIKit are still not available SwiftUI.

But Apple is bridging that gap quickly. At WWDC 2020, they added to SwiftUI the most important missing features. At WWDC 2021, they will definitely close the gap further.

SwiftUI also has some other limitations you should consider. It became available only on iOS 13, so you can use it only for new apps that target the latest operating system.

Many companies have customers that are slow to update their devices. That usually means these companies target the two iOS versions before the current one. So, they will adopt SwiftUI only when iOS 15 comes out later this year. On top of that, they won’t rewrite their UIKit code from zero, so you’ll have to mix the two.

So, should you learn SwiftUI or UIKit?

Here is the obvious but unhelpful answer. Given the current state of the market, you might have to learn both.

Still, which one should you learn first?

The scale is leaning more and more towards SwiftUI. Last year, I would have recommended learning UIKit first since most companies are still using it. That might even be true when you read this article. But, as time passes, it will be less and less clear-cut.

I surveyed my 11.000+ email subscribers, and there is great excitement for SwiftUI. In the 2019 iOS Developer Community Survey, 9% of respondents already delivered apps using SwiftUI, and 60% said they would use it for any new app. In the survey for 2020, those numbers jumped to 34% and 74%, respectively. SwiftUI is growing fast.

SwiftUI also has another advantage: it works on all Apple platforms. You will be able to leverage your skills and reuse most of your code also to build macOS, watchOS, and tvOS apps.

So, while the honest answer is “it depends”, here is my advice. Go for SwiftUI. It’s better to be future-minded and invest in a growing platform than on a declining one.

If you are going to make apps for yourself, that’s all you need. If instead, you’re going to get a job as a developer, it will depend on the job. To decide, be sure to read the last chapter of this article on finding a job.

Here is what should you learn for each UI framework

One of the advantages of SwiftUI over UIKit is its simplicity (to a certain extent. Some aspects of SwiftUI are not that easy to grasp). So, if SwiftUI is your choice, here is what to learn:

  • The basics of the framework. Apple offers two free introductory tutorials that will give you a broad idea about how SwiftUI works. They a bit all over the place for my tastes, trying to teach everything at once, so I also recommend reading my introductory article to SwiftUI.
  • SwiftUI’s data flow. Once you know how to build user interfaces, you need to pick the correct way to fill them with data. SwiftUI has several data flow mechanisms, each appropriate for a different scenario.
  • The MVC and MVVM patterns. Knowing how SwiftUI is a good start, but it’s not enough. Architectural design patterns like MVC and MVVM help you structure your entire app correctly, making it more robust and easier to update.

UIKit is harder to learn. It has several complex parts, and you need to know them all to make iOS apps. Here is a quick list of the main concepts you should learn:

  • The MVC pattern and view controllers. MVC is a widespread design pattern that guides how you structure apps on several platforms. It’s not limited only to SwiftUI. UIKit’s view controllers are part of MVC and a central component of the framework.
  • The view hierarchy and Auto Layout. These are fundamental to build user interfaces that work on iOS devices with different sizes.
  • Containers and Xcode storyboards. Containers are a special kind of view controller that allows you to structure your apps’ navigation flow. Storyboards are a visual tool to design and organize such navigation flows.
  • Table views. Many, if not all, iOS apps need to manage screens with long scrolling lists. While table views are just one of the many components of UIKit, I listed them separately because they are not straightforward.

If you want a shortcut, you can get my Confident iOS Professional course. It dives deep into both SwiftUI and UIKit, covering all the other necessary topics to build any iOS app. Plus, the best practices to properly structure your code. Join my email list to know when I open it.

The second, most pervasive iOS framework is Foundation

SwiftUI and UIKit are only UI frameworks. There is more to building iOS apps than creating user interfaces. The other fundamental framework for iOS development you will need to learn with is Foundation.

Foundation is extensive and contains a plethora of features. Unlike the two UI frameworks of iOS, though, you won’t need to be familiar with everything it contains. There are parts of it I never used, and others which I only touch rarely.

In any case, you usually learn the relevant parts of this framework as you follow a book or course on iOS development. It’s not something you study separately.

Here is a short list of some of its features for your convenience. Some of these are advanced features you will need to learn later.  I will list those in the next section.

  • Foundation contains some other basic types besides the one offered by Swift. The most important ones are the URL and Data, but you usually learn how to use these when you deal with storage and networking (more on this later).
  • Many apps deal with dates and time. Foundation contains types to manage calendars, dates, time, time zones, and calendrical calculations.
  • In Foundation, you also find many formatters for numbers, currencies, person names, dates and times, and other measurements.
  • Speaking of measurements, Foundation contains many other units that are useful for conversions. If your app deals with lengths, areas, weight, mass, speed, acceleration, energy, temperature, light, or electricity, be sure to check them.

Learn Git to manage incremental changes in a project and to publish code on GitHub

I would say that the second-most-important tool for iOS developers after Xcode is Git.

Git is a version control system. You will need to learn it at some point since it’s often a job requirement, but it’s not something you should focus on at the beginning.

Version control is fundamental to track code changes on projects. It’s especially useful to coordinate the developers in a team, but it’s also helpful to keep track of code in your personal projects. There are different version control systems, but Git is the most prominent.

Sooner or later, you will also meet GitHub, a vast platform, based on Git, that many developers use to share code and coordinate projects. A less popular alternative to GitHub is Bitbucket, which also integrates with other online tools many companies use, like Jira.

Xcode has some Git integration, which is getting better with time but is still limited. You will need to learn to use Git from the command line to use all its power.

There are also visual tools for Git like Tower, Sourcetree, and GitHub Desktop, which can make your life easier. Honestly, I find them less versatile than using the command line, but your mileage may vary.

Chapter 5:

Getting to the next level

Learning to make simple iOS apps can already land you an entry-level job, but it’s just a milestone. Being a developer requires much more than knowing how a single platform works. You will need to acquire other skills to be at the top of your game.

After you get solid foundations, you should expand your knowledge to other topics of software development.

Once you learn the fundamental pillars, programming, and the foundations of iOS, you can start to branch out.

By now, you should be able to get some of the entry-level jobs as an iOS developer or build your own apps. Not all jobs have the same requirements, so be sure to check the next section of this article.

You would know more about iOS than I knew when I got my first job as an iOS developer. I didn’t know most of the stuff you find in this section, and I had to learn it on the job. (To be fair, though, I also had a master’s degree in computer science. But many companies nowadays don’t require one.)

In any case, if you want to be at the top of your game and get to higher positions as a developer, you need to expand your knowledge.

Here are some crucial topics you should focus on.

Storing the app’s data on the disk

Most iOS apps need to store data permanently. There are several iOS technologies for data storage, each one with its pros and cons. Here is a brief list of what you need to learn.

  • First of all, to save data in your app on the disk, you need a way to convert it into binary data. The standard way of doing this in iOS is to use the Codable protocols. The most common data formats in iOS are property lists and JSON. The latter has become more popular lately since it’s also used to transfer data on the internet.
  • Once you have data in binary format, you need a way to store it. The Foundation framework offers a simple API to store files in the file system. This is the standard choice to store the user’s data.
  • If instead, you want to store the app’s configuration, Foundation offers a Preferences system.
  • Most data has a hierarchical structure. At times, though, you’ll have data with complex relationships. For that, you can use Core Data. Beware though that this is a huge framework that takes some time to learn. Many developers think that Core Data is the only storage solution available in iOS. In reality, it’s the most complex one.

Databases and the SQL language

Databases are another way of storing data. They are used on many platforms, from the web to mobile apps.

Managing a database is much more complicated than the storage solutions I listed above, and that’s why it deserves its own section.

iOS uses SQLite, which is a relational database. SQLite is a multiplatform technology, so your knowledge will be transferrable too. Still, you won’t have to deal with it often. In more than ten years, only a few of the projects I worked on used SQLite.

First of all, to work with relational databases, you need to understand how to design their tables using the Entity-relationship model.

Once you have the tables in place, you manage their data using a specific language called SQL. This is not a programming language like Swift, but a querying language that allows you to combine and filter data.

Learning databases and takes time. You should pick this option only when needed.

Networking and REST APIs

Many modern apps get their data from the internet.

The Foundation framework offers a URL loading system, but learning to perform network requests in your apps is also not as straightforward as learning to use a few new classes.

To be able to create robust networked apps and to debug them properly, you need to learn how the internet works in general.

This includes concepts like the HTTP protocol, URLs and the DNS system, what a router and a server are, how REST APIs are designed, what a CDN is, etc.

This is again a quite broad topic, but since you’ll need it in many apps, it’s not something you will be able to avoid for long. To have a kickstart, I recommend reading my article on network requests and REST APIs in iOS.

Algorithms and data structures

We write programs to solve problems. While many of these are simple, there are complex problems that require specific solutions.

When you learn to program, you learn simple data structures like arrays and dictionaries. In some cases, you need more sophisticated ones.

Some examples are stacks and queues, bloom filters, linked lists, skip-lists, trees, and graphs. Which one you need depends on the problem you are trying to solve.

Each of these structures has specific algorithms to read, add, and remove data, so you need to learn those as well. And these are not the only algorithms you might need to learn.

There are many algorithms to solve common problems not related to specific data structures. Some examples are greedy algorithms, constraint satisfaction problems, linear programming, the simplex algorithm, A*, and other AI and machine learning algorithms.

These algorithms are relatively complicated, so you don’t need to know them by heart. You can always look at their implementation when required. But you should at least know that they exist.

And finally, be sure to have a look at Swift’s packages for collections, algorithms, and numerics to see if a particular solution you need has already been implemented.

Architectural design patterns, software design principles, and paradigms

You can get away with the basics of iOS development only in small apps. As a project grows, you need more tools in your bag to handle their inevitable complexity.

For these, you will need to learn common design patterns, principles, and paradigms. These are unrelated topics, even though I am listing them all in the same section.

Some examples are unit testing, the SOLID principles of object-oriented programming, advanced Swift techniquesmemory management with ARC, functional programming, protocol-oriented programming, and concurrency, just to name a few.

I have an advanced course that teaches all these, but beware that it’s only for iOS developers that already have some experience.

You don’t need to study the code of other apps

Some of the worst advice see online is to look at the code of other apps. Occasionally I also get requests to share the code of my courses, as if looking at it will give you some magical insight.

While you can learn something from anything, reading the undocumented code of other people is the least efficient way to learn iOS app development.

Would you learn drawing only by looking at finished paintings? Or would you get a book, course, or private teacher? You don’t have infinite time. Don’t spend it on endless activities with a little return on the investment.

You will soon realize that even reading and understanding your old code is time-consuming and not fun at all. Reading code of other people, when you have no idea what it does or why, is just an exercise in frustration, especially when you don’t have the skills to do it.

Also, who tells you that the piece of code you are reading is written correctly and solves a problem in the best way? You might just be picking up the worst habits of another developer.

Learn from trusted sources, not from random code you find online.

What about Combine or Firebase?

There are many buzzwords you will read as you progress in your education and career. The two most common ones that will pop up sooner or later are Combine and Firebase.

These are two completely different things. I put them together only because they are often mentioned.

Combine is another of the many frameworks offered by Apple. It’s a functional reactive programming (FRP) framework to manage data and events over time.

As a beginner, you don’t need to worry about Combine. FRP, like other paradigms I listed above, is an advanced concept. You should not care about anything advanced until you have a solid understanding of other vital topics.

As time progresses, you will meet some developers that will try to convince you that Combine is one of the best things ever.

It isn’t.

Combine is just another tool. You can make apps with and without it. When you have enough experience to understand what it provides, you will decide for yourself if it’s useful or not.

I am on the camp of people that don’t use it at all. I can tell you that online developers can be very loud and give you a skewed perspective.

The reality is that, if you look at data and not opinions, the majority of developers do not use combine.

Combine and SwiftUI came out simultaneously, and yet, the number of questions on Stack Overflow for the former is one order of magnitude less than for the latter (and Combine is not easy to understand).

To be entirely fair, the 2020 iOS Developer Community Survey shows more interest. Keep in mind, though, that only 1.229 people filled it, mostly coming from a specific newsletter. It’s not a statistically significant set.

Firebase is, instead, a product from Google to manage the backend for your apps. I never used it, so I don’t have much to say bout it. There is a two-minute video on their home page that will quickly show you what it is for.

What I can tell you, though, is that, as a beginner, this is also not something you should worry about. You don’t have the skills yet to manage apps that complex.

Moreover, not all apps need a backend infrastructure. And many companies that do have their custom solution and don’t use Firebase.

So, in the end, my recommendation is the same for both Combine and Firebase. Ignore them until you get to the point where you can evaluate if they are suitable for you or you need them for your job.

Chapter 6:

How to get a job in iOS development

If you want to land a job as a developer, your search should start much earlier than you think. It’s important to look at what the market offers to guide your learning. Getting in contact with companies early can also give you an edge against the competition.

You don’t need to build an app portfolio, or to release your own app in the App Store.

Yes, nothing can beat experience. I am not arguing against that. Trying to build something will highlight what you don’t know yet.

But building an app good enough to be released takes a lot of time. Not everything you do is a learning opportunity. Software development consists mostly of repetitive tasks that are not going to teach you anything.

Also, app portfolios are less useful than people like to think. I was never hired because of that. I followed this advice, and my portfolio was left to gather dust.

Employers know how to recognize skilled developers.

If you want to make your own app, be my guest. I do recommend you get your hands dirty with real code instead of just copying and pasting code from books and courses.

But always remember that you are optimizing for learning, so leave unnecessary tasks aside when you can.

Pick the job you want from what is available on the market

Everyone only talks about applying for jobs when you are ready for the interview. I will give you a piece of different advice.

Start looking at iOS development jobs much earlier, even if you are not yet ready to apply for one.

First of all, this will force you to look at what is available on the market instead of dreaming of a job that does not exist.

Remember that guy I mentioned that wanted a silicon-valley salary in Amsterdam? Not only that, but he also wanted to be paid specifically to build a new compiler. That kind of job does not exist. Wanting what is not available is only going lead to disappointment and waste your time.

Moreover, it’s better to have a wide choice that matches your tastes instead of applying to a random job just because you don’t know that something better exists.

You can look for jobs on boards like LinkedIn jobs. I’m sure you can find more on Google.

This will also give you an idea about the job requirements for different positions, which you can use to pick what to study first. That’s why you must do your search as early as possible.

This will also give you a list of companies for the next step.

Conduct informal interviews at the companies you would like to work

The next step nobody will tell you about is to get in contact with companies early when you don’t yet need a job or can’t apply for one.

Yes, I know. Not the best advice for introverted developers. But it works.

Don’t reach out to the people that manage job applications, though. Those are only interested in candidates and are probably part of an HR department.

What you want, instead, is getting in contact with developers that have a job like the one you want. This will give you several advantages over your competition:

  • You can get more information about the job requirements. Some might be less necessary than you thought. Others might not be mentioned in a job ad. For example, do they care if you have published an app in the App Store, or you have open-source code in your GitHub account?
  • You will understand if you like the company and its culture. These are things that are not written anywhere, and you only discover when you get in contact with real people. 
  • You get a foot in the door. Something nobody tells you is that most jobs are never published on job boards. Companies mostly fill positions through their network. When I look to hire people to help me with my business, I always contact my students first. Those are jobs you will never find anywhere.
  • When you apply for a job at a company where you have a contact, you will be able to bypass the HR screening and get an interview when others can’t. Also, many companies give a referral bonus to their employees, so they will be incentivized to help you. At my first job, we got €5.000 if we brought in a new hire.

If you want more details about the process and email scripts to contact people you don’t know, check this article from Ramit Sethi. And here, you can find what questions to ask once you get a contact.

How to write a great resume

At some point, you will be ready to apply for a job. Even if you go through a personal contact, you will often need to write a resume.

But what should you put on it? Short answer: what the employer wants to see.

I know, I know. Easier said than done.

If you followed my previous advice (which you probably skipped), you would know what they want. That is already a tremendous advantage over your competition. But here are some general guidelines because I know you won’t listen to me anyway.

Nobody cares about the formatting of your CV or which font you used. Don’t waste time over that useless stuff. What matters is the content.

You need to stand out over all the other applicants. If you just list a bunch of facts like everybody else, guess what, you are going to look like everybody else.

To stand out, you need to craft a narrative that will make people remember you. To know how to do that, watch this video:

Should you study common interview questions?

One thing I never understood is people that prepare for interviews by studying common iOS development interview questions.

I’m not saying you should not prepare for an interview. You definitely should. And yes, there are some common questions that interviewers like to ask. Prepare a good answer for those.

But the iOS questions I see on the internet make no sense. I just searched on Google for “iOS interview questions,” and what I found left me puzzled.

  • Apparently, everyone claims to give you the “top iOS interview questions,” but everyone has a different set. If those are the most common questions, shouldn’t everybody agree?
  • Most questions I never saw asked in the interviews I participated in, and I would never ask someone I am interviewing.
  • Some of them make sense, but you can’t answer them with a canned response. And you don’t know which ones they are anyway.

I can judge those questions because I have been in iOS development for 13 years, and 21 in software development. If you are reading this article, you don’t have that experience.

Studying those questions is a waste of time. First of all, there are so many questions you could be asked that you can’t memorize them all.

But, more importantly, questions are meant to test your understanding of the platform. If you have that, you can answer any questions. If you don’t, studying canned answers will not bring you far.

Let’s look at an example. “What is a memory leak?” can be an excellent question to ask. But look at this answer I found online:

A memory leak is a type of resource leak that occurs when a computer program incorrectly manages memory allocations in such a way that memory, which is no longer needed, is not released. In object-oriented programming, a memory leak may happen when an object is stored in memory but cannot be accessed by the running code.


That’s just a word salad. If you answer that in an interview, the best thing you are going to get is a blank stare.

And then, they are going to ask you to explain what you just said, and you are going to get caught. It took me a full article to explain what memory leaks are and how to avoid them, you can’t just answer that question with two sentences.


It will take you years to become an expert iOS developer. Everyone that promises otherwise is lying.

But it does not need to take long to get your first job or make your own apps. Many of my students got their first job after following my basic course, which takes around two months to complete (but it only covers iOS and requires you to know Swift already).

So, if you are thinking of a career shift, or you are interested in making iOS apps, I encourage you to get started. A few months from now, you might have the job you want.

Architecting SwiftUI apps with MVC and MVVM

It’s easy to make an app by throwing some code together. But without best practices and robust architecture, you soon end up with unmanageable spaghetti code. In this guide I'll show you how to properly structure SwiftUI apps.


30 thoughts on “Become an iOS Developer in 2022: The Ultimate Guide”

  1. I’m iOS Developer since 3 years. After this guide I know what to tell the friends whos want to learn to programming(due to casch they earn… and others). I mean not iOS only but overall.
    if found me a words and arguments that are dominating in this kind of conversations.

    • Hi Rollo23. Not wanting to plug someone else’s stuff on Matteo’s blog (for which I apologise) but if your interested in Algorithms and Data Structures (specifically in Swift) you might want to check out Wayne Bishop’s book over at I’ve no affiliation and and not read it myself but a few people I follow on twitter have said good things about it.

    • Wayne Bishop’s book, as mentioned by others, is a good one, and since it’s all Swift, all the time, it’s probably your best bet.

      The man who wrote The Book on algorithms — Robert Sedgewick, PhD under Donald E. Knuth, if that name means anything to you — still teaches the topic (for free!) over at coursera. That class is all Java, though, so unless you’re familiar with that (or similar) languages — or are willing to learn — it may be more difficult to follow.

  2. Hi Matteo,

    In terms of learning programming, can you elaborate a little when you say that programming concepts are only tools and how it’s important to understand how to reason about problems and solve them using these tools. Do you mean in terms of knowing how to apply these concepts to real world examples or in relation to iOS down the line?


    • This does not have to do much about programming to start with. It’s more about decomposing problems into small pieces.

      Let’s say you need to go buy milk at the supermarket and you want to get the cheapest option. This is a simple problem that you already fixed and know subconsciously, but how would you describe the problem?

      At a high level you would say: go to the supermarket, get the milk, come home. But these can be broken down further.

      Go to the supermarket: exit your house, turn left, walk down the road, turn right at the crossroad, walk until the supermarket, enter the door.

      Get the milk: walk to the refrigerator section, find the cheapest brand of milk, walk to the counter, pay, exit the supermarket.

      Come home: the steps in the first point, reversed.

      You can still break these down. For example, find the cheapest brand of milk would look like this:

      get a carton of milk
      check the price
      get another one
      if the price is cheaper than the one you already have, this is better
      repeat for every carton of milk and at the end you will have the cheapest one

      This is exactly like programming. You are decomposing a problem in a series of instructions. You can give these instructions to someone that does not know how to solve this problem.

      Programming is the same, you decompose a problem into instructions you give to a computer to execute. My example of finding the cheapest milk includes common programming concepts: if statements (if this then do that) and loops (repeat this for every carton).

      As you can see, these concepts stand alone, regardless of language. I am explaining them to you in English, but I could do it in Italian or French. The concepts would be the same.

      Programming is the same. There are many languages, but the fundamental concepts don’t change.

  3. Thanks Matteo. I started to dive deep into learning iOS Development, Programming and Swift last summer with doing all the video tutorials I could find from Udemy, Udacity, TeamTreehouse and Lynda. They were fun and exciting to see a semi-finished app at the end but like you pointed when it came to starting to build my own apps I was pretty much lost.

    Your site and guide have inspired me to start back at learning Swift and Programming concepts in detail and make sure I fully understand the core concepts of both before I take my first stab at building my own apps and changing my career.

    My question is, once I have become much more comfortable with Swift should I go back and learn Obj-C? I have been looking around at a lot of iOS job listings and it seems like the majority want you to know Obj-C first and Swift secondary. Or should I have a good understanding of their differences and how they work together?

    Thank you once again,


    • Yes, the only reason for which I would learn Objective-C nowadays is because a job requires it. But more and more jobs require only Swift, since many new projects in iOS are Swift only. The companies that require Objective-C are the ones that have apps that have already been written in it. It does not make sense to rewrite all this code that works and is tested in a new language, with the risk of introducing new bugs.

      The good news, as I wrote in the article, is that if you understand programming in Swift well, Objective-C is easy to learn (more in general, moving from one language to another is not a big task for a developer). Objective-C has only a subset of concepts that Swift has. Enums and structs for example are very limited and cannot have methods. Objective-C has classes, protocols and extensions (called interfaces) like Swift does, but it does not have protocol extensions. The biggest difference is syntax, but you can overcome that easily.

      Mostly iOS development is not the language, but the frameworks, Foundation and UIKit above all. But these work the same in both languages. A view controller works the same wether you use Swift or Objective-C.

      Also, I would not look into how Swift and Objective-C work together until you have to actually use them together. Many companies with apps in Objective-C keep them in one language only. Learning how they work together is not hard, Apple did a pretty good job to make them live in the same app. When you understand the two languages you can learn this in an afternoon.

      This said, on Natasha’s newsletter you can often find jobs that require only Swift. Have a look there:

  4. Nice article!
    I am new to iOS technology and don’t know where to start. But your article gives me a clear picture of Swift and Obj-C.


  5. I really like this: “First of all, do not panic: you are not going to become obsolete”

    I saw technological unemployment many times in my life and it freaks me out

  6. I favor people who have practical experience as opposed to having theoretical experience. In other words, show me your experience on the App Store. I don’t care about theories. Seeing is believing.

  7. Overall, this is an outstanding, well-considered column, clearly born of experience.

    The only thing I would disagree with is the assertion that answering “What is a memory leak?” cannot be done in two sentences. In fact, I believe it can be answered in a single sentence.

    A memory leak occurs when memory has been allocated dynamically by an application but cannot be released when it is no longer needed by that application.

    There are language-specific details behind that, including why it cannot be released, but at its core, that’s what a memory leak is.

    The simplest case is C, where memory allocation and release is strictly manual. Allocating memory returns a pointer. If the program then loses track of that pointer, it no longer has a means to free the memory. Boom — instant memory leak.

    Matteo’s deep dive into memory leaks in Swift is outstanding, of course, but it goes far beyond the conceptual question of what a memory leak is.

  8. Hi Matteo!

    When learning programing language swift, How do I go about reading the book that you recommend (the big nerd ranch guide)? and how do I practice what I just learned? do you have a guide for me on how to learn the programming language effective and what I should be doing while reading the book? you mentioned that you learned the programming language in school, how did you memorize/grasp the information that you learned? Thank you for this article and I hope to hear from you soon!

    • Just make sure you apply what you learn. The book will for sure have some exercises, so do those.

      Programming is a practical skill, so you won’t learn it by just reading. Applying it will make sure you absorb and retain the information. What you are learning is putting together the various pieces of a programming language to solve specific problems.

      Some exercises might sound silly at times, but they are usually less that they might seem. When writing apps, you will have to solve similar problems.

      Good luck!

    • А почему?
      Сможешь нам сказать? Кстати я тоже в России живу.

      (Lol, I speak some Russian tho. I live in Russia. iOS devs seem to be in high demand here. Max says he doesn’t agree with everything Matteo said, and I’m just asking him to tell us why.)

  9. This is an amazing article, gave me a lot to think about and consider on my self taught journey.. so appreciate the thought behind it all. I would like to link to my website & fb page if this is ok with you Matteo :-)

  10. Hi Matteo!
    That’s aweasome article with practicale advices!
    I am backend developer and interested in iOS development. I learned Standfort course, read Swift 5.3 and took some courses and other staff, emphasizing SwfitUI. But I have two question about ios developer perspective
    1. What is the highest level of mobile developer, what are the responsiblilities? In backend world you can level up design architecture and as for me it is more interesing than just writing code that often time is iterative task.
    2. What do you think about app builder/constructer ? Can it cut off demand on ios developer in future, how do you evaluate it’s influence on ios field?

    • The titles I usually see in most job ads are simply junior, medior, and senior (I don’t think “medior” is a word, but they definitely use it). I did a quick search on LinkedIn and, by the look of it, people simply qualify themselves as iOS developer / iOS software engineer. They might then have some additional titles, like “team lead”.

      I suggest doing a more extensive research and see what comes out. You can pick big companies like Facebook and filter the people that work there as iOS developers.

      Architecture is important also in iOS apps, especially in larger ones, so it’s definitely a skill you need to have. AFAIK though, no iOS developer only works on that. I have both seen companies with a single, large team, or with smaller teams, but the result is usually the same. Each developer owns a part of the codebase and decisions about architecture are done collectively.

      For your second question, solutions other than native have always existed, but they don’t really change the market. Most companies hire native developers. You can find on Google articles about companies like Facebook and AirBnB dropping those solutions in favor of native technologies.

  11. What about people who want to start developing but they are over 40? Is there a place on the market for “aged” developers?


Leave a Comment