# Guideline 1.2 User-Generated Content: Apple ne istiyor?

> Kullanıcıların içerik yayınlıyorsa filtre, şikâyet, engelleme, iletişim adresi ve kabul edilmiş kullanım koşulları gerekir.

Orijinal sayfa: [Guideline 1.2 User-Generated Content: Apple ne istiyor?](https://devoria.fr/tr/blog/guideline-1-2-user-generated-content-apple)
Yazar: [Mehdi Azizi](https://devoria.fr/tr/mehdi-azizi)
Yayın: 2026-11-04
İçeriğin son gözden geçirilmesi: 2026-11-04


Guideline 1.2, kullanıcılar başkalarının gördüğü bir şey yayınladığı anda devreye girer: bir mesaj, bir fotoğraf, bir yorum ve bence sıralamadaki basit bir kullanıcı adı bile. Apple'ın metni bu durumda bir filtre, hızlı yanıt verilen bir şikâyet sistemi, engelleme ve yayınlanmış bir iletişim adresi ister. **Ret mesajları beşinci bir şart ekler: kullanıcıların kabul ettiği, rahatsız edici içeriğe ve taciz eden kullanıcılara hiç tolerans göstermeyen kullanım koşulları.**

Bu rehber bir ret hikâyesi anlatmıyor. Trading antrenman uygulamam TradaZen'in sıralamaları oyuncuların seçtiği kullanıcı adlarını göstermeye başladığında neleri kurduğumu gösteriyor. Ret nedenlerinin genel tablosu için [Apple bir uygulamayı neden reddeder](https://devoria.fr/tr/blog/apple-uygulama-reddi-neden-reddedilir) yazısını oku.

## Guideline 1.2 ne diyor?

1.2, yani "User-Generated Content", [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content) içindeki 1. bölümde, "Safety" başlığı altında yer alıyor. Kullanıcı içeriği barındıran ya da sosyal ağ hizmeti sunan uygulamaları hedefliyor. Kötüye kullanımı önlemek için bu uygulamalar dört korumayı "must include" (içermek zorunda):

- "A method for filtering objectionable material from being posted to the app": **rahatsız edici içeriği yayınlanmadan önce engelleyen bir filtre**.
- "A mechanism to report offensive content and timely responses to concerns": bir içeriği şikâyet etmenin yolu ve şikâyetlere hızlı yanıt.
- "The ability to block abusive users from the service": taciz eden bir kullanıcıyı engelleyebilme.
- "Published contact information so users can easily reach you": yayınlanmış, kolay bulunan bir iletişim adresi.

Metnin 8 Haziran 2026'da güncellenen güncel sürümü daha da ileri gidiyor. Kurala, kullanım koşullarına ya da topluluk kurallarına aykırı içeriği kaldırmanın senin sorumluluğun olduğunu hatırlatıyor. Apple böyle bir içerik bulursa kaldırmanı ve bir iyileştirme planı sunmanı ister, bu arada uygulamayı mağazadan kaldırabilir.

Metin ayrıca App Store'da yeri olmayan uygulamaları da sayıyor: esas olarak pornografi, Chatroulette tarzı rastgele ya da anonim sohbet, gerçek kişilerin fiziksel görünüşünü puanlama, tehdit veya taciz için kullanılanlar. **Bu kullanımlar için dört koruma yetmez.** 1.2.1 ise içerik üreticisi uygulamalarına ek kurallar getiriyor, özellikle uygulamanın yaş sınıflandırmasını aşan içerik için yaş kontrolü.

## Uygulaman bu kapsamda mı?

App Store Connect'in yaş sınıflandırma anketi iyi bir tanım veriyor. Kullanıcıların oluşturduğu içerik uygulamada geniş çapta paylaşılıyorsa [kullanıcı tarafından oluşturulan içerik](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) diyor: videolar, fotoğraflar, metinler ya da ses. Kullanıcılar arası mesajlaşmayı ayrıca ele alıyor.

| Başkalarının gördüğü        | Kapsamda mı? |
| --------------------------- | ------------ |
| Üyeler arası mesajlar       | Evet         |
| Herkese açık fotoğraf/yorum | Evet         |
| Sıralamadaki kullanıcı adı  | Bence evet   |
| Özel notlar                 | Hayır        |
| Senin yazdığın içerik       | Hayır        |

Apple kullanıcı adlarından bahsetmiyor. Yine de ben onları kullanıcı içeriği olarak ele alıyorum: herkes hakaret içeren bir ad seçebilir ve diğer oyuncular bunu görür. TradaZen sıralamaları için yaptığım tercih bu.

## Kodlanacak 5 mekanizma, Expo ve Supabase ile

Bir geliştiricinin 2025 sonunda [Apple forumlarında](https://developer.apple.com/forums/thread/807358) paylaştığı 1.2 ret mesajı, beklenen önlemleri sıralıyor. "Require that users agree to terms (EULA)" ile başlıyor ve bir süre şartıyla bitiyor: şikâyetler üzerine "within 24 hours" harekete geçmek, içeriği kaldırıp sahibini uzaklaştırmak.

| Mekanizma              | Nerede kodlanır               |
| ---------------------- | ----------------------------- |
| Kabul edilmiş koşullar | Ekran ve profil               |
| Filtre                 | Sunucu, gösterimden önce      |
| Şikâyet                | Buton ve tablo                |
| Engelleme              | Tablo ve erişim kuralı        |
| Yayınlanmış iletişim   | Uygulama ve App Store sayfası |

Aşağıdaki SQL örneklerini kendi şemana uyarlaman gerekiyor. Bunlar, biri uygulamanı atlatsa bile geçerli olan [Supabase satır düzeyinde erişim kurallarına](https://supabase.com/docs/guides/database/postgres/row-level-security) dayanıyor.

### 1. Kabul edilmiş, kötüye kullanıma tolerans göstermeyen koşullar

Kullanım koşulların, rahatsız edici içeriğe ve taciz eden kullanıcılara tolerans gösterilmediğini açıkça yazmalı. Örnek madde (bir uzmana okut, bu hukuki tavsiye değil): "Saldırgan, nefret içeren, cinsel veya taciz edici hiçbir içeriğe tolerans gösterilmez. Şikâyet edilen bir içerik kaldırılabilir ve sahibi önceden haber verilmeksizin uzaklaştırılabilir."

**Kayıt butonunun altındaki pasif bir cümle onayı kanıtlamaz: açık bir eylem iste.** İlk paylaşımdan önce, koşullara bağlantı içeren ve "Kabul ediyorum" butonu olan bir ekran. Kabul tarihini ve sürümünü profile kaydet, bunlar yoksa paylaşımı engelle:

```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. Başkaları görmeden önce çalışan bir filtre

Filtre sunucuda çalışır, çünkü uygulamanın kodu atlatılabilir. Uygulamadaki kopya sadece kullanıcıyı anında uyarmaya yarar.

TradaZen'de veritabanındaki bir fonksiyon her kullanıcı adını kontrol ediyor, uygulama da oyuncuyu uyarmak için aynı listeyi kullanıyor. İkisini birebir aynı tutuyorum. Sunucu tarafında saldırgan bir kullanıcı adı yazılırken reddedilmiyor: **gösterim sırasında nötr bir adla değiştiriliyor, böylece yanlış pozitif yüzünden kimse engellenmiyor**.

Yanlış pozitifler çabuk gelir. TradaZen'de filtrenin ilk sürümü Dominique, Monique veya Véronique gibi isimleri sansürlüyordu, çünkü içlerinde kaba bir kelimenin parçası geçiyordu. Çözüm: kelime parçalarını değil, tam kelimeleri aramak. Uygulama Japonca ve Çince de satıldığı için filtre bu dilleri de kapsıyor.

### 3. 24 saat içinde ele alınan bir şikâyet

Yayınlanan her içeriğin bir "Şikâyet et" butonu var. TradaZen'de lig sıralamasında şikâyet edilen bir kullanıcı adı, şikâyet eden kişinin telefonunda hemen nötr bir etiketle gösteriliyor. Şikâyet sonra sunucuya gidiyor, telefon çevrimdışıysa daha sonra yeniden gönderiliyor.

Veritabanı tarafında, kişi ve içerik başına tek şikâyet olan bir şikâyet tablosu:

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

TradaZen'de **birkaç oyuncunun şikâyet ettiği bir kullanıcı adı nötr bir adla değiştiriliyor** ve şikâyetler asla şikâyet edilen kişiye gösterilmiyor. Genel bir önlem: şikâyette kullanılan kimlik içeriğin sahibi tarafından değiştirilememeli, yoksa gizlemeden kaçabilir.

Otomatik gizleme senin kararının yerini tutmaz. 24 saati tutturmak için her şikâyette haberdar ol: bir [Supabase veritabanı webhook'u](https://supabase.com/docs/guides/database/webhooks), sana mesaj gönderen bir sunucu fonksiyonunu çağırabilir. İçeriği kaldırmaya yarayan anahtar sunucuda kalır, bunu [Expo uygulamasında gizli API anahtarı](https://devoria.fr/tr/blog/expo-gizli-api-anahtari-koruma) yazısında anlatıyorum.

### 4. Anında etki eden bir engelleme

Bir engelleme tablosu, ardından engellenen kişilerin içeriğini engelleyen kişinin akışından çıkaran bir erişim kuralı:

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

TradaZen'de bir arkadaşı kodla ekliyorsun, onu çıkarıp engelleyebiliyorsun. **Engellenen arkadaş, yeniden istek gönderse bile listeden kaybolur.**

### 5. Yayınlanmış, kolay bulunan bir iletişim adresi

Uygulamanın ayarlarına bir iletişim adresi koy, App Store Connect'te de gerçekten yanıt veren bir destek URL'si ver. TradaZen'de destek adresi gizlilik politikasında ve kullanım koşullarında yer alıyor. Bu sayfalarda olması gerekenler [uygulama gizlilik politikası](https://devoria.fr/tr/blog/uygulama-gizlilik-politikasi-ios-rehberi) yazısında.

Son bir nokta: hesabını silen birinin içeriklerine ne olacağına karar ver. Yukarıdaki `on delete cascade`, hesapla birlikte şikâyetlerini de siler. Tam tarif [iOS hesap silme](https://devoria.fr/tr/blog/ios-hesap-silme-apple-oncesi-test) yazısında.

## TradaZen politikasında ne gösteriyor

Bu mekanizmalar, ligler ve arkadaşlar geldiğinde Eylül 2026'da güncellenen TradaZen gizlilik politikasında herkese açık olarak anlatılıyor: "Kullanıcı adları otomatik bir filtreden geçer; sıralamada uygunsuz bir kullanıcı adını şikâyet edebilir, bir arkadaşını çıkarıp engelleyebilirsin." Aynı politika e-posta adresinin ve günlüğün diğer oyunculara asla gösterilmediğini de belirtiyor. Uygulamanın bağlamı [TradaZen vaka çalışmasında](https://devoria.fr/tr/blog/tradazen-vaka-calismasi-iphone-uygulamasi-yayinlamak).

## 1.2 reddinden sonra Apple'a ne yanıt verilir

Yanıtında ve inceleme notlarında, reviewer'a her mekanizmayı nerede bulacağını söyle. Bu özellikler uygulamanın içinde yaşıyor: reviewer build'e gömülü kodu test eder, o yüzden yeni bir build hazırla. [App Review'a yanıt verme](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) prosedürü diğer kurallardakiyle aynı. İşte uyarlanacak İngilizce bir şablon, sadece uygulamanda gerçekten olanları bırak:

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

Build'de bir mekanizma eksikse, yanıt yetmez. [Guideline 2.1](https://devoria.fr/tr/blog/guideline-2-1-app-store-ret-duzeltme) için olduğu gibi Apple elindeki build'e göre karar verir.

## Göndermeden önce 1.2 kontrol listesi

- Bir kullanıcının yayınladığı ve başkalarının gördüğü her şeyi, kullanıcı adları dahil, listeledin.
- Koşulların rahatsız edici içeriği ve kötüye kullanımı yasaklıyor, uygulama açık bir "Kabul ediyorum" istiyor.
- Filtre sunucuda çalışıyor, tam kelimeleri arıyor ve sayfandaki dilleri kapsıyor.
- Her içeriğin bir "Şikâyet et" butonu var ve her şikâyet seni anında haberdar ediyor.
- Bir içeriği kaldırmayı ve sahibini 24 saatten kısa sürede uzaklaştırmayı biliyorsun.
- Bir kullanıcıyı engellemek içeriğini hemen kaldırıyor.
- Uygulamada bir iletişim adresi görünüyor ve destek URL'si yanıt veriyor.
- Yaş sınıflandırma anketi kullanıcı içeriğini ve varsa mesajlaşmayı beyan ediyor.
- İnceleme notları, bir demo hesapla birlikte, her mekanizmanın nerede olduğunu söylüyor.

## Uygulamayı yeniden göndermeden önce reddi düzelt

Uygulaman 1.2 nedeniyle yeni reddedildiyse, [Review Kit](https://devoria.fr/tr/kits/app-review) her gönderimden önce kontrol ettiğim şeyleri bir araya getiriyor. İçinde projeni Claude Code'da inceleyen ve Apple reddederse yanıtını hazırlayan iki skill var. İnsan gözüyle bir bakış istersen [benimle bir saat ayır](https://devoria.fr/tr/coaching): mesajı birlikte okuyup moderasyon akışına bakarız. Reddin ardından izlenecek tam yol [Apple tarafından reddedilen uygulama](https://devoria.fr/tr/expertise/apple-tarafindan-reddedilen-uygulama) sayfasında.

İlk yayınına hazırlanıyorsan [ücretsiz teşhisini yap](https://devoria.fr/tr/diagnostic): önce hangi adıma girişmen gerektiğini söyler ve sana Apple reddine karşı kontrol listemi gönderir.

Kimse Apple'ın uygulamanı kabul edeceğini garanti edemez. Ama bu beş mekanizma, net biçimde görünür olduğunda, en azından bu nedeni listeden çıkarır.

## Sık sorulan sorular

### "Guideline 1.2 - Safety - User-Generated Content" ne demek?

Apple'ın mesajındaki ret başlığı bu. Uygulamanın, kullanıcıların oluşturduğu içeriği beklenen korumaların hepsi olmadan gösterdiği anlamına geliyor: filtre, hızlı ele alınan şikâyet, engelleme, yayınlanmış iletişim adresi ve kabul edilmiş kullanım koşulları.

### Sıralamadaki bir kullanıcı adı kullanıcı içeriği sayılır mı?

Apple'ın metni bunu söylemiyor. Ben öyle ele alıyorum, çünkü kullanıcı adı serbestçe seçiliyor ve diğer oyuncular tarafından görülüyor. TradaZen'de sıralamadaki kullanıcı adları filtreden geçiyor, şikâyet edilebiliyor ve sorun çıkarırsa nötr bir adla değiştiriliyor.

### Şikâyetleri gerçekten 24 saat içinde ele almak gerekiyor mu?

Apple'ın ret mesajı bunu istiyor. Kuralın metni hızlı yanıttan bahsediyor. Yani otomatik bir filtre yetmez: içeriği kaldıracak ve sahibini uzaklaştıracak biri gerekir. Birkaç şikâyetten sonra devreye giren otomatik gizleme, bu arada idare etmene yardım eder.

### Kullanım koşulları uygulama içinde mi kabul edilmeli?

En güvenli yol bu. Ret mesajı, kullanıcıların rahatsız edici içeriğe ve taciz eden kullanıcılara tolerans göstermeyen koşulları kabul etmesini istiyor. Sayfanın altındaki bir bağlantı onayı kanıtlamaz. İlk paylaşımdan önce "Kabul ediyorum" butonlu bir ekran ise hiç şüphe bırakmaz.

### Anonim bir sohbet uygulaması guideline 1.2'yi geçebilir mi?

Güncel metin, rastgele ya da anonim sohbeti App Store'da yeri olmayan kullanımlar arasında sayıyor. Esas olarak buna hizmet eden bir uygulama, filtre, şikâyet ve engelleme olsa bile önceden haber verilmeksizin kaldırılabilir.


## Projen

[Review Kit](https://devoria.fr/tr/kits/app-review): App Store inceleme kontrol listem, düzelttiğim Apple retlerim, Google Play kontrol listesi ve üç Claude Code skill'i. ₺2.699.

[iOS & Android Kit](https://devoria.fr/tr/kits/ios): Claude Code ile iPhone ve Android uygulamanı yap: uygulamalarımın başlangıç kodu, mağazalara kadar giden yol ve tüm kitler. ₺5.499.

[Analiz: Seni iPhone uygulamandan ayıran ne?](https://devoria.fr/tr/diagnostic): 7 soru, 60 saniye: iPhone uygulamanı yayınlamanı asıl neyin engellediğini, 4 adımlık yolunu ve sana uygun kiti öğren.
