├── Practical-1.1.md ├── README.md └── assets ├── Practical-2.0.png ├── Practical-5.1.gif └── road-map.png /Practical-1.1.md: -------------------------------------------------------------------------------- 1 | 2 | 1. Write a Fibonacci numbers generator using recursion. 3 | 4 | 2. Write code to find the Factorial of a given Number. 5 | 6 | 4. Write Swift Program to Check Whether a given Number is Palindrome or Not 7 | 8 | 5. Write subscript for below given struct 9 | 10 | ``` 11 | struct WeekDays { 12 | var days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 13 | } 14 | ``` 15 | 16 | 6. What is the output of this piece of code? Explain the difference in behavior of `color` and `weekday` variables. 17 | 18 | ``` 19 | var color = "blue" 20 | var weekday = "Monday" 21 | let closure = { [color] in 22 | print("My favorite color is \(color)") 23 | print("Today is \(weekday)") 24 | } 25 | 26 | color = "green" 27 | weekday = "Tuesday" 28 | 29 | closure() 30 | ``` 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

iOS Developer Roadmap 2022

2 | 3 | ![alt text](https://github.com/canopas/iOS-developer-roadmap/blob/main/assets/road-map.png) 4 | 5 | iOS Developer Roadmap 2022 is a learning path to understand iOS development. 6 | 7 | ## What is iOS App Development? 8 | iOS is Apple’s mobile operating system (OS) that runs on hardware including iPhone, iPad and iPod Touch. An iOS application is programmed in languages such as [Swift](https://gavinw.me/swift-macos/) and [Objective-C](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) and then deployed to the App Store for users to download. 9 | 10 | # Table of contents 11 | * [Sprint 1](https://github.com/canopas/iOS-developer-roadmap#sprint-1) 12 | * [Sprint 2](https://github.com/canopas/iOS-developer-roadmap#sprint-2) 13 | * [Sprint 3](https://github.com/canopas/iOS-developer-roadmap#sprint-3) 14 | * [Sprint 4](https://github.com/canopas/iOS-developer-roadmap#sprint-4) 15 | * [Sprint 5](https://github.com/canopas/iOS-developer-roadmap#sprint-5) 16 | * [Sprint 6](https://github.com/canopas/iOS-developer-roadmap#sprint-6) 17 | 18 | #### Let's start with basic learning 19 | 20 | ## Sprint 1 21 | 22 | ### Swift Basics 23 | * Introduction to [Swift programming](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html) including all OOPs concepts. 24 | * Learn [basics of Swift](https://www.udacity.com/course/swift-for-beginners--ud1022) with core principles. 25 | * Basic introduction to [Swift Playgrounds](https://www.appcoda.com/learnswift/playgrounds.html). 26 | 27 | #### Practicle 1.1 28 | * Do all [practicles](https://github.com/canopas/iOS-developer-roadmap/blob/main/Practical-1.1.md) using playground. 29 | 30 | ### XCode 31 | * [Basic introduction](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16250858#overview) 32 | * [Introduction to interface](https://codewithchris.com/xcode-tutorial). 33 | 34 | ### Version control system 35 | 36 | #### Practicle 1.2 37 | * Create repository of practicle 1.1 on Gitlab 38 | 39 | #### References 40 | * Introduction to version control: [What Is Version Control?](https://tutorials.codebar.io/version-control/introduction/tutorial.html) 41 | * How to use git 42 | - [Version control with git](https://www.udacity.com/course/version-control-with-git--ud123) 43 | - [Git: The Beginner's Guide to Understanding Core Version Control Concepts](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/10929402#overview) 44 | - [When to commit in version control](https://softwareengineering.stackexchange.com/questions/74764/how-often-should-i-do-you-make-commits) 45 | - [Understanding Git Version Control and Learn How to Use It in Xcode](https://medium.com/appcoda-tutorials/understanding-git-version-control-and-learn-how-to-use-it-in-xcode-1bb29c10fc2d) or [with terminal](https://medium.com/the-sd-coders/using-git-version-control-with-terminal-and-xcode-aabeae21f17e) 46 | 47 | ## Sprint 2 48 | * [How to use apple Documentation](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16252724#overview) 49 | * [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/guidelines/overview) 50 | * [iOS App Life Cycle](https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc) 51 | * [UIViewController](https://developer.apple.com/documentation/uikit/uiviewcontroller) and its [life cycle](https://medium.com/good-morning-swift/ios-view-controller-life-cycle-2a0f02e74ff5) 52 | 53 | #### AutoLayout 54 | * [Overview about AutoLayout](https://www.udemy.com/join/login-popup/?next=/course/ios-13-app-development-bootcamp/learn/lecture/16252628#overview) 55 | * [How to use constraints and apply them to making iOS apps using AutoLayout](https://www.raywenderlich.com/811496-auto-layout-tutorial-in-ios-getting-started). 56 | 57 | #### Practicle 2.0 58 | * Create given [reaponsive UI](https://github.com/canopas/iOS-developer-roadmap/blob/main/assets/Practical-2.0.png) using autoLayout. 59 | - You can use alternative images. 60 | 61 | ## Sprint 3 62 | * [iOS Network API and JSON](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16253648#overview) 63 | - Elegant HTTP Networking in Swift: [Alamofire](https://github.com/Alamofire/Alamofire) 64 | 65 | * [UIScrollView Tutorial: Getting Started](https://www.raywenderlich.com/159481/uiscrollview-tutorial-getting-started) 66 | - [A Beginner’s Guide to UIScrollView](https://www.appcoda.com/uiscrollview-introduction/) 67 | - [How to use scroll view in Interface Builder / Storyboard](https://fluffy.es/scrollview-storyboard-xcode-11/) 68 | 69 | * [UITableView](https://developer.apple.com/documentation/uikit/uitableview) 70 | - [UITableview with custom cells](https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/custom-cells/) 71 | - [Self-sizing Table View Cells](https://www.raywenderlich.com/129059/self-sizing-table-view-cells) 72 | - [Delete Row From Tableview](https://www.hackingwithswift.com/example-code/uikit/how-to-swipe-to-delete-uitableviewcells) 73 | - [Add Search bar in tableview](https://www.raywenderlich.com/472-uisearchcontroller-tutorial-getting-started) 74 | 75 | * [Storyboard Segue: Pass data between view controllers](https://www.raywenderlich.com/5055364-ios-storyboards-getting-started) 76 | 77 | * [UITabBarController](https://developer.apple.com/documentation/uikit/uitabbarcontroller) 78 | - [Tab Bar Controller Guide](https://guides.codepath.com/ios/Tab-Bar-Controller-Guide) 79 | - [Starting an iOS Tab Bar App with UITabBarViewController](https://codewithchris.com/ios-tab-bar-app/) 80 | - [UITabBarController Programmatically](https://unicornmobile.medium.com/uitabbarcontroller-programmatically-316b89b5b21b) 81 | 82 | #### Practical 3.0 83 | * Create an app of Git Users. 84 | * Create app with 2 tab: 85 | 86 | A. All Users [display list of all Users] 87 | 88 | B. Profile [display email,avatar, name of current logged in user] 89 | * Provide a login facility when the user first installs the app & after show Tabbar home screen [ all users ]. 90 | * Check for authentication of user from: https://api.github.com/users 91 | * Use gitHub doc : https://developer.github.com/v3/users/#get-the-authenticated-user 92 | * Display data in table view from below API. - on All Users screen 93 | - https://api.github.com/users 94 | * Display user avatar(image), name into TableViewCell. 95 | * On Cell click user information should be displayed with Name, avatar , followers, following on another screen. 96 | * Take a batch size of 30 & put a loader at bottom of the screen while loading data. 97 | 98 | * Note: 99 | - Use [Alamofire](https://github.com/Alamofire/Alamofire) for API call. 100 | - Use [Kingfisher](https://github.com/onevcat/Kingfisher) to load image from URL. 101 | 102 | ## Sprint 4 103 | * [UICollectionView](https://developer.apple.com/documentation/uikit/uicollectionview) 104 | - [UICollectionViewDelegate](https://developer.apple.com/documentation/uikit/uicollectionviewdelegate) 105 | - [UICollectionViewFlowLayout](https://developer.apple.com/documentation/uikit/uicollectionviewflowlayout) 106 | - [UICollectionView Tutorial: Getting Started](https://www.raywenderlich.com/9334-uicollectionview-tutorial-getting-started) 107 | - [UICollectionView Tutorial: Headers, Selection and Reordering](https://www.raywenderlich.com/9477-uicollectionview-tutorial-reusable-views-selection-and-reordering#toc-anchor-001) 108 | - [Modern Collection Views with Compositional Layouts](https://www.raywenderlich.com/5436806-modern-collection-views-with-compositional-layouts) :- [Getting Started with UICollectionViewCompositionalLayout](https://lickability.com/blog/getting-started-with-uicollectionviewcompositionallayout/) 109 | 110 | * [UIStackView](https://www.raywenderlich.com/160646/uistackview-tutorial-introducing-stack-views-2) 111 | * [UIGestureRecognizer](https://www.raywenderlich.com/6747815-uigesturerecognizer-tutorial-getting-started) 112 | 113 | * Database 114 | - [UserDefault](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/10929418#overview) 115 | - [CoreData](https://medium.com/@ankurvekariya/core-data-crud-with-swift-4-2-for-beginners-40efe4e7d1cc) 116 | - [SQLite](https://github.com/stephencelis/SQLite.swift) 117 | - [Realm](https://www.raywenderlich.com/9220-realm-tutorial-getting-started) 118 | 119 | * [CocoaPods](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16813258#overview) 120 | * [Swift Package Manager](https://www.swift.org/package-manager) 121 | 122 | #### Practical 4.0 - Photo Gallery 123 | - Create 1 screen app using collectionView. 124 | - Create collectionView with 2 sections. 125 | - Display Images from Github API. 126 | - Last cell should have + sign to load more Images in particular section. 127 | - Store images into database, & it should be accessible offline. 128 | - Also provide Delete[multiple selection] & move facility in gallery & it should also delete & move in database. 129 | 130 | * Just for reference: [100 Days of Swift](https://www.hackingwithswift.com/100) 131 | 132 | ## Sprint 5 133 | #### [RxSwift](https://github.com/ReactiveX/RxSwift) and RxCocoa 134 | * Rx-Swift is a reactive programming library in iOS app development. It is a multi-platform standard, its difficult-to-handle asynchronous code in Swift, that becomes much easier in Rx-Swift. RxSwift makes it easy to develop dynamic applications that respond to changes in data and respond to user events. Ultimately, it solves the issues related to asynchronous development. 135 | 136 | #### [SwiftUI](https://developer.apple.com/tutorials/SwiftUI) 137 | * [Introducing SwiftUI](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16254084#overview) 138 | 139 | #### Practical 5.1 140 | * Design [this screen](https://github.com/canopas/iOS-developer-roadmap/blob/main/assets/Practical-5.1.gif) using SwiftUI. It should be responsive and should support all iOS and iPad devices. 141 | 142 | #### [Combine](https://developer.apple.com/documentation/combine) 143 | * [Intro to SwiftUI Combine and Data](https://designcode.io/swiftui-combine-intro) 144 | * [Getting started with the Combine framework in Swift](https://www.avanderlee.com/swift/combine) 145 | 146 | #### Practical 5.2 147 | * Create simple TODO app with CRUD operation with SQLite using SwiftUI and Combine. 148 | - Home screen should have list of task with add new task fab button. 149 | - On the click of task it should be redirect to task status screen where it can be edit. 150 | - On the cell swipe it shows delete option and on it's click that particular task should delete. 151 | - Add option to active and inactive task. 152 | 153 | ## Sprint 6 154 | 155 | * [Combine Asynchronous Code](https://developer.apple.com/documentation/combine/using-combine-for-your-app-s-asynchronous-code) 156 | * [async/await in SwiftUI](https://peterfriese.dev/posts/swiftui-concurrency-essentials-part1) 157 | * [Networking with Combine and SwiftUI](https://peterfriese.dev/posts/swiftui-combine-networking-gettingstarted) 158 | * [Detail knowledge about combine](https://heckj.github.io/swiftui-notes) 159 | 160 | #### Practical 6.0 161 | * Retrieve and display simple users list from web API to iOS List(SwiftUI). Display name, email and city in list. 162 | 163 | * API Info: 164 | - Type: GET 165 | - Path: http://jsonplaceholder.typicode.com/users. 166 | 167 | * Notes: 168 | - App should support all iPhone and iPad 169 | - Project should be under version control system(use git) 170 | - Use [Alamofire](https://github.com/Alamofire/Alamofire) for API call 171 | - Cell first show name only and it expand on tap or button like down arrow and show email and city 172 | 173 | * Features: 174 | - Delete user on long press. 175 | - Add SwipeToRefresh functionality 176 | - Store users in the database using CoreData. Refresh them in the database when SwipeToRefresh is triggered. 177 | - Implement Add user functionality with three text box of name, email and city 178 | - On the user item select event show it’s details in the new screen (Controller). 179 | - Implement swiping functionality using UICollectionView. On the user detail screen we should be able to move the next/previous user with a horizontal swipe. 180 | 181 | * Just for reference: [100 Days of SwiftUI](https://www.hackingwithswift.com/100/swiftui) 182 | 183 | ## Learning a few useful libraries 184 | 185 | * Checkout [this article](https://medium.com/canopas/1-min-guide-to-ios-development-best-practices-in-2022-e3f1d009cfa1) for useful libraries and best practices. 186 | * [Cool animations implemented with SwiftUI](https://github.com/canopas/Swiftui-animations-examples) 187 | 188 | ## Extra Practicals 189 | 190 | * [GitUser Store](https://docs.google.com/document/d/1krxgL5VxzRNGcTHhdSPMf-HwFYYc0Hbn9I6YWMkeGKk) 191 | * [UniversityRoom](https://docs.google.com/document/d/1g-45sRokWTVewusxk5K-JyQAktMKr2JLKoCtErEm_3Y) 192 | -------------------------------------------------------------------------------- /assets/Practical-2.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canopas/iOS-developer-roadmap/826b943cf9af945f5350d7288cbaa3cb393dc577/assets/Practical-2.0.png -------------------------------------------------------------------------------- /assets/Practical-5.1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canopas/iOS-developer-roadmap/826b943cf9af945f5350d7288cbaa3cb393dc577/assets/Practical-5.1.gif -------------------------------------------------------------------------------- /assets/road-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/canopas/iOS-developer-roadmap/826b943cf9af945f5350d7288cbaa3cb393dc577/assets/road-map.png --------------------------------------------------------------------------------