Agent skill

Woo iOS Swift 6 Migration

by woocommerce in woocommerce/woocommerce-ios

Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS.

GPL-2.0Auto-check: notesMobile

Install Woo iOS Swift 6 Migration

skills CLI
$ npx skills add woocommerce/woocommerce-ios --skill woo-ios-swift-6-migration -a claude-code

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

GitHub CLI
$ gh skill install woocommerce/woocommerce-ios woo-ios-swift-6-migration --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/woocommerce/woocommerce-ios.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/woo-ios-swift-6-migration .claude/skills/woo-ios-swift-6-migration && 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
woo-ios-swift-6-migration
GitHub stars
358
Token cost
~3.2k tokens
SKILL.md length
1,692 words
Files
5 (incl. references)
Skills in repo
13
Repo updated
First seen
Licence
GPL-2.0

At a glance

Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS.

  • Works in 6 steps: Repeat the strict build with the… → Run the relevant tests with default… → If changes cross module boundaries, run… → …
  • Swift 6 migration
  • SKILL.md covers Check the build settings and…, Select and apply isolation, Check compatibility annotations and Verify the complete change, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Woo iOS Swift 6 Migration is an agent skill from woocommerce/woocommerce-ios. Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS. Use for Swift 6 migration, actor-isolation changes, and Sendable diagnostics in this repository.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/patterns.md`, `references/runtime-boundaries.md` and `references/session-services.md`).

It sits in Mobile, covering iOS development. It works with Swift, iOS, WooCommerce and Xcode. The licence is GPL-2.0.

When your agent uses it

  • Swift 6 migration
  • Actor-isolation changes
  • Sendable diagnostics in this repository

Example prompts

  • “/woo-ios-swift-6-migration”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Write, Edit, Grep, Glob

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Repeat the strict build with the baseline settings. Compare warnings in the changed files and direct callers.
  2. Run the relevant tests with default build settings too. Changed strict-build settings can change which isolation warnings appear.
  3. If changes cross module boundaries, run the affected module tests. Run the repository lint workflow.
  4. For changes to scheduling, navigation, lifecycle, or visible timing, verify the affected user flow. For layout or presentation changes…
  5. For a new race or cancellation test, temporarily remove the code that prevents the failure. Confirm that the test fails. Restore the code…
  6. Review all changes against the requested base. Include earlier branch commits and current edits. Search all these changes for…

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Edit
    • Grep
    • Glob

    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 bash).

    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):

    • github.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

Woo iOS Swift 6 Migration loads about 3.2k tokens when it runs, and up to ~8.7k if it reads all its reference files. Until then it costs about 48 tokens; SKILL.md has 1,692 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~48
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~8.7k

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Write, Edit, Grep, Glob

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 woocommerce/woocommerce-ios at commit 37235f8, republished under its GPL-2.0 licence (© woocommerce). 1,692 words, ~3,205 tokens.

Download SKILL.mdSave it as .claude/skills/woo-ios-swift-6-migration/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
woo-ios-swift-6-migration
description
Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS. Use for Swift 6 migration, actor-isolation changes, and Sendable diagnostics in this repository.
allowed-tools
Bash, Read, Write, Edit, Grep, Glob
user-invocable
true

WooCommerce iOS Swift 6 migration

Make small changes in the requested scope. Verify each change. For diagnosis or review requests, read the code without changing it. Change the Swift language mode or target scope only when requested.

Check the build settings and measure warnings

Read the repository instructions and the documentation for the affected module. Check these settings before you analyze warnings:

  • Xcode and Swift versions.
  • Swift language mode.
  • Strict-concurrency level.
  • Default actor isolation.
  • Enabled upcoming features.

Identify the affected targets and dependencies.

The strict-concurrency level has three sources. In order of precedence, they are the xcodebuild command line, the target build settings, and the project build settings. Swift package targets ignore the Xcode build settings. They use only the command-line value or swiftSettings in Modules/Package.swift. Pass SWIFT_STRICT_CONCURRENCY=complete on the command line, or package targets are not measured. The command-line value also overrides target-level fences. The WordPressAuthenticator target keeps a trailing -strict-concurrency=minimal in OTHER_SWIFT_FLAGS for this reason. Do not change WordPressAuthenticator. It is fenced on purpose, and Swift 6.3.3 crashes while formatting one of its diagnostics under complete checking.

Do not set SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor on a whole target. On the pinned toolchain, it caused compiler crashes, an optimizer crash in Release-Alpha archives (swiftlang/swift#88173), and XCTest crashes in swift_task_deinitOnExecutorMainActorBackDeploy. Its warning counts are not comparable with normal measurements. Use explicit @MainActor, nonisolated, and Sendable declarations instead.

Use the repository build, test, and simulator workflows. To measure workspace warnings, use the existing script with a new DerivedData directory:

bash
Scripts/StrictConcurrency/count-warnings.sh /tmp/<task>-before.json

Read the script before you change its build settings. For a smaller scope, select the affected scheme and an available simulator. Use build-for-testing with SWIFT_STRICT_CONCURRENCY=complete. Use a separate DerivedData directory for each build configuration. Check disk space before large builds.

Save the build log. Record warnings by target, file path relative to the repository, and diagnostic text. Use the same build scope and settings before and after the change. Remove repeated compiler output with the same method in both logs. Compare warnings without line and column numbers. Keep the file path and number of occurrences.

Use a clean build for each measurement. If you use an incremental build, confirm that every measured file compiled. An incremental log can omit unchanged files. Use a partial build result only if every file in the measured scope compiled. Do not use a partial build to measure the workspace or update its baseline.

The CI toolchain in .xcode-version is authoritative. A different local Xcode produces a different warning set. For example, local Xcode 26.2 measured 10,992 warnings where CI's Xcode 26.6 measured 11,158. Some Xcode versions cannot compile trunk at all. Label local counts as local.

Record the base commit, head commit, and toolchain used for measurement. For stacked PRs, identify changes from the parent PR separately. The baseline guard is advisory. It can report warnings already on trunk. Its parser counts all Swift warnings in the repository. Check the base result and original diagnostics before you attribute new warnings to the change. Label estimates separately from measured counts. Check incomplete or repeated log lines before you change the baseline. See the guard discussion and inherited regressions.

Select and apply isolation

Start at the warning. Check the owner, protocol, conformers, direct callers, and dependencies. Before you edit code, identify which actor owns each value or operation:

OwnershipPreferred approach
UI, navigation, or main-thread-owned state@MainActor on the owner or relevant requirement
Shared mutable stateAn actor or an existing owner that serializes access
Values passed between actorsSendable, with safe stored values and access
Legacy dependency outside the scopeA limited compatibility annotation with safety evidence

Apply isolation to the required declarations and callers. Stop where the existing code has isolation that the compiler checks. Keep construction order, service lifetime, cancellation, retry, cached state, and UI presentation unchanged. Build after each isolation change. Check for new warnings in callers.

Isolation violations are errors, not warnings, at every strictness level. A synchronous call from nonisolated code to a @MainActor member of the same module fails under minimal and Swift 5 too. Only Sendable diagnostics are warnings at that level. Change every nonisolated caller in the same commit, including tests. Emit-module stops at the first error, so each hop of callers costs one build. Change the obvious callers together before you build. See the product image handler.

When a slice must change a shared contract, such as a widely used protocol or a closure type, change it in place. Do not add a parallel API to keep the baseline guard flat. Swift cannot overload on @Sendable alone. Do not deprecate the old API either, because the guard counts deprecation warnings too. Raise the affected baseline entries in the same PR and explain why. Later slices lower them.

Some diagnostics show an architectural boundary, not a missing annotation. An example is "non-Sendable parameter type cannot be sent from caller of protocol requirement into main actor-isolated implementation". It needs a decision about the isolation contract of that boundary. Stop and report the decision to the user. Do not treat it as a mechanical fix.

Read the reference that applies to the change:

  • Recurring patterns: timers, environment and preference defaults, deinitialization, isolated conformances, initializers, default arguments, framework callbacks, test isolation, and test fixtures.
  • Session service boundaries: POS eligibility, session construction, publishers, protocol witnesses, legacy async remotes, and Action completions.
  • Runtime boundaries: language-mode switches, mixed Swift 5/6 callbacks, compiler crashes, supported OS runtimes, shared target sources, and callback-to-async changes.

For general Swift concurrency guidance, use the swift-concurrency skill if available. Otherwise, read the public Swift Concurrency skill. Read only the reference needed for the diagnostic. Resolve its relative links from the upstream skill directory. Check guidance against the active toolchain. Keep this repository's scope and verification rules.

If complete isolation needs a larger migration, use a limited adapter when possible. The compiler must check its isolation, and it must keep the same behavior. Describe the remaining work and when to remove the adapter. Expand ServiceLocator or StoresManager only when the required ownership change justifies it.

Show full SKILL.md (691 more words)Show less

Check compatibility annotations

For @preconcurrency, @unchecked Sendable, and nonisolated(unsafe), provide evidence that access is safe. Prefer an annotation on a declaration or conformance. Use @preconcurrency import only for third-party modules, never for this repository's own modules. Use it only if the dependency has no usable concurrency contract and a more specific annotation is insufficient. Do not add @unchecked Sendable only to silence a diagnostic. Fix the type, or isolate it.

For an unchecked reference or conformance, check every alias and access path. Show how each path protects mutable state. A let reference does not make the referenced object thread-safe. Add a nearby comment. State which concurrency contract is missing and when to remove the annotation. Describe the remaining risk in the PR.

@preconcurrency on a conformance does not move execution to an actor. A synchronous protocol call can compile and then fail a runtime isolation check. Confirm which actor executes each entry point. Test the actual protocol or callback path. Build the callers again. See SE-0423.

Use MainActor.assumeIsolated only where a documented contract guarantees main-actor execution. It checks the current executor. It does not move work to the main actor. For app-owned construction and calls, use isolation declarations that the compiler checks.

Verify the complete change

The target result is zero warnings in the requested scope. There must be no new warning occurrences in files built under comparable conditions. A new file has no baseline entry, so it must have zero warnings. Compare diagnostic text as well as counts. A lower total can hide new warnings in callers. An unchanged file count can hide a different unsafe operation. If dependencies prevent completion, report the remaining warnings and proposed work. Explain each baseline increase separately. Warnings removed elsewhere do not justify an increase.

  1. Repeat the strict build with the baseline settings. Compare warnings in the changed files and direct callers.
  2. Run the relevant tests with default build settings too. Changed strict-build settings can change which isolation warnings appear.
  3. If changes cross module boundaries, run the affected module tests. Run the repository lint workflow.
  4. For changes to scheduling, navigation, lifecycle, or visible timing, verify the affected user flow. For layout or presentation changes, use UI regression evidence.
  5. For a new race or cancellation test, temporarily remove the code that prevents the failure. Confirm that the test fails. Restore the code before you continue.
  6. Review all changes against the requested base. Include earlier branch commits and current edits. Search all these changes for compatibility annotations and assumeIsolated before you report that none were added.

Report failed checks as failed. Report blocked checks as inconclusive. A passing test with a smaller scope does not change these results.

If a baseline update is requested, use Scripts/StrictConcurrency/update-baseline.sh with the guard's CI artifact only. Local measurements use a different toolchain. The script treats missing files as zero warnings. Input from a smaller scope would remove unrelated baseline entries. Use compare-baseline.sh to check the result. Do not use partial measurements with that script to claim workspace improvements.

  • After a rebase conflict in baseline.json, take one side of the file. Then run update-baseline.sh with a new artifact. Do not merge the counts by hand.
  • update-baseline.sh only lowers counts. To reset a baseline that has inherited increases from trunk, copy the trunk artifact over baseline.json. Then run compare-baseline.sh and expect equal totals. Use an artifact from trunk or from the reset PR's own run, never from another PR. See the first reset.
  • A commit that only triggers CI must change more than .md, .txt, or docs/ files. should-skip-job.sh skips the guard for those changes.

Report evidence

Report the root cause first. Give warning counts before and after for each file in scope. Identify new warnings. Include passed, failed, and inconclusive checks. List compatibility annotations and when to remove them.

Explain changes outside the named feature that were necessary after isolation changed. Verify their user flows too. Reviewers can miss these changes, as shown in the onboarding review.

Include generated logs, screenshots, and local notes in the change only when requested. Update baselines, issue state, PRs, or remote branches only when the user authorizes that action.

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

Files

SKILL.md and 4 other files (references) in .claude/skills/woo-ios-swift-6-migration of woocommerce/woocommerce-ios.

  • SKILL.md
  • references/patterns.md
  • references/runtime-boundaries.md
  • references/session-services.md
  • references/ui-regression-proof.md

Open the folder on GitHubat commit 37235f8

Compare with similar skills

Woo iOS Swift 6 Migration 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.

Woo iOS Swift 6 Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Woo iOS Swift 6 Migration this skillwoocommerce/woocommerce-ios358—~3.2kAutomated safety check: NotesGPL-2.0
Inspector MCPipedro/Inspector170—~3.4kAutomated safety check: PassMIT
Mlkit Released-date/google-mlkit-swiftpm148—~1.7kAutomated safety check: PassApache-2.0
Dt Setup iOSDynatrace/dynatrace-for-ai163—~3.3kAutomated safety check: PassApache-2.0
Bootstrap iOSRayFernando1337/rayfernando-skills130—~1.1kAutomated safety check: PassApache-2.0
Swift iOS Standardsbladeofgod/flutter-ai-harness116—~375Automated safety check: PassMIT

Similar skills

  • Inspector MCP

    ipedro/Inspector

    A skill your agent uses when an agent needs to inspect a live iOS app through the Inspector MCP bridge, register or troubleshoot InspectorMCPServer for a consumer Xcode project, or query, resolve…

    170 GitHub stars~3.4k tokensUpdated 5 mo ago
    MobileAuto-check passed
  • Mlkit Release

    d-date/google-mlkit-swiftpm

    A skill your agent uses when triaging incoming issues or PRs for google-mlkit-swiftpm, or when cutting a release.

    148 GitHub stars~1.7k tokensUpdated 3 days ago
    MobileAuto-check passed
  • Dt Setup iOS

    Dynatrace/dynatrace-for-ai

    Set up the Dynatrace iOS SDK (OneAgent) in an iOS project using Swift Package Manager.

    163 GitHub stars~3.3k tokensUpdated 10 days ago
    MobileAuto-check passed
  • Bootstrap iOS

    RayFernando1337/rayfernando-skills

    Bootstrap agents for iOS, iPadOS, macOS, Swift, SwiftUI, SwiftData/Core Data, Swift Testing, Xcode build/test/debug, Simulator, App Intents, or XcodeBuildMCP work.

    130 GitHub stars~1.1k tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Swift iOS Standards

    bladeofgod/flutter-ai-harness

    适用:编写或审查 iOS Swift Native Module、Bridge Adapter、Host 接线、Info.plist/Entitlements、SwiftPM 和原生 UI。不适用:Kotlin/Android、Dart Client 或 Wire Contract…

    116 GitHub stars~375 tokensUpdated 1 mo ago
    MobileAuto-check passed
  • Swift Patterns

    softspark/ai-toolkit

    Swift/iOS: SwiftUI, Combine, async/await, actors, SPM, Core Data, UIKit interop.

    179 GitHub stars~3.1k tokensUpdated 3 days ago
    MobileAuto-check passed

More from woocommerce/woocommerce-ios

All 13 skills in this repo
  • Auto Login

    woocommerce/woocommerce-ios

    Launch the WooCommerce app on a simulator already authenticated into a given store (site credentials, application password, or WPCom), skipping the manual login UI.

    358 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check: notes
  • Setup Context A8c

    woocommerce/woocommerce-ios

    Set up the ContextA8C MCP server for accessing Automattic internal resources (Slack, Linear, P2s, GitHub Enterprise, etc.)

    358 GitHub stars~627 tokensUpdated yesterday
    Auto-check: notes
  • Snapshot

    woocommerce/woocommerce-ios

    Use swift-snapshot-testing to visually verify SwiftUI views during implementation.

    358 GitHub stars~1.8k tokensUpdated yesterday
    Auto-check: notes
  • Verify

    woocommerce/woocommerce-ios

    Build the app, launch on simulator, and verify feature behavior via mobile-mcp interaction.

    358 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check: notes
  • Debug

    woocommerce/woocommerce-ios

    Debug a failing test or build error in WooCommerce iOS. An agent skill from woocommerce/woocommerce-ios.

    358 GitHub stars~539 tokensUpdated yesterday
    Auto-check: notes
  • Mocks

    woocommerce/woocommerce-ios

    Start or stop the WireMock API mock server for UI testing and E2E verification.

    358 GitHub stars~291 tokensUpdated yesterday
    Auto-check: notes

Categories

Questions about Woo iOS Swift 6 Migration

What does Woo iOS Swift 6 Migration do?

Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS. Woo iOS Swift 6 Migration is an agent skill from woocommerce/woocommerce-ios. Diagnose and fix Swift strict-concurrency warnings in WooCommerce iOS.

When should I use Woo iOS Swift 6 Migration?

Woo iOS Swift 6 Migration fits situations like: swift 6 migration; actor-isolation changes; sendable diagnostics in this repository.

How do I install Woo iOS Swift 6 Migration in Claude Code?

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

How do I install Woo iOS Swift 6 Migration in Codex?

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

Can I use Woo iOS Swift 6 Migration 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 woocommerce/woocommerce-ios --skill woo-ios-swift-6-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/woo-ios-swift-6-migration, .gemini/skills/woo-ios-swift-6-migration, .github/skills/woo-ios-swift-6-migration and .opencode/skills/woo-ios-swift-6-migration in your project.

What does Woo iOS Swift 6 Migration need to run?

SKILL.md names no scripts, command-line tools or credentials: Woo iOS Swift 6 Migration is instructions for the agent only. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Grep, Glob.

Does Woo iOS Swift 6 Migration access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Woo iOS Swift 6 Migration safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Woo iOS Swift 6 Migration use?

Woo iOS Swift 6 Migration is published under the GPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Woo iOS Swift 6 Migration use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.5k tokens, read only when the agent opens those files.

What are the alternatives to Woo iOS Swift 6 Migration?

Skills that share tags, products or a category with Woo iOS Swift 6 Migration: Inspector MCP (ipedro/Inspector, 170 stars), Mlkit Release (d-date/google-mlkit-swiftpm, 148 stars), Dt Setup iOS (Dynatrace/dynatrace-for-ai, 163 stars) and Bootstrap iOS (RayFernando1337/rayfernando-skills, 130 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Woo iOS Swift 6 Migration?

woocommerce (a GitHub organization) maintains it in woocommerce/woocommerce-ios, which has 358 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 9, 2026.

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