{"id":21898533,"url":"https://github.com/canopas/ios-developer-roadmap","last_synced_at":"2025-04-15T18:43:32.239Z","repository":{"id":42663121,"uuid":"475351611","full_name":"canopas/iOS-developer-roadmap","owner":"canopas","description":"iOS Developer Roadmap 2022 is a learning path to understand iOS development.","archived":false,"fork":false,"pushed_at":"2022-12-21T05:42:26.000Z","size":3612,"stargazers_count":95,"open_issues_count":1,"forks_count":15,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-28T23:51:10.719Z","etag":null,"topics":["ios","ios-swift","iosdevelopment","roadmap","swiftui","training"],"latest_commit_sha":null,"homepage":"https://canopas.com/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canopas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-29T08:33:33.000Z","updated_at":"2025-02-07T22:18:25.000Z","dependencies_parsed_at":"2023-01-30T02:45:45.734Z","dependency_job_id":null,"html_url":"https://github.com/canopas/iOS-developer-roadmap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canopas%2FiOS-developer-roadmap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canopas%2FiOS-developer-roadmap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canopas%2FiOS-developer-roadmap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canopas%2FiOS-developer-roadmap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canopas","download_url":"https://codeload.github.com/canopas/iOS-developer-roadmap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249131576,"owners_count":21217771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","ios-swift","iosdevelopment","roadmap","swiftui","training"],"created_at":"2024-11-28T14:33:04.807Z","updated_at":"2025-04-15T18:43:32.222Z","avatar_url":"https://github.com/canopas.png","language":null,"readme":"\u003ch1 align=\"center\"\u003eiOS Developer Roadmap 2022\u003c/h1\u003e\n\n![alt text](https://github.com/canopas/iOS-developer-roadmap/blob/main/assets/road-map.png)\n\niOS Developer Roadmap 2022 is a learning path to understand iOS development.\n\n## What is iOS App Development?\niOS 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.\n\n# Table of contents\n* [Sprint 1](https://github.com/canopas/iOS-developer-roadmap#sprint-1)\n* [Sprint 2](https://github.com/canopas/iOS-developer-roadmap#sprint-2)\n* [Sprint 3](https://github.com/canopas/iOS-developer-roadmap#sprint-3)\n* [Sprint 4](https://github.com/canopas/iOS-developer-roadmap#sprint-4)\n* [Sprint 5](https://github.com/canopas/iOS-developer-roadmap#sprint-5)\n* [Sprint 6](https://github.com/canopas/iOS-developer-roadmap#sprint-6)\n\n#### Let's start with basic learning\n\n## Sprint 1\n\n### Swift Basics\n* Introduction to [Swift programming](https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html) including all OOPs concepts.\n* Learn [basics of Swift](https://www.udacity.com/course/swift-for-beginners--ud1022) with core principles.\n* Basic introduction to [Swift Playgrounds](https://www.appcoda.com/learnswift/playgrounds.html).\n\n#### Practicle 1.1\n* Do all [practicles](https://github.com/canopas/iOS-developer-roadmap/blob/main/Practical-1.1.md) using playground.\n\n### XCode\n* [Basic introduction](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16250858#overview)\n* [Introduction to interface](https://codewithchris.com/xcode-tutorial).\n\n### Version control system\n\n#### Practicle 1.2\n* Create repository of practicle 1.1 on Gitlab\n\n#### References\n* Introduction to version control: [What Is Version Control?](https://tutorials.codebar.io/version-control/introduction/tutorial.html)\n* How to use git\n    -  [Version control with git](https://www.udacity.com/course/version-control-with-git--ud123)\n    -  [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)\n    -  [When to commit in version control](https://softwareengineering.stackexchange.com/questions/74764/how-often-should-i-do-you-make-commits)\n    -  [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)\n\n## Sprint 2\n* [How to use apple Documentation](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16252724#overview)\n* [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/guidelines/overview)\n* [iOS App Life Cycle](https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc)\n* [UIViewController](https://developer.apple.com/documentation/uikit/uiviewcontroller) and its [life cycle](https://medium.com/good-morning-swift/ios-view-controller-life-cycle-2a0f02e74ff5)\n\n#### AutoLayout\n* [Overview about AutoLayout](https://www.udemy.com/join/login-popup/?next=/course/ios-13-app-development-bootcamp/learn/lecture/16252628#overview)\n* [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).\n\n#### Practicle 2.0\n* Create given [reaponsive UI](https://github.com/canopas/iOS-developer-roadmap/blob/main/assets/Practical-2.0.png) using autoLayout.\n    - You can use alternative images.\n\n## Sprint 3\n* [iOS Network API and JSON](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16253648#overview)\n    - Elegant HTTP Networking in Swift: [Alamofire](https://github.com/Alamofire/Alamofire)\n \n* [UIScrollView Tutorial: Getting Started](https://www.raywenderlich.com/159481/uiscrollview-tutorial-getting-started)\n    - [A Beginner’s Guide to UIScrollView](https://www.appcoda.com/uiscrollview-introduction/)\n    - [How to use scroll view in Interface Builder / Storyboard](https://fluffy.es/scrollview-storyboard-xcode-11/)\n\n* [UITableView](https://developer.apple.com/documentation/uikit/uitableview)\n    - [UITableview with custom cells](https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/custom-cells/)\n    - [Self-sizing Table View Cells](https://www.raywenderlich.com/129059/self-sizing-table-view-cells)\n    - [Delete Row From Tableview](https://www.hackingwithswift.com/example-code/uikit/how-to-swipe-to-delete-uitableviewcells)\n    - [Add Search bar in tableview](https://www.raywenderlich.com/472-uisearchcontroller-tutorial-getting-started)\n\n* [Storyboard Segue: Pass data between view controllers](https://www.raywenderlich.com/5055364-ios-storyboards-getting-started)\n\n* [UITabBarController](https://developer.apple.com/documentation/uikit/uitabbarcontroller)\n    - [Tab Bar Controller Guide](https://guides.codepath.com/ios/Tab-Bar-Controller-Guide)\n    - [Starting an iOS Tab Bar App with UITabBarViewController](https://codewithchris.com/ios-tab-bar-app/)\n    - [UITabBarController Programmatically](https://unicornmobile.medium.com/uitabbarcontroller-programmatically-316b89b5b21b)\n\n#### Practical 3.0\n* Create an app of Git Users.\n* Create app with 2 tab:\n\n    A. All Users [display list of all Users]\n\n    B. Profile [display email,avatar, name of current logged in user]\n* Provide a login facility when the user first installs the app \u0026 after show Tabbar home screen [ all users ].\n* Check for authentication of user from: https://api.github.com/users\n* Use gitHub doc : https://developer.github.com/v3/users/#get-the-authenticated-user\n* Display data in table view from below API. - on All Users screen\n    - https://api.github.com/users\n* Display user avatar(image), name into TableViewCell. \n* On Cell click user information should be displayed with Name, avatar , followers, following  on another screen.\n* Take a batch size of 30 \u0026 put a loader at bottom of the screen while loading data.\n\n* Note:\n    - Use [Alamofire](https://github.com/Alamofire/Alamofire) for API call.\n    - Use [Kingfisher](https://github.com/onevcat/Kingfisher) to load image from URL.\n\n## Sprint 4\n* [UICollectionView](https://developer.apple.com/documentation/uikit/uicollectionview)\n    - [UICollectionViewDelegate](https://developer.apple.com/documentation/uikit/uicollectionviewdelegate)\n    - [UICollectionViewFlowLayout](https://developer.apple.com/documentation/uikit/uicollectionviewflowlayout)\n    - [UICollectionView Tutorial: Getting Started](https://www.raywenderlich.com/9334-uicollectionview-tutorial-getting-started)\n    - [UICollectionView Tutorial: Headers, Selection and Reordering](https://www.raywenderlich.com/9477-uicollectionview-tutorial-reusable-views-selection-and-reordering#toc-anchor-001)\n    - [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/)\n\n* [UIStackView](https://www.raywenderlich.com/160646/uistackview-tutorial-introducing-stack-views-2)\n* [UIGestureRecognizer](https://www.raywenderlich.com/6747815-uigesturerecognizer-tutorial-getting-started)\n\n* Database\n    - [UserDefault](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/10929418#overview)\n    - [CoreData](https://medium.com/@ankurvekariya/core-data-crud-with-swift-4-2-for-beginners-40efe4e7d1cc)\n    - [SQLite](https://github.com/stephencelis/SQLite.swift)\n    - [Realm](https://www.raywenderlich.com/9220-realm-tutorial-getting-started)\n \n* [CocoaPods](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16813258#overview)\n* [Swift Package Manager](https://www.swift.org/package-manager)\n\n#### Practical 4.0 - Photo Gallery\n- Create 1 screen app using collectionView.\n- Create collectionView with 2 sections.\n- Display Images from Github API.\n- Last cell should have + sign to load more Images in particular section.\n- Store images into database, \u0026 it should be accessible offline.\n- Also provide Delete[multiple selection] \u0026 move facility in gallery \u0026 it should also delete \u0026 move in database. \n\n* Just for reference: [100 Days of Swift](https://www.hackingwithswift.com/100)\n\n## Sprint 5\n#### [RxSwift](https://github.com/ReactiveX/RxSwift) and RxCocoa\n* 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.\n\n#### [SwiftUI](https://developer.apple.com/tutorials/SwiftUI)\n* [Introducing SwiftUI](https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16254084#overview)\n\n#### Practical 5.1\n* 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.\n\n#### [Combine](https://developer.apple.com/documentation/combine)\n* [Intro to SwiftUI Combine and Data](https://designcode.io/swiftui-combine-intro)\n* [Getting started with the Combine framework in Swift](https://www.avanderlee.com/swift/combine)\n\n#### Practical 5.2\n* Create simple TODO app with CRUD operation with SQLite using SwiftUI and Combine.\n    - Home screen should have list of task with add new task fab button.\n    - On the click of task it should be redirect to task status screen where it can be edit.\n    - On the cell swipe it shows delete option and on it's click that particular task should delete.\n    - Add option to active and inactive task.\n\n## Sprint 6\n\n* [Combine Asynchronous Code](https://developer.apple.com/documentation/combine/using-combine-for-your-app-s-asynchronous-code)\n* [async/await in SwiftUI](https://peterfriese.dev/posts/swiftui-concurrency-essentials-part1)\n* [Networking with Combine and SwiftUI](https://peterfriese.dev/posts/swiftui-combine-networking-gettingstarted)\n* [Detail knowledge about combine](https://heckj.github.io/swiftui-notes)\n\n#### Practical 6.0\n* Retrieve and display simple users list from web API to iOS List(SwiftUI). Display name, email and city in list.\n\n* API Info:\n    - Type: GET\n    - Path: http://jsonplaceholder.typicode.com/users. \n\n* Notes:\n    - App should support all iPhone and iPad\n    - Project should be under version control system(use git)\n    - Use [Alamofire](https://github.com/Alamofire/Alamofire) for API call\n    - Cell first show name only and it expand on tap or button like down arrow and show email and city\n\n* Features:\t\n     - Delete user on long press.\n     - Add SwipeToRefresh functionality \n     - Store users in the database using CoreData. Refresh them in the database when SwipeToRefresh is triggered.\n     - Implement Add user functionality with three text box of name, email and city\n     - On the user item select event show it’s details in the new screen (Controller).\n     - Implement swiping functionality using UICollectionView. On the user detail screen we should be able to move the next/previous user with a horizontal swipe.\n\n* Just for reference: [100 Days of SwiftUI](https://www.hackingwithswift.com/100/swiftui)\n\n## Learning a few useful libraries\n\n* Checkout [this article](https://medium.com/canopas/1-min-guide-to-ios-development-best-practices-in-2022-e3f1d009cfa1) for useful libraries and best practices.\n* [Cool animations implemented with SwiftUI](https://github.com/canopas/Swiftui-animations-examples)\n\n## Extra Practicals\n\n* [GitUser Store](https://docs.google.com/document/d/1krxgL5VxzRNGcTHhdSPMf-HwFYYc0Hbn9I6YWMkeGKk)\n* [UniversityRoom](https://docs.google.com/document/d/1g-45sRokWTVewusxk5K-JyQAktMKr2JLKoCtErEm_3Y)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanopas%2Fios-developer-roadmap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanopas%2Fios-developer-roadmap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanopas%2Fios-developer-roadmap/lists"}