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

38 lines
4.9 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: conventions · core -->
<!-- verified 2026-05-12 against iOS 26 / HIG WWDC2025 / sources inline. Update verified.date in pack.json on change. -->
# 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](https://developer.apple.com/news/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](https://www.apple.com/newsroom/2025/06/apple-introduces-a-delightful-and-elegant-new-software-design/))
- **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](https://developer.apple.com/documentation/SwiftUI/Applying-Liquid-Glass-to-custom-views), [WWDC25 219 "Meet Liquid Glass"](https://developer.apple.com/videos/play/wwdc2025/219/)) `[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](https://developer.apple.com/documentation/swiftdata)) 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](https://developer.apple.com/documentation/bundleresources/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.json``components` 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/`.