ios-dev-playbook

ios-dev-playbook is a skill for Claude Code, Codex from tienenwu/fables. It costs 94 tokens per session (1,276 once invoked), scanned A, original, MIT.

A practical guide for developing iOS apps with Swift, SwiftUI, Swift Concurrency, and Xcode. It covers decisions about state, concurrency, testing, and App Store delivery.

In plain words
What is it for?
Use it when building, refactoring, or debugging iOS features, handling shared state and concurrency, preparing TestFlight or App Store builds, or investigating review rejection.
Why use it?
It highlights problems that may appear only on real devices or release builds, such as signing, memory pressure, cancellation, and incorrect UI-thread use.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/tienenwu/fables/ios
Any agent
npx skills add tienenwu/fables --skill ios
Clone the repo
git clone --depth 1 https://github.com/tienenwu/fables

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for ios-dev-playbook

README.md
[![agentmods](https://agentmods.dev/badge/skills/tienenwu/fables/ios.svg)](https://agentmods.dev/skills/tienenwu/fables/ios)
Your own site
<a href="https://agentmods.dev/skills/tienenwu/fables/ios"><img src="https://agentmods.dev/badge/skills/tienenwu/fables/ios.svg" alt="Measured on agentmods" height="20"></a>
Per session 94 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,276 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00094 $0.01276
Opus 5 $0.00047 $0.00638
Sonnet 5 $0.00019 $0.00255
Haiku 4.5 $0.00009 $0.00128

Measured 4d ago against content hash 308c52ca7a09, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ios-dev-playbook scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

en/ios/SKILL.md · 59 lines

How it starts

The opening of the file, as written. The whole thing — 59 lines — stays where its author put it; the contents beside it link to each section on GitHub.

🌐 繁體中文(canonical) · English mirror

iOS Development Judgment Handbook

Core Principles

  1. A green simulator proves nothing: signing, provisioning, release optimization, assert being stripped, background modes, memory pressure — these are only real on device/release. Changes on the shipping path must be verified on a real device + at release level.
  2. State has exactly one owner; data flows down, events flow up: a View is a function of state, and body must be cheap and side-effect-free.
  3. UI state always on MainActor: not by remembering to call DispatchQueue.main, but by using @MainActor so the type system guarantees it for you.
  4. A continuation must resume exactly once: when bridging an old API, zero times = permanent hang, twice = crash — this is a red line, not a style preference.
  5. Cancellation is cooperative: a Task does not stop itself; long work must actively call Task.checkCancellation(). Only the .task modifier binds to the lifecycle automatically.

Kickoff Routing

Situation Path Read first
New screen/feature Define state owner and data flow first, then write the View references/architecture-state.md
Whether to build a ViewModel, where state lives Decide MV vs MVVM first; don't reflexively reach for MVVM references/architecture-state.md §2
Navigation, deep links, back stack Drive NavigationStack path from state references/architecture-state.md §5
async/await, Task, actor, data races Check scope and the level of MainActor annotation references/concurrency.md
Bridging an old completion handler / delegate continuation resumes exactly once references/concurrency.md §6
Swift 6 strict concurrency reports a Sendable error Don't slap on @unchecked; look at data ownership first references/concurrency.md §4
Shipping to TestFlight / App Store / changing signing Run the checklist item by item references/release-checklist.md
Fine in the simulator, blows up only on device/at ship time Suspect signing/optimization/background modes first references/release-checklist.md

Read the full file on GitHub · 59 lines

Files

What ships with it

4 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago First seen · 59 lines · 94 tokens per session scan A 308c52ca7a09

Subscribe to this mod's changes

ios-dev-playbook is a skill published in the GitHub repository tienenwu/fables (4 stars, last pushed 1mo ago), licensed MIT. It adds 94 tokens to every session and 1,276 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

implementing-android-code

This skill should be used when implementing Android code in Bitwarden. Covers critical patterns, gotchas, and anti-patterns unique to this codebase. Triggered by "How do I implement a ViewModel?", "Create a new screen", "Add navigation", "Write a repository", "BaseViewModel pattern", "State-Action-Event", "type-safe…

bitwarden/android · 169 tokens

migrating-to-modifier-node

Use this skill to author new custom Jetpack Compose modifiers and migrate legacy ones from Modifier.composed { } to Modifier.Node + ModifierNodeElement . Covers the persistent-node lifecycle (onAttach, onDetach, onReset, coroutineScope), the specialized node interfaces (DrawModifierNode, LayoutModifierNode…

skydoves/compose-performance-skills · 183 tokens

setting-up-compose-hotswan

Use this skill to install and verify Compose HotSwan end to end so a developer goes from zero to working sub-second hot reload on a real device or emulator in one session. Covers the JetBrains IDE plugin install, the com.github.skydoves.compose.hotswan.compiler Gradle plugin wiring, the canonical hotSwanCompiler {…

skydoves/compose-performance-skills · 161 tokens

configuring-lazy-prefetch

Use this skill to tune Jetpack Compose lazy-layout prefetch with LazyLayoutCacheWindow (Compose Foundation 1.9+, @ExperimentalFoundationApi) and pausable composition in prefetch (Compose Foundation 1.10+, default on). Covers configurable Dp-based ahead/behind cache windows plumbed through…

skydoves/compose-performance-skills · 177 tokens

collecting-flows-safely

Use this skill to migrate Compose UI from collectAsState() to collectAsStateWithLifecycle(), hoist Flow parameters out of composables, and apply .conflate() / .distinctUntilChanged() / snapshotFlow so background CPU and battery stop draining and chatty flows stop invalidating the UI per emission. Covers ViewModel…

skydoves/compose-performance-skills · 166 tokens

using-efficient-effects

Use this skill to choose the cheapest correct effect API in Jetpack Compose — LaunchedEffect, DisposableEffect, SideEffect, rememberUpdatedState, and skydoves/compose-effects' RememberedEffect and ViewModelStoreScope. Covers stale-callback bugs in long-lived LaunchedEffect, setup/teardown for non-coroutine…

skydoves/compose-performance-skills · 145 tokens