Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Ugc Safety Features

ASecurity

Detects missing report, block, filter, and contact information mechanisms required for all apps with user-generated content under Guideline 1.2.

18 stars
0 votes
0 copies
1 views
Added 9/20/2026
ai-agentsgoswiftbashreactapi

Works with

cliapi

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add cruisediary/apple-app-review-skills --skill ugc-safety-features --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ugc Safety Features?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Ugc Safety Features
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cruisediary-ugc-safety-features/badge)](https://www.skillsdirectory.com/skills/cruisediary-ugc-safety-features)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: ugc-safety-features
description: >-
  Detects missing report, block, filter, and contact information mechanisms required for all apps with user-generated content under Guideline 1.2.
---

# Skill: UGC Safety Features
<!-- SEO: user-generated content report button block user EULA content moderation Guideline 1.2 UGC App Store rejection safety -->

## Purpose
Detects missing mechanisms required for apps with user-generated content under Guideline 1.2. Apple explicitly requires **all four** of the following:
1. **Content filtering** — objectionable content must be filterable before it surfaces to other users
2. **Report mechanism** — users must be able to flag offensive posts, comments, and profiles
3. **Block mechanism** — users must be able to block abusive users
4. **Published contact info** — a developer contact method must be accessible within the app for users to report issues directly

## Apple Guideline
- **Primary:** 1.2 — Safety: User Generated Content
- **Related:** 5.1.1(ii)
- **Reference:** `references/guidelines/1-safety.md`

## Real-World Rejection Cases
- **Case:** App with user posts had no "Report" button — rejected under Guideline 1.2
  **Source:** https://developer.apple.com/forums/thread/116703
  **Root cause:** Apps with user-generated content must provide mechanism to report offensive content

- **Case:** iOS app rejected 1.2 Safety — no ability to block abusive users
  **Source:** https://developer.apple.com/forums/thread/78288
  **Root cause:** Guideline 1.2 requires block mechanism, not just report

- **Case:** Community app rejected — no EULA requiring users to agree to content standards
  **Source:** https://buddyboss.com/docs/app-store-guideline-1-2-safety-user-generated-content/
  **Root cause:** Users must agree to terms prohibiting objectionable content

## Trigger
Invoke on any iOS/macOS project that includes user posts, comments, chat, or community features.

## Inputs
| Name | Type | Default | Description |
|------|------|---------|-------------|
| `project_root` | path | cwd | iOS/macOS project root |
| `shared_context` | object | nil | Pre-collected context from appstore-full-audit Phase 1 |

## Actions

### Phase 1: Context Collection
*Skip this phase if `shared_context` is provided.*

1. `Glob` `**/*.swift` — collect all Swift source files.
2. `Glob` `**/*Feed*` or `**/*Post*` or `**/*Comment*` — locate feed/post UI files.
3. `Glob` `**/*Profile*` or `**/*UserProfile*` — locate profile view files.
4. `Glob` `**/*Onboarding*` or `**/*Registration*` or `**/*Signup*` — locate registration flow files.

### Phase 2: Checks

**Feed/Post Level:**

1. **Report content mechanism**
   `Grep` pattern `"Report"|"reportContent"|"reportPost"|"flagContent"|"reportAction"` in `**/*.swift`.
   If absent → 🔴 CRITICAL. Guideline 1.2 requires a mechanism for users to flag objectionable content.

2. **Block user mechanism**
   `Grep` pattern `"blockUser"|"Block User"|"blockAction"` in `**/*.swift`.
   If absent → 🔴 CRITICAL. Guideline 1.2 explicitly requires ability to block abusive users.

3. **Content filtering/moderation**
   `Grep` pattern `"filterContent"|"moderateContent"|"contentFilter"` in `**/*.swift`.
   If absent → 🟠 HIGH. Indicates no client-side content filtering layer.

**Profile Level:**

4. **Report/block from profile views**
   `Grep` pattern `"Report User"|"Block User"|"reportUser"|"blockUser"` in files matching `*Profile*View*` or `*UserProfile*`.
   If absent while report/block found only in feed, flag → 🟠 HIGH. Guideline 1.2 compliance requires accessibility from profile context as well.

**Developer Contact Info:**

5. **In-app developer contact method**
   `Grep` pattern `"contactUs"|"contact_us"|"Contact Support"|"reportIssue"|"support@"|"mailto:"` in `**/*.swift`.
   If absent → 🟠 HIGH. Guideline 1.2 requires a published contact method accessible within the app — Apple reviewers specifically check whether users can reach the developer to report abuse outside of the in-app report button.

**EULA/Terms:**

6. **Terms of service / EULA acceptance**
   `Grep` pattern `"termsOfService"|"acceptTerms"|"EULA"|"userAgreement"` in `**/*.swift`.
   If absent in any file — and if onboarding/registration flow exists — flag → 🟠 HIGH. Users must explicitly agree to content standards before contributing UGC.

**Age Verification / COPPA (Children's Online Privacy Protection Act):**

7. **Under-13 user handling**
   `Grep` pattern `"ageVerification"|"dateOfBirth"|"age_gate"|"birthDate"|"underAge"|"isMinor"` in `**/*.swift`.
   If app allows user-to-user interaction (chat, follows, public profiles) and no age verification is found → 🟠 HIGH.
   Apps rated 4+ or 9+ that allow strangers to contact each other must either:
   - Implement age verification and block under-13 users from social features, or
   - Be rated 12+ or higher to reflect the actual audience risk.
   COPPA compliance (US law) requires parental consent for users under 13 — Apple may reject apps that allow under-13 UGC without safeguards, independent of the App Store rating.

### Phase 3: Output
Collect all findings from Phase 2 and build the prioritised findings list below. Include file paths and line numbers. Omit tiers with no findings.

## Output Format

```
## UGC Safety Features — Findings

### 🔴 CRITICAL — Guaranteed rejection
- [ ] TODO: Add a "Report" button/action to post and comment views — Guideline 1.2 requires a content reporting mechanism — `FeedViewController.swift`
- [ ] TODO: Add a "Block User" action accessible from post, comment, or profile views — Guideline 1.2 requires ability to block abusive users

### 🟠 HIGH — Very likely rejection
- [ ] TODO: Add EULA/Terms of Service acceptance step in registration flow — users must agree to content standards before posting UGC — Guideline 1.2
- [ ] TODO: Surface report/block actions from UserProfileViewController as well as from feed items — Guideline 1.2

### 🟠 HIGH — Very likely rejection
- [ ] TODO: Add in-app developer contact method (support email or contact form) accessible from settings or profile — Guideline 1.2 requires published contact info alongside report/block

### 🟡 MEDIUM — Possible rejection
- [ ] TODO: Implement client-side content filtering or integrate server-side moderation API to handle flagged content

### 🟢 LOW — Best practice
- [ ] TODO: Add contextual reporting categories (e.g., "Spam", "Hate Speech", "Nudity") to improve moderation quality
- [ ] TODO: Establish a 24-hour response SLA for flagged content — Apple expects developers to actively moderate reported content; slow or absent moderation can lead to rejection on resubmission or app removal
```

## Tools Used
`Glob`, `Grep`, `Read`

## Constraints
- Read-only. No file edits.
- No network calls.
- Skip Phase 1 if `shared_context` is provided by orchestrating agent.
- Works on Swift, Objective-C, React Native, Flutter projects.

## Quick Commands

Run these in your project root to check manually:

```bash
# Check for report/block mechanisms
!grep -rn "reportContent\|reportPost\|reportUser\|flagContent\|blockUser\|Block User\|Report" . --include="*.swift" | grep -v "//\|BugReport"

# Check for EULA/terms acceptance
!grep -rn "termsOfService\|acceptTerms\|EULA\|userAgreement" . --include="*.swift"
```

## Swift Anti-Pattern Reference
`examples/swift/UGCSafetyPatterns.swift`

## Detection Steps

1. **Find target files**
   - Glob: `**/*.swift`, `**/*.m`

2. **Search for rejection patterns**
   - Grep `reportUser\|reportContent\|flagContent\|reportPost\|ReportUser` — report feature
   - Grep `blockUser\|blockAccount\|ignoreUser\|BlockUser` — block feature
   - Grep `UITableViewCell\|UICollectionViewCell` — check context menu or swipe actions for report/block
   - Grep `contactSupport\|supportEmail\|contactUs\|ContactSupport` — published contact info

3. **Determine verdict**
   - UGC features exist (feed, comments, profiles, chat) + no report pattern → 🔴 CRITICAL (Guideline 1.2)
   - Report found + no block pattern → 🔴 CRITICAL
   - Report + block + contact all present → 🟢 pass

4. **Report**
   - Evidence of UGC (feed/comment/chat code) without safety features
   - Fix: Add report button to each user-generated content item; implement user blocking; add support contact link in Settings

Attribution

cruisediarycruisediary
View sourceMore from cruisediary →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Caveman

Ultra-compressed communication mode that cuts output tokens while keeping technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".

1074701 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

693621 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

691 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →