The purpose of this document is the creation of a repository with information about how to start and grow in my career becoming an expert iOS developer. Also, this document could works as an interview guide to cover the most important topics.
The following information is work in progress. Feel free to create a pull request if you think a topic/tutorial/course is important to be here.
If you aren't new in the programming world, but yes for iOS, follow this quick guide first. If you have experience with iOS already and you wanted to dominate more about all the topics to become an expert, please continue reading the document.
Let's divide the roadmap in two major topics:
This topic is frequently ignored by some developers thinking that mobile devs "don't need" to build complex algorithms. This is a wrong assumption. If you want to become the best developer (doesn't matter the language or platform), you should study algorithms and know the most used data structures very well.
- iOS.
iOS world is vast. There are a lot of topics to learn from Cocoa/Cocoa Touch, design patterns, software architectures and of course, Swift and Objective-C languages. This guide will help you to focus and find a way to study all those concepts.
The following list are the base concepts to learn and being on shape with computer science topics:
Check Cracking the coding interview for more details
Check Swift Algorithm Club for more details
The following list include the most important concepts you should know in order to develop apps for iOS:
- Languages
- Memory Management
- Multithreading
- Testing
- App Distribution
- Design Patterns
- Human Interface Guidelines
- Cocoa Touch
- Networking
- Push Notifications
- Persisting Data
- SwiftUI
- Internationalization
- Reactive Funtional Programming
- Architecture
- Debugging
iOS Support two languages: Objective-C (used for two decades) and Swift from 2014. You can create apps with a single of these languages or mix them if it's convinient. Nowadays, Apple take Swift as its main language for development, however, there are a lot of legacy apps that still require support from Objective-C (because is expensive and time consuming doing a migration), that's why it's important to know both of them.
If you are new and wonder where to start, I recommend you to start with Swift, because it's well robust and supported today, keep it as the main language to develop iOS apps, but also keep knowledge of Objective-C, that will help you in interviews or situations when you require to interact with it.
- Official website
- Language guide
- Design guidelines
- Swift style guide (by Google)
- Swift style guide (by RayWenderlich)
- Automatic Reference Counting
- Memory Safety
- Value vs Reference Types
- Understanding Swift Performance
- Improving Battery Life and Performance
- iOS Memory Deep Dive
- Grand Central Dispatch Tutorial
- Operations Tutorial
- Concurrency By Tutorials
- Concurrent Programming with GCD
- Modernizing Grand Central Dispatch Usage
- Apple Documentation for GCD
- Apple Documentation for Operations
- XCTest Framework
- Unit and UI Testing in iOS
- Testing in Xcode
- UI Testing in Xcode
- Getting Started with UI Testing
- Integration tests
- Test Driven Developments in iOS
Design patterns are templates to problems well known and help us to builds apps with great quality, maintenance, and scalability. The following resources will help you to learn more about those patterns used in iOS.
- Design Patterns in Swift
- Design Patterns by Tutorials
- Advanced iOS Architecture
- SOLID principles applied to Swift
- Clean Architecture
- Protocol-Oriented Programming
Apple provide us some design principles for all the different platforms in its ecosytem like macOS, WatchOS, tvOS and of course iOS (iPadOS included). Learn this topic in order to provide a better user experience for your users in all your apps. That's makes the difference between "another random app" and "the app taht everybody wants and know how to use it".
- Saving Data in iOS
- UserDefaults
- Saving data with UserDefaults
- Property Lists
- Encoding and Decoding objects
- Core Data
- Beginning Core Data
- Intermadiate Core Data
- Multiple Contexts in Core Data
- Core Data by tutorials
- Core Data for SwiftUI