https://github.com/dojo-engineering/ios-interview-livecoding
https://github.com/dojo-engineering/ios-interview-livecoding
Last synced: 30 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/dojo-engineering/ios-interview-livecoding
- Owner: dojo-engineering
- Created: 2026-05-01T12:47:07.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-08T15:26:58.000Z (about 2 months ago)
- Last Synced: 2026-05-08T17:32:50.360Z (about 2 months ago)
- Language: Swift
- Size: 14.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# iOS Live Coding Task
Welcome! This is a collaborative session — we're not looking for perfection, we're interested in how you think, how you structure your code, and how you communicate decisions as you go.
Feel free to **think out loud**, ask questions, and discuss trade-offs as you work. There are no trick questions.
---
## Prerequisites
- Xcode 26 or later
- iOS 26+ deployment target
- No third-party dependencies — the project builds out of the box
- **No AI**: Please refrain from using any AI tools/agents to help you with this task.
---
## Context
The project contains a basic data layer and a stubbed-out `TransactionListScreen`. The `NetworkClient` currently simulates a network call by resolving pre-populated mock data with an artificial 500 ms delay.
### Project structure
```
iOS_technical_task/
├── DataLayer/
│ ├── Models/
│ │ └── TransactionDTO.swift — Transaction, Amount
│ └── TransactionsEndpoint.swift — Mock endpoints + Endpoint type
├── Networking/
│ └── NetworkClient.swift — Async GET helper
└── PresentationLayer/
└── TransactionListScreen/
└── TransactionListScreen.swift — Your starting point
```
### Data model
| Field | Type | Description |
|---|---|---|
| `id` | `UUID` | Unique transaction identifier |
| `amount.value` | `Decimal` | Monetary value (can be negative for refunds) |
| `amount.currency` | `String` | ISO 4217 currency code, e.g. `"GBP"` |
| `createdAt` | `Date` | Creation timestamp |
| `merchantName` | `String` | Display name of the merchant |
---
## Tasks
### 1. Display a list of transactions
Fetch the transaction list using `NetworkClient` and display it in `TransactionListScreen`.
Each row should show, at minimum:
- Merchant name
- Formatted amount (with currency symbol)
- Transaction status
**Things to consider:**
- How do you manage loading, success, and error states?
- How do you keep the view layer decoupled from the data layer?
---
### 2. Search
Add a search bar that lets the user filter the transaction list by merchant name.
Implement this as **local (client-side) filtering** for now, but be ready to discuss how you would approach it with a real backend.
---
### 3. Navigate to a transaction detail screen
Tapping a row should push a detail screen that displays all the information for that transaction.
---
## Guidelines
- Use **SwiftUI** and **Swift Concurrency** (`async/await`)
- No third-party dependencies needed
- There's no single right answer — we value clear reasoning over completeness
- Feel free to refactor any existing code if you think it improves the solution