App Privacy Details — „Nutrition Label"
Werte für App Store Connect → App Privacy. Apple zeigt diese Antworten auf der App-Produktseite. Müssen mit PRIVACY_POLICY.md und PrivacyInfo.xcprivacy übereinstimmen.
Frage 1: „Do you or your third-party partners collect data from this app?"
Antwort: Yes — denn unser Cloudflare-Worker erhält IP + User-Content, und unsere Drittanbieter (Google, OpenAI, Anthropic, OpenRouter) erhalten User-Content. Auch wenn wir nichts speichern, gilt das nach Apples Definition als „Collected".
Begründung: Apple definiert „Collected" als „transmitted off the device in a way that allows you and/or your third-party partners to access it for a period longer than necessary to service the transmitted request in real time." Cloudflare-Logs (7 Tage) und Drittanbieter-Verarbeitung erfüllen das.
Frage 2: Data Types
Für jeden gesammelten Datentyp die folgenden Sub-Fragen beantworten:
- Used to Track you? — bei allen Datentypen No (kein Cross-App-Tracking, kein ATT).
- Linked to user? — No (kein Account, keine User-ID).
- Purpose — siehe Tabelle.
Data linked to a user identifier — keine Einträge.
Data NOT linked to the user (alles bei uns)
| Datentyp (Apple-Kategorie) | Erfasst? | Zweck (Apple-Multiselect) | Begründung |
|---|---|---|---|
| Contact Info → Email Address | Nein | – | Wir haben keinen E-Mail-Erhebungs-Flow |
| Health & Fitness | Nein | – | – |
| Financial Info → Payment Info | Nein | – | Apple verarbeitet Zahlungen; wir sehen nur einen signierten Beleg |
| Location → Precise / Coarse | Nein | – | Keine Standortabfrage |
| Sensitive Info | Nein | – | – |
| Contacts | Nein | – | – |
| User Content → Photos or Videos | Ja | App Functionality | Bilder gehen an Google (Handschrift-Erkennung) bzw. OpenAI/Anthropic (Solve/Tutor) |
| User Content → Customer Support | Ja, falls genutzt | App Functionality | E-Mail an Support, optional |
| User Content → Other User Content | Ja | App Functionality | Frei eingegebener Aufgaben-Text, Tutor-Prompts |
| Browsing History | Nein | – | – |
| Search History | Nein | – | – |
| Identifiers → User ID | Nein | – | Kein Account |
| Identifiers → Device ID | Nein | – | Kein IDFA, keine Werbe-ID |
| Purchases → Purchase History | Ja | App Functionality | StoreKit-JWS wird an unseren Worker geschickt, um Entitlement zu verifizieren |
| Usage Data → Product Interaction | Nein | – | Keine Analytics-SDKs |
| Usage Data → Advertising Data | Nein | – | Keine Werbung |
| Usage Data → Other Usage Data | Nein | – | – |
| Diagnostics → Crash Data | Nein¹ | – | Nur on-device über Apple Console |
| Diagnostics → Performance Data | Nein¹ | – | Keine Performance-Telemetrie |
| Diagnostics → Other Diagnostic Data | Ja, optional | App Functionality | Cloudflare-Worker loggt HTTP-Status + IP für 7 Tage (Missbrauchsabwehr) |
| Other Data | Nein | – | – |
¹ Falls in Zukunft TestFlight-Crash-Reports aktiviert werden, „Crash Data → App Functionality" auf Ja setzen.
Frage 3: Tracking (ATT)
Antwort: No — die App führt kein Tracking durch und zeigt keinen ATT-Prompt. Daher entfällt der ganze Tracking-Abschnitt im Privacy Label.
Übersetzte Antworten als ASCII-Tabelle (zum Abhaken im UI)
[Data Used to Track You] — None
[Data Linked to You] — None
[Data Not Linked to You]
├── Photos or Videos [App Functionality]
├── Other User Content [App Functionality]
├── Purchases / Purchase History [App Functionality]
├── Customer Support [App Functionality]
└── Other Diagnostic Data [App Functionality]
Konsistenz-Check (vor dem Submit prüfen)
- ☐ Privacy Manifest (
PrivacyInfo.xcprivacy) listet keine getrackten Domains. - ☐ Required-Reason-APIs im Manifest sind ausgefüllt (
UserDefaults,FileTimestampfalls genutzt — siehe Manifest-Datei). - ☐ Privacy Policy nennt Google, OpenAI, Anthropic, OpenRouter, Cloudflare namentlich.
- ☐ Keine Analytics-SDKs eingebunden (
grep -ri "FirebaseAnalytics\|Amplitude\|Mixpanel\|GoogleAnalytics" HomeworkCleaner/ Config/muss leer sein). - ☐
NSUserTrackingUsageDescriptionist nicht im Info.plist (kein ATT-Prompt).