More and more companies are relying on mobile apps, so iOS developers are in high demand.
Becoming an iOS developer takes some effort though, and the talent shortage keeps driving salaries higher and higher, even for entry-level positions.
So, it’s understandable that, more and more, people look into starting a career in iOS app development.
Money is not everything, of course. Many of us do it to create something we are proud of, that makes a difference in the lives of many people.
Whatever your reasons are, here is a detailed guide about what you need to learn to become an iOS developer.
The 5 most common misconceptions about SwiftUIGET THE FREE BOOK NOW
- If you want to learn efficiently, don’t spend your limited time on these activities
- To learn iOS development, you need a Mac computer, Xcode, and, optionally, an iOS device
- Don’t panic: you are not going to become obsolete
- The first pillar: learn programming in Swift
- The second pillar: learn the foundations of the iOS platform
- The third pillar: expand your knowledge to other topics of software development
If you want to learn efficiently, don’t spend your limited time on these activities
While it’s important to know what to do to become an iOS developer, it is as essential to understand 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 make it harder and demoralize you when you don’t get results.
To be clear, I am not saying that you should absolutely not do any of the activities I list below. Some of them might be helpful and, if you feel you really need any of them, please go on and do it. You decide.
What I am saying is that you don’t need them to learn iOS development.
- You don’t need to start a blog, a podcast, or jump on Twitter.
It is obviously 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 for finding a job.
Publishing everything you come up with takes time away from what you are really trying to accomplish: learning. Plus, using pen and paper works better than taking notes on your computer.
There are also more effective ways to find a job than writing a blog.
And sure, networking and direct outreach are great techniques for both getting a job or finding freelancing clients. But “hanging out on Twitter” is not a strategy and will only leave you chasing the latest fads.
What you need is a plan, not a blog.
- You don’t need to learn interface design.
Designing iOS apps on your own can be helpful (much) later in your career. But at the moment you are trying to become a developer, not a designer.
Design is a field in and of itself, which also takes time to study. And that’s not where you should put yours.
As a developer, you are going to work with designers anyway. They will take care of the visual appearance of the app, while you will have to work on its functionality.
All you need to start is to read Apple’s Human Interface Guidelines for iOS, to understand what is available in iOS, and you are good to go.
- You don’t need to build an app portfolio, or to release your own app in the App Store.
Nothing can indeed beat experience. Trying to build something will highlight what you are missing and need to learn.
But building a releasable app takes a lot of time. Not everything you do is a learning opportunity. Most of software development consists of repetitive tasks that are not going to teach you anything.
Also, app portfolios are less useful than people like to think. Some developers will tell you they are useful to get a job at some companies.
Maybe that’s true. I was never hired because of my portfolio and as I said above, there are far more effective techniques to get a job. You can spend time creating a portfolio for which only some companies care about, or learn better techniques that will help you get better jobs and a higher salary.
But what about that app you have in mind?
If you really want to make your own app, please be my guest. It’s going to offer a lot of personalized learning opportinities. But always remember that you are optimizing for learning, so leave other tasks aside when you can.
- You don’t need to study the code of other apps.
This might be some of the worst advice I have ever seen. Reading the undocumented code of other people is the least efficient way to learn iOS app development.
You will soon realize that even reading and understanding your own old code is time-consuming. Reading code when you have no idea what it does is just an exercise in frustration, especially when you don’t yet 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.
- You don’t need to learn Git (yet).
A version control system is definitely a useful tool you should use at some point. But if you are learning to code, you don’t need it.
Git is a tool you will need when working on a large code base that continually evolves. Most of what you will be doing while learning will be small exercises.
Some developers feel that you need to know git to get a job. I disagree. I was never asked about git in any interview. Git is just a tool. Sure, some companies care about tools (maybe too much), but mostly, employers look for someone who can do the job.
Once you start working on a real app and want to preserve the history of your code, then you can learn Git. Until then, it’s just a tool you don’t need.
- You don’t need to be passionate.
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 lose the initial motivation.
Also, passion does not always come at the beginning. It often comes only 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.”
To learn iOS development, you need a Mac computer, Xcode, and, optionally, an iOS device
First of all, to develop iOS apps, you need a Mac computer.
While it’s technically possible to run macOS on a Windows or Linux machine, it’s not that easy to set up.
Plus, 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 these shortcuts is going to 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.
You don’t need the newest Mac on the market though. 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.
Just make sure that it can run the latest version of macOS, and possibly next one, if Apple has already announced it.
For example, you will need to run macOS Catalina to use new technologies like SwiftUI (more on this later). Since Catalina runs on Mac minis from 2012 on, it should not be hard to find one.
Once you have a Mac, you will need to install Xcode on it.
Xcode is an integrated development environment (IDE) used to make iOS apps. You can get it for free on the Mac App Store or directly on Apple’s website.
And finally, a common question: do you need an iOS device, like an iPhone or an iPad?
If you own one already, it can be useful. But you don’t need to buy one now. You can run the apps you make in the iOS simulator on your Mac.
I developed my first iOS app using only the simulator. I also worked at many jobs and for many clients where I rarely, if ever, ran apps on real devices.
The simulator covers most of your learning needs. You need a real device only for serious testing when you want to release apps on the App Store.
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. 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 software world 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.
The first pillar: learn programming in Swift
If you want to become an iOS developer, the first thing you have to learn is programming.
While programming is the same on any platform and skills are transferrable, it is best to learn programming in the language you will use. The programming language used to make apps on iOS and other Apple platforms is Swift.
A few years ago, when Swift was first introduced to replace Objective-C, there was a debate on which one you should pick first. Swift won that debate long ago, so if you happen to find articles about it still, you can ignore them.
If you are learning programming for the first time, my advice is to learn it separately from iOS development.
Both Swift programming and the iOS platform are two massive beasts, and it’s going to be hard to learn both at the same time.
Yes, I know that there are many courses out there that teach both at the same time. Even Apple is guilty.
I met many people that got confused precisely because they followed that approach. After they put a ton of effort in learning both at the same time, they end up not understanding either.
So, if you are starting, my recommendation is to focus for a few weeks only on getting a solid foundation of programming concepts:
- Basic concepts: 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
While I offer both basic and advanced courses on iOS development, I don’t have any material about learning programming in Swift (yet?).
Since I learned programming in university a long time ago, I don’t have any book I can recommend. But the Big Nerd Ranch guide seems to be a good choice that many recommend.
I have not read it myself, but it only focuses on Swift programming, and it has good reviews, so you can start from there.
What I can tell you though is to avoid the Swift Language Guide unless you know programming already. That’s only a reference manual, and it does not teach programming.
The second pillar: learn the foundations of the iOS platform
You don’t become an iOS developer by only learning Swift programming. After you do that, it’s time to tackle iOS itself.
iOS is a vast platform 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.
Since there are a ton of concepts to learn, it is crucial that you focus on the fundamental concepts you will need for every app you will ever make.
And even after that, you might never use them in your career. Most iOS apps rely on essential technologies.
So, what are these fundamental topics you should learn?
Here is a quick list:
- Xcode and Interface Builder. These are the necessary tools you will use to make iOS apps.
- The Model-View-Controller pattern and view controllers. MVC is the design pattern that guides you when structuring iOS apps. View controllers are part of MVC and a central component of any iOS app.
- The view hierarchy and Auto Layout. You need these to create the user interface of your app. Auto Layout is especially nowadays required, to create interfaces that work on devices of various sizes.
- Containers and storyboards. Containers are special view controllers that allow you to create the screen navigation flow in your app. Xcode storyboards are a visual tool that helps you to design and organize such navigation flow.
- Table views. Many, if not all, iOS apps need to manage screens with long scrolling lists. For that, you use table views in iOS. While table views are just one of the many components for user interfaces, I list them separately because they have many moving parts you need to understand.
If you want to expand this topic, I wrote a more extensive guide you can get for free here.
UIKit contains many of the items I listed above, like view controllers, containers, Auto Layout, and table views. SwiftUI will change the way these work.
So, should you spend time learning those, if they are going away?
SwiftUI will come out of beta only in autumn, and it will take 1-2 years before developers will be able to use it in real apps. Many established apps will probably take longer.
In the meanwhile, you will have to learn “the old way,” especially if you want a job at a big company.
Don’t worry too much about SwiftUI for now. It is not radically different, and many of the concepts you learn now will translate.
Moreover, updating your skills is part of being an iOS developer, so there is never a “right moment” to become one.
I will probably update my free guide soon also to include SwiftUI, so be sure to grab a copy now to be notified when I update it.
The third pillar: 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.
If you master those two, you should be able to get a job as an iOS developer and to build your own apps if that’s your goal.
You would actually know more about iOS than I knew when I got my first job as an iOS developer. (To be fair, though, I also had a master in computer science, but many companies nowadays don’t require one.)
But 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 to cover more topics.
Here are some important ones, in no particular order. What you learn first will depend on your needs.
- Networking and REST APIs.
Many, but not all, modern apps get their data from the internet. The iOS SDK offers many APIs to perform network requests, but knowing just those is not enough.
To be able to create robust networked apps and to debug them properly, you need to learn about how the internet works in general.
- Databases and SQL.
Databases are used on many platforms to store data, from the web to mobile apps.
Since there are many solutions in iOS, you might not have to deal with databases often. Only a few of the apps I worked on in more than ten years used SQLite.
But in some jobs, you might also have to put your hands on a web database, so it’s knowledge that might come in handy.
To manage data in a relational database, you need to use a specific language called SQL. This is not a programming language like Swift, but a querying language to manage data, so it will take you some extra effort to learn it.
- 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 programming, you learn simple data structures like arrays and dictionaries. But there are some cases in which you need more sophisticated ones.
Each of these structures comes with specific algorithms to read, add, and remove data, so you need to learn those as well.
These are not the only algorithms you might have to learn, though.
There are many algorithms to solve common problems that are not related to specific data structures. Some examples are greedy algorithms, constraint satisfaction problems, linear programming and the simplex algorithm, A*, and many others.
Many of these algorithms are complicated, so you don’t have to know all of them by heart. You can always study their implementation when required.
But you should at least know they exist.
- Architectural design patterns, software design principles, and paradigms.
You can get away with the basics of iOS development to create small apps. But as a project grows, you need more tools in your bag to handle the inevitable complexity.
Many tools can go in that bag, so it’s hard to groups them all together under a single topic.
I have an advanced course that teaches all these, but beware that it’s only for iOS developers that have already some experience.
It takes years to become an expert iOS developer. But it does not need to take that long to get a job or make your own apps.
I have many students that got their first job after following my basic course, which does not take more than a couple of months.
So, if you are thinking of a career shift, or you are interested in making iOS apps, I encourage you to get started.
And if you want to start building apps using SwiftUI, I have a free guide to get you started that you can get below.
The 5 most common misconceptions about SwiftUI
SwiftUI is the future of UI development. And yet, many developers share some misconceptions that prevent them from understanding how SwiftUI works and from using it in real apps.