Project Setup

  1. Clone the project from this link [email protected]:islamovic/PhotoCatalog.git
  2. Open PhotoCatalog.xcodeproj then Build and Run the project.

Project Architecture

I’m Using VIP Clean Code, you can read more about it from Here

Project Component


  • Is a Set of Scene, And Every Scene is a stand alone ViewController.
  • Every Scene Has it’s own Interactor Here is you can write all the business Logic.
  • Every Scene Has it’s own Presenter Here is you can write all the view Logic.


  • It has only two main components:

KeychainService: It’s a manager used for save and get data in and into KeyChain.

DataEncryption: It’s a manager for encrypt and decrypt the data.


  • Has some functionalities not related to any logic on the application but can be used more than omce. for example here we have 3 extensions for String converting strings to float values, and UIImageView for downloading images, and UICollectionView for handling the dequeuing and cell registeration.


  • Has all the network layer for the app to use.
  • I just created a simple network layer based on use cases techniques that every web service should handle it own routers and use casee.

Portrait Screenshots

Catalog List Create a new catalog Item Item Details

Landscape Screenshots

Catalog List Create a new catalog Item Item Details

Test Cases

In Unit test case I diveded them to 4 folders.

  • View Controller To test the view controller connection with the interactors

    • CreateCatalogSceneViewControllerTests
    • CatalogListSceneViewControllerTests
  • Interactors To test the interactor connection with presenataion view

    • CatalogListSceneInteractorTest
    • CreateCatalogSceneInteractorTests
  • Resources To add some Mock data to use them in unit test cases

  • Netwok To Test all the api's imnplmented inside the app

    • PhotosCatalogListWebServiceTests
    • CreatePhotoCatalogWebServiceTests
    • DownloadingImageWebServiceTests

These covared about 65% of the code.
Screen Shot 2022-02-04 at 7 21 31 PM


View Github