Claude drafts these posts, I edit them.
Xcode 27 shipped with agent skills baked into the IDE, and I’ve been re-exporting them on every build since the first beta and writing up the deltas. Seven snapshots later, from 27A5194q in June to the 27A266a release, this is the whole cycle in one place, organised by skill rather than by beta.
Ten skills shipped in beta 1. Two were renamed along the way, three more arrived in beta 5, and the snapshot at release holds thirteen. About 1.8 MB of markdown, up from 740 KB in June, most of that growth being the translation skill’s locale style guides. One skill, ios-dynamic-text, went the entire cycle without a single edit.
Each skill below gets a short account of how it changed, then a View skill section. Inside, there’s a tab for every Xcode build the skill’s bundle changed in, and each tab shows every file in the bundle as it stood in that build, diffed against the build before. Files that didn’t change are collapsed. Changes only hides everything more than three lines from an edit, the way GitHub does. A skill is the whole bundle Xcode exports, so SKILL.md and its references/ and scripts/ are all in there. The first tab is the build the skill appeared in, so it’s all green.
swiftui-specialist
The evergreen SwiftUI best-practices skill, ten files and about 3,300 lines from day one, most of it in the environment.md and dataflow.md references. Beta 2 blew the description out into a full topic catalogue, “Authoritative SwiftUI best practices from Apple”, and pointed the environment reference at the @Entry compiler warnings so the skill triggers on the error text. Beta 5 cut that description back down to a short bulleted list, and added the two reference sections that read like patches for model mistakes: reach for AnyShapeStyle rather than an if/else when two shape styles won’t unify, but don’t assume a style ternary fails to compile from the names alone, plus a note that a no-argument projection doesn’t need to be dressed up as a subscript. Beta 4 was a frontmatter key reorder only. Untouched in betas 3 and 6 and at release.
View skill
SKILL.mdadded +20 −0
references/animations.mdadded +83 −0
references/dataflow.mdadded +756 −0
references/environment.mdadded +938 −0
references/foreach.mdadded +463 −0
references/localization.mdadded +265 −0
references/modifiers.mdadded +35 −0
references/soft-deprecated-apis.mdadded +352 −0
references/soft-deprecation.mdadded +46 −0
references/structure.mdadded +310 −0
SKILL.mdmodified +2 −2
references/animations.mdunchanged
references/dataflow.mdunchanged
references/environment.mdunchanged
references/foreach.mdunchanged
references/localization.mdunchanged
references/modifiers.mdunchanged
references/soft-deprecated-apis.mdunchanged
references/soft-deprecation.mdunchanged
references/structure.mdunchanged
SKILL.mdmodified +1 −1
references/animations.mdunchanged
references/dataflow.mdunchanged
references/environment.mdunchanged
references/foreach.mdunchanged
references/localization.mdunchanged
references/modifiers.mdunchanged
references/soft-deprecated-apis.mdunchanged
references/soft-deprecation.mdunchanged
references/structure.mdunchanged
SKILL.mdmodified +2 −2
references/animations.mdunchanged
references/dataflow.mdmodified +45 −0
references/environment.mdunchanged
references/foreach.mdunchanged
references/localization.mdunchanged
references/modifiers.mdmodified +48 −0
references/soft-deprecated-apis.mdmodified +1 −0
references/soft-deprecation.mdunchanged
references/structure.mdunchanged
swiftui-whats-new-27
The knowledge-cutoff patch, with its 370-word description of compiler error strings and the @State macro trap. It barely moved. Beta 4 reordered frontmatter keys. Beta 5 was the only real change, and it was a subtraction: the 530-line document-based-apps.md reference was deleted, with about a fifth of it resurfacing in the new document apps skill, and deprecations.md went too, its statusBarHidden entry turning up in the generated soft-deprecated list inside swiftui-specialist. The description was cut down to bullets in the same pass. Nothing since.
View skill
SKILL.mdadded +23 −0
references/async-image.mdadded +68 −0
references/content-builder.mdadded +404 −0
references/deprecations.mdadded +45 −0
references/document-based-apps.mdadded +530 −0
references/item-binding.mdadded +99 −0
references/reorderable.mdadded +189 −0
references/state-macro.mdadded +87 −0
references/swipe-actions.mdadded +65 −0
references/toolbar.mdadded +145 −0
SKILL.mdmodified +1 −1
references/async-image.mdunchanged
references/content-builder.mdunchanged
references/deprecations.mdunchanged
references/document-based-apps.mdunchanged
references/item-binding.mdunchanged
references/reorderable.mdunchanged
references/state-macro.mdunchanged
references/swipe-actions.mdunchanged
references/toolbar.mdunchanged
SKILL.mdmodified +2 −4
references/async-image.mdunchanged
references/content-builder.mdunchanged
references/deprecations.mddeleted +0 −45
references/document-based-apps.mddeleted +0 −530
references/item-binding.mdunchanged
references/reorderable.mdunchanged
references/state-macro.mdunchanged
references/swipe-actions.mdunchanged
references/toolbar.mdunchanged
uikit-app-modernization
The skill with grading criteria in its prose (“a TODO alone is a failure”). Two edits all cycle, both trivial. Beta 2 fixed a dead link, swapping the retired TN3187 technote for the current “Transitioning to the UIKit scene-based life cycle” documentation page. Beta 4 reordered frontmatter keys. Betas 3, 5 and 6 and the release left it alone.
View skill
SKILL.mdadded +126 −0
references/orientation-task.mdadded +99 −0
references/safe-area-task.mdadded +87 −0
references/scene-lifecycle-task.mdadded +215 −0
references/uiscreen-task.mdadded +631 −0
SKILL.mdunchanged
references/orientation-task.mdunchanged
references/safe-area-task.mdunchanged
references/scene-lifecycle-task.mdmodified +2 −2
references/uiscreen-task.mdunchanged
SKILL.mdmodified +1 −1
references/orientation-task.mdunchanged
references/safe-area-task.mdunchanged
references/scene-lifecycle-task.mdunchanged
references/uiscreen-task.mdunchanged
audit-xcode-security-settings
The skill Apple cared about most. Sixteen files in beta 1, eighteen at release, and edits in four of the six builds after that.
Beta 3 rebuilt the workflow around an approval gate. The audit now opens with a briefing (“This all usually takes about 15-30 minutes”), writes an editable plan file with checkboxes to the project root, and promises that “Nothing is modified until you pick Run”. Every target got its own tracked task, XcodeUpdate became the required editor for project files, and a new universal-binaries-for-libraries.md told library authors to ship arm64 and arm64e slices. Beta 4 then corrected itself: the manual ARCHS override went, because pointer authentication emits the arm64e slice on its own. Beta 4 also dropped the agent’s scratchpad file, added a source-control check to the briefing, introduced XcodeListTargets with an instruction to stop parsing project.pbxproj by hand, and added the warning that tool names “may carry an MCP server prefix” and must be looked up rather than hardcoded. The settings catalog was renamed to security-settings-reference.md.
Beta 5 split the single “Basic Clang safety warnings” item into a Warnings group with compiler, static analyzer and clang-tidy sub-items, and took the checkbox off group headings to avoid “the ambiguity of a checked parent whose sub-items are all unchecked”. The release added the checked pointer arithmetic reference, a new apply step for it, watchOS to the hardware memory tagging story, and a “Test your app” section in the report, and removed the ONLY_ACTIVE_ARCH write from the universal binary recipe. Unchanged in betas 2 and 6.
View skill
SKILL.mdadded +217 −0
references/additional-settings.mdadded +28 −0
references/adoption-strategy.mdadded +77 −0
references/cpp-hardening.mdadded +77 −0
references/decision-document.mdadded +74 −0
references/enhanced-security.mdadded +77 −0
references/hardware-memory-tagging.mdadded +59 −0
references/pointer-authentication.mdadded +84 −0
references/reading-build-settings.mdadded +46 −0
references/readonly-platform-memory.mdadded +51 −0
references/runtime-restrictions.mdadded +57 −0
references/security-compiler-warnings.mdadded +78 −0
references/settings-and-entitlements-catalog.mdadded +117 −0
references/stack-zero-init.mdadded +47 −0
references/typed-allocators.mdadded +53 −0
scripts/filter_build_settings.pyadded +68 −0
SKILL.mdmodified +235 −92
references/additional-settings.mdunchanged
references/adoption-strategy.mdmodified +1 −1
references/cpp-hardening.mdunchanged
references/decision-document.mdmodified +7 −8
references/enhanced-security.mdmodified +6 −0
references/hardware-memory-tagging.mdunchanged
references/pointer-authentication.mdmodified +4 −0
references/reading-build-settings.mdmodified +56 −5
references/readonly-platform-memory.mdunchanged
references/runtime-restrictions.mdunchanged
references/security-compiler-warnings.mdunchanged
references/settings-and-entitlements-catalog.mdmodified +1 −0
references/stack-zero-init.mdunchanged
references/typed-allocators.mdunchanged
references/universal-binaries-for-libraries.mdadded +52 −0
scripts/filter_build_settings.pyunchanged
SKILL.mdmodified +173 −95
references/additional-settings.mdmodified +3 −0
references/adoption-strategy.mdmodified +2 −2
references/cpp-hardening.mdunchanged
references/decision-document.mdmodified +4 −5
references/enhanced-security.mdmodified +21 −22
references/hardware-memory-tagging.mdmodified +3 −1
references/pointer-authentication.mdmodified +10 −8
references/reading-build-settings.mdmodified +18 −26
references/readonly-platform-memory.mdmodified +2 −0
references/runtime-restrictions.mdmodified +2 −0
references/security-compiler-warnings.mdunchanged
references/security-settings-reference.md renamed from references/settings-and-entitlements-catalog.mdrenamed +21 −24
references/stack-zero-init.mdunchanged
references/typed-allocators.mdmodified +4 −2
references/universal-binaries-for-libraries.mdmodified +14 −12
scripts/filter_build_settings.pymodified +9 −8
SKILL.mdmodified +40 −19
references/additional-settings.mdmodified +0 −3
references/adoption-strategy.mdunchanged
references/cpp-hardening.mdunchanged
references/decision-document.mdunchanged
references/enhanced-security.mdunchanged
references/hardware-memory-tagging.mdunchanged
references/pointer-authentication.mdunchanged
references/reading-build-settings.mdunchanged
references/readonly-platform-memory.mdunchanged
references/runtime-restrictions.mdunchanged
references/security-compiler-warnings.mdunchanged
references/security-settings-reference.mdmodified +20 −2
references/stack-zero-init.mdunchanged
references/typed-allocators.mdunchanged
references/universal-binaries-for-libraries.mdunchanged
scripts/filter_build_settings.pyunchanged
SKILL.mdmodified +69 −23
references/additional-settings.mdunchanged
references/adoption-strategy.mdmodified +12 −7
references/checked-pointer-arithmetic.mdadded +115 −0
references/cpp-hardening.mdunchanged
references/decision-document.mdunchanged
references/enhanced-security.mdmodified +8 −6
references/hardware-memory-tagging.mdmodified +3 −1
references/pointer-authentication.mdmodified +7 −2
references/reading-build-settings.mdunchanged
references/readonly-platform-memory.mdunchanged
references/runtime-restrictions.mdunchanged
references/security-compiler-warnings.mdunchanged
references/security-settings-reference.mdmodified +3 −2
references/stack-zero-init.mdunchanged
references/typed-allocators.mdunchanged
references/universal-binaries-for-libraries.mdmodified +22 −22
scripts/filter_build_settings.pyunchanged
adopt-c-bounds-safety
Shipped in beta 1 as c-bounds-safety, six files and about 2,200 lines, with the nonstandard effort: high frontmatter and the “verifiably fresh in your active context” re-read rule. Beta 3 renamed it to adopt-c-bounds-safety and gave adoption-strategies.md a Prerequisites section: detect the version control system and require a clean tree, with scripted refusal text for no VCS and for a dirty tree, and “do not assume git unless git is what you detected”. The same edit made the Xcode project the build-system source of truth over Makefiles, declined SwiftPM for lacking per-file C flags, and warned that xcodegen and Tuist will clobber per-file flags. Betas 2, 4 and 5 were frontmatter key reorders only. The export tool never deletes, so the old c-bounds-safety folder still sits in the snapshot repo as a stale leftover, and the diffs here follow the renamed folder.
View skill
SKILL.mdadded +31 −0
references/adoption-strategies.mdadded +524 −0
references/build-settings.mdadded +43 −0
references/common-patterns-and-pitfalls.mdadded +624 −0
references/language-overview.mdadded +736 −0
references/runtime-debugging.mdadded +261 −0
SKILL.mdmodified +3 −3
references/adoption-strategies.mdunchanged
references/build-settings.mdunchanged
references/common-patterns-and-pitfalls.mdunchanged
references/language-overview.mdunchanged
references/runtime-debugging.mdunchanged
SKILL.mdmodified +2 −2
references/adoption-strategies.mdmodified +59 −6
references/build-settings.mdunchanged
references/common-patterns-and-pitfalls.mdunchanged
references/language-overview.mdunchanged
references/runtime-debugging.mdunchanged
SKILL.mdmodified +1 −1
references/adoption-strategies.mdunchanged
references/build-settings.mdunchanged
references/common-patterns-and-pitfalls.mdunchanged
references/language-overview.mdunchanged
references/runtime-debugging.mdunchanged
SKILL.mdmodified +4 −4
references/adoption-strategies.mdunchanged
references/build-settings.mdunchanged
references/common-patterns-and-pitfalls.mdunchanged
references/language-overview.mdunchanged
references/runtime-debugging.mdunchanged
translation
The biggest bundle by far, and the one that grew the most. Seventeen files in beta 1, fourteen of them locale style guides, fifty-nine at release.
Beta 2 rewrote step 3 of the per-string workflow as a three-tier precedence, explicit instructions over existing translations over the style guide, and added sourcePluralCasesToAdd so a source string that needs plural variation gets varied first. Beta 3 renamed every file with a .packaged suffix and added the rule to never XML-escape an ampersand. Beta 4 added the part-of-speech doctrine: a button labelled “Bookmark” is an action and “you MUST translate it as a verb, not a noun”. Beta 5 added six English style guides, a general one plus AU, CA, GB, IN and PH variants. Beta 6 added 36 more locales, taking the count to 56 and the folder by 5,500 lines, and softened beta 4’s verb rule to “follow the target language’s style guide” after Korean’s guide said the opposite. The release then stripped 172 lines of documentation-only guidance out of 24 guides, the rules for headings, alt text and user guides that don’t apply to string catalogs, and switched Catalan from guillemets to curly quotes.