10 things iOS developers should focus on in 2021
I know. This is a clickbaity title. And yes, I know that this list is not relevant for everybody. I know that not every iOS developer has to learn everything on this list.
That said, this list is a list of technologies and skills that I think are either already important, or becoming increasingly important this year.
It's a list of technologies and skills that I have learned, plan to learn, or would like to learn this year.
It's also a list that hopefully inspires you to broaden your horizons, and learn new things. Or maybe this list inspires you to refresh your knowledge of things that you've looked at before but haven't paid attention to for a while.
Disclaimer: I wasn't paid to link to any of the creators that I mention in this post. I also don't receive any kickback for any purchases you make through my links (except for my own books, I do make money off those).
Apple released the Combine framework with iOS 13. Combine is Apple's functional reactive programming framework that's similar to RxSwift, but also very different. Combine's main selling point is that it's a first-party framework. This means that it will be maintained by Apple (hopefully for a long time), and updated with releases of Apple's OSes which is both great, and a downside.
In any event, my goal isn't to convince you that Combine is great. It's also not my goal to convince you Combine isn't great.
I'll leave it up to you to make up your mind about Combine.
There's no denying that Apple is betting big on Combine, and that it's worth taking a look at it.
Especially because SwiftUI makes heavy use of Combine.
If you want to learn more about Combine, I'd like to recommend my Practical Combine book to help you get up and running.
I don't think you can talk about iOS development these days without at least mentioning SwiftUI. In fact, I think SwiftUI is quickly becoming more and more important in the land of iOS.
At this point, it's not likely that you'll need to know SwiftUI to be employable in the short term. I do believe that SwiftUI is an important framework to learn, and it can certainly give you an edge when looking for jobs.
Some good resources to look at if you want to learn SwiftUI are Apple's tutorials, Paul Hudson's 100 days of SwiftUI, objc.io's Thinking in SwiftUI, Daniel Steinberg's SwiftUI Kickstart, and Majid Jabrayilov's website.
Of course there are many, many more resources. These are just some of my personal favorites.
Whether SwiftUI is production-ready or not is an interesting discussion at this time. There certainly are rough edges, and we're collectively figuring out how to properly write apps in SwiftUI. A popular architecture for SwiftUI apps that you might want to look at is pointfree.co's Composable Architecture.
If there's one thing we all know we should do, but regularly skip, can't do, won't do, or simply forget about, it's unit testing.
My personal motivation to write tests whenever I can is that it allows me to know something works rather than thinking it should still work after making changes some where else in my codebase. Unless I've tested it, I can not be more certain that thinking something works. Automated tests make sure that I never forget to test certain features, and it's much, much faster than testing manually.
If you're struggling to convince your manager that you should be writing tests, take a look at my talk from 2019 called Adopting TDD in the Workplace. The bottom line is that testing should be part of your process as a developer. Tests help you write decoupled code, and once they are set up, your tests run all the time. This is much faster and more rigorous than manual testing will ever be.
Apple has been busy improving Collection Views over the past few years. Especially iOS 13's compositional collection view layout and diffable data sources were huge improvements to how we use collection views.
In iOS 14, Apple has made more improvements. For example, we now use a collection view list layout that's extremely flexible, and there's a new way to register and dequeue custom cells called cell registration.
If you're not familiar with collection views, or if you haven't looked at the new features yet I highly recommend that you do. Apple really did a fantastic job on collection views. Make sure to check out Apple's sample app to see most of the new features since iOS 13 in action.
Even though Core Data isn't a new framework and has its root set firmly in the realm of Objective-C, it's still a very relevant technology. Apple has invested significant resources into making Core Data easier and nicer to work with, and they even added the ability to sync with iCloud automatically in iOS 13.
Strictly speaking this wasn't Apple's first attempt to add iCloud syncing to Core Data but it's certainly Apple best attempt at doing this.
If you've used Core Data before Apple added
NSPersistentContainer in iOS 10 and didn't like it, or if you were told to avoid Core Data because it's clunky, bad, inefficient, or hard to work with, I highly recommend that you take another look.
I have done a lot of Core Data related writing myself, and I released a book on the framework at the start of this year called Practical Core Data that I personally really like and would highly recommend to newcomers and people that haven't looked at Core Data for a while.
We all want our apps to be free of memory leaks, frame drops and other characteristics that are poor for performance.
My favorite way to discover performance issues is the Instruments tool. If you've never looked at Instruments before, I think 2021 should be the year that you change that.
Instruments is a fundamental tool that, in my opinion, deserves a place in every iOS developer's toolbox.
To get started with Instruments, you could take a look at this overview that Apple provides.
If that overview is a bit much, you might like this post I wrote on the Time Profiler which is the Instrument I use most (by far).
Being able to communicate efficiently as a developer is important. Both verbally, and in written form. In my opinion, we're never done improving how we communicate.
That's why, in 2021 I think it's good to take some time to improve your so-called "soft" skills. This will help you become a better team member, a more efficient communicator, and a better listener.
These are skills that I think developers often underestimate which is why it was important for me to add this to the list. (Thanks for the tip HeidiPuk).
Some resources to help you get started are this talk from Ask Furrow and this interview/podcast episode with Sean Allen and Mayuko.
Practice your communication skills, write often, make sure you listen to people, and ask for feedback on your communication skills when possible. If you do this regularly I'm sure you'll be a much stronger communicator by the end of 2021.
Building Universal Apps
Now this is a technology that I personally want to spend a bunch of time on in 2021. For the past couple of years, Apple has been showing us how to build apps that run on iOS and the Mac. First with catalyst, later with SwiftUI.
Now that Apple's M1 Macs are out and they can run iOS apps natively, I think it's time to start considering the Mac as a platform that we should write our apps for whenever possible. Similar to how we try to make sure most (if not all) of our apps run on iPads as well as iPhones.
Unfortunately I haven't come across any useful resources for this yet. Apple has some WWDC videos that might be interesting, but since I haven't looked at universal apps just yet, I owe you some links.
If you have good universal app resources for me, let me know.
ARKit (and RealityKit)
As rumors of Apple glasses keep growing stronger and stronger, I think it's likely that we'll eventually see them. Maybe in 2021, maybe later.
However, once these glasses are (inevitably) announced, we'll probably want to build apps for them.
My bet is that once we're able to build apps for glasses, we'll do this on top of Apple's Augmented Reality frameworks.
In my opinion, now is a perfect time to start learning ARKit and build some Augmented Reality experiences. Especially if you're interested in possibly making apps for the rumored Apple glasses.
Async / Await
While this feature isn't offcially available in Swift yet, as its bits and pieces are still being reviewed on the Swift forums, I think async / await is one of the biggest new things to focus on this year.
I don't know which Swift version will contain an official async/await release but you can experiment with the feature today if you're using the latest Swift build.
Async/await is going to significantly change how we write asynchronous code in Swift, and I'm super excited about it.
If you want to follow along with its development, you can do so on the Swift forums where all reviews and pitches are published.
This list of 10 things you should focus on in 2021 is a list that I think is relevant. Of course, some things might not be relevant for you. Or maybe this list is missing important technologies or skills that you think everybody should focus on.
That's okay, I just hope this list gave you a direction of (new) things to learn. Some of the things on my list have been around for a while, others are brand new. If you don't get around to learning the brand new things this year, that's okay. Learn and investigate at your own pace, focus on what gets you where want to go.
If you have any feedback on this list, or if you want to share your focus for 2021, send me a Tweet. I love hearing from you.