v2.0.0
Added
Turns the repository from something you read into something you install. The skill teaches an agent how to write iOS code; the MCP server lets it check code that already exists.
mcp-server/--ios-agent-mcp, a TypeScript MCP server (stdio transport) exposing six iOS-specific tools:analyze_swift_project-- structure (file/line counts, deployment target, Swift tools version, frameworks, test presence) plus a finding count per category with the tool that explains each.review_swift_concurrency--@Observablewithout@MainActor,Task.detached,DispatchQueue.main.async,await MainActor.runinside an isolated type,@unchecked Sendable,nonisolated(unsafe), unstructuredTaskinonAppear, emptycatch, non-final observable classes, and types namedTaskthat shadow_Concurrency.Task.review_swift_architecture-- initializers defaulting to live implementations, presentation code namingURLSession/APIClient/ModelContext, singletons resolved inside view models, the domain layer importing SwiftUI, nestedNavigationStacks, andNavigationView.review_swiftui-- fixed font sizes and heights,AnyView, deprecated.cornerRadius, literal spacing instead of tokens, materials over solid backgrounds, transient view state on models,ObservableObject,@EnvironmentObject, andtry!.check_availability_guards-- missing guards and over-restrictive ones: an iOS 26 API guarded at#available(iOS 27, *)compiles, ships, and silently drops every iOS 26 device to the fallback. Also flags Foundation Models used without a runtimeSystemLanguageModel.availabilitycheck.audit_app_store_readiness-- permission-gated frameworks with no Info.plist purpose string, a missingPrivacyInfo.xcprivacy(apps only -- libraries are never submitted), unlocalized user-facing strings, unlabeled icon-only buttons, andprint()used for diagnostics.
- Every finding carries a file, a line, the severity, the consequence, the specific fix, and a link into this repo's docs. Analyzers are pure
(path, content) -> Finding[]functions, so they are unit-testable without the MCP transport. - 38 tests -- unit coverage for every analyzer plus
test/server.smoke.test.js, which launches the real server and speaks the real MCP protocol over stdio. Unit tests cannot tell you whether the server actually starts; that one can. docs/mcp/--installation.md(Claude Code, Claude Desktop, Cursor, from source, troubleshooting, privacy),tools.md(every rule with its severity, and the limits of static analysis),examples.md(worked sessions, including how the tools pair with the subagents).mcp-server/mcp.json-- manifest declaring runtime, transport, filesystem-read-only permissions, and the tool list.- CI gained an
mcp-serverjob: install, typecheck, build, test, validate the manifest, and verify the manifest's tool list matches the tools actually registered insrc/index.ts-- a tool advertised but not registered would be a broken promise to any client.
Fixed
- Dogfooding the server against this repo's own
samples/SkillPatternssurfaced two false positives in the analyzers, both fixed with regression tests:empty-catchmatchedcatch { }inside a doc comment because that one check used a raw regex instead of the comment-stripping line walker every other rule uses; andmissing-privacy-manifestfired on an SPM library, which has no Info.plist and is never submitted to App Review. Package.swiftis no longer analyzed as application source -- it is build configuration, and including it inflated file counts and produced findings against code that is not part of the app.- A
linefield in the availability analyzer held the matched source string rather than the line number; it type-checked only because of an unsafeas unknown ascast. Fixed, cast removed, regression test added.
Full changelog: https://github.com/Nagarjuna2997/ios-agent-skill/blob/v2.0.0/CHANGELOG.md