Agent skill

iOS Review

by player-ui in player-ui/player

Review Swift/iOS code against team conventions. An agent skill from player-ui/player.

MITAuto-check passedMobile

Install iOS Review

skills CLI
$ npx skills add player-ui/player --skill ios-review -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install player-ui/player ios-review --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/player-ui/player.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ios-review .claude/skills/ios-review && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ios-review
GitHub stars
101
Token cost
~1.6k tokens
SKILL.md length
783 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Review Swift/iOS code against team conventions. An agent skill from player-ui/player.

  • Works in 9 steps: Avoid 2+ depth nested conditionals → Use async/await instead of callbacks → Name functions after intent, not… → …
  • The user asks to review Swift code
  • SKILL.md covers Current diff (when reviewing a…, Authoritative Style Guides, General Rules and UI Rules
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

iOS Review is an agent skill from player-ui/player. Review Swift/iOS code against team conventions. Use when the user asks to review Swift code, runs /ios-review, or when writing or editing Swift files in this repo. Enforces standards that linters cannot catch.

Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering iOS development and Linting and formatting. It works with iOS and SwiftUI. The repository describes itself as: A Cross Platform Server Driven UI Framework. The licence is MIT.

When your agent uses it

  • The user asks to review Swift code
  • Runs /ios-review
  • Editing Swift files in this repo

Example prompts

  • “/ios-review”

Workflow steps

9 steps, taken from the step headings in SKILL.md.

  1. Avoid 2+ depth nested conditionals
  2. Use async/await instead of callbacks
  3. Name functions after intent, not implementation
  4. Public methods before private methods
  5. No force-unwrap (!) in production code — stricter than Google guide
  6. Always use [weak self] in closures
  7. Always capture [weak self] explicitly inside Task closures
  8. Avoid if/else branching on SwiftUI Views
  9. Use generics () instead of AnyView`

What it can do on your machine

Read from SKILL.md and the folder at commit f62684f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are swift).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • swift.org
    • google.github.io
    • developer.apple.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

iOS Review loads about 1.6k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 783 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~55
When it runs · the whole SKILL.md, loaded when a task matches
~1.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from player-ui/player at commit f62684f, republished under its MIT licence (© player-ui). 783 words, ~1,645 tokens.

Download SKILL.mdSave it as .claude/skills/ios-review/SKILL.md (or your agent's skills folder).
name
ios-review
description
Review Swift/iOS code against team conventions. Use when the user asks to review Swift code, runs /ios-review, or when writing or editing Swift files in this repo. Enforces standards that linters cannot catch.
context
fork

Current diff (when reviewing a PR)

Get the diff between this branch and its parent branch (NOT always main). If this has no parent branch, stop.

iOS Code Review — Team Conventions

Review the code (or the diff above if present) against the rules below. Apply General Rules always. Apply UI Rules only if the changes include SwiftUI views (files containing View, body, @ViewBuilder, or SwiftUI imports).

For each violation, report:

  • Rule: which rule was broken
  • Location: file + line number
  • Suggestion: concrete fix

If no violations are found, say so clearly.


Authoritative Style Guides

Apply these guides in full during every review:

  1. Swift API Design Guidelines — naming, documentation, Boolean assertions, protocol suffixes, factory method prefixes, mutating/nonmutating pairs, parameter ordering.
  2. Google Swift Style Guide — formatting, brace style, import ordering, enum layout, trailing closures, trailing commas, /// documentation format.

The team rules below are additions or overrides to those guides. Do not re-report violations already covered by the guides unless a rule here applies a stricter standard.


General Rules

1. Avoid 2+ depth nested conditionals

Nested conditionals (if, guard, switch, for, while, repeat) at a depth greater than 2 (more than one conditional inside another) are a bad pattern. Prefer:

  • guard/else to exit early instead of nesting
  • Extracting conditions into well-named boolean variables or functions
  • AI-assisted rewrites when nesting is deep

Flag any conditional nested inside another at a depth greater than 2, OR with unnecessary nesting that could be chained.

Why: Deep nesting hides the happy path, increases cognitive load, and makes it easy to miss edge cases. Early exits keep logic linear and readable.

2. Use async/await instead of callbacks

All async code should use Swift's async/await. Callbacks (completion handlers, closures passed as the last argument to async operations) are the old pattern and should not appear in new code.

Why: Callbacks invert control flow and make error handling inconsistent. async/await reads top-to-bottom, composes cleanly with try, and eliminates callback pyramids.

3. Name functions after intent, not implementation

Function names should describe what the function achieves, not how it works. For example, a function that registers a hook to make an interaction fail should be called failInteraction(), not registerFailureHook().

Also: add comments on functions you cannot rename (e.g. protocol requirements, library callbacks) explaining their intent.

Why: Implementation details change; intent rarely does. Names tied to mechanics rot as the code evolves and obscure the purpose at the call site.

4. Public methods before private methods

public and open methods should appear near the top of a type, just below init.

Correct order within a type:

  1. init
  2. public/open methods
  3. internal methods
  4. private methods

Why: Public APIs are hard to change post-release. Placing them at the top makes the contract immediately visible to reviewers without scrolling past implementation details.

Show full SKILL.md (322 more words)Show less
5. No force-unwrap (!) in production code — stricter than Google guide

Force-unwrap is forbidden in production code. Use guard let, if let, or ?? with an appropriate default. The only acceptable use of ! is in test code (where crashes surface bugs immediately).

This is stricter than the Google Swift Style Guide, which allows force-unwrap with a safety comment. We do not permit that escape hatch in production.

Why: Force-unwrap turns a recoverable nil into an unrecoverable crash. Production code should handle unexpected nils gracefully rather than terminating.

6. Always use [weak self] in closures

Any closure that captures self must use [weak self], regardless of whether a retain cycle is obvious. This includes completion handlers, notification callbacks, and any escaping closure.

Why: Retain cycles through closures are easy to introduce and hard to spot in review. Requiring [weak self] universally eliminates the need to reason about object lifetimes on a case-by-case basis.

7. Always capture [weak self] explicitly inside Task closures

Task { } creates its own capture scope and does not inherit [weak self] from an enclosing closure. Always re-declare it:

swift
// ❌ Wrong — self is strongly captured inside the Task
doSomething { [weak self] in
    Task {
        self?.handle()  // self is strong here despite outer [weak self]
    }
}

// ✅ Correct
doSomething { [weak self] in
    Task { [weak self] in
        self?.handle()
    }
}

Why: Forgetting [weak self] inside a Task creates a retain cycle even when the enclosing closure correctly uses [weak self]. The two capture lists are independent.


UI Rules

Only apply these rules if the diff includes SwiftUI view code.

8. Avoid if/else branching on SwiftUI Views

In SwiftUI, views inside if/else branches have different structural identities even if they look identical. Instead of branching on views, branch on properties (color, size, text, etc.):

swift
// ❌ Avoid
if isHighlighted {
    Text("Hello").foregroundColor(.red)
} else {
    Text("Hello").foregroundColor(.black)
}

// ✅ Prefer
Text("Hello").foregroundColor(isHighlighted ? .red : .black)

Use @ViewBuilder when you genuinely need to return different view types from a branch.

Why: Branching on views causes animation glitches, performance regressions, and unexpected state resets because SwiftUI treats each branch as a distinct view identity.

Reference: Demystify SwiftUI — WWDC21

9. Use generics (<Content: View>) instead of AnyView

AnyView erases type information and reduces performance. Prefer generics:

swift
// ❌ Avoid
func wrap(_ view: AnyView) -> some View { ... }

// ✅ Prefer
func wrap<Content: View>(_ view: Content) -> some View { ... }

Why: Generics preserve type information and let the compiler optimize the view hierarchy.

© player-ui, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/ios-review of player-ui/player.

Open the folder on GitHubat commit f62684f

Compare with similar skills

iOS Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

iOS Review compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
iOS Review this skillplayer-ui/player101—~1.6kAutomated safety check: PassMIT
Anishelf Releasesamuelhe52/AniShelf142—~2kAutomated safety check: PassApache-2.0
Swift ExpertJeffallan/claude-skills12k—~1.5kAutomated safety check: PassMIT
View Refactorrobinebers/openusage4.3k—~1.4kAutomated safety check: PassMIT
Coding Assistantwpsnote/wpsnote-skills179—~1.1kAutomated safety check: PassNone
Swift Refactorpproenca/dot-skills215—~3kAutomated safety check: PassMIT

Similar skills

  • Anishelf Release

    samuelhe52/AniShelf

    Prepare and publish AniShelf source-control releases through validation, release commits, annotated tags, and the main-to-release pull request.

    142 GitHub stars~2k tokensUpdated 3 days ago
    MobileAuto-check passed
  • Swift Expert

    Jeffallan/claude-skills

    Builds Swift apps for Apple platforms with SwiftUI, protocol-oriented design, async/await, actors and Sendable checks, verified with swift build and swift test.

    12k GitHub stars~1.5k tokensUpdated 7 days ago
    MobileAuto-check passed
  • View Refactor

    robinebers/openusage

    Refactor macOS SwiftUI views and scenes with strong defaults for small dedicated subviews, stable sidebar and selection structure, explicit command and toolbar ownership, scene-aware state, and…

    4.3k GitHub stars~1.4k tokensUpdated today
    MobileAuto-check passed
  • Coding Assistant

    wpsnote/wpsnote-skills

    多平台编码助手。遵循各平台官方文档做编码规范、单测与编译/lint;协助将核心技术梳理为完整 WPS 笔记技术文档。生成的笔记必须包含 7 个二级标题(核心技术、核心代码、关键技术点、核心类和职责、调用链、架构概览、注意事项);其中架构、核心技术、调用链的图示优先用 WPS 笔记的 generateimage 根据描述生成图片再用 insertimage…

    179 GitHub stars~1.1k tokensUpdated 4 mo ago
    MobileAuto-check passed
  • Swift Refactor

    pproenca/dot-skills

    Swift and SwiftUI refactoring patterns aligned with the iOS 26 / Swift 6.2 clinic modular MVVM-C architecture (Airbnb + OLX SPM layout).

    215 GitHub stars~3k tokensUpdated 1 mo ago
    MobileAuto-check passed
  • Update Swiftui APIs

    AvdLee/SwiftUI-Agent-Skill

    Scan Apple's SwiftUI documentation for deprecated APIs and update the SwiftUI Expert Skill with modern replacements.

    3.7k GitHub stars~1.2k tokensUpdated 4 days ago
    MobileAuto-check passed

Works with

Questions about iOS Review

What does iOS Review do?

Review Swift/iOS code against team conventions. An agent skill from player-ui/player. iOS Review is an agent skill from player-ui/player. Review Swift/iOS code against team conventions.

When should I use iOS Review?

iOS Review fits situations like: the user asks to review Swift code; runs /ios-review; editing Swift files in this repo.

How do I install iOS Review in Claude Code?

Run `npx skills add player-ui/player --skill ios-review -a claude-code`. Or copy the skill folder (.claude/skills/ios-review in player-ui/player) into .claude/skills/ios-review in your project. Claude Code loads it when a task matches its description.

How do I install iOS Review in Codex?

Run `npx skills add player-ui/player --skill ios-review -a codex`. Or copy the skill folder (.claude/skills/ios-review in player-ui/player) into .agents/skills/ios-review in your project. Codex loads it when a task matches its description.

Can I use iOS Review in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add player-ui/player --skill ios-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ios-review, .gemini/skills/ios-review, .github/skills/ios-review and .opencode/skills/ios-review in your project.

What does iOS Review need to run?

SKILL.md names no scripts, command-line tools or credentials: iOS Review is instructions for the agent only.

Does iOS Review access the network?

SKILL.md names 3 domains. As links in the text: swift.org, google.github.io and developer.apple.com. This is read from the text; nothing was executed.

Is iOS Review safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does iOS Review use?

iOS Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does iOS Review use?

About 1.6k tokens (SKILL.md is roughly 6.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to iOS Review?

Skills that share tags, products or a category with iOS Review: Anishelf Release (samuelhe52/AniShelf, 142 stars), Swift Expert (Jeffallan/claude-skills, 12k stars), View Refactor (robinebers/openusage, 4.3k stars) and Coding Assistant (wpsnote/wpsnote-skills, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains iOS Review?

player-ui (a GitHub organization) maintains it in player-ui/player, which has 101 GitHub stars. The repository was last updated on October 6, 2026.

Source: player-ui/player on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.