Guideline 1.2 User-Generated Content: Was Apple verlangt
Von Mehdi Azizi
Veröffentlicht am , 10 Min.
Guideline 1.2: Veröffentlichen deine Nutzer Inhalte, brauchst du Filter, Meldung, Blockieren, Kontakt und akzeptierte AGB.
Die Guideline 1.2 gilt, sobald Nutzer etwas veröffentlichen, das andere sehen: eine Nachricht, ein Foto, eine Bewertung und meiner Meinung nach schon ein einfacher Nickname in einer Rangliste. Apples Text verlangt dann einen Filter, eine Meldefunktion mit schneller Reaktion, eine Blockierfunktion und veröffentlichte Kontaktdaten. Die Ablehnungsnachrichten fügen eine fünfte Anforderung hinzu: akzeptierte Nutzungsbedingungen, die weder anstößige Inhalte noch missbräuchliche Nutzer dulden.
Dieser Guide erzählt keine Ablehnung. Er zeigt, was ich in TradaZen eingebaut habe, meiner App zum Trading-Training, als ihre Ranglisten anfingen, von den Spielern gewählte Nicknames anzuzeigen. Für den Überblick über alle Ablehnungsgründe lies lieber warum Apple eine App ablehnt.
Was sagt die Guideline 1.2?
Die 1.2, „User-Generated Content“, steht in Abschnitt 1, „Safety“, der App Review Guidelines. Sie betrifft Apps mit Inhalten von Nutzern oder einem Social-Network-Dienst. Um Missbrauch zu verhindern, „must include“ diese Apps vier Schutzmechanismen:
- „A method for filtering objectionable material from being posted to the app“: ein Filter, der anstößige Inhalte vor der Veröffentlichung blockiert.
- „A mechanism to report offensive content and timely responses to concerns“: eine Möglichkeit, Inhalte zu melden, und eine schnelle Reaktion auf Meldungen.
- „The ability to block abusive users from the service“: die Möglichkeit, einen missbräuchlichen Nutzer zu blockieren.
- „Published contact information so users can easily reach you“: veröffentlichte, leicht auffindbare Kontaktdaten.
Die aktuelle Fassung des Textes, aktualisiert am 8. Juni 2026, geht weiter. Sie erinnert daran, dass du dafür verantwortlich bist, Inhalte zu entfernen, die gegen die Regel, deine Nutzungsbedingungen oder deine Community-Regeln verstoßen. Findet Apple solche Inhalte, fordert Apple dich auf, sie zu entfernen und einen Verbesserungsplan vorzulegen, und kann die App in der Zwischenzeit entfernen.
Der Text listet auch Apps auf, die im App Store nichts zu suchen haben: solche, die hauptsächlich für Pornografie, zufälligen oder anonymen Chat à la Chatroulette, das Bewerten des Aussehens realer Personen, Drohungen oder Belästigung dienen. Für diese Zwecke reichen die vier Schutzmechanismen nicht aus. Die 1.2.1 ergänzt Regeln für Creator-Apps, insbesondere eine Altersprüfung für Inhalte, die über die Altersfreigabe der App hinausgehen.
Ist deine App betroffen?
Der Fragebogen zur Altersfreigabe in App Store Connect liefert eine gute Definition. Er spricht von nutzergenerierten Inhalten, wenn von Nutzern erstellte Inhalte in der App breit verbreitet werden: Videos, Fotos, Texte oder Audio. Messaging zwischen Nutzern behandelt er separat.
| Was andere sehen | Betroffen? |
|---|---|
| Nachrichten zwischen Mitgliedern | Ja |
| Öffentliche Fotos oder Bewertungen | Ja |
| Nickname in einer Rangliste | Ja, meiner Meinung nach |
| Private Notizen | Nein |
| Von dir geschriebene Inhalte | Nein |
Apple erwähnt Nicknames nicht. Ich behandle sie trotzdem als Nutzerinhalte: Jeder kann einen beleidigenden wählen, und andere Spieler sehen ihn. Diese Entscheidung habe ich für die Ranglisten von TradaZen getroffen.
Die 5 Mechanismen, die du programmieren musst, mit Expo und Supabase
Die Ablehnungsnachricht zur 1.2, wie ein Entwickler sie Ende 2025 in den Apple-Foren veröffentlicht hat, listet die erwarteten Maßnahmen auf. Sie beginnt mit „Require that users agree to terms (EULA)“ und endet mit einer Fristvorgabe: auf Meldungen „within 24 hours“ reagieren, indem du den Inhalt entfernst und seinen Urheber ausschließt.
| Mechanismus | Wo programmieren |
|---|---|
| Akzeptierte AGB | Screen und Profil |
| Filter | Server, vor der Anzeige |
| Meldung | Button und Tabelle |
| Blockieren | Tabelle und Zugriffsregel |
| Veröffentlichter Kontakt | App und App-Store-Eintrag |
Die SQL-Beispiele unten musst du an dein Schema anpassen. Sie basieren auf den zeilenbasierten Zugriffsregeln von Supabase, die auch dann greifen, wenn jemand deine App umgeht.
1. Akzeptierte AGB, ohne Toleranz für Missbrauch
Deine Nutzungsbedingungen müssen schwarz auf weiß sagen, dass weder anstößige Inhalte noch missbräuchliche Nutzer toleriert werden. Beispielklausel, zum Gegenlesen lassen, keine Rechtsberatung: „Beleidigende, hasserfüllte, sexuelle oder belästigende Inhalte werden nicht toleriert. Ein gemeldeter Inhalt kann ohne Vorankündigung entfernt und sein Urheber ausgeschlossen werden.“
Ein passiver Satz unter einem Registrierungsbutton beweist keine Zustimmung: Verlange eine ausdrückliche Handlung. Ein Screen mit einem Link zu den AGB und einem Button „Ich stimme zu“, vor der ersten Veröffentlichung. Speichere Datum und akzeptierte Version im Profil und verbiete das Veröffentlichen, solange sie fehlen:
create policy "publier après les CGU" on public.posts
for insert to authenticated
with check (
auth.uid() = author_id
and exists (
select 1 from public.profiles p
where p.id = auth.uid() and p.cgu_acceptees_le is not null
)
);
2. Ein Filter, bevor andere den Inhalt sehen
Der Filter läuft auf dem Server, weil der Code der App umgangen werden kann. Eine Kopie in der App dient nur dazu, den Nutzer sofort zu warnen.
In TradaZen prüft eine Datenbankfunktion jeden Nickname, und die App wendet dieselbe Liste an, um den Spieler zu warnen. Ich halte beide identisch. Auf dem Server wird ein beleidigender Nickname beim Schreiben nicht abgelehnt: Er wird bei der Anzeige durch einen neutralen Nickname ersetzt, so blockierst du niemanden wegen eines Fehlalarms.
Fehlalarme kommen schnell. In TradaZen zensierte eine erste Version des Filters Vornamen wie Dominique, Monique oder Véronique, weil sie ein Stück eines Schimpfworts enthalten. Die Lösung: nach ganzen Wörtern suchen, nicht nach Wortteilen. Und da die App auch auf Japanisch und Chinesisch verkauft wird, deckt der Filter auch diese Sprachen ab.
3. Eine Meldung, bearbeitet innerhalb von 24 Stunden
Jeder veröffentlichte Inhalt hat einen Button „Melden“. In TradaZen wird ein in der Liga-Rangliste gemeldeter Nickname auf dem Handy der meldenden Person sofort unter einer neutralen Bezeichnung angezeigt. Die Meldung geht dann an den Server und wird später erneut gesendet, falls das Handy offline ist.
In der Datenbank eine Tabelle für Meldungen, nur eine pro Person und Inhalt:
create table public.reports (
id uuid primary key default gen_random_uuid(),
reporter_id uuid not null references auth.users (id) on delete cascade,
target_id uuid not null,
reason text,
created_at timestamptz not null default now(),
unique (reporter_id, target_id)
);
alter table public.reports enable row level security;
create policy "mes signalements" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
In TradaZen wird ein von mehreren Spielern gemeldeter Nickname durch einen neutralen Nickname ersetzt, und Meldungen werden der gemeldeten Person nie angezeigt. Eine allgemeine Vorsichtsmaßnahme: Die ID, die für die Meldung verwendet wird, darf vom Urheber des Inhalts nicht änderbar sein, sonst kann er dem Ausblenden entgehen.
Das automatische Ausblenden ersetzt nicht deine Entscheidung. Um die 24 Stunden einzuhalten, lass dich bei jeder Meldung benachrichtigen: Ein Supabase-Datenbank-Webhook kann eine Serverfunktion aufrufen, die dir eine Nachricht schickt. Der Schlüssel, mit dem du Inhalte entfernst, bleibt auf dem Server, wie ich in geheimer API-Schlüssel in einer Expo-App erkläre.
4. Eine Blockierfunktion, die sofort wirkt
Eine Tabelle für Blockierungen, dann eine Zugriffsregel, die die Inhalte blockierter Personen aus dem Feed der blockierenden Person entfernt:
create policy "sans les bloqués" on public.posts
for select to authenticated
using (
not exists (
select 1 from public.blocks b
where b.blocker_id = auth.uid() and b.blocked_id = posts.author_id
)
);
In TradaZen fügt man einen Freund per Code hinzu und kann ihn entfernen und blockieren. Ein blockierter Freund verschwindet aus der Liste, auch wenn er erneut eine Anfrage schickt.
5. Veröffentlichte, leicht auffindbare Kontaktdaten
Setz eine Kontaktadresse in die Einstellungen der App und eine Support-URL in App Store Connect, die wirklich antwortet. In TradaZen steht die Support-Adresse in der Datenschutzerklärung und in den Nutzungsbedingungen. Was auf diese Seiten gehört, steht in Datenschutzerklärung für eine App.
Letzter Punkt: Entscheide, was mit den Inhalten einer Person passiert, die ihr Konto löscht. Das on delete cascade oben löscht ihre Meldungen zusammen mit ihrem Konto. Die vollständige Anleitung steht in Kontolöschung unter iOS.
Was TradaZen in seiner Datenschutzerklärung zeigt
Diese Mechanismen sind öffentlich in der Datenschutzerklärung von TradaZen beschrieben, die im September 2026 mit der Einführung von Ligen und Freunden ergänzt wurde: „Nicknames durchlaufen einen automatischen Filter; du kannst einen unangemessenen Nickname in der Rangliste melden und einen Freund entfernen und blockieren.“ Dieselbe Erklärung stellt klar, dass E-Mail und Journal anderen Spielern nie angezeigt werden. Den Kontext der App findest du in der TradaZen-Fallstudie.
Was du Apple nach einer Ablehnung wegen 1.2 antwortest
Sag dem Reviewer, wo er jeden Mechanismus findet, in deiner Antwort und in den Review-Notizen. Diese Funktionen leben in der App: Der Reviewer testet den Code im Build, plane also einen neuen Build ein. Das Vorgehen, um App Review zu antworten, ist dasselbe wie bei anderen Regeln. Hier eine Vorlage auf Englisch, zum Anpassen, behalte nur, was in deiner App wirklich stimmt:
Hello,
Thank you for your review. Build X includes the precautions
listed in Guideline 1.2:
- Terms: users accept our terms, with zero tolerance for
objectionable content and abusive users, before posting.
- Filter: posts and usernames are checked on our server
before other users can see them.
- Report: tap "..." on any post, then "Report".
- Block: tap "..." on any post, then "Block user". Their
content disappears immediately.
- Reports notify us instantly; we act on them within 24 hours.
- Contact: Settings > Contact us, and our support URL.
Best regards,
Fehlt ein Mechanismus im Build, reicht eine Antwort nicht. Wie bei der Guideline 2.1 beurteilt Apple den Build, den es in der Hand hat.
Die 1.2-Checkliste vor dem Einreichen
- Du hast alles aufgelistet, was ein Nutzer veröffentlicht und andere sehen, Nicknames inklusive.
- Deine AGB verbieten anstößige Inhalte und Missbrauch, und die App verlangt ein ausdrückliches „Ich stimme zu“.
- Der Filter läuft auf dem Server, sucht nach ganzen Wörtern und deckt die Sprachen deines Store-Eintrags ab.
- Jeder Inhalt hat einen Button „Melden“, und jede Meldung benachrichtigt dich sofort.
- Du kannst einen Inhalt entfernen und seinen Urheber in weniger als 24 Stunden ausschließen.
- Das Blockieren eines Nutzers entfernt seine Inhalte sofort.
- Eine Kontaktadresse ist in der App sichtbar, und die Support-URL antwortet.
- Der Fragebogen zur Altersfreigabe gibt Nutzerinhalte an, und Messaging, falls deine App es hat.
- Die Review-Notizen sagen, wo jeder Mechanismus zu finden ist, mit einem Demo-Konto.
Deine Ablehnung beheben, bevor du die App neu einreichst
Wurde deine App gerade wegen 1.2 abgelehnt, bündelt das Review Kit alles, was ich vor jedem Einreichen prüfe, mit zwei Skills, die dein Projekt in Claude Code durchgehen und deine Antwort vorbereiten, falls Apple ablehnt. Für einen menschlichen Blick buch eine Stunde mit mir: Wir lesen die Nachricht gemeinsam und schauen uns deinen Moderationsablauf an. Das komplette Vorgehen nach einer Ablehnung steht auf der Seite von Apple abgelehnte App.
Bereitest du deinen ersten Release vor, mach deine kostenlose Diagnose: Sie sagt dir, welchen Schritt du zuerst angehen solltest, und schickt dir meine Checkliste gegen Apple-Ablehnungen.
Niemand kann garantieren, dass Apple deine App akzeptiert. Diese fünf Mechanismen, gut sichtbar, streichen zumindest diesen Grund von der Liste.
Häufige Fragen
Was bedeutet „Guideline 1.2 - Safety - User-Generated Content“?
Das ist die Bezeichnung der Ablehnung in Apples Nachricht. Sie bedeutet, dass deine App von Nutzern erstellte Inhalte ohne alle erwarteten Schutzmechanismen anzeigt: Filter, schnell bearbeitete Meldungen, Blockieren, veröffentlichte Kontaktdaten und akzeptierte Nutzungsbedingungen.
Zählt ein Nickname in einer Rangliste als Nutzerinhalt?
Apples Text sagt das nicht. Ich behandle ihn so, weil ein Nickname frei gewählt und von anderen Spielern gesehen wird. In TradaZen durchlaufen die Nicknames der Ranglisten einen Filter, können gemeldet werden und werden durch einen neutralen Nickname ersetzt, wenn sie problematisch sind.
Muss ich Meldungen wirklich innerhalb von 24 Stunden bearbeiten?
Das verlangt Apples Ablehnungsnachricht. Der Regeltext spricht von schnellen Reaktionen. Ein automatischer Filter reicht also nicht: Es braucht jemanden, der den Inhalt entfernt und seinen Urheber ausschließt. Das automatische Ausblenden nach mehreren Meldungen hilft dir, die Zeit bis dahin zu überbrücken.
Müssen die Nutzungsbedingungen in der App akzeptiert werden?
Das ist der sicherste Weg. Die Ablehnungsnachricht verlangt, dass Nutzer Bedingungen akzeptieren, die weder anstößige Inhalte noch missbräuchliche Nutzer dulden. Ein Link unten auf einer Seite beweist keine Zustimmung. Ein Screen mit einem Button „Ich stimme zu“ vor der ersten Veröffentlichung lässt keinen Zweifel.
Kann eine anonyme Chat-App die Guideline 1.2 bestehen?
Der aktuelle Text nennt zufälligen oder anonymen Chat unter den Zwecken, die im App Store nichts zu suchen haben. Eine App, die hauptsächlich dafür dient, kann ohne Vorankündigung entfernt werden, selbst mit Filter, Meldefunktion und Blockieren.

