└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # How to Learn iOS Development 2 | 3 | ## Swift Programming language - The basics 4 | - types: enum, struct, Int 5 | - enum and associated values 6 | - when to use struct vs. class 7 | - naming conventions 8 | 9 | resource: 10 | - 100 days HackingWithSwift 11 | - Apple Swift books 12 | 13 | ## UIKit 14 | - UIView vs UIViewController 15 | - view controller lifecycle 16 | - UITableView, UICollectionView, Delegate pattern and DiffableDataSource 17 | 18 | ## SwiftUI 19 | 20 | ### Free Courses 21 | - [Standford course](https://cs193p.sites.stanford.edu) 22 | 23 | ### Tutorials 24 | - [SwiftUI List View](https://www.swiftyplace.com/blog/swiftui-list-view-a-deep-dive-into-one-of-the-most-important-components-of-swiftui) 25 | - [Customise List View Appearance in SwiftUI](https://www.swiftyplace.com/blog/customise-list-view-appearance-in-swiftui-examples-beyond-the-default-stylings) 26 | - [How to use SwiftUI ScrollView](https://www.swiftyplace.com/blog/how-to-use-swiftui-scrollview) 27 | 28 | ### Apple Developer 29 | - [SwiftUI Apple Tutorials](https://developer.apple.com/tutorials/swiftui) 30 | - [Sample Apps Tutorials](https://developer.apple.com/tutorials/Sample-Apps) 31 | - [SwiftUI Concepts Tutorials](https://developer.apple.com/tutorials/swiftui-concepts) 32 | 33 | ## Working with Data 34 | - storing data locally with UserDefaults and in the file system with the FileManager 35 | - relational database like Core Data or realm 36 | - user authentication with e.g. Firebase 37 | - Codable protocol 38 | - REST APIs, URLSession 39 | 40 | 41 | ## Intermediate Skills 42 | - How to use the Apple Developer [Documenation Youtube tutorial](https://youtu.be/_HmNBrO5Mhc) 43 | - Read about UI and UX design - [Human interface guidelines](https://developer.apple.com/design/human-interface-guidelines/) 44 | - version control and Git 45 | 46 | 47 | ## Swift Programming language - Advanced 48 | - protocol, dependency injection 49 | - best practices 50 | 51 | resource: 52 | - Swift Programming language [guide](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html) 53 | 54 | 55 | ## Advanced Skills 56 | 57 | # Developer CV 58 | Be honest and show your main relevant working experience and education. 59 | 60 | 61 | # Developer Portfolio 62 | 63 | Coding Foundry Youtube tutorial: [What you NEED to include in your developer portfolio](https://www.youtube.com/watch?v=BZLLP7Gk3ps) 64 | 65 | Build a portfolio website with Wordpress and Elementor 66 | [(Youtube tutorial)](https://www.youtube.com/watch?v=gFnN-E8yruE&t=944s) + [hositing](http://hositinger.com) ($70 for 4 years) 67 | 68 | ### What kind of projects should you build? 69 | 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: 70 | - proficiency with Swift or Objective C, and Cocoa Touch 71 | - Xcode 72 | - Auto Layout 73 | - Familiarity with RESTful APIs to connect iOS applications to back-end services 74 | - cloud message APIs and push notifications 75 | - App architecture design 76 | - Design patterns, MVC, MVVM, Coordinator pattern 77 | - ARKit 78 | - user authentication and user roles 79 | - Firebase, realm, or Core Data 80 | - Sound knowledge of app user experience 81 | - SwiftUI 82 | - version control and Git 83 | - unit testing 84 | - Code reviews 85 | - Command line 86 | - Agile mindset 87 | - Continuous integration 88 | - clean code 89 | - UML 90 | - Sketch 91 | - Jira, Conflunce, Bitbucket or similar 92 | 93 | Make a list of the most common required skills and highligh them by priority. If you don't know a term, look it up. 94 | 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. 95 | 96 | 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. 97 | 98 | ### Example Project 1 99 | Demonstrating the following skills 100 | - SwiftUI 101 | - MVVM 102 | - unit testing 103 | - RESTful APIs to connect iOS applications to back-end services 104 | - JSON Decoding 105 | - error handling 106 | - Grand Central Dispatch GCD 107 | 108 | This tutorial series is a good example for this kind of portfolio project 109 | https://youtu.be/ggEcSzPbVr4 110 | 111 | 112 | ### Example Project 2 113 | Productivity app / BugTracker / Trello 114 | 115 | Demonstrating the following skills 116 | - Firebase login screens, 117 | - user roles and access (admin vs. basic user) 118 | 119 | ## Github repo must-do's 120 | - write a good Github readme: short descriptions of app idea, images, gifs 121 | - Instruction for installations - API keys, pods, Firebase setup 122 | - Include links to API documentation 123 | - Explain why and for what you use third party libraries 124 | - list code features: (iOS dev job requirements) like: Core Data, Core Animation, UIKit or SwiftUI, UISearchController, MVVM, Combine, unit tests, localisation, Core ML 125 | 126 | ## Project requirements: 127 | - Good looking UI 128 | - Conform to human interface guideline 129 | - project should build 130 | - project should not include bugs or crash (for most common actions) 131 | - Bonus: nice loading animations, empty state placeholders, error feedback for user 132 | 133 | ## Criteria for code review: 134 | - Clean code 135 | - Simple (don’t use nested view models with unclear tasks) 136 | - Readable: naming conventions for class, functions and variables 137 | - DRY, modular code 138 | - Don’t keep uncommented code - clutter 139 | - Don’t write a lot of comments - clutter - use better, more descriptive names 140 | - no typing mistakes, 141 | - consistent project structure (folder naming) 142 | --------------------------------------------------------------------------------