Essential session storage is required to sign in. Optional analytics remain off unless you allow them.
Build a more complete Swift + SwiftUI app (a feed reader, a search-and-detail app, a small tracker) that shows off the language and framework together. Requirements: (1) PROTOCOL-ORIENTED design — define protocols with default implementations via protocol extensions, and use generics with constraints (and `some`/`any` correctly, e.g. `some View`); (2) modern CONCURRENCY — fetch/process data with async/await and Task, isolate shared mutable state with an actor or @MainActor, and handle errors with throws/do-catch or Result; (3) memory-safe closures ([weak self] / value types to avoid retain cycles); (4) a SwiftUI UI with a clean state architecture (single source of truth via @Observable/@State/@Binding), navigation, and at least one custom ViewModifier or animation; (5) tests (XCTest or Swift Testing). Document the architecture and the value-vs-reference and concurrency choices.
Protocol-oriented design (protocols + default impls); generics with constraints; `some`/`any` used correctly; value types + optionals + enums idiomatic.
async/await + Task; actor/@MainActor isolates shared state; errors handled; no retain cycles ([weak self]/value types).
Clean state architecture (single source of truth), navigation, a custom modifier/animation; tests pass; architecture documented.
Use this README structure to make the work reviewable.
DevPath fetches a read-only, size-capped snapshot. Submitted code is never executed.
# A protocol-oriented, concurrent Swift app ## Goal Build a more complete Swift + SwiftUI app (a feed reader, a search-and-detail app, a small tracker) that shows off the language and framework together. Requirements: (1) PROTOCOL-ORIENTED design — define protocols with default implementations via protocol extensions, and use generics with constraints (and `some`/`any` correctly, e.g. `some View`); (2) modern CONCURRENCY — fetch/process data with async/await and Task, isolate shared mutable state with an actor or @MainActor, and handle errors with throws/do-catch or Result; (3) memory-safe closures ([weak self] / value types to avoid retain cycles); (4) a SwiftUI UI with a clean state architecture (single source of truth via @Observable/@State/@Binding), navigation, and at least one custom ViewModifier or animation; (5) tests (XCTest or Swift Testing). Document the architecture and the value-vs-reference and concurrency choices. ## Acceptance criteria - [ ] Language mastery: Protocol-oriented design (protocols + default impls); generics with constraints; `some`/`any` used correctly; value types + optionals + enums idiomatic. - [ ] Concurrency & memory: async/await + Task; actor/@MainActor isolates shared state; errors handled; no retain cycles ([weak self]/value types). - [ ] SwiftUI & tests: Clean state architecture (single source of truth), navigation, a custom modifier/animation; tests pass; architecture documented. ## Verification - [ ] Document installation and run commands. - [ ] Record automated checks and their exact commands. - [ ] Add representative output, screenshots, or a short demo where useful. - [ ] Confirm failure paths and known constraints. ## Decision log ### Decision title - Context: - Choice: - Alternatives considered: - Tradeoffs: ## Evidence - Link each rubric criterion to the file, test, or artifact that demonstrates it. ## Known limitations - List what is intentionally out of scope and what should be improved next.