app-creator/domain-packs/ios-app/conventions.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

4.9 KiB
Raw Permalink Blame History

iOS-app — konvensjoner

Ikke-forhandlbare beslutninger for alle iOS-apper i denne pipelinen. Avvik krever en eksplisitt 00-context/pack-overrides.md-oppføring med begrunnelse.

Plattform & deployment

  • Bygg med gjeldende påkrevd SDK. Apple krever bygg med iOS 26-SDK (Xcode 26+) for App Store-innsending siden 2026-04-28. SDK-versjon ≠ deployment target. (Apple — Upcoming Requirements)
  • Deployment-target-baseline: iOS 17 eller iOS 18. iOS 17 dekker >95 % aktive enheter og låser opp SwiftData, interaktive widgets, WidgetKit-forbedringer. Velg iOS 18 kun hvis en feature krever det. Per-app-valg → dokumenter i pack-overrides.md. iOS 1925 finnes ikke — Apple gikk fra iOS 18 rett til iOS 26 (år-basert navn, WWDC 2025); neste store versjon er iOS 27 (WWDC juni 2026, lansering høst 2026). (Apple Newsroom WWDC25)
  • iOS-version-spesifikke API-er må ikke degradere eldre brukere i lanseringsvinduet — gate bak if #available, ha fallback.

Design — HIG & Liquid Glass

  • Følg Apple Human Interface Guidelines. Standard-navigasjon (NavigationStack, TabView), system-kontroller, Dynamic Type, dark mode, safe areas — ikke gjenoppfinn.
  • Liquid Glass er gjeldende designspråk (introdusert iOS 26, WWDC 2025 — første store omdesign siden iOS 7). SwiftUI: .glassEffect(), GlassEffectContainer, .interactive. Adopter via standard-komponenter først; bruk glassEffect på custom-views bevisst, ikke overalt. (HIG: Applying Liquid Glass, WWDC25 219 "Meet Liquid Glass") [delvis verifisert — API-navn bekreftet mot Apple-docs; konkret bruk er prosjekt-skjønn]

Swift / SwiftUI

  • SwiftUI som default UI-lag for nye apper. UIKit kun ved konkret behov (custom drawing, modne kontroller uten SwiftUI-ekvivalent).
  • SwiftData som default persistens (iOS 17+) — ikke Core Data for nye apper. (SwiftData docs) Se patterns/offline-first-swiftdata.md.
  • Concurrency: async/await + structured concurrency; ikke completion-handler-pyramider i ny kode.
  • Arkitektur — MVVM som default: SwiftUI-View + @Observable-ViewModel. Vurder TCA (The Composable Architecture) kun når app-state er kompleks nok til å rettferdiggjøre en reducer-modell (mange sammenvevde sidefeffekter, tung testbarhet-krav, team som allerede kan TCA). For en liten app: MVVM. Begrunn TCA-valg i en fase-3-ADR.
  • Ingen unødvendige tredjeparts-deps. Hver dependency er en privacy-manifest-forpliktelse (SDK-er må levere egen PrivacyInfo.xcprivacy) og en App Review-risiko.

Guardrails — regler du ikke avviker fra uten god grunn

  • NSUsageDescription for hver beskyttet ressurs appen bruker. Manglende purpose-string = appen termineres ved permission-request og App Store-avvisning (Guideline 5.1.1). Notifications krever ingen Info.plist-nøkkel; Core Location, kamera, mikrofon, foto, kontakter, kalender m.fl. krever det. Se scaffold/NSUsageDescription-inventory.md.
  • PrivacyInfo.xcprivacy påkrevd for App Store-innsending siden 2024-05-01: deklarer tracking, tracking-domener, innsamlede datatyper, og required-reason-API-kategorier. Manglende required-reason-deklarasjon = avvisning (Guideline 5.3.4). Mal: scaffold/PrivacyInfo.xcprivacy. (Apple — Privacy manifest files)
  • App Privacy Details ("nutrition label") i App Store Connect må stemme med faktisk databehandling. "Vi samler ingenting" er gyldig — men da må alle SDK-er også være rene.
  • ATS på. HTTPS for all utgående trafikk; NSAppTransportSecurity-unntak (NSAllowsArbitraryLoads, NSExceptionDomains) krever begrunnelse ved review. Se gotchas.md.
  • GDPR / personvern: forklar lokasjon/notifikasjons-tillatelser før de etterspørres (egen onboarding-skjerm); minimer datainnsamling; ingen tracking uten ATT-prompt (NSUserTrackingUsageDescription + AppTrackingTransparency). All-local er den enkleste compliance-posisjonen.
  • App Store Review Guidelines: ingen "minimum functionality"-fellen (4.2 — web-wrapper / for tynn app), nøyaktig metadata (1.2), digitale varer via IAP (3.1.1). Full submission-sjekkliste: checklist.md.

core / supplementary

pack.jsoncomponents er den autoritative merkingen. 00-context/domain-pack-ios-app.md-snapshotet inkluderer core-filene sammenslått; supplementary (patterns, scaffold, examples, glossary) lastes on-demand fra domain-packs/ios-app/.