How to Learn iOS Development

Swift Programming language - The basics

  • types: enum, struct, Int
  • enum and associated values
  • when to use struct vs. class
  • naming conventions

resource:

  • 100 days HackingWithSwift
  • Apple Swift books

UIKit

  • UIView vs UIViewController
  • view controller lifecycle
  • UITableView, UICollectionView, Delegate pattern and DiffableDataSource

SwiftUI

Standford course

Working with Data

  • storing data locally with UserDefaults and in the file system with the FileManager
  • relational database like Core Data or realm
  • user authentication with e.g. Firebase
  • Codable protocol
  • REST APIs, URLSession

Intermediate Skills

Swift Programming language - Advanced

  • protocol, dependency injection
  • best practices

resource:

  • Swift Programming language guide

Advanced Skills

Developer CV

Be honest and show your main relevant working experience and education.

Developer Portfolio

Coding Foundry Youtube tutorial: What you NEED to include in your developer portfolio

Build a portfolio website with Wordpress and Elementor (Youtube tutorial) + hositing ($70 for 4 years)

What kind of projects should you build?

Start by looking at job boards and read throuhg the requirements. Look for jobs that you want. If you want to become a game developer, the requirements are very different than for a E-commerce app development. Here is an example of what you might see:

  • proficiency with Swift or Objective C, and Cocoa Touch
  • Xcode
  • Auto Layout
  • Familiarity with RESTful APIs to connect iOS applications to back-end services
  • cloud message APIs and push notifications
  • App architecture design
  • Design patterns, MVC, MVVM, Coordinator pattern
  • ARKit
  • user authentication and user roles
  • Firebase, realm, or Core Data
  • Sound knowledge of app user experience
  • SwiftUI
  • version control and Git
  • unit testing
  • Code reviews
  • Command line
  • Agile mindset
  • Continuous integration
  • clean code
  • UML
  • Sketch
  • Jira, Conflunce, Bitbucket or similar

Make a list of the most common required skills and highligh them by priority. If you don't know a term, look it up. This should also answer questions like "should I learn SwiftUI or UIKit?" - During the time of writing, the majority of jobs required UIKit. Mostly SwiftUI was a nice to have skill. Some job ads don't even mention UIKit because it is so essential. You can see they ask for UIKit when they include e.g. Auto Layout or Interface builder knowledge.

With your application you should try to demonstrate that you have all or most of the required skills. The hiring team is going to look for these skills in your application. The portfolio projects should demonstrate these skills sets. Make it easier for the hiring team by mentioning what skills you used for your projects. It is not about making a pretty UI, it is a demo of you coding skills. That being said, making a great looking UI is also a skill you will need and thus put some work in the UI part too.

Example Project 1

Demonstrating the following skills

  • SwiftUI
  • MVVM
  • unit testing
  • RESTful APIs to connect iOS applications to back-end services
  • JSON Decoding
  • error handling
  • Grand Central Dispatch GCD

This tutorial series is a good example for this kind of portfolio project https://youtu.be/ggEcSzPbVr4

Example Project 2

Productivity app / BugTracker / Trello

Demonstrating the following skills

  • Firebase login screens,
  • user roles and access (admin vs. basic user)

Github repo must-do's

  • write a good Github readme: short descriptions of app idea, images, gifs
  • Instruction for installations - API keys, pods, Firebase setup
  • Include links to API documentation
  • Explain why and for what you use third party libraries
  • list code features: (iOS dev job requirements) like: Core Data, Core Animation, UIKit or SwiftUI, UISearchController, MVVM, Combine, unit tests, localisation, Core ML

Project requirements:

  • Good looking UI
  • Conform to human interface guideline
  • project should build
  • project should not include bugs or crash (for most common actions)
  • Bonus: nice loading animations, empty state placeholders, error feedback for user

Criteria for code review:

  • Clean code
  • Simple (don’t use nested view models with unclear tasks)
  • Readable: naming conventions for class, functions and variables
  • DRY, modular code
  • Don’t keep uncommented code - clutter
  • Don’t write a lot of comments - clutter - use better, more descriptive names
  • no typing mistakes,
  • consistent project structure (folder naming)