Back to course overview
Module 7Polish & App Store readiness 13 min

Accessibility, performance, and the HIG

Make the app usable by everyone and responsive under load — table stakes for a quality app and for passing review.

Apple's Human Interface Guidelines (HIG) describe what a good iOS app feels like. You don't need to memorize them; you need to honor a few high-impact basics. SwiftUI gives you most of them for free if you don't fight it.

Accessibility: mostly free, occasionally deliberate

  • Dynamic Type — because you used SwiftUI's built-in .font(.headline) etc., your text already scales when a user enlarges system text. Avoid hard-coded font sizes and you keep this for free.
  • Labels for icons — an icon-only button needs a spoken label. Add .accessibilityLabel("Reflect") so VoiceOver users know what it does.
  • Contrast & tap targets — keep text readable on its background and buttons at least 44×44 points. SwiftUI's default controls already meet this.
swiftswift
Button { Task { await reflect() } } label: {
    Image(systemName: "sparkles")
}
.accessibilityLabel("Reflect on this entry")   // VoiceOver reads this

Performance: the two that matter for a small app

  • Don't block the main thread — you already do network work with async/await, so the UI stays smooth. Never do slow work directly in a button action without a Task.
  • Let List be lazy — SwiftUI's List only renders visible rows, so even thousands of entries scroll smoothly. Avoid loading everything into a giant VStack inside a ScrollView.
Prompt to try

Audit this SwiftUI view for accessibility and Human Interface Guidelines issues: missing accessibility labels on icon buttons, hard-coded font sizes, low-contrast colors, and tap targets under 44pt. List concrete fixes with code. File: [paste].

Test with VoiceOver once

Turn on VoiceOver in the simulator (or on your device) and try to use DayOne with your eyes closed for one minute. It's humbling and instantly shows you what's unlabeled. Fixing what you find is often three lines and makes the app usable for far more people.