Techcareer is a brand under the one of the biggest hiring company that is called kariyer.net in Turkey which is focused on technology and bootcamps.
During the Development, most of the time VIPER rules are considered for the clean code purposes.
- Given all API endpoints by the instructor must be used in the project
- Users must add products to the cart
- Users must delete a single item
VIPER. I have used ViewModels in Presenter Layer and Router handles all of the navigation(Views have no navigation-related code). This is why some of the Router layers interact with the Presenter.
Tech stack & Open-source libraries
- Onboarding, log in and Authenticated User scenarios are considered and each scenario is handled by the RootModule to show the first Module/View
- iOS 13+ available UICollectionViewCompositionalLayout (The whole project is done by compositional layout since there is no need for nested collection views and it has advantages over Flow layout)
- iOS 14+ available new PageControlAPI (preferredIndicatorImage and continous interaction) is used in Onboarding Screen for better UI performance
- Moya for Network Abstraction (I have created a dummy API that differs from the instructor’s API and abstracting each Target via Moya is powerful and fast. Check the Enterprise folder in the project.. Also, it uses Alamofire as a backbone)
- Restaurant Endpoint is configured by me which you can look at the JSON file in my repo via link
- Lottie Lottie is a powerful library for animations and every screen has Lottie animation for better UI Performance. Big thanks to Airbnb team
- FirebaseAuth to user authenticate, FirebaseAuth is used for log in and Register
- FirebaseFirestore to save user information such as profile image URL and so on, FirebaseFirestore is used. RealtimeDatabase could have been used as well.
- FirebaseStorage to save the user’s profile image on a Cloud to fetch and display on Profile Screen
- SDWebImage to handle all of the images in a network, SDWebImage is used. Also, iOS 13+ Available large indicator loading is used for better UX performance