If you’re an iOS developer writing code in Swift, you can use this Path to Mastery to determine where you are now and what skills you need to learn to get to the next level of mastery. Use this as a checklist to track your progress and as a guide to determine what to learn next. Feel free to print it out or create a PDF out of it and cross items off as you learn them.
You can check off each skill in the accompanying Trello board – it’s a great way to track and visualize your progress. Just copy it to your account and start checking off what you already know.
Novice
As a novice iOS developer, you can build very simple apps with table views and buttons. You know the basics of iOS and Swift, and you know how to find and read the official docs to learn more.
Swift
- Use and understand Swift’s basic types like Bool, Int, String, and Double
- Declare and use variables and constants
- Handle flow control with loops and conditionals
- Create and use collections
- Develop and use simple functions
- Cast objects safely from one type to another
- Handle optionals from APIs and unwrap them safely
UI
- Create a simple user interface with Interface Builder
- Center views vertically and horizontally using Auto Layout
- Create a view that fills the screen using Auto Layout
- Connect views from Interface Builder to code
- Connect actions from Interface Builder to code to handle taps on controls
- Handle and respond to taps from the user
- Customize view properties in Interface Builder
- Change text on a label programmatically when an action is performed
iOS
- Display a static table of data
- Show an alert when an action is performed
- Understand the view controller lifecycle
- Know how to find and read the official documentation
Challenges
- Write an app that has a label with white text centered vertically and horizontally on a black background. When the user taps a button, the text in the label should change.
- Write an app that displays a static list of items in a table view
Beginner
As a beginner, you have the skills you need to put an app in the App Store. You’re comfortable placing views to create slightly more complex layouts, and you can handle networking, JSON, and displaying dynamic data in table views. You can create segues between view controllers and pass data from one screen to the next.
Swift
- Work effectively with properties
- Develop and use functions with external parameter names
- Create closures and use them effectively
- Create and use custom model objects
UI
- Place views relative to their superview using Auto Layout
- Create a more complex user interface with multiple views in Interface Builder
- Create segues in Interface Builder to move between view controllers
- Understand how to include assets for various screen densities (1x, 2x, 3x)
iOS
- Understand and use the delegate pattern
- Display a dynamic table of data
- Pull data from a REST web service for use in an app
- Parse JSON by serializing and deserializing it into model objects
- Understand the app lifecycle
- Pass data from one view controller to the next during a transition
- Store and fetch user preferences on device using NSUserDefaults
Challenges
- Write a master-detail app that displays a list of items from a web service and, when an item is tapped, shows detail about the item
Intermediate
As an intermediate developer, you’re able to store data on the user’s device, customize views, and use more of the built-in frameworks to display maps and photos. You’re comfortable with sizing and placing views using Auto Layout, debugging code in Xcode, and taking advantage of Swift’s power and flexibility. You write automated tests for the critical parts of your app to ensure your code works as it should.
Swift
- Understand Swift’s initializer pattern
- Know the power and use case of optionals
- Use extensions to extend Swift’s standard functionality
- Understand and use pattern matching in switch statements
- Create and conform to protocols to develop a blueprint of functionality
- Increase code flexibility and power using generics
- Understand the similarities and differences between enums, structs, and classes and when to use each
- Create and format date objects
UI
- Add views and constraints to user interfaces in code
- Lay out custom table view cells
- Create a custom UIView subclass and use it in Interface Builder
- Create custom segues between view controllers
- Use segues programmatically to move between view controllers
- Place views relative to sibling views using Auto Layout
- Resize views based on device size using Auto Layout
- Set a view’s aspect ratio with Auto Layout
- Understand and use inequality constraints
- Understand and apply constraint priorities to ensure views are precisely the size they need to be
- Understand compression resistance and content hugging
- Size views properly using compression resistance and content hugging
- Use appearance proxies to customize app appearance
- Use Auto Layout with a scroll view to display content that doesn’t fit on a single screen
iOS
- Understand ARC and manage memory properly to prevent memory leaks and retain cycles
- Create and use a custom delegate protocol
- Define functions that use blocks to communicate between loosely coupled objects
- Display editable tables of data
- Place views a specified number of points from their superview using Auto Layout
- Store credentials securely using the keychain
- Store and fetch temporary data on device using the file system
- Store and fetch data on device using Core Data
- Set up text input fields and show and hide the keyboard as appropriate
- Write automated tests for the model layer
- Debug apps by setting breakpoints and viewing runtime values
- Access the user’s photos and camera
- Use local notifications to alert the user at a specific time
- Display a map interface with a custom zoom level and current location
Challenges
- Write a todo app that allows the user to add and delete items from a list and stores them on device. The user should be able to set due dates that are formatted and displayed with each item. A local notification should remind the user about the task on the specified due date.
- Write an app that can access the user’s photos and use the camera to take new photos for use within the app.
Advanced
As an advanced iOS developer, you think and see things differently. You’re starting to develop an intuition about when to use certain patterns and frameworks, and when not to. You’re comfortable laying out complex designs with Auto Layout and creating animations for them. Your code is easy to reason about, and you write unit tests regularly for each layer of the app.
Swift
- Develop and use functions with variadic parameters
- Develop and use functions with closure parameters
- Develop and use functions with generics
- Create and use generators and sequences
- Implement Swift’s functional patterns
- Detect and report problems in Swift and post them to Open Radar
- Use Swift effectively with Objective-C and vice versa
UI
- Space views evenly across the screen using spacer views (iOS 8) or stack views (iOS 9+)
- Understand and use constraint priorities
- Properly configure your user interface to handle multiple device sizes and orientations
- Animate views by modifying layout constraints
- Import and use custom fonts
- Draw with UIKit
iOS
- Use KVO to communicate between loosely coupled objects
- Use Notification Center to communicate between loosely coupled objects
- Cache data from a web service for increased performance
- Swap out different interfaces (views) with animation
- Know when to use composition over inheritance
- Download files in the background
- Handle and respond to multi-touch events
- Handle warnings from the device so apps don’t get shut down
- Import data into Core Data
- Link objects with dependencies in Core Data
- Build animated and user-driven transitions between view controllers
- Improve app performance by performing work concurrently with NSOperationQueue and Grand Central Dispatch
- Authenticate with a web service using OAuth 2
- Make apps accessible to more users using the Accessibility APIs
- Write automated tests for the controller layer using mocks and stubs as needed
- Understand code written in Objective-C
- Use push notifications to alert the user about events in your app
- Detect and report problems in iOS frameworks and post them to Open Radar
Challenges
- Write an app that has several screens with relatively complex layouts. It should read and send data to a web service using OAuth 2 and store data in Core Data. It should also animate views based on user interaction and have a full suite of automated tests for the model and controller layers. Code should be structured well and be easy to reason about.
Expert
As an expert, you know how to best architect your code for reuse, readability, and maintainability. You know Swift intimately, and you can read and maintain Objective-C code. You can pick up new iOS frameworks with ease; if something’s possible to do in iOS, you can get it done. You’ve done internationalization, localization, and accessibility to make your apps more accessible to all types of users. And you do it all beautifully, simply, and consistently.
Swift
- Understand and use operator overloading effectively
- Increase performance in Swift with compiler optimization techniques such as memoization
- Understand the internals of the Swift compiler and runtime
UI
- Create a UI that shows and hides views dynamically based on data from a web service
iOS
- Apply delegate, blocks, notification, and KVO patterns properly
- Localize apps for international use
- Create custom table view cells that resize dynamically using Auto Layout
- Master Xcode’s performance-tuning Instruments, including CPU Profiler, Leaks and Zombies
- Handle concurrency, caching, migrations, undo, and performance tuning with Core Data
- Create app extensions
- Know which pieces of the app will benefit from automated testing – and which ones won’t – and write automated tests for the pieces that will benefit
- Understand and address the challenges of collaborating on Storyboards
- Create custom frameworks to share functionality between apps
- Know when to use built-in frameworks, when to use third-party frameworks, and when to build your own
- Architect large apps with multiple sources of data and interfaces
- Use design patterns appropriately to manage a large code base
- Deeply understand and use the Cocoa Touch frameworks
- Build and maintain multiple apps that share a single code base
- Know how to write and maintain code in Objective-C
Challenges
- Write an app with a complex UI that adjusts dynamically based on data from a web service as well as device size and orientation. The app should have a large number of screens, send and receive data from multiple web services using OAuth 2, store data in Core Data, use iOS 8 extensions, be localized for multiple regions, and perfom excellently. And it should be usable offline, queing web requests where appropriate to be sent when the connection is restored.
- You’re an expert. You can do anything you need to do in iOS, and you can do it beautifully, simply, and consistently. You can and do create your own challenges. :-)
What are you waiting for? Get started with the 5-Part Guide to Swift, and then power through the Novice and Beginner levels in one day with the iOS Boot Camp.