- iOS 13.0+
- Xcode 11.6
- Swift 5.2
This sample app to demonstrate some aspect of clean architecture using MVVM pattern, RxSwift, dependency injection, SOLID principles , loose coupling, unit testing, Dark mode support and some of the best practices used in modern iOS programming using Swift
.
- This project was intended to work as a Employee Roster demo projects for iOS using Swift.
- The demo uses the Employee Roster API which returns information in a JSON format.
- Use of UITableViewController to display Employee roster list information.
- Implemented Unit test for business logic.
- Use of RxSwift for Reactive programming.
- Xcode 11.6(required)
- Clean
/DerivedData
folder if any - Run the pod install
pod install
- Run Cuckoo script to Mock your Swift objects
./Cuckoo-GeneratedMocks.sh
- Run SwiftGen script to generator Swift code for assets, Localizable.strings etc
./generate-swiftgen.sh
- Then clean and build the project in Xcode
RxSwift
- ReactiveX/RxSwift is used to makeReactive
binding of API call and responseKingfisher
- onevcat/Kingfisher for downloading and caching images from the web.RealmSwift
- realm/realm-cocoa Realm is a mobile database: a replacement for Core Data & SQLite.Alamofire
- Alamofire/Alamofire Elegant HTTP Networking in Swift.KeychainAccess
- kishikawakatsumi/KeychainAccess Simple Swift wrapper for Keychain that works on iOS, watchOS, tvOS and macOS.PKHUD
- pkluz/PKHUD to show loading activity indicatorSwiftRichString
- malcommac/SwiftRichString Elegant, easy and Swifty way to create Attributed StringsSwiftLint
- realm/SwiftLint A tool to enforce Swift style and conventions.SwiftGen
- SwiftGen/SwiftGen swift code generator for your assets, storyboards, Localizable.strings.CocoaLumberjack
- CocoaLumberjack/CocoaLumberjack A fast & simple, yet powerful & flexible logging framework for Mac and iOS.OHHTTPStubs
- AliSoftware/OHHTTPStubs stub your network requestsQuick
- Quick/Quick is testing framework in swiftNimble
- Quick/Nimble is Matcher Framework for Swift to pair with QuickCuckoo
- Brightify/Cuckoo is tasty mocking framework for unit tests in swift
- MVVM - My preferred architecture.
- MVVM stands for “Model View ViewModel”
- It’s a software architecture often used by Apple developers to replace MVC. Model-View-ViewModel (MVVM) is a structural design pattern that separates objects into three distinct groups:
- Models hold application data. They’re usually structs or simple classes.
- Views display visual elements and controls on the screen. They’re typically - subclasses of UIView.
- View models transform model information into values that can be displayed on a view. They’re usually classes, so they can be passed around as references.