app-creator/domain-packs/ios-app/checklist-accessibility.md
Kjell Tore Guttormsen 2011507ea1 design(app-creator): S6 — forfatt ios-app referanse-domain-pack + start claude-code-plugin-pakke
- domain-packs/ios-app/: komplett referanse-pakke (8 komponenter) — pack.json med
  components-map, conventions.md, 4 patterns/, gotchas.md, checklist.md splittet i 3
  (App Store-submission + security-privacy/MASVS 2.1 + accessibility/WCAG 2.2 AA),
  3 scaffold/-maler (PrivacyInfo.xcprivacy-plist, NSUsageDescription-inventar,
  ASC-metadata), eksempel-feature-brief i Voyage strict-mode-format, glossary.md.
  Hver teknisk påstand verifisert mot Apple Developer / W3C WAI / OWASP MAS.
- domain-packs/claude-code-plugin/: stub — pack.json + conventions.md + gotchas.md
  + checklist.md + glossary.md ferdige (ekstrahert fra ktg-privat-konvensjoner);
  patterns/scaffold/examples er stubs.
- docs/domain-pack-spec.md: § D2/D3/D4/D7 + restrisiko oppdatert — pack.json
  components-felt, core/supplementary låst til manifestet, checklist-splitt-konvensjon,
  snapshot-materialiserings-mekanikk presisert, iOS-versjons-korreksjon (iOS 26, ikke
  "iOS 18/19"), D7 → "forfattet i S6".
- prototype-run/friksjon.md: #9 (Akashic-briefen refererer "iOS 19" som ikke finnes —
  rettes i S7) + S6-prosessnotater (checklist-splitt bekreftet nødvendig, components-gap
  fylt, verifiserings-asymmetri ios-app vs claude-code-plugin notert).
- CLAUDE.md: peker til domain-packs/ under § Status.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 14:06:54 +02:00

45 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- domain-pack: ios-app · component: checklists · core -->
<!-- verified 2026-05-12 against W3C WCAG 2.2 (W3C Recommendation 2023-10-05). -->
# iOS-app — tilgjengelighet sjekkliste (WCAG 2.2 AA)
WCAG 2.2 ble W3C Recommendation 2023-10-05. Den la til 9 nye suksesskriterier vs 2.1 og fjernet 4.1.1 Parsing (obsolet). Denne sjekklisten dekker AA-nivå. Sub-sjekkliste av `checklist.md`. ([W3C — What's New in WCAG 2.2](https://www.w3.org/WAI/standards-guidelines/wcag/new-in-22/))
> WCAG er skrevet for web, men kriteriene mapper godt til native iOS via UIKit/SwiftUI Accessibility (VoiceOver, Dynamic Type, kontrast, fokus-orden). Der et kriterium er web-spesifikt, bruk dets *intensjon*.
## Nye i WCAG 2.2 — Level AA (de 4 som faktisk er nye krav på AA)
- [ ] **2.4.11 Focus Not Obscured (Minimum) [AA, ny]** — når et element får tastatur-/fokus, er det ikke fullstendig skjult av annet innhold (sticky headers, overlays, tastatur). iOS: pass på at fokusert felt scrolles synlig over tastaturet.
- [ ] **2.5.7 Dragging Movements [AA, ny]** — all funksjonalitet som krever dra-bevegelse har et enkelt-peker-alternativ uten dra (f.eks. knapper i tillegg til drag-to-reorder), med mindre dra er essensielt.
- [ ] **2.5.8 Target Size (Minimum) [AA, ny]** — interaktive mål er minst 24×24 CSS-px (eller har tilstrekkelig avstand). iOS HIG anbefaler 44×44 pt — følg HIG, så er dette dekket.
- [ ] **3.3.8 Accessible Authentication (Minimum) [AA, ny]** — ingen kognitiv funksjonstest (huske passord, løse puslespill, transkribere) som eneste vei gjennom et autentiserings-steg; tillat lim-inn, passord-managers, Sign in with Apple/passkeys, e-post-/SMS-kode. (Relevant kun hvis appen har auth.)
> Også nye i 2.2, men Level A (ta med hvis du sikter A som baseline): **3.2.6 Consistent Help [A]** — hjelpe-mekanismer i konsistent rekkefølge; **3.3.7 Redundant Entry [A]** — ikke be om samme info to ganger i samme prosess uten å auto-fylle.
> Level AAA (utenfor AA-kravet): 2.4.12 Focus Not Obscured (Enhanced), 2.4.13 Focus Appearance, 3.3.9 Accessible Authentication (Enhanced).
## Bærende WCAG 2.0/2.1 AA-kriterier (videreført — sjekk alltid)
- [ ] **1.1.1 Non-text Content [A]** — alle ikoner/bilder/knapper har `accessibilityLabel`; dekorative er `accessibilityHidden`.
- [ ] **1.3.1 Info and Relationships [A]** — overskrifter/grupper/lister eksponert via accessibility traits; skjemafelt har labels.
- [ ] **1.4.3 Contrast (Minimum) [AA]** — tekst ≥ 4.5:1 (stor tekst ≥ 3:1) mot bakgrunn — **også over Liquid Glass-materialer** (translucens kan senke effektiv kontrast; test mot reelle bakgrunner).
- [ ] **1.4.11 Non-text Contrast [AA]** — UI-komponenter og grafiske grenser ≥ 3:1.
- [ ] **1.4.4 Resize Text [AA] / 1.4.10 Reflow [AA]** — støtt Dynamic Type opp til største størrelse uten avkutting/horisontal scroll; bruk `.dynamicTypeSize` / skalérbare fonter, ikke faste px.
- [ ] **1.4.13 Content on Hover or Focus [AA]** — popovers/tooltips er dismissible, hoverbare, persistente.
- [ ] **2.1.1 Keyboard [A]** — full funksjon med ekstern tastatur / Full Keyboard Access; ingen fokus-felle (2.1.2).
- [ ] **2.4.3 Focus Order [A] / 2.4.7 Focus Visible [AA]** — logisk fokus-orden; synlig fokus-indikator.
- [ ] **2.4.6 Headings and Labels [AA]** — beskrivende overskrifter og labels.
- [ ] **2.5.3 Label in Name [A]** — synlig tekst på en kontroll er del av dens accessibility-navn.
- [ ] **3.1.1 Language of Page [A]** — app-språk satt korrekt (lokalisering).
- [ ] **3.2.3 Consistent Navigation [AA] / 3.2.4 Consistent Identification [AA]** — navigasjon og ikon-betydning konsistent på tvers av skjermer.
- [ ] **3.3.1 Error Identification [A] / 3.3.3 Error Suggestion [AA]** — feil beskrives i tekst, ikke bare farge; forslag til retting der mulig.
- [ ] **4.1.2 Name, Role, Value [A]** — custom-kontroller eksponerer korrekt rolle/verdi til VoiceOver (`accessibilityTraits`, `accessibilityValue`).
- [ ] **4.1.3 Status Messages [AA]** — dynamiske statusoppdateringer annonseres (`UIAccessibility.post(notification: .announcement)` / SwiftUI `accessibilityElement` + live region-ekvivalent).
- [ ] **2.3.1 Three Flashes [A]** — ingen blink > 3 Hz; respekter Reduce Motion.
## iOS-spesifikk røyktest
- [ ] Naviger hele appen med **VoiceOver** — alt er nåbart, navngitt, i logisk rekkefølge.
- [ ] **Dynamic Type** på største størrelse — ingen avkutting, ingen overlapp.
- [ ] **Reduce Motion / Reduce Transparency** respektert (særlig viktig med Liquid Glass).
- [ ] **Increase Contrast** og dark mode — kontrast holder.
- [ ] Fargen er aldri eneste informasjonsbærer.