mcpField
A
axiom-ios-concurrency

axiom-ios-concurrency

github.com/charleswiltgen开发1.2k216 次安装今天更新
代码仓库

关于 axiom-ios-concurrency

面向 Swift/iOS 开发者的并发问题路由技能,按错误类型和上下文将 async/await、Swift 6、线程安全及性能问题导向专门技能或 Agent。

主要功能

  1. 01按并发主题分流到专门技能
  2. 02区分 Swift 与 Core Data 线程问题
  3. 03提供并发问题决策树
  4. 04支持自动化并发审计路由

适用场景

  1. 01排查 Swift 6 数据竞争与隔离错误
  2. 02处理应用加载时界面冻结
  3. 03选择 actor、锁或 Combine 模式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/charleswiltgen/axiom --skill axiom-ios-concurrency

安装后在 Claude Code 中输入/axiom-ios-concurrency确认已加载。

详细介绍

iOS 并发路由

任何并发、async/await、线程处理或 Swift 6 并发工作都必须使用此技能。

适用场景

在以下情况下使用此路由:

  • 编写 async/await 代码
  • 遇到并发错误(数据竞争、Actor 隔离)
  • 使用 @MainActor
  • 处理 Sendable 一致性
  • 优化 Swift 性能
  • 迁移到 Swift 6 并发
  • 应用在加载期间卡顿(可能是主线程阻塞)

冲突处理

ios-concurrency 与 ios-performance:当应用卡顿或感觉运行缓慢时:

  1. 先尝试 ios-concurrency —— 主线程阻塞是导致 UI 卡顿的首要原因。在开始性能分析前,先检查 @MainActor 上是否有同步工作。
  2. 仅在并发修复无效时使用 ios-performance —— 排除明显的阻塞后再进行性能分析。

ios-concurrency 与 ios-build:遇到 Swift 6 并发错误时:

  • 使用 ios-concurrency,而不是 ios-build —— 并发错误属于代码问题,而非环境问题
  • ios-build 适用于 “No such module”、模拟器问题,以及与 Swift 语言错误无关的构建失败

ios-concurrency 与 ios-data:并发错误涉及 Core Data 或 SwiftData 时:

  • Core Data 线程处理(NSManagedObjectContext 线程隔离、performBackgroundTask)→ 先使用 ios-data —— Core Data 有自己的线程模型,与 Swift 并发不同
  • SwiftData + @MainActor ModelContext → 使用 ios-concurrency —— 这是 Swift 并发隔离问题
  • 一般性的“后台保存导致数据丢失” → 先使用 ios-data —— 框架特定的线程规则优先

理由:数据加载期间卡顿 2 秒,几乎总是因为在主线程上执行 await 或缺少后台调度。领域知识比 Time Profiler 更快地解决问题。Core Data 线程处理违规需要 Core Data 特定的修复,而不是通用并发模式。

路由逻辑

Swift 并发问题

Swift 6 并发模式 → /skill axiom-swift-concurrency

  • async/await 模式
  • @MainActor 用法
  • Actor 隔离
  • Sendable 一致性
  • 防止数据竞争
  • Swift 6 迁移

Swift 并发 API 参考 → /skill axiom-swift-concurrency-ref

  • Actor 定义、重入、全局 Actor
  • Sendable 模式、@unchecked Sendable
  • Task/TaskGroup/取消 API
  • AsyncStream、continuations
  • 从 DispatchQueue 迁移到 Actor

Swift 性能 → /skill axiom-swift-performance

  • 值类型与引用类型
  • 写时复制优化
  • ARC 开销
  • 泛型特化
  • 集合性能

同步访问 Actor → /skill axiom-assume-isolated

  • MainActor.assumeIsolated
  • @preconcurrency 协议一致性
  • 旧版委托回调
  • 同步测试 MainActor 代码

线程安全原语 → /skill axiom-synchronization

  • Mutex(iOS 18+)
  • OSAllocatedUnfairLock(iOS 16+)
  • 原子类型
  • Lock 与 Actor 的选择

参数所有权 → /skill axiom-ownership-conventions

  • borrowing/consuming 修饰符
  • 不可复制类型(~Copyable)
  • 减少 ARC 流量
  • consume 运算符

并发性能分析 → /skill axiom-concurrency-profiling

  • Swift Concurrency Instruments 模板
  • Actor 竞争诊断
  • 线程池耗尽
  • Task 可视化

Combine 响应式模式 → /skill axiom-combine-patterns

  • Publisher/Subscriber 生命周期、AnyCancellable
  • Combine 与 async/await 的选择
  • @Published + ObservableObject
  • 运算符模式、桥接
自动扫描

并发审计 → 启动 concurrency-auditor Agent 或运行 /axiom:audit concurrency(5 阶段语义审计:映射隔离架构、检测 8 种反模式、推理缺失的并发模式、关联复合风险、评估 Swift 6.3 就绪度)

决策树

  1. 数据竞争/Actor 隔离/@MainActor/Sendable?→ swift-concurrency 1a. 需要特定 API 语法(Actor 定义、TaskGroup、AsyncStream、continuation)?→ swift-concurrency-ref
  2. 编写 async/await 代码?→ swift-concurrency
  3. 迁移到 Swift 6?→ swift-concurrency
  4. assumeIsolated/@preconcurrency?→ assume-isolated
  5. Mutex/锁/同步?→ synchronization
  6. borrowing/consuming/~Copyable?→ ownership-conventions
  7. 分析异步性能/Actor 争用?→ concurrency-profiling
  8. 值类型/ARC/泛型优化?→ swift-performance
  9. 想要自动化并发扫描?→ concurrency-auditor(Agent)
  10. Combine/@Published/AnyCancellable/响应式流?→ combine-patterns

避免自我合理化

想法实际情况
“只要加上 @MainActor 就能用了”@MainActor 有隔离继承规则。swift-concurrency 涵盖所有模式。
“我会用 nonisolated(unsafe) 来消除警告”消除警告会掩盖数据竞争。swift-concurrency 展示了安全的模式。
“这只是一次异步调用”即使是单次异步调用,也涉及取消和隔离问题。swift-concurrency 涵盖了这些内容。
“我知道 Actor 的工作原理”Swift 6.2 中 Actor 可重入性和隔离规则已发生变化。swift-concurrency 涵盖最新内容。
“我以后再处理 Sendable 警告”违反 Sendable 会导致运行时崩溃。swift-concurrency 能立即正确修复这些问题。
“Combine 已经过时了,直接用 async/await 就好”Combine 尚未发布弃用通知。重写正常运行的管线会浪费时间并引入错误。combine-patterns 涵盖渐进式迁移。

关键模式

Swift 6 并发(swift-concurrency):

  • 渐进式路径:单线程 → 异步 → 并发 → Actor
  • 使用 @concurrent 特性强制在后台执行
  • 隔离一致性
  • 更易上手的并发主线程模式
  • 11 种可直接复制粘贴的模式

Swift 性能(swift-performance):

  • 使用 ~Copyable 实现不可复制类型
  • 写时复制(COW)模式
  • 值类型与引用类型的选择
  • 降低 ARC 开销
  • 泛型特化

示例调用

用户:“我在 Swift 6 中遇到了‘data race’错误” → 调用:/skill axiom-swift-concurrency

用户:“如何正确使用 @MainActor?” → 调用:/skill axiom-swift-concurrency

用户:“我的应用因为不必要的复制而运行缓慢” → 调用:/skill axiom-swift-performance

用户:“这个网络调用应该使用 async/await 吗?” → 调用:/skill axiom-swift-concurrency

用户:“如何使用 assumeIsolated?” → 调用:/skill axiom-assume-isolated

用户:“我的代理回调在主线程上运行,如何访问 MainActor 状态?” → 调用:/skill axiom-assume-isolated

用户:“应该使用 Mutex 还是 actor?” → 调用:/skill axiom-synchronization

用户:“os_unfair_lock 和 OSAllocatedUnfairLock 有什么区别?” → 调用:/skill axiom-synchronization

用户:“borrowing 在 Swift 中有什么作用?” → 调用:/skill axiom-ownership-conventions

用户:“如何使用 ~Copyable 类型?” → 调用:/skill axiom-ownership-conventions

用户:“我的异步代码很慢,如何分析其性能?” → 调用:/skill axiom-concurrency-profiling

用户:“我觉得有 actor 争用,如何诊断?” → 调用:/skill axiom-concurrency-profiling

用户:“我的 Core Data 保存操作丢失了后台任务中的数据” → 路由至:ios-data router(Core Data 线程处理特定于框架)

用户:“如何创建 TaskGroup?” → 调用:/skill axiom-swift-concurrency-ref

用户:“AsyncStream API 是什么?” → 调用:/skill axiom-swift-concurrency-ref

用户:“如何创建自定义全局 actor?” → 调用:/skill axiom-swift-concurrency-ref

用户:“如何将 completion handler 转换为 async?” → 调用:/skill axiom-swift-concurrency-ref

用户:“actor 重入规则是什么?” → 调用:/skill axiom-swift-concurrency-ref

用户:“我的 Combine 管道突然停止生成值,且没有任何提示” → 调用:/skill axiom-combine-patterns

用户:“这个数据流应该使用 Combine 还是 async/await?” → 调用:/skill axiom-combine-patterns

用户:“如何将 Combine 发布者桥接到 async/await 代码中?” → 调用:/skill axiom-combine-patterns

用户:“AnyCancellable 导致内存泄漏” → 调用:/skill axiom-combine-patterns

用户:“检查我的代码是否存在 Swift 6 并发问题” → 调用:concurrency-auditor agent

评论

支持 Markdown