Backend: https://github.com/seancorc/Hanger-Backend
Language: Swift 5.0
Architectural Pattern: MVC
Pods:
- SnapKit - Simpler Autolayout
- Koloda - For Swipe Left/Right Functionality
- Alamofire - For making network requests and handling responses
- Promises - For elegant handling of asynchronous code (mainly used in networking layer)
- YPIImagePicker - Easy to use image picker
- Kingfisher - For caching profile picture so that a network request does not have to always be made
Networking Layer:
I have split the networking layer into three parts: 1. Request creation, 2. Request execution, 3. Operations.
This separation of concerns paired with the Promises pod allows network requests to be made and handled effortlessly.
Example Use:
let loginTask = LoginTask(email: email, password: password)
loginTask.execute(in: self.networkManager).then { (user) in
//Handle response
}.catch { (error) in
//Handle error
}Persistence:
- UserDefaults: UserDefaults is used to store small bits of information, such as if a user is logged in.
- Keychain: Keychain will be used to store more sensitive information, such as web tokens.
- SQLite: SQLite will be used to persist message data.



