As described in the iOS recruitment process main page, we expect all candidates to submit a demo project, in one of the three formats below. Only one of these is required.
- The babylon demo project.
- A project you've already done.
- An open source project you've done or contributed to.
IMPORTANT: Please note that if you're a applying for a senior role, your demo project must use a reactive programming library.
IMPORTANT: Please submit your interview demo project as a .zip
ed archive.
Before proceeding to the section of your choice, please consider the following tips.
- We like code that is simple, but simple is different from easy.
- Keep in mind the SOLID principles when doing the project.
- We left out of the requirements whether or not you should try to download everything (photos + each photo detail). This is up to you to decide and to justify.
- Testing is very important for us. Even if you don't write a single test (for instance, because of time constraints), your app should be easy to test (we love Dependency injection).
- Error scenarios should be taken into consideration and it should be easy to add them, even if you don't explicitly handle them (e.g. using an
UIAlertController
). - Although UI and UX are important, we are more concerned in this demo with your thought process and with how you architect your application. Your demo should take into consideration features that might be added in the future.
- You can use any 3rd party libraries if you wish (
Alamofire
,ReactiveCocoa
,PromiseKit
,Realm
, etc) but be prepared to justify why you did so. Feel free to use package managers to handle them. - Be consistent in your code. We advise using something like raywenderlich's swift style guide while doing the demo. It's absolutly fine to use any other style, as long as you are consistent.
- Clean the file project structure and remove any unused methods (e.g., from
AppDelegate
). This shows attention to detail. - Be opinionated regarding any architecture you use and take your time to make it a reflection of your thought process.
- We don't have a submission deadline so take your time to polish your project.
From a high level point of view the demo consists of a list of photos. Upon tapping any photo, the user is taken to the photo detail screen.
A Photo has a thumbnail image and a title and you can decide how best to display it. To retrieve the photos, you can use the following API:
When a photo is tapped, you should go to the Photo detail screen. Also, a photo that is marked favourite shows up first in the list followed by other photos.
A Photo detail screen will have:
- The user the photo belongs to.
- Get the user id from the album(http://jsonplaceholder.typicode.com/albums/{:id})
- Get the User from the user detail (http://jsonplaceholder.typicode.com/users/{:id})
- The title of the photo.
- The number of comments on the photo:
- The ability to mark/unmark a photo as favourite.
The following requirements should be met:
- Use Swift 5.0 or above.
- The information (photos and photo details) should be available offline. It's assumed that, if it's the first time you are accessing the app and you are offline, you shouldn't see any data.
- A reloading mechanism e.g. button or
UIRefreshControl
.Reachability
is not required. - Have a point of synchronization (e.g. making two concurrent requests and waiting for both of them to finish).
- The code should be production grade.
- It should compile and run.
- Stutter free, crash free UI.
- If you are applying for Senior, there are additional Requirements:
- You should use a reactive framework
We would be happy if you would submit a project you already have (for instance, a demo project for another company). Still, the project must:
- Use Swift 5.0 or above.
- Should have clear instructions on how to run the project.
- Have at least two distinct network calls.
- Parse the network response and present the information to the user.
- Have some sort of persistence mechanism.
- Compile and run.
- Have a point of synchronization (e.g. making two concurrent requests and waiting for both of them to finish).
- If you are applying for Senior, there are additional Requirements:
- You should use a reactive framework
If you have a project with these requirements, then perfect! Please ensure that you also have a description of what the project does, in order to give us some context.
Once again, please note that the requirements above are mandatory.
We would like to see a non-trivial pull request you have made to a public open source project. This should be something you are proud of and where you show your technical skills. It should also be related to iOS development and aligned with what you will do on a day-to-day basis. 😊✨🌳