app-creator/domain-packs/ios-app/scaffold/NSUsageDescription-inventory.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

2.5 KiB

NSUsageDescription-inventar — {app-slug}

For hver beskyttet ressurs appen bruker: en Info.plist purpose-string. Manglende = appen termineres ved permission-request + App Store-avvisning (Guideline 5.1.1). Strengen skal forklare hvorfor appen trenger det, kort og konkret — ikke "Appen trenger lokasjon".

Ressurs Info.plist-nøkkel Brukes? Purpose-string (vises i system-prompt)
Lokasjon (når i bruk) NSLocationWhenInUseUsageDescription "{f.eks.: Brukes for å beregne dine lokale soltider. Posisjonen forlater aldri enheten.}"
Lokasjon (alltid) NSLocationAlwaysAndWhenInUseUsageDescription "{kun hvis bakgrunns-lokasjon er strengt nødvendig — ellers la stå tom}"
Kamera NSCameraUsageDescription "{...}"
Mikrofon NSMicrophoneUsageDescription "{...}"
Foto-bibliotek (les) NSPhotoLibraryUsageDescription "{...}"
Foto-bibliotek (skriv) NSPhotoLibraryAddUsageDescription "{...}"
Kontakter NSContactsUsageDescription "{...}"
Kalender NSCalendarsUsageDescription "{...}"
Påminnelser NSRemindersUsageDescription "{...}"
Bluetooth NSBluetoothAlwaysUsageDescription "{...}"
Face ID NSFaceIDUsageDescription "{...}"
HealthKit (les/del) NSHealthShareUsageDescription / NSHealthUpdateUsageDescription "{...}"
Motion & fitness NSMotionUsageDescription "{...}"
Lokalt nettverk NSLocalNetworkUsageDescription "{...}"
Tracking (IDFA) NSUserTrackingUsageDescription "{kun hvis appen faktisk tracker — krever også ATT-prompt}"

Notifikasjoner: trenger ingen Info.plist-nøkkel. Men forklar hvorfor på en onboarding-skjerm før UNUserNotificationCenter.requestAuthorization(...)-kallet — App Review forventer det, og conversion blir bedre.

Andre Info.plist-felter knyttet til submission:

  • ITSAppUsesNonExemptEncryptionfalse hvis appen kun bruker standard-HTTPS via system-API (vanligvis unntatt). Ellers besvar eksport-compliance i App Store Connect.
  • NSSupportsLiveActivitiesYES i hoved-app-ens Info.plist hvis appen bruker Live Activities.
  • UIBackgroundModes — kun moduser appen faktisk bruker (review sjekker dette).

Etter utfylling: kryss av i checklist.md § B.