iOS Contact App build for Gojek iOS Developer interview process.

Disclaimer

This solution is for reference purpose. Please, do not copy-paste it. Companies are smart enough to catch if you are cheating. If your solution got rejected due to this we're not responsible for it.

GO-JEK iOS Problem Statement

In this problem, you've to build 3 screens as shown above. First one is Contact List Screen. This screen lists all available contacts in the app along with their photo. The contacts are fetched from the backend. Along with the list of contacts, it shows which contacts are marked favourite.

The second screen is Contact Detail Screen. Tapping on a contact in the Contact List Screen leads you to the Contact Detail Screen. This screen shows the details of the contact such as their phone number, name, image,
email address, etc. You can call, message and email contact from this screen as well as mark/unmark them as a favourite.

The third screen is Add/Edit Contact Screen. Tapping on the edit button in the Contact Detail screen leads you to this screen. You can edit all fields of the contact in this screen including the contact's photo. Saving the contact's information should also save it on the backend. You can reuse this screen to Add New Contact. Tapping on the Add button in the Contact List Screen leads you to the Add Contact Screen. Here you can add a new contact to the database along with its phone number, email address, photo, etc. All fields of the new contact are mandatory in this screen.

Solution

The solution of above problem statement is available here. You can directly download this solution from here.

Getting Start

Solution Details

This solution is build using MVVM, Swift 5 and a single 3rd party MBProgressHUD. Because less 3rd party means higher selection chances. This 3rd party is just to demonstrate the use of the dependency manager (cocoapods).

This project has 87.30% code coverage with 20 Unit and 14 UI Test case. This project not using any 3rd parting to mocking and stubs the objects. This project uses custom protocol based solution by creating fake URLSession.

Fastlane Commands

If you've fastlane install then you can run following commands to build and test.

  • fastlane tests - Runs all the tests
  • fastlane build - Run all the tests and build