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>
This commit is contained in:
Kjell Tore Guttormsen 2026-05-12 14:06:54 +02:00
commit 2011507ea1
27 changed files with 1059 additions and 17 deletions

View file

@ -0,0 +1,33 @@
<!-- 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.

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Template: PrivacyInfo.xcprivacy — Apple Privacy Manifest
domain-pack: ios-app · component: scaffold
Påkrevd for App Store-innsending siden 2024-05-01.
Dette eksempelet er for en ALL-LOCAL-app som ikke tracker, ikke samler data,
og kun bruker UserDefaults (en required-reason-API). Tilpass per app:
- NSPrivacyTracking: true KUN hvis appen tracker på tvers av apper/nettsteder
- NSPrivacyTrackingDomains: liste over tracking-domener (tom ellers)
- NSPrivacyCollectedDataTypes: én dict per innsamlet datatype (tom hvis ingenting)
- NSPrivacyAccessedAPITypes: én dict per required-reason-API-kategori appen bruker,
med tillatt reason-kode (se Apple-docs for kategorier + koder)
Hver tredjeparts-SDK må levere SIN EGEN PrivacyInfo.xcprivacy — verifiser.
Docs: https://developer.apple.com/documentation/bundleresources/privacy-manifest-files
https://developer.apple.com/documentation/bundleresources/describing-use-of-required-reason-api
-->
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<!-- Eksempel-oppføring hvis appen f.eks. samler grov lokasjon for app-funksjonalitet,
ikke linket til identitet, ikke for tracking:
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeCoarseLocation</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
-->
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<!-- CA92.1 = access info from same app, per documentation -->
<string>CA92.1</string>
</array>
</dict>
<!-- Legg til flere kategorier ved behov, f.eks.:
NSPrivacyAccessedAPICategoryFileTimestamp (reasons: C617.1, 3B52.1, 0A2A.1, ...)
NSPrivacyAccessedAPICategorySystemBootTime (reasons: 35F9.1, 8FFB.1, 3D61.1)
NSPrivacyAccessedAPICategoryDiskSpace (reasons: E174.1, 85F4.1, 7D9E.1, B728.1)
NSPrivacyAccessedAPICategoryActiveKeyboards(reasons: 3EC4.1, 54BD.1)
-->
</array>
</dict>
</plist>

View file

@ -0,0 +1,62 @@
<!-- domain-pack: ios-app · component: scaffold -->
<!-- Template: fyll ut per app. verified 2026-05-12 against App Store Connect reference. -->
# App Store Connect-metadata — {app-slug}
Samle alt som må inn i App Store Connect før innsending. Kryss av mot `checklist.md` § A.
## App-informasjon
- **App-navn:** {≤30 tegn}
- **Undertittel:** {≤30 tegn}
- **Bundle ID:** {com.example.app}
- **Primær kategori / sekundær:** {…}
- **Aldersrating:** fullført revidert spørreskjema → resultat: {4+ / 9+ / 12+ / 13+ / 16+ / 18+}
- **Support-URL:** {https://…}
- **Marketing-URL** (valgfri): {…}
- **Personvern-policy-URL:** {påkrevd hvis noe data samles; for all-local kan en kort side som sier "ingen data samles" holde}
- **Copyright:** {© ÅÅÅÅ Navn}
## Beskrivelse & nøkkelord
- **Beskrivelse:** {≤4000 tegn — må stemme med faktisk funksjonalitet, ingen påstander appen ikke kan stå inne for}
- **Nøkkelord:** {≤100 tegn, komma-separert}
- **Promotional text** (valgfri, kan endres uten review): {≤170 tegn}
- **Hva er nytt (release-notater):** {per versjon}
## Skjermbilder & forhåndsvisning
- **6,9″ iPhone:** 1320×2868 px — {N stk, 110}
- **13″ iPad** (hvis universal): 2064×2752 px — {N stk}
- Format: flat PNG/JPG, RGB, **ingen alfakanal**. Må vise faktisk UI (Guideline 2.3).
- **App preview** (valgfri video): {1530 s, per enhetsstørrelse}
## Personvern (App Privacy Details)
- **Data Not Collected?** {ja / nei} — hvis nei, fyll ut per kategori (se `checklist-security-privacy.md`).
- For hver innsamlet kategori: formål + linket til identitet? + brukt til tracking?
- **`PrivacyInfo.xcprivacy`** i bygget? {ja — se `scaffold/PrivacyInfo.xcprivacy`}
## Compliance
- **Eksport-compliance:** `ITSAppUsesNonExemptEncryption` = {false hvis kun standard-HTTPS, ellers besvar i ASC}
- **Content rights:** appen inneholder/bruker tredjeparts-innhold jeg har rett til? {ja/nei + grunnlag}
- **Tredjeparts-innhold-disclaimere** (hvis relevant): {f.eks. "ikke affiliert med X" i beskrivelsen}
## Region-spesifikt (kun markeder du distribuerer i)
- **EU — DSA trader-status:** verifisert kontaktinfo i ASC? {ja/nei}
- **Kina — ICP-filing-nummer:** {nummer / N/A — ikke distribuert i Kina}
- **Sør-Korea — GRAC** (kun spill): {rating / N/A}
## App Review-informasjon
- **Demo-konto:** {brukernavn/passord hvis login kreves, ellers N/A}
- **Notater til review:** {spesielt oppsett, hvordan teste tidsavhengige features, kontaktinfo}
- **Kontakt:** {navn, e-post, telefon}
## Pris & tilgjengelighet
- **Prismodell:** {gratis / engangs-betalt — pris-tier / freemium}
- **Land/regioner:** {alle / utvalg}
- **Utgivelse:** {manuell / automatisk ved godkjenning / planlagt dato}