- 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>
33 lines
2.5 KiB
Markdown
33 lines
2.5 KiB
Markdown
<!-- domain-pack: ios-app · component: scaffold -->
|
|
<!-- Template: fyll ut for hver app. verified 2026-05-12 against Apple Info.plist key docs. -->
|
|
|
|
# `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:**
|
|
- `ITSAppUsesNonExemptEncryption` — `false` hvis appen kun bruker standard-HTTPS via system-API (vanligvis unntatt). Ellers besvar eksport-compliance i App Store Connect.
|
|
- `NSSupportsLiveActivities` — `YES` 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.
|