├── 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 | 
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
--------------------------------------------------------------------------------