# Guideline 1.2 User-Generated Content: què exigeix Apple

> Guideline 1.2: si els teus usuaris publiquen, cal un filtre, denúncies, bloqueig, contacte i condicions acceptades. Check-list Expo i Supabase.

Pàgina original: [Guideline 1.2 User-Generated Content: què exigeix Apple](https://devoria.fr/ca/blog/guideline-1-2-user-generated-content-apple)
Autor: [Mehdi Azizi](https://devoria.fr/ca/mehdi-azizi)
Publicació: 2026-11-04
Darrera revisió del contingut: 2026-11-04


La guideline 1.2 s'aplica tan bon punt els usuaris publiquen alguna cosa que altres veuen: un missatge, una foto, una ressenya i, al meu parer, un simple pseudònim en un rànquing. Llavors, el text d'Apple exigeix un filtre, un sistema de denúncies amb resposta ràpida, un bloqueig i un contacte publicat. **Els missatges de rebuig hi afegeixen una cinquena exigència: unes condicions d'ús acceptades, que no tolerin ni contingut ofensiu ni usuaris abusius.**

Aquesta guia no explica cap rebuig. Mostra el que vaig implementar a TradaZen, la meva app d'entrenament de trading, quan els seus rànquings van començar a mostrar pseudònims triats pels jugadors. Per a una visió general dels motius de rebuig, llegeix millor [per què Apple rebutja una app](https://devoria.fr/ca/blog/rebuig-apple-per-que-rebutgen-app).

## Què diu la guideline 1.2?

La 1.2, «User-Generated Content», és a la secció 1, «Safety», de les [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). S'adreça a les apps amb contingut d'usuaris o un servei de xarxa social. Per evitar abusos, aquestes apps «must include» quatre proteccions:

- «A method for filtering objectionable material from being posted to the app»: **un filtre que bloqueja el contingut ofensiu abans que es publiqui**.
- «A mechanism to report offensive content and timely responses to concerns»: una manera de denunciar un contingut i una resposta ràpida a les denúncies.
- «The ability to block abusive users from the service»: la possibilitat de bloquejar un usuari abusiu.
- «Published contact information so users can easily reach you»: un contacte publicat i fàcil de trobar.

La versió actual del text, actualitzada el 8 de juny de 2026, va més enllà. Recorda que és responsabilitat teva retirar el contingut que infringeixi la norma, les teves condicions d'ús o les teves normes de comunitat. Si Apple en troba, et demana que el retiris i que presentis un pla de millora, i mentrestant pot retirar l'app.

El text també llista les apps que no tenen lloc a l'App Store: les que serveixen sobretot per a pornografia, xat aleatori o anònim a l'estil Chatroulette, puntuar el físic de persones reals, amenaces o assetjament. **Per a aquests usos, les quatre proteccions no n'hi ha prou.** La 1.2.1 afegeix normes per a les apps de creadors, sobretot un control d'edat per al contingut que superi la classificació de l'app.

## La teva app hi està afectada?

El qüestionari de classificació per edat d'App Store Connect en dona una bona definició. Parla de [contingut generat pels usuaris](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) quan contingut creat per usuaris es difon àmpliament dins l'app: vídeos, fotos, textos o àudio. La missatgeria entre usuaris la tracta a part.

| El que veuen els altres     | Hi està afectada? |
| --------------------------- | ----------------- |
| Missatges entre membres     | Sí                |
| Fotos o ressenyes públiques | Sí                |
| Pseudònim en un rànquing    | Sí, al meu parer  |
| Notes privades              | No                |
| Contingut escrit per tu     | No                |

Apple no esmenta els pseudònims. Tot i així, jo els tracto com a contingut d'usuari: qualsevol en pot triar un d'insultant, i altres jugadors el veuen. És la decisió que vaig prendre per als rànquings de TradaZen.

## Els 5 mecanismes que has de programar, amb Expo i Supabase

El missatge de rebuig 1.2, tal com un desenvolupador el va publicar als [fòrums d'Apple](https://developer.apple.com/forums/thread/807358) a finals del 2025, llista les mesures esperades. Comença amb «Require that users agree to terms (EULA)» i acaba amb una exigència de termini: actuar sobre les denúncies «within 24 hours», retirant el contingut i expulsant-ne l'autor.

| Mecanisme             | On programar-lo            |
| --------------------- | -------------------------- |
| Condicions acceptades | Pantalla i perfil          |
| Filtre                | Servidor, abans de mostrar |
| Denúncia              | Botó i taula               |
| Bloqueig              | Taula i regla d'accés      |
| Contacte publicat     | App i fitxa de l'App Store |

Els exemples SQL de sota els has d'adaptar al teu esquema. Es basen en les [regles d'accés per fila de Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security), que s'apliquen fins i tot si algú es salta la teva app.

### 1. Condicions acceptades, sense tolerància per als abusos

Les teves condicions d'ús han de dir clarament que no es tolera cap contingut ofensiu ni cap usuari abusiu. Exemple de clàusula, perquè la faci revisar algú, no és assessorament legal: «No es tolera cap contingut ofensiu, d'odi, sexual o d'assetjament. Un contingut denunciat es pot retirar i el seu autor pot ser expulsat, sense previ avís.»

**Una frase passiva sota un botó de registre no demostra l'acord: demana un gest explícit.** Una pantalla amb un enllaç a les condicions i un botó «Accepto», abans de la primera publicació. Desa la data i la versió acceptades al perfil i bloqueja la publicació mentre faltin:

```sql
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. Un filtre abans que els altres vegin el contingut

El filtre viu al servidor, perquè el codi de l'app es pot saltar. Una còpia a l'app només serveix per avisar l'usuari a l'instant.

A TradaZen, una funció a la base de dades comprova cada pseudònim, i l'app aplica la mateixa llista per avisar el jugador. Mantinc les dues idèntiques. Al servidor, un pseudònim ofensiu no es rebutja en escriure'l: **se substitueix per un pseudònim neutre en mostrar-lo, cosa que evita bloquejar algú per un fals positiu**.

Els falsos positius arriben de seguida. A TradaZen, una primera versió del filtre censurava noms com Dominique, Monique o Véronique, perquè contenen un tros de paraulota. La solució: buscar paraules senceres, no trossos de paraules. I com que l'app es ven en japonès i en xinès, el filtre també cobreix aquestes llengües.

### 3. Una denúncia, gestionada en 24 hores

Cada contingut publicat té un botó «Denunciar». A TradaZen, un pseudònim denunciat al rànquing de la lliga es mostra a l'instant amb una etiqueta neutra, al telèfon de qui denuncia. Després la denúncia s'envia al servidor, i es torna a enviar més tard si el telèfon no té connexió.

A la base de dades, una taula de denúncies, una sola per persona i per contingut:

```sql
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);
```

A TradaZen, **un pseudònim denunciat per diversos jugadors se substitueix per un pseudònim neutre**, i les denúncies no es mostren mai a la persona denunciada. Una precaució general: l'identificador que serveix per a la denúncia no l'ha de poder modificar l'autor del contingut, si no, pot escapar de l'ocultació.

L'ocultació automàtica no substitueix la teva decisió. Per complir les 24 hores, fes que t'avisin a cada denúncia: un [webhook de base de dades de Supabase](https://supabase.com/docs/guides/database/webhooks) pot cridar una funció de servidor que t'enviï un missatge. La clau que permet retirar el contingut es queda al servidor, com explico a [clau API secreta en una app Expo](https://devoria.fr/ca/blog/clau-api-secreta-app-expo).

### 4. Un bloqueig que actua a l'instant

Una taula de bloquejos i, després, una regla d'accés que treu el contingut de les persones bloquejades del feed de qui bloqueja:

```sql
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
  )
);
```

A TradaZen, s'afegeix un amic amb un codi, i se'l pot treure i bloquejar. **Un amic bloquejat desapareix de la llista, encara que torni a enviar una sol·licitud.**

### 5. Un contacte publicat, fàcil de trobar

Posa una adreça de contacte als ajustos de l'app i una URL d'assistència que funcioni de veritat a App Store Connect. A TradaZen, l'adreça de suport apareix a la política de privadesa i a les condicions d'ús. El contingut que han de tenir aquestes pàgines és a [política de privadesa d'una aplicació](https://devoria.fr/ca/blog/politica-privacitat-app-ios-guia).

Últim punt: decideix què passa amb els continguts d'una persona que elimina el seu compte. L'`on delete cascade` de més amunt elimina les seves denúncies juntament amb el compte. La recepta completa és a [eliminació de compte a iOS](https://devoria.fr/ca/blog/supressio-compte-ios-provar-abans-apple).

## El que TradaZen mostra a la seva política

Aquests mecanismes es descriuen públicament a la política de privadesa de TradaZen, completada el setembre del 2026 amb l'arribada de les lligues i els amics: «Els pseudònims passen per un filtre automàtic; pots denunciar un pseudònim inadequat al rànquing, i treure i bloquejar un amic.» La mateixa política precisa que el correu electrònic i el diari no es mostren mai als altres jugadors. El context de l'app és a l'[estudi de cas de TradaZen](https://devoria.fr/ca/blog/cas-estudi-tradazen-llancar-app-iphone).

## Què respondre a Apple després d'un rebuig 1.2

Digues al revisor on trobar cada mecanisme, a la teva resposta i a les notes de revisió. Aquestes funcions viuen dins l'app: el revisor prova el codi inclòs a la build, així que prepara una build nova. El procediment per [respondre a App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) és el mateix que per a les altres normes. Aquí tens una plantilla en anglès, per adaptar, i quedant-te només amb el que sigui cert a la teva app:

```text
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,
```

Si a la build hi falta un mecanisme, una resposta no n'hi haurà prou. Com amb la [guideline 2.1](https://devoria.fr/ca/blog/guideline-2-1-app-store-rebuig), Apple jutja la build que té a les mans.

## La check-list 1.2 abans de l'enviament

- Has llistat tot el que un usuari publica i altres veuen, pseudònims inclosos.
- Les teves condicions prohibeixen el contingut ofensiu i els abusos, i l'app demana un «Accepto» explícit.
- El filtre funciona al servidor, busca paraules senceres i cobreix les llengües de la teva fitxa.
- Cada contingut té un botó «Denunciar», i cada denúncia t'avisa a l'instant.
- Saps retirar un contingut i expulsar-ne l'autor en menys de 24 hores.
- Bloquejar un usuari en treu el contingut a l'instant.
- Hi ha una adreça de contacte visible a l'app, i la URL d'assistència funciona.
- El qüestionari de classificació per edat declara el contingut d'usuaris, i la missatgeria si la teva app en té.
- Les notes de revisió diuen on trobar cada mecanisme, amb un compte de demostració.

## Corregeix el rebuig abans de tornar a enviar l'app

Si t'acaben de rebutjar l'app per la 1.2, el [Review Kit](https://devoria.fr/ca/kits/app-review) reuneix el que comprovo abans de cada enviament, amb dues skills que revisen el teu projecte a Claude Code i preparen la teva resposta si Apple la rebutja. Si vols una mirada humana, [reserva una hora amb mi](https://devoria.fr/ca/coaching): llegim el missatge junts i revisem el teu flux de moderació. El procés complet després d'un rebuig és a la pàgina [aplicació rebutjada per Apple](https://devoria.fr/ca/expertise/aplicacio-rebutjada-per-apple).

Si prepares el teu primer llançament, [fes el teu diagnòstic gratuït](https://devoria.fr/ca/diagnostic): et diu per quina etapa començar i t'envia la meva checklist antirebuig d'Apple.

Ningú no pot garantir que Apple t'accepti l'app. Aquests cinc mecanismes, ben visibles, almenys treuen aquest motiu de la llista.

## Preguntes freqüents

### Què vol dir «Guideline 1.2 - Safety - User-Generated Content»?

És el títol del rebuig al missatge d'Apple. Vol dir que la teva app mostra contingut creat per usuaris sense totes les proteccions esperades: filtre, denúncies gestionades ràpidament, bloqueig, contacte publicat i condicions d'ús acceptades.

### Un pseudònim en un rànquing compta com a contingut d'usuari?

El text d'Apple no ho diu. Jo el tracto com a tal, perquè un pseudònim es tria lliurement i el veuen altres jugadors. A TradaZen, els pseudònims dels rànquings passen per un filtre, es poden denunciar i se substitueixen per un pseudònim neutre si causen problemes.

### De debò cal gestionar les denúncies en 24 hores?

És el que demana el missatge de rebuig d'Apple. El text de la norma parla de respostes ràpides. Per tant, un filtre automàtic no n'hi ha prou: cal algú que retiri el contingut i n'expulsi l'autor. L'ocultació automàtica després de diverses denúncies t'ajuda a aguantar mentrestant.

### Les condicions d'ús s'han d'acceptar dins l'app?

És la manera més segura. El missatge de rebuig demana que els usuaris acceptin unes condicions que no toleren ni contingut ofensiu ni usuaris abusius. Un enllaç al peu d'una pàgina no demostra l'acord. Una pantalla amb un botó «Accepto», abans de la primera publicació, no deixa cap dubte.

### Una app de xat anònim pot superar la guideline 1.2?

El text actual esmenta el xat aleatori o anònim entre els usos que no tenen lloc a l'App Store. Una app que serveixi sobretot per a això es pot retirar sense previ avís, fins i tot amb filtre, denúncies i bloqueig.


## El teu projecte

[Review Kit](https://devoria.fr/ca/kits/app-review): La meva checklist de revisió de l'App Store, els rebutjos d'Apple que he corregit, la de Google Play i tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/ca/kits/ios): Crea la teva app d'iPhone i Android amb Claude Code: el codi de partida de les meves apps, el camí fins a les botigues i tots els kits. 99 €.

[Diagnòstic: què et separa de la teva app d'iPhone](https://devoria.fr/ca/diagnostic): 7 preguntes, 60 segons: sabràs què et bloqueja de debò per publicar la teva app d'iPhone, el teu recorregut en 4 etapes i el kit que et toca.
