Skip to content

cristianbanarescu/iOS-Development

Repository files navigation

iOS-Development

Repository containing small iOS Demos & Projects. These projects are used to showcase the usage of different iOS concepts and frameworks.

Demo projects

iOS useful concepts & topics

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

Other useful links:

General iOS Engineer knowledge:

iOS IDEs & Tools:

Combine:

Swift:

Data Storage (offline/online):

Books:

CoreImage:

MacOS:

Metal:

Push notifications:

Networking:

Encoding & Decoding:

App submission, TestFlight, AppStore Connect:

VoIP and calls:

SpriteKit:

Maps:

Security:

UI & Layout:

Universal links:

TextKit:

How to become a better iOS Developer:

Agile:

Application lifecycle:

Controller lifecycle:

Automation testing:

Concurrency:

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://www.hackingwithswift.com/quick-start/concurrency/main-thread-and-main-queue-whats-the-difference

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://betterprogramming.pub/the-complete-guide-to-concurrency-and-multithreading-in-ios-59c5606795ca

https://medium.com/@hassaneldesouky/ios-memory-management-in-under-6-minutes-3be777f69b7e

https://www.raywenderlich.com/966538-arc-and-memory-management-in-swift

https://medium.com/elements/memory-management-in-swift-31e20f942bbc#:~:text=In%20Swift%2C%20memory%20management%20is,stored%20properties%20of%20that%20instance.

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://stackoverflow.com/questions/21122842/whats-the-difference-between-synchronous-and-asynchronous-calls-in-objective-c#:~:text=swift%203%2C%204%2C%204%2C,task%20to%20finish%20before%20continuing.&text=Asynchronous%20means%20that%20Completes%20a,means%20it%20will%20not%20wait.

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

Data structures & Algorithms:

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/

Databases:

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://realm.io/

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

Dependency Management:

https://cocoapods.org/

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/

Design Patterns:

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

Localization:

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://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html

https://medium.com/lean-localization/ios-localization-tutorial-938231f9f881

Location:

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.raywenderlich.com/5247-core-location-tutorial-for-ios-tracking-visited-locations#toc-anchor-010

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

Machine Learning:

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

Structs vs classes:

https://www.appypie.com/struct-vs-class-swift-how-to#:~:text=In%20Swift%2C%20structs%20are%20value,choice%20between%20classes%20or%20structs.

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

Testing:

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

UI:

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://www.reddit.com/r/iOSProgramming/comments/67nvpj/making_interfaces_using_interface_builder_vs/

https://developer.apple.com/xcode/interface-builder/

https://www.raywenderlich.com/5055364-ios-storyboards-getting-started

View Controllers:

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://stackoverflow.com/questions/24098779/create-a-uitableviewcontroller-programmatically-in-swift

https://www.hackingwithswift.com/read/1/3/designing-our-interface

https://www.appypie.com/table-view-controller-uitableviewcontroller-how-to

https://medium.com/swift2go/building-reusable-generic-uitableviewcontroller-in-ios-app-alfian-losari-cba0fded3740

https://www.codementor.io/@nguyentruongky/uitableviewcontroller-vs-uiviewcontroller-uitableview-rfxuec34w

https://www.raywenderlich.com/4363809-uisearchcontroller-tutorial-getting-started

Views:

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

About

Small iOS demos & projects to showcase different iOS subjects

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published