This is a full-featured app (excluding purchases) that allows users to order glasses from the online store. The app has a shopping cart where users can add and remove items, as well as a wish list where they can keep their favorite items for future purchases. Users can also place orders, choose shipping options, and enter their address for delivery. The app also has a feature that allows users to view their order history.
The project was developed for the purpose of studying Clean Architecture and MVP presentation pattern, as well as for learning Firebase frameworks such as AuthFirebase and RealtimeDatabase. Storyboards were not used in the project.
The goal of the project was to build a complex, scalable, and maintainable application that adheres to SOLID principles, features multiple screens (15), and communicates with a real-time database.
One of the key features of the app is its use of async/await concurrency. This enables the app to perform multiple tasks at once, such as loading images, fetching product data, and updating the UI, without causing the app to freeze or crash.
For the product list screen was implemented infinite scrolling (with a batch size of 6 products) and shimmer view as a loading indicator. As a network layer for obtaining images was implemented an API using URLSession and custom configuration for image caching.
In addition, the project implements my own approach to handling and displaying errors (since I couldn't find similar articles on the internet). Product data was collected from a website with the same name and converted into a JSON structure for the database.
The AuthFirebase framework was used to implement:
- facebook login (Facebook SDK)
- email and password login
- email and password registration
- forgot password
- change email
- change password
The application uses five types of alerts (see spoiler):
UIKit
Stevia
CoreAnimation
Firebase SDK
(FirebaseAuth
,FirebaseDatabase
)Facebook SDK
Network
(NWPathMonitor
)URLSession
Swift
CocoaPods
SwiftLint
AutoLayout
Concurrency
(async/await
)JSON