Guideline 1.2 User-Generated Content: ما يطلبه Apple
بقلم Mehdi Azizi
نُشر في ، 10 د
إذا كان مستخدموك ينشرون محتوى، فتحتاج إلى فلتر وإبلاغ وحظر ووسيلة تواصل وشروط استخدام مقبولة. قائمة تحقق مع Expo وSupabase.
تنطبق الـ guideline 1.2 بمجرد أن ينشر المستخدمون شيئًا يراه غيرهم: رسالة، صورة، تقييم، وفي رأيي حتى مجرد اسم مستعار في لوحة ترتيب. عندها يشترط نص Apple وجود فلتر، ونظام إبلاغ تتبعه استجابة سريعة، وإمكانية حظر، ووسيلة تواصل منشورة. وتضيف رسائل الرفض شرطًا خامسًا: شروط استخدام يقبلها المستخدم، لا تتسامح مع أي محتوى مسيء ولا مع أي مستخدم مسيء.
هذا الدليل لا يحكي قصة رفض. بل يعرض ما طبّقته في TradaZen، تطبيقي للتدرّب على التداول، عندما بدأت لوحات الترتيب فيه تعرض أسماء مستعارة يختارها اللاعبون. للاطلاع على الصورة الكاملة لأسباب الرفض، اقرأ بالأحرى لماذا يرفض Apple تطبيقًا.
ماذا تقول الـ guideline 1.2؟
تقع الـ 1.2، «User-Generated Content»، في القسم 1، «Safety»، من App Review Guidelines. وهي تستهدف التطبيقات التي تحتوي على محتوى من المستخدمين أو خدمة شبكة اجتماعية. ولمنع الإساءة، هذه التطبيقات «must include» أربع حمايات:
- «A method for filtering objectionable material from being posted to the app»: فلتر يمنع المحتوى المسيء قبل نشره.
- «A mechanism to report offensive content and timely responses to concerns»: وسيلة للإبلاغ عن محتوى، واستجابة سريعة للبلاغات.
- «The ability to block abusive users from the service»: إمكانية حظر المستخدم المسيء.
- «Published contact information so users can easily reach you»: وسيلة تواصل منشورة يسهل العثور عليها.
النسخة الحالية من النص، المحدّثة في 8 يونيو 2026، تذهب أبعد من ذلك. فهي تذكّر بأن إزالة المحتوى المخالف للقاعدة أو لشروط استخدامك أو لقواعد مجتمعك مسؤوليتك أنت. وإذا وجد Apple محتوى من هذا النوع، يطلب منك إزالته وتقديم خطة تحسين، وقد يزيل التطبيق ريثما يتم ذلك.
ويسرد النص أيضًا التطبيقات التي لا مكان لها في App Store: تلك التي تُستخدم أساسًا للمواد الإباحية، أو للدردشة العشوائية أو المجهولة على طريقة Chatroulette، أو لتقييم المظهر الجسدي لأشخاص حقيقيين، أو للتهديد أو التحرّش. في هذه الاستخدامات، لا تكفي الحمايات الأربع. وتضيف الـ 1.2.1 قواعد لتطبيقات صنّاع المحتوى، منها التحقق من العمر للمحتوى الذي يتجاوز التصنيف العمري للتطبيق.
هل تطبيقك معنيّ بها؟
يقدّم استبيان التصنيف العمري في App Store Connect تعريفًا جيدًا. فهو يتحدث عن المحتوى الذي ينشئه المستخدمون عندما يُنشر محتوى أنشأه المستخدمون على نطاق واسع داخل التطبيق: فيديوهات أو صور أو نصوص أو صوت. ويعامل المراسلة بين المستخدمين بشكل منفصل.
| ما يراه الآخرون | معنيّ؟ |
|---|---|
| رسائل بين الأعضاء | نعم |
| صور أو تقييمات عامة | نعم |
| اسم مستعار في لوحة ترتيب | نعم، في رأيي |
| ملاحظات خاصة | لا |
| محتوى كتبته أنت | لا |
Apple لا يذكر الأسماء المستعارة. ومع ذلك أعاملها كمحتوى من المستخدمين: أي شخص يستطيع اختيار اسم مهين، ويراه لاعبون آخرون. هذا هو الخيار الذي اتخذته في لوحات ترتيب TradaZen.
الآليات الخمس التي عليك برمجتها، مع Expo وSupabase
رسالة الرفض 1.2، كما نشرها أحد المطوّرين على منتديات Apple في أواخر 2025، تسرد الإجراءات المتوقعة. تبدأ بـ «Require that users agree to terms (EULA)» وتنتهي بشرط زمني: التصرّف في البلاغات «within 24 hours»، بإزالة المحتوى وطرد صاحبه.
| الآلية | أين تبرمجها |
|---|---|
| شروط استخدام مقبولة | شاشة وملف المستخدم |
| الفلتر | الخادم، قبل العرض |
| الإبلاغ | زر وجدول |
| الحظر | جدول وقاعدة وصول |
| تواصل منشور | التطبيق وصفحة App Store |
أمثلة SQL أدناه تحتاج إلى تكييف مع مخططك. وهي تعتمد على قواعد الوصول على مستوى الصف في Supabase، التي تُطبَّق حتى لو تجاوز أحدهم تطبيقك.
1. شروط استخدام مقبولة، بلا تسامح مع الإساءة
يجب أن تنصّ شروط استخدامك بوضوح على أنه لا تسامح مع أي محتوى مسيء ولا مع أي مستخدم مسيء. مثال على بند، يجب أن يراجعه مختص، وليس استشارة قانونية: «لا يُسمح بأي محتوى مهين أو يحضّ على الكراهية أو جنسي أو ينطوي على تحرّش. يمكن إزالة المحتوى المُبلَّغ عنه وطرد صاحبه دون إشعار مسبق.»
جملة سلبية تحت زر التسجيل لا تثبت الموافقة: اطلب إجراءً صريحًا. شاشة فيها رابط إلى شروط الاستخدام وزر «أوافق»، قبل أول نشر. سجّل تاريخ الموافقة والنسخة المقبولة في ملف المستخدم، ثم امنع النشر طالما أنهما غير موجودين:
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. فلتر قبل أن يرى الآخرون المحتوى
يعمل الفلتر على الخادم، لأن كود التطبيق يمكن تجاوزه. نسخة منه داخل التطبيق تفيد فقط في تنبيه المستخدم فورًا.
في TradaZen، تتحقق دالة في قاعدة البيانات من كل اسم مستعار، ويطبّق التطبيق القائمة نفسها لتنبيه اللاعب. وأحرص على أن تبقى القائمتان متطابقتين. على الخادم، لا يُرفض الاسم المسيء عند الكتابة: بل يُستبدل باسم محايد عند العرض، وهذا يتجنّب حظر شخص بسبب نتيجة إيجابية خاطئة.
النتائج الإيجابية الخاطئة تظهر بسرعة. في TradaZen، كانت نسخة أولى من الفلتر تحجب أسماء مثل Dominique وMonique وVéronique، لأنها تحتوي على جزء من كلمة بذيئة. الحل: البحث عن كلمات كاملة، لا عن أجزاء كلمات. وبما أن التطبيق يُباع باليابانية والصينية، فالفلتر يغطي هاتين اللغتين أيضًا.
3. إبلاغ يُعالَج خلال 24 ساعة
كل محتوى منشور يحمل زر «إبلاغ». في TradaZen، الاسم المستعار المُبلَّغ عنه في لوحة ترتيب الدوري يظهر فورًا تحت تسمية محايدة، على هاتف الشخص الذي أبلغ. ثم يُرسَل البلاغ إلى الخادم، ويُعاد إرساله لاحقًا إذا كان الهاتف غير متصل.
في قاعدة البيانات، جدول للبلاغات، بلاغ واحد فقط لكل شخص ولكل محتوى:
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، الاسم المستعار الذي يبلّغ عنه عدة لاعبين يُستبدل باسم محايد، ولا تُعرض البلاغات أبدًا على الشخص المُبلَّغ عنه. احتياط عام: المعرّف المستخدم في البلاغ يجب ألا يكون قابلًا للتعديل من صاحب المحتوى، وإلا فقد يفلت من الإخفاء.
الإخفاء التلقائي لا يغني عن قرارك. للالتزام بالـ 24 ساعة، اجعل كل بلاغ يصلك كتنبيه: يمكن لـ webhook قاعدة بيانات Supabase أن يستدعي دالة على الخادم ترسل لك رسالة. المفتاح الذي يسمح بإزالة المحتوى يبقى على الخادم، كما أشرح في مفتاح API سري في تطبيق Expo.
4. حظر يعمل فورًا
جدول للحظر، ثم قاعدة وصول تزيل محتوى الأشخاص المحظورين من خلاصة الشخص الذي حظرهم:
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، تضيف صديقًا عبر رمز، ويمكنك إزالته وحظره. الصديق المحظور يختفي من القائمة، حتى لو أرسل طلبًا من جديد.
5. وسيلة تواصل منشورة يسهل العثور عليها
ضع عنوان تواصل في إعدادات التطبيق، ورابط دعم يعمل فعلًا في App Store Connect. في TradaZen، عنوان الدعم موجود في سياسة الخصوصية وفي شروط الاستخدام. المحتوى المطلوب لهذه الصفحات تجده في سياسة الخصوصية لتطبيق.
نقطة أخيرة: قرّر مصير محتوى الشخص الذي يحذف حسابه. الـ on delete cascade أعلاه يحذف بلاغاته مع حسابه. الطريقة الكاملة تجدها في حذف الحساب على iOS.
ما يعرضه TradaZen في سياسته
هذه الآليات موصوفة علنًا في سياسة الخصوصية لـ TradaZen، التي استُكملت في سبتمبر 2026 مع وصول الدوريات والأصدقاء: «تمرّ الأسماء المستعارة عبر فلتر تلقائي؛ يمكنك الإبلاغ عن اسم مستعار غير لائق في لوحة الترتيب، وإزالة صديق وحظره.» وتوضّح السياسة نفسها أن البريد الإلكتروني والسجل لا يُعرضان أبدًا على اللاعبين الآخرين. سياق التطبيق تجده في دراسة حالة TradaZen.
بماذا تردّ على Apple بعد رفض 1.2
أخبر المراجِع أين يجد كل آلية، في ردّك وفي ملاحظات المراجعة. هذه الوظائف موجودة داخل التطبيق: المراجِع يختبر الكود المضمَّن في الـ build، لذا جهّز build جديدًا. طريقة الرد على App Review هي نفسها كما في القواعد الأخرى. إليك نموذجًا بالإنجليزية، كيّفه ولا تُبقِ فيه إلا ما هو صحيح في تطبيقك:
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، فلن يكفي الرد. كما في الـ guideline 2.1، يحكم Apple على الـ build الموجود بين يديه.
قائمة التحقق 1.2 قبل الإرسال
- سردت كل ما ينشره المستخدم ويراه غيره، بما في ذلك الأسماء المستعارة.
- شروط استخدامك تمنع المحتوى المسيء والإساءة، والتطبيق يطلب «أوافق» صريحة.
- الفلتر يعمل على الخادم، ويبحث عن كلمات كاملة، ويغطي لغات صفحتك.
- كل محتوى له زر «إبلاغ»، وكل بلاغ يصلك كتنبيه فورًا.
- تعرف كيف تزيل محتوى وتطرد صاحبه في أقل من 24 ساعة.
- حظر مستخدم يزيل محتواه فورًا.
- عنوان تواصل ظاهر في التطبيق، ورابط الدعم يعمل.
- استبيان التصنيف العمري يصرّح بمحتوى المستخدمين، وبالمراسلة إن كانت في تطبيقك.
- ملاحظات المراجعة تقول أين يجد المراجِع كل آلية، مع حساب تجريبي.
صحّح سبب الرفض قبل إعادة إرسال التطبيق
إذا رُفض تطبيقك للتو بسبب 1.2، فإن Review Kit يجمع ما أتحقق منه قبل كل إرسال، مع skillين يراجعان مشروعك في Claude Code ويجهّزان ردّك إذا رفض Apple. ولنظرة بشرية، احجز ساعة معي: نقرأ الرسالة معًا ونفحص مسار الإشراف على المحتوى في تطبيقك. الخطوات الكاملة بعد الرفض تجدها في صفحة تطبيق رفضه Apple.
إذا كنت تحضّر أول إطلاق لك، أجرِ التشخيص المجاني: يخبرك بالخطوة التي تبدأ بها أولًا ويرسل لك قائمتي لتجنّب رفض Apple.
لا أحد يستطيع أن يضمن أن Apple سيقبل تطبيقك. لكن هذه الآليات الخمس، إذا كانت واضحة، تشطب هذا السبب على الأقل من القائمة.
الأسئلة الشائعة
ماذا تعني «Guideline 1.2 - Safety - User-Generated Content»؟
إنه عنوان الرفض في رسالة Apple. ومعناه أن تطبيقك يعرض محتوى أنشأه المستخدمون دون كل الحمايات المتوقعة: فلتر، وإبلاغ يُعالَج بسرعة، وحظر، وتواصل منشور، وشروط استخدام مقبولة.
هل يُعدّ الاسم المستعار في لوحة الترتيب محتوى من المستخدمين؟
نص Apple لا يقول ذلك. أنا أعامله على هذا الأساس، لأن الاسم المستعار يُختار بحرية ويراه لاعبون آخرون. في TradaZen، تمرّ أسماء لوحات الترتيب عبر فلتر، ويمكن الإبلاغ عنها، وتُستبدل باسم محايد إذا سبّبت مشكلة.
هل يجب حقًا معالجة البلاغات خلال 24 ساعة؟
هذا ما تطلبه رسالة الرفض من Apple. أما نص القاعدة فيتحدث عن استجابات سريعة. لذلك لا يكفي فلتر تلقائي: يلزم شخص يزيل المحتوى ويطرد صاحبه. والإخفاء التلقائي بعد عدة بلاغات يساعدك على الصمود في الأثناء.
هل يجب قبول شروط الاستخدام داخل التطبيق؟
هذه هي الطريقة الأضمن. تطلب رسالة الرفض أن يقبل المستخدمون شروطًا لا تتسامح مع أي محتوى مسيء ولا مع أي مستخدم مسيء. رابط في أسفل صفحة لا يثبت الموافقة. أما شاشة فيها زر «أوافق»، قبل أول نشر، فلا تترك مجالًا للشك.
هل يمكن لتطبيق دردشة مجهولة أن يجتاز الـ guideline 1.2؟
النص الحالي يذكر الدردشة العشوائية أو المجهولة ضمن الاستخدامات التي لا مكان لها في App Store. والتطبيق الذي يُستخدم أساسًا لذلك قد يُزال دون إشعار مسبق، حتى مع وجود فلتر وإبلاغ وحظر.

