This is the Spark Networks Coding Challenge about having an image gallery with the ability to select photos from camera or library, crop, rotate, and upload it.
The only external framework linked is APIClient, which was made by myself and is open sourced. It's just a lightweight API Client. The test target is also liked to OHHTTPStubs.
The Imgur API was used for listing and uploading photos. There is a known issue: usually the service takes some seconds or minutes to process a recently uploaded picture. So probably your new photo will now appear immediately when popping to the gallery after upload. You can try pulling to refresh after a while.
For high level layers, MVP pattern was used, decoupling view and presentation logic, making views more reusable. Both are referenced by each other's protocol, not concrete type, improving testability. The Configurators are simple dependency injection objects. Routers contains the view instantiation logic. They provide a way to reach it's belonging scene.
Use Cases objects implements the logic for a specific use case. They are referenced by the presenters and communicate with Gateways. Entities are manipulated by Use Cases and are sent to/retrieved by the Gateways.
Tests were written for ListImagesUseCase, ImageGateway and GalleryPresenter, covering their behaviors for all possible scenarios.