Repository containing small iOS Demos & Projects. These projects are used to showcase the usage of different iOS concepts and frameworks.
- For
accessibility
(Voice Over and Dynamic Type) please check out AccessibilityDemo - For general
Swift concepts
please check out SwiftDemo - For
networking
(URLSession and Alamofire) please check out NetworkingDemo - For
Cocoapods
andLottie-ios
usage please check out CocoaPodsDemo - For
ARC(Automatic reference counting)
in Swift, please check out ARCDemo - For
WKWebView
orSFSafariViewController
please check out WebContentDemo - For
UITableView
please check out TableViewUIKitDemo - For
SwiftUI
related projects and examples, please see SwiftUI folder - For
Data structures and algorithms
please see Data structures and algorithms
The following is a list of nice to know and mandatory subjects that an iOS engineer should approach and study:
- Creating custom UI
- Full lifecycle of mobile development, testing, publishing and devops
- Networks and distributed systems
- Clean code
- General mobile landscape, design, trends, and emerging technologies
- iOS third-party libraries and APIs
- Secured REST api’s
- Gitflow or similar
- Awareness of code reviewing best practices
- OAuth and OpenID Connect
- Keycloak, Okta
- Applying security in software development and a security-by-design attitude
- CI/CD
- TDD
- RxSwift
- RxCocoa
- Asynchronous requests
- Dependency injection
- Reactive programming
- Apple design guidelines
- Scrum and Agile
- Lean
- Core Animation, UIKit, Autolayout, Interface Builder, CocoaTouch
- Knowledge in HTTP, REST API and API testing tools
- Offline storage
- Threading
- Performance tuning
- Unit and integration testing (XCTest)
- iOS APIs and Capabilities
- Understanding of app signing, provisioning, etc
- Fastlane; fastlane swift
- SOLID, KISS, DRY Principles
- BDD
- SwiftUI
- Combine
- CocoaPods
- Swift Package Manager
- Carthage
- Firebase tools (Remote Config, Analytics, Test Lab etc)
- How to implement 3rd party SDK into a mobile application
- Code obfuscation
- Using HW modules for a specific purpose (e.g., camera for QR/EAN reading)
- High level functions (map, flatMap, filter, reduce)
- Closures
- Generics
- Keychain
- Swiftlint
- Moya
- SwinJect
- SwiftyMocky
- Games
- Watch OS apps
- Mac OS apps
- tvOS apps
- iOS app publishing
- Accessing and modelling of remote data : REST + JSON
- Continuous Integration (Jenkins, Azure DevOps, Github Actions, etc)
- Good overview of development trends, news sources, podcasts, tutorials
- Source control
- Agile methodologies (Scrum, XP)
- Automated iOS testing
- https://www.linkedin.com/pulse/other-things-ios-developer-should-know-scott-gardner/?trackingId=3bsA1vNGAbF%2F6c54IIUXrw%3D%3D
- https://medium.com/@PavloShadov/best-resources-for-advanced-ios-developer-swift-ade30374593d
- https://www.hackingwithswift.com/example-code
- https://refactoring.guru/refactoring
- https://www.raywenderlich.com/ios/paths/iossoftware
- https://www.raywenderlich.com/718-6-best-practices-for-mobile-app-search-filtering
- https://www.raywenderlich.com/5817-background-modes-tutorial-getting-started
- https://www.raywenderlich.com/35-alamofire-tutorial-getting-started
- https://www.kodeco.com/6587213-alamofire-5-tutorial-for-ios-getting-started#toc-anchor-014
- https://www.raywenderlich.com/3244963-urlsession-tutorial-getting-started
- https://www.raywenderlich.com/ios/paths/iosdatanetworking
- https://www.raywenderlich.com/120-how-to-submit-an-app-to-apple-from-no-account-to-app-store-part-1
- https://www.raywenderlich.com/10868372-testflight-tutorial-ios-beta-testing
- https://www.raywenderlich.com/7738344-mapkit-tutorial-getting-started
- https://www.raywenderlich.com/197-google-maps-ios-sdk-tutorial-getting-started
- https://www.raywenderlich.com/1484288-preventing-man-in-the-middle-attacks-in-ios-with-ssl-pinning
- https://www.raywenderlich.com/129-basic-ios-security-keychain-and-hashing
- https://www.raywenderlich.com/236-how-to-secure-ios-user-data-the-keychain-and-biometrics-face-id-or-touch-id
- https://www.raywenderlich.com/5255-basic-uiview-animation-tutorial-getting-started
- https://www.raywenderlich.com/1343912-adaptive-layout-tutorial-in-ios-12-getting-started
- https://www.raywenderlich.com/322-custom-uiviewcontroller-transitions-getting-started
- https://brainstation.io/career-guides/how-to-become-an-ios-developer
- https://www.hackingwithswift.com/articles/230/how-to-become-an-ios-developer
- https://www.techrepublic.com/article/how-to-become-an-ios-developer-a-cheat-sheet/
- https://codewithchris.com/ios-developer/
- https://www.fadel.io/blog/posts/30-tips-to-make-you-a-better-ios-developer/
- https://www.codingem.com/how-to-learn-ios-development/
- https://medium.com/app-coder-io/10-steps-to-become-a-professional-ios-developer-11b82b6aea4c
- https://developer.apple.com/forums/thread/44008
- https://www.simplilearn.com/skills-required-to-become-an-ios-developer-article
- https://medium.flutterdevs.com/what-is-agile-methodology-in-mobile-app-development-4fa83ed6ac09
- https://www.techaheadcorp.com/blog/build-app-using-agile-development/
- https://medium.com/@edeskhub/why-agile-methodology-for-mobile-app-development-e685b41ea462
- https://appinventiv.com/blog/agile-scrum-methodology-in-mobile-app-development/
- https://hub.packtpub.com/9-reasons-to-choose-agile-methodology-for-mobile-app-development/
- https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
- https://manasaprema04.medium.com/application-life-cycle-in-ios-f7365d8c1636
- https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc
- https://www.javatpoint.com/ios-app-lifecycle
- https://hackernoon.com/application-life-cycle-in-ios-12b6ba6af78b
- https://developer.apple.com/documentation/uikit/uiviewcontroller
- https://medium.com/good-morning-swift/ios-view-controller-life-cycle-2a0f02e74ff5
- https://guides.codepath.com/ios/View-Controller-Lifecycle
- https://mobikul.com/ios-view-controller-life-cycle/
- https://stackoverflow.com/questions/5562938/looking-to-understand-the-ios-uiviewcontroller-lifecycle
- https://bitbar.com/blog/top-5-ios-testing-frameworks-with-examples/
- https://bugfender.com/blog/best-automated-testing-tools-ios/
- https://www.toptal.com/ios/how-to-write-automated-tests-for-ios
- https://blog.kobiton.com/ios-automation-testing-best-practices
- https://www.headspin.io/blog/ios-automation-testing-top-frameworks
- https://www.browserstack.com/guide/how-to-perform-ios-ui-test-automation
- https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html
- https://developer.apple.com/documentation/swift/swift_standard_library/concurrency
- https://medium.com/shakuro/introduction-to-ios-concurrency-a5db1cf18fa6
https://www.viget.com/articles/concurrency-multithreading-in-ios/
https://cocoacasts.com/swift-and-cocoa-fundamentals-what-is-the-main-thread
https://www.hackingwithswift.com/read/9/4/back-to-the-main-thread-dispatchqueuemain
https://www.hackingwithswift.com/quick-start/concurrency/concurrency-vs-parallelism
https://www.hackingwithswift.com/swift/5.5/structured-concurrency
https://medium.com/@duwei199714/ios-why-the-ui-need-to-be-updated-on-main-thread-fd0fef070e7f
https://www.tirupatibalan.com/2019/04/01/process-threads-queues-in-ios.html
https://medium.com/@hassaneldesouky/ios-memory-management-in-under-6-minutes-3be777f69b7e
https://www.raywenderlich.com/966538-arc-and-memory-management-in-swift
https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
https://levelup.gitconnected.com/arc-memory-management-in-swift-165fd0329f16
https://www.swiftbysundell.com/basics/memory-management/
https://developer.apple.com/documentation/swift/swift_standard_library/manual_memory_management
https://www.appcoda.com/memory-management-swift/
https://developer.apple.com/documentation/dispatch/dispatchqueue
https://developer.apple.com/forums/thread/74657
https://betterprogramming.pub/queues-and-concurrency-in-ios-for-dummies-4089da2365f8
https://www.avanderlee.com/swift/concurrent-serial-dispatchqueue/
https://medium.com/@rr092293/gcd-queues-in-ios-561ed56b65ae
https://www.raywenderlich.com/books/concurrency-by-tutorials/v2.0/chapters/3-queues-threads
https://medium.com/@almalehdev/concurrency-visualized-part-1-sync-vs-async-c433ff7b3ebe
https://www.raywenderlich.com/5370-grand-central-dispatch-tutorial-for-swift-4-part-1-2
https://www.raywenderlich.com/5293-operation-and-operationqueue-tutorial-in-swift
https://github.com/raywenderlich/swift-algorithm-club
https://medium.com/swlh/data-structures-algorithms-in-swift-part-1-stack-ccae824cc62
https://dennis-xlc.gitbooks.io/swift-algorithms-data-structures/content/chapter5.html
https://www.swiftbysundell.com/articles/picking-the-right-data-structure-in-swift/
https://trio.dev/blog/best-ios-database
https://distantjob.com/blog/best-ios-database/
https://dev.to/apentsov/ios-database-comparison-what-are-the-differences-4h1b
https://developer.apple.com/documentation/coredata
https://www.raywenderlich.com/7569-getting-started-with-core-data-tutorial#toc-anchor-005
https://www.advancedswift.com/core-data-objects/
https://medium.com/@ankurvekariya/core-data-crud-with-swift-4-2-for-beginners-40efe4e7d1cc
https://cocoacasts.com/setting-up-the-core-data-stack-from-scratch
https://www.hackingwithswift.com/books/ios-swiftui/core-data-introduction
https://cynoteck.com/blog-post/core-data-with-swift/
https://betterprogramming.pub/a-light-intro-to-core-data-part-un-e344f9d1528
https://firebase.google.com/docs/ios/setup
https://github.com/firebase/firebase-ios-sdk
https://www.raywenderlich.com/21133526-firebase-tutorial-getting-started
https://developer.goacoustic.com/acoustic-campaign/docs/integrate-ios-sdk-with-firebase-using-swift
https://medium.com/@niamhpower/getting-started-with-firebase-on-ios-part-1-612af4bcabd6
https://www.mongodb.com/docs/realm-legacy/docs/swift/latest/
https://github.com/realm/realm-swift
https://www.raywenderlich.com/9220-realm-tutorial-getting-started
https://www.linkedin.com/pulse/easy-use-realm-swift-riccardo-rizzo/
https://www.freecodecamp.org/news/add-realm-database-to-ios-crud-app-with-with-swift/
https://www.cloudbees.com/blog/realm-database-tutorial-get-started-quickly-swift
https://www.appypie.com/realm-database-swift-getting-started
https://www.raywenderlich.com/6620276-sqlite-with-swift-tutorial-getting-started
https://github.com/stephencelis/SQLite.swift
https://medium.com/@sourabhkolekar16/about-sqlite-swift-d637e0fc2171
https://iosexample.com/easy-to-use-sqlite-orm-library-written-with-swift/
https://www.raywenderlich.com/6620276-sqlite-with-swift-tutorial-getting-started
https://www.raywenderlich.com/7076593-cocoapods-tutorial-for-swift-getting-started
https://codewithchris.com/cocoapods/
https://www.advancedswift.com/ranked-swift-cocoapods/
https://blog.ah.technology/replacing-cocoapods-with-swift-package-manager-fa37d67294c3
https://www.swift.org/package-manager/
https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app
https://www.raywenderlich.com/7242045-swift-package-manager-for-ios
https://github.com/apple/swift-package-manager
https://swiftpackageindex.com/
https://brightdigit.com/tutorials/swift-package-manifest-file/
https://cocoacasts.com/xcode-fundamentals-how-to-add-a-swift-package-to-a-project
https://www.uptech.team/blog/swift-package-manager
https://docs.vapor.codes/4.0/spm/
https://github.com/Carthage/Carthage
https://www.raywenderlich.com/7649117-carthage-tutorial-getting-started
https://swiftpackageindex.com/Carthage/Carthage
https://www.codementor.io/blog/swift-package-manager-5f85eqvygj
https://medium.com/@chitralekha.yellewar/carthage-9df89b7f600f
https://manasaprema04.medium.com/dependency-managers-in-swift-d6a01e7a29a8
https://developer.blueshift.com/docs/set-up-blueshifts-ios-sdk-using-carthage
https://getstream.io/blog/migrate-carthage-to-spm/
https://docs.sentry.io/platforms/apple/guides/ios/install/carthage/
https://git-scm.com/book/en/v2/Git-Tools-Submodules
https://git-scm.com/docs/git-submodule
https://www.atlassian.com/git/tutorials/git-submodule
https://github.blog/2016-02-01-working-with-submodules/
https://devconnected.com/how-to-add-and-update-git-submodules/
https://www.vogella.com/tutorials/GitSubmodules/article.html
https://gist.github.com/gitaarik/8735255
https://chrisjean.com/git-submodules-adding-using-removing-and-updating/
https://refactoring.guru/design-patterns
https://chetan-aggarwal.medium.com/ios-design-patterns-f478abd78132
https://www.raywenderlich.com/477-design-patterns-on-ios-using-swift-part-1-2
https://medium.com/swlh/ios-design-patterns-a9bd07818129
https://rubygarage.org/blog/swift-design-patterns
https://gbksoft.com/blog/top-design-patterns-for-developing-ios-apps/
https://stfalcon.com/en/blog/post/ios-patterns
https://developer.apple.com/documentation/swift/cocoa_design_patterns
https://www.spaceotechnologies.com/blog/ios-design-patterns/
https://www.raywenderlich.com/34-design-patterns-by-tutorials-mvvm
https://www.raywenderlich.com/477-design-patterns-on-ios-using-swift-part-1-2
https://www.raywenderlich.com/1000705-model-view-controller-mvc-in-ios-a-modern-approach
https://medium.com/swlh/app-localization-in-swift-ios-swift-guide-baa2c2e4298e
https://developer.apple.com/documentation/xcode/localization
https://www.hackingwithswift.com/example-code/uikit/how-to-localize-your-ios-app
https://phrase.com/blog/posts/ios-tutorial-internationalization-localization/
https://developer.apple.com/localization/
https://medium.com/lean-localization/ios-localization-tutorial-938231f9f881
https://developer.apple.com/documentation/corelocation
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location
https://www.advancedswift.com/user-location-in-swift/
https://www.hackingwithswift.com/read/22/2/requesting-location-core-location
https://stackoverflow.com/questions/25296691/get-users-current-location-coordinates
https://itnext.io/building-a-location-tracker-in-swift-aab99b6267db
https://softauthor.com/ios-swift-get-user-location-real-time/
https://www.raywenderlich.com/5247-core-location-tutorial-for-ios-tracking-visited-locations
https://developer.apple.com/machine-learning/
https://developer.apple.com/documentation/coreml
https://www.raywenderlich.com/7960296-core-ml-and-vision-tutorial-on-device-training-on-ios
https://bignerdranch.com/blog/an-intro-to-machine-learning-in-ios-with-swift-and-playgrounds/
https://9to5mac.com/2020/08/06/apple-using-machine-learning/
https://towardsdatascience.com/core-machine-learning-for-ios-developers-7f2a4b19ec08
https://www.hackingwithswift.com/books/ios-swiftui/training-a-model-with-create-ml
https://www.raywenderlich.com/5653-create-ml-tutorial-getting-started
https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
https://medium.com/@burakakyalcin/class-vs-struct-in-swift-f8c48eaacdba
https://abhimuralidharan.medium.com/difference-between-a-struct-and-a-class-in-swift-53e08df73714
https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes
https://www.avanderlee.com/swift/struct-class-differences/
https://betterprogramming.pub/struct-vs-classes-in-swift-the-differences-explained-1e164a22efa6
https://blog.logrocket.com/introduction-to-classes-and-structs-in-swift/
https://levelup.gitconnected.com/class-vs-struct-8e4dafa66ae9
https://www.raywenderlich.com/21020457-ios-unit-testing-and-ui-testing-tutorial
https://semaphoreci.com/blog/xcode-unit-testing-tutorial
https://medium.com/swlh/unit-testing-in-swift-the-fundamentals-eec805766349
https://www.swiftbysundell.com/basics/unit-testing/
https://clean-swift.com/effective-unit-testing/
https://developer.apple.com/documentation/xctest
https://www.hackingwithswift.com/read/39/overview
https://www.avanderlee.com/swift/unit-tests-best-practices/
https://roadfiresoftware.com/2018/03/how-to-write-unit-tests-in-swift-4-with-xctest/
https://semaphoreci.com/blog/ui-testing-swift
https://codewithchris.com/xcode-ui-testing-swift/
https://www.hackingwithswift.com/articles/148/xcode-ui-testing-cheat-sheet
https://www.appcoda.com/ui-testing-swiftui-xctest/
https://developer.apple.com/documentation/xctest/user_interface_tests
https://www.swiftbysundell.com/articles/getting-started-with-xcode-ui-testing-in-swift/
https://blog.bitrise.io/post/the-ultimate-guide-to-unit-and-ui-testing-for-beginners-in-swift
https://www.raywenderlich.com/30227776-swiftui-testing-with-viewinspector-for-ios
https://www.raywenderlich.com/21020457-ios-unit-testing-and-ui-testing-tutorial
https://www.hackingwithswift.com/quick-start/swiftui/swiftui-vs-interface-builder-and-storyboards
https://medium.com/technology-nineleaps/swift-ui-or-storyboard-675ff2b40829
https://www.toptal.com/ios/ios-user-interfaces-storyboards-vs-nibs-vs-custom-code
https://stackoverflow.com/questions/59766558/swiftui-vs-interface-builder-and-storyboards
https://blog.logrocket.com/storyboard-vs-programmatically-ios-ui-design/
https://instabug.com/blog/why-we-dont-use-interface-builder-and-storyboards-at-instabug/
https://medium.com/@matlyles/storyboards-vs-programmatic-ios-development-40c5b5907f85
https://developer.apple.com/xcode/interface-builder/
https://www.raywenderlich.com/5055364-ios-storyboards-getting-started
https://developer.apple.com/documentation/uikit/uiviewcontroller
https://www.hackingwithswift.com/example-code/uikit/what-is-a-uiviewcontroller
https://www.appypie.com/view-controller-uiviewcontroller-ios-swift
https://www.swiftbysundell.com/articles/subclass-free-view-controllers-in-swift/
https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/
https://developer.apple.com/documentation/uikit/uitableviewcontroller
https://www.ralfebert.com/ios-examples/uikit/uitableviewcontroller/
https://iosdevcenters.blogspot.com/2018/01/uitableviewcontroller-in-swift-4.html
https://www.hackingwithswift.com/read/1/3/designing-our-interface
https://www.appypie.com/table-view-controller-uitableviewcontroller-how-to
https://www.raywenderlich.com/4363809-uisearchcontroller-tutorial-getting-started
https://developer.apple.com/documentation/uikit/uicollectionview
https://www.raywenderlich.com/18895088-uicollectionview-tutorial-getting-started
https://guides.codepath.com/ios/Collection-View-Guide
https://guides.codepath.com/ios/Using-UICollectionView
https://medium.com/swlh/introduction-to-uicollectionview-ios-swift-ed4e7ab1e1e3
https://www.swiftbysundell.com/articles/building-modern-collection-views-in-swift/
https://lickability.com/blog/getting-started-with-uicollectionviewcompositionallayout/
https://developer.apple.com/documentation/uikit/uiscrollview
https://www.raywenderlich.com/5758454-uiscrollview-tutorial-getting-started
https://medium.nextlevelswift.com/using-uiscrollview-in-swift5-with-autolayout-b0e463d3e5fb
https://www.appcoda.com/uiscrollview-introduction/
https://www.objc.io/issues/3-views/scroll-view/
https://oleb.net/blog/2014/04/understanding-uiscrollview/
https://www.willowtreeapps.com/craft/how-to-create-a-simple-collapsing-header-with-uiscrollview
https://developer.apple.com/documentation/uikit/uisplitviewcontroller
https://www.raywenderlich.com/4613809-uisplitviewcontroller-tutorial-getting-started
https://nshipster.com/uisplitviewcontroller/
https://swiftwithmajid.com/2019/04/03/adapting-app-for-ipad-with-uisplitviewcontroller/
https://mobikul.com/uisplitviewcontroller-in-swift-5-ios-13/
https://www.biteinteractive.com/split-view-controllers-done-right-in-ios-14/
https://medium.com/swlh/ios-14-uisplitviewcontroller-5-issues-that-you-may-run-into-65b09601b3fb
https://developer.apple.com/documentation/uikit/uitableview
https://guides.codepath.com/ios/Using-UITableView
https://stackoverflow.com/questions/33234180/uitableview-example-for-swift
https://programmingwithswift.com/create-a-uitableview-with-swift/
https://www.codingexplorer.com/getting-started-uitableview-swift/
https://thomashanning.com/uitableview-tutorial-for-beginners/
https://www.raywenderlich.com/8549-self-sizing-table-view-cells
https://www.raywenderlich.com/2198310-uistackview-tutorial-for-ios-introducing-stack-views
https://www.raywenderlich.com/5758454-uiscrollview-tutorial-getting-started
https://www.raywenderlich.com/5786-uitableview-infinite-scrolling-tutorial
https://www.raywenderlich.com/4829472-uicollectionview-custom-layout-tutorial-pinterest