ios-api-availability
Procedure for determining whether code actually works at a project's stated minimum iOS version — deployment target vs.
Skill by apexbymanish
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/apexbymanish-ios-api-availability
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: backend
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ios-api-availability
What's inside
- Skill name
ios-api-availability- Description
- Procedure for determining whether code actually works at a project's stated minimum iOS version — deployment target vs. API introduction version vs. guard correctness. Use when asked "does this work on iOS 14", "is this compatible", about deprecated APIs, or @available/if
- License
- MIT
- Instructions
- 132 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# iOS API Availability ## Purpose Answer "does this work on iOS X" with an actual comparison of four specific facts, not an impression. Never claim compatibility without having checked all four. ## When to Use Any question about minimum deployment target compatibility, a specific API's availability, deprecated-API usage, or `@available`/ `if #available`/`#if` guard correctness. ## Inputs - The project's actual stated minimum deployment target — read it from the project settings/`Package.swift`/`CLAUDE.md`, never assume it. - The specific API(s) in question. - If `ios-agent` MCP is configured, `mcp__ios-agent__check_availability_guards` alongside the manual check — `STATIC_ANALYSIS` tier, same as reading the code, never higher. It specifically catches the over-restrictive-guard case below, which is easy to miss by eye. ## Core Knowledge - **`#if os(iOS)` and `@available`/`if #available` are different mechanisms.** The former is a *compile-time* platform-family check (does this even compile for this OS family); the latter is a *run-time* OS-*version* check. Confusing them is a real, common mistake — a `#if` guard does nothing to protect a version-specific API from crashing at runtime on an older OS in the same family. - **A missing guard is the obvious failure mode; an over-restrictive guard is the sneaky one.** `@available(iOS 16, *)` on an API that actually only needs iOS 15 doesn't crash anything — it silently drops support for every iOS 15 device for no reason, and nobody notices because nothing breaks, it just quietly works for fewer users than it could. - **Framework availability and symbol availability aren't the same check.** A framework can exist in the SDK you compile against while a specific symbol inside it was only introduced later — check the specific API's own `@available` annotation in its documentation/ header, not just "is the framework importable." - **Deprecation isn't removal.** A deprecated API usually still works; the question is whether it still behaves the same way, and whether there's a replacement worth adopting given the project's actual minimum target (see Common Mistakes). ## Detection Patterns | Pattern | Risk | Detect by | |---|---|---| | API call with no availability guard, API's introduction version above the project's minimum deployment target | Crashes or is unavailable on real devices still on the minimum target | For each API in question, compare its documented introduction version against the project's actual minimum target | | `@available`/`if #available` guard set higher than the API actually requires | Silently drops support for real devices between the true minimum and the guard's version — no crash, no signal, just fewer supported users | Compare the guard's stated version against the API's actual documented introduction version, not just "a guard exists" | | `#if os(iOS)` used where a version check was actually needed | Compiles fine, still crashes at runtime on an older iOS version in the same family | Check whether the guarded API is version-specific, not just platform-specific | | `@available` guard present but the guarded call happens outside the guarded scope (e.g. inside an escaping closure captured before the check) | The guard doesn't actually protect the call it looks like it protects | Trace execution: does the flagged API call actually execute *inside* the `if #available` branch, or just textually near it | | Deprecated API used with no note of a replacement or reason to keep it | Missed opportunity, or a behavior change already shipped in the OS that the deprecation warning is flagging | Check the deprecation message for *why* — some deprecations mean "still works, better option exists," others mean "behavior changed" | ## Procedure For every API call in question, establish these four facts and report all four together — not a conclusion without showing the comparison: ```text Current deployment target: [read from project settings, cited] API introduced version: [from Apple's documentation, cited] Required guard: [what guard, if any, is actually needed] Actual project compatibility: [does the code as written handle this correctly] ``` 1. Read the project's actual minimum deployment target — don't assume a common default. 2. Look up the API's actual introduction version. 3. Compare: if introduction version > deployment target, a guard is required; if introduction version ≤ deployment target, no guard is needed and one present anyway isn't wrong, just unnecessary. 4. If a guard exists, check its stated version against the API's real introduction version — flag both "missing" and "over-restrictive" mismatches. 5. Report the four facts above for every API checked, not just the ones that turned out to be a problem — a clean check is still evidence. ## Common Mistakes - Assuming the newest guard/API pattern is automatically the right answer without checking this project's actual minimum target first (see `ios-api-availability`'s companion project-constraints discipline in `CLAUDE.md.template`). - Treating "compiles without a warning" as proof of runtime compatibility — the compiler only catches API availability, not necessarily every version-specific *behavior* difference. - Reporting only the APIs that had a problem, making it impossible to tell later which ones were actually checked vs. never examined. ## Verification - The four-fact comparison above, from documentation and source reading, is `STATIC_ANALYSIS`. - Confirming the app actually builds against the stated minimum target (a real Xcode build with that deployment target set, not just a read) is `BUILD_VERIFIED`. - Confirming behavior on an actual device/simulator running the minimum OS version is `RUNTIME_VERIFIED`. ## Evidence Requirements "Works on iOS 14" requires the full four-fact comparison at minimum (`STATIC_ANALYSIS`); a stronger claim requires actually building and, ideally, running against that minimum version (`BUILD_VERIFIED`/ `RUNTIME_VERIFIED`). Never report compatibility from having checked only the API's existence without checking the guard's correctness. ## Claim Restrictions - Never say "compatible with iOS 14" without having actually compared the API's introduction version against 14, not just noticing *a* guard is present.
From apexbymanish/claude-ai-agents-ios, MIT.
More from apexbymanish/claude-ai-agents-ios
- 0.524score
swiftui-engineering
apexbymanish
Procedure for reviewing SwiftUI code for state-ownership, view-identity, lifecycle, and rendering correctness — distinct from ios-ux-reviewer's visual/HIG…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-accessibility
apexbymanish
Procedure for reviewing and verifying iOS accessibility — VoiceOver, Dynamic Type, contrast, hit targets, Switch Control, Reduce Motion — with an explicit…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-app-store-readiness
apexbymanish
App Store submission readiness checklist covering privacy manifests, export compliance, permission usage descriptions, App Tracking Transparency, Sign in with…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-testing-strategy
apexbymanish
Step-by-step procedure for adding tests to existing Swift/iOS code, whether untested legacy code or new TDD work.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-feature-implementation
apexbymanish
Structured procedure for implementing a new feature or change in an existing iOS codebase — inspect and explain before touching files, then implement, then…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-legacy-mapping
apexbymanish
Step-by-step procedure for mapping an undocumented, unfamiliar, or large legacy iOS codebase (Objective-C, UIKit, SwiftUI, or a mix) before making changes.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-performance-measurement
apexbymanish
Procedure for confirming a performance fix actually worked, with a real number, instead of asserting improvement from reading code.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-security-review
apexbymanish
Comprehensive security audit procedure for iOS/Swift code covering data storage, transport security, authentication, input validation, deep links, third-party…
SkillBFreshness: BClaude Code +9 - 0.524score
swift-concurrency
apexbymanish
Procedure for reviewing real Swift code for concurrency correctness — async/await, actors, Sendable, cancellation, task lifetime — not a Swift Concurrency…
SkillBFreshness: BClaude Code +9 - 0.521score
ios-evidence-reporting
apexbymanish
Standard for reporting task outcomes with verifiable evidence instead of confident prose.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 28, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from apexbymanish
- 0.524score
swiftui-engineering
apexbymanish
Procedure for reviewing SwiftUI code for state-ownership, view-identity, lifecycle, and rendering correctness — distinct from ios-ux-reviewer's visual/HIG…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-accessibility
apexbymanish
Procedure for reviewing and verifying iOS accessibility — VoiceOver, Dynamic Type, contrast, hit targets, Switch Control, Reduce Motion — with an explicit…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-app-store-readiness
apexbymanish
App Store submission readiness checklist covering privacy manifests, export compliance, permission usage descriptions, App Tracking Transparency, Sign in with…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-testing-strategy
apexbymanish
Step-by-step procedure for adding tests to existing Swift/iOS code, whether untested legacy code or new TDD work.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-feature-implementation
apexbymanish
Structured procedure for implementing a new feature or change in an existing iOS codebase — inspect and explain before touching files, then implement, then…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-legacy-mapping
apexbymanish
Step-by-step procedure for mapping an undocumented, unfamiliar, or large legacy iOS codebase (Objective-C, UIKit, SwiftUI, or a mix) before making changes.
SkillBFreshness: BClaude Code +9
Cite this page
ios-api-availability skill. Agent Mart. https://agentmart.dev/skills/apexbymanish-ios-api-availability (last updated 2026-10-24)