We often have exchange developers in our team for about 3 months, who want to learn more about developing for iOS or Android. This is great because you get to know way more people in your company, distribute knowledge and get more perspectives. But it’s also challenging for the exchange developers because they need to learn a lot of stuff in a short time since the goal is not just to learn but to become a productive member of the team and to work on regular features and bugfixes.

With this post I want to give new iOS developers a guideline what to learn to be a productive member in a short time. I assume that you have a background in computer science and object oriented programming. You should know how user interfaces work in general (e.g. MVC) and should have already build other applications or websites.

You should …
… know the concepts of Objective-C such as categories, protocols, the message passing concept and how to work with the NSFoundation classes (e.g. NSArray, NSDictionary, NSString, NSNumber)
… know the advantages and disadvantages of common patterns i.e. target-action, delegation, callback-blocks and NSNotificationCenter.
… know how to create a “shared instance” aka “singleton” class.
… know about ARC and the memory management. Especially when to use strong and weak pointers and what a retain cycle is.
… know what GCD and NSOperations are and how to perform computations and network requests in the background.

… know about the basic UI components such as UILabel, UIButton, UITextField, UISwitch, …
… know the concept and lifecycle of UIViewControllers.
… know how to use AutoLayout.
… be able to create user interfaces with storyboards, xib files and in plain code.
… know how to use a UITableView and how to implement its datasource and delegate.
… know about the navigation concepts - UINavigationController, UITabController, the difference between “pushing” a view controller and “presenting” it and how segues work.
… know that there’s a UICollectionView and when to use it.
… know how to program simple animations.

… be able to kickstart a new app. Setup all the project settings and be able to run it on your personal device.
… know what CocoaPods is and how to update dependencies of a project.
… know the basic methods of the AppDelegate and the app lifecycle.

… know how to perform network requests with and without AFNetworking.
… know how to parse and create JSON.
… know how to store and access data locally on the device - NSUserDefaults, CoreData (at least if your app uses it), plain file access, plist files.

… know how to write unit tests with XCTest.

It’s also a good idea to learn Swift and know about its advantages and differences to Objective-C. It’s up to you and your current project how much you learn about Swift. Swift is the future but there’s probably no large app which exists for more than a year that uses only Swift. Therefore you need to know Objective-C anyways and at the moment there’s (from a functional point of view) nothing you cannot do with Objective-C. If your in the lucky position of starting completely from scratch it might be better to start directly with Swift and then go back to Objective-C and learn about it when you need to.

With all the knowledge mentioned above you’re able to work on most iOS apps, start your own app and know the basics to learn about more specific and advanced frameworks and projects.