Free forever: 5 resume reviews + 10 AI actions every month. Claim your free spot →
ReachRole

iOS project

Build a REST-API-backed tracker with async/await networking

A native iOS thin client over a REST API — the actual daily shape of the job, graded on whether errors are surfaced instead of silently swallowed.

8-11 hoursEstimated time
IntermediateDifficulty
5Graded criteria
RepoWhat you submit

The brief

Build an app that tracks something against a real or mock REST API (job applications is a fine choice, matching the concept of the Android version but built natively). Use async/await for networking, implement pagination, and handle loading, error, and empty states fully — errors must be surfaced to the user, not silently caught and ignored.

Suggested stack

Swift SwiftUI URLSession with async/await

What you hand in

  • A public GitHub repository with the app and a README
  • The README documents the API contract used (real or mocked) and the architecture
  • A short note on how a simulated network failure was tested and what the UI shows for it

Grading happens against the rubric below, so read it before you start — not after.

How this is graded

Published in advance and weighted out of 100. Nothing here is a surprise.

Networking correctness 30 pts

async/await is used correctly, and errors from a failed request are surfaced in the UI, not caught and discarded.

UI state completeness 25 pts

Loading, error, and empty states are all implemented and visually distinct.

Architecture 25 pts

Networking logic lives outside the View (e.g. in a view model), so calls aren't fired directly from the View's body on every re-render.

Pagination/refresh correctness 10 pts

Loading more items appends correctly without duplicating entries, even if a refresh overlaps with a load-more call.

Finish 10 pts

No console errors or crashes, no broken layout, no leftover placeholder text or commented-out code.

Why this project is worth your weekend

  • Like the Android equivalent, this is the actual daily shape of most iOS jobs — a thin client over a REST API — more than any local-only app.
  • Silently swallowed errors (a caught error that does nothing) are a real, common iOS bug, and this project is specifically designed to surface whether the candidate handles them.
  • A clean separation between networking and views is what makes the app testable, which interviewers ask about directly.

Where people lose points

  • Catching a network error and doing nothing with it, leaving the UI stuck on a loading spinner forever.
  • Calling URLSession directly inside a SwiftUI View's body instead of through a view model, causing repeated calls on every re-render.
  • Pagination that appends duplicate items when a refresh overlaps with a load-more call.

Built it? Get it scored against this rubric.

Submit your work and get a score on every criterion above, written feedback, and three resume bullets you can use straight away.

Submit for grading Free to start. Grading uses one AI action.