关于 axiom-ios-ui
axiom-ios-ui 是用于 iOS 界面工作的路由技能,涵盖 SwiftUI、UIKit、设计、无障碍和测试。它根据问题类型推荐相应技能或审查 Agent。
主要功能
- 01路由 SwiftUI 和 UIKit 问题
- 02涵盖布局、导航与动画
- 03指引设计和无障碍问题
- 04推荐自动化审查 Agent
适用场景
- 01查找 SwiftUI 布局问题的指引
- 02选择 UIKit 桥接相关技能
- 03审查导航或无障碍流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-ios-ui安装后在 Claude Code 中输入/axiom-ios-ui确认已加载。
详细介绍
iOS UI 路由器
任何 iOS UI 工作都必须使用此技能,包括 SwiftUI、UIKit、布局、导航、动画和设计。
适用场景
在处理以下内容时使用此路由器:
- SwiftUI 视图、状态、绑定
- UIKit 视图和约束
- 布局问题(Auto Layout、SwiftUI 布局)
- 导航(NavigationStack、深度链接)
- 动画和过渡
- Liquid Glass 设计(iOS 26+)
- Apple 人机界面指南
- UI 架构和模式
- UI 无障碍问题
冲突解决
ios-ui 与 ios-performance:当 UI 运行缓慢时(例如,“SwiftUI List 很慢”):
- 先尝试 ios-ui — 特定领域的修复(LazyVStack、视图标识、@State 优化)通常能在 5 分钟内解决 UI 性能问题
- 只有在领域修复无效时才使用 ios-performance — 性能分析耗时更长,而且可能只是确认领域知识已知的问题
理由:已知的 SwiftUI 模式就能解决的问题,没必要一开始就用 Instruments 浪费时间。先尝试领域修复,再进行性能分析。
路由逻辑
SwiftUI 问题
视图不更新 → /skill axiom-swiftui-debugging
导航问题 → /skill axiom-swiftui-nav
性能/延迟 → /skill axiom-swiftui-performance
布局问题 → /skill axiom-swiftui-layout
堆栈/网格/大纲 → /skill axiom-swiftui-containers-ref
动画问题 → /skill axiom-swiftui-animation-ref
手势冲突 → /skill axiom-swiftui-gestures
拖放、复制/粘贴、共享 → /skill axiom-transferable-ref
架构/可测试性 → /skill axiom-swiftui-architecture
应用级组合 → /skill axiom-app-composition
搜索实现 → /skill axiom-swiftui-search-ref
iOS 26 功能 → /skill axiom-swiftui-26-ref
UIKit 桥接(Representable、HostingController) → /skill axiom-uikit-bridging
UIKit 问题
Auto Layout 冲突 → /skill axiom-auto-layout-debugging
动画时序问题 → /skill axiom-uikit-animation-debugging
嵌入 SwiftUI(HostingController、HostingConfiguration) → /skill axiom-uikit-bridging
设计与指南
采用 Liquid Glass → /skill axiom-liquid-glass
SF Symbols(效果、渲染、自定义) → /skill axiom-sf-symbols
设计决策 → /skill axiom-hig
排版 → /skill axiom-typography-ref
TextKit/富文本 → /skill axiom-textkit-ref
tvOS
焦点引擎、遥控器输入、TVUIKit、文本输入 → /skill axiom-tvos
无障碍
VoiceOver、动态字体 → /skill axiom-accessibility-diag
测试
UI 测试不稳定 → /skill axiom-ui-testing
自动扫描
架构审计 → 启动 swiftui-architecture-auditor Agent(关注点分离、视图中的逻辑、可测试性)
性能扫描 → 启动 swiftui-performance-analyzer Agent 或 /axiom:audit swiftui-performance(视图 body 中开销大的操作、不必要的更新)
导航审计 → 启动 swiftui-nav-auditor Agent 或 /axiom:audit swiftui-nav(深度链接缺失、状态恢复、容器错误)
布局审计 → 启动 swiftui-layout-auditor Agent 或 /axiom:audit swiftui-layout(误用 GeometryReader、缺少自适应布局、硬编码断点、标识丢失)
UX 流程审计 → 启动 ux-flow-auditor Agent 或 /axiom:audit ux-flow(流程死胡同、无法关闭的界面、被隐藏的 CTA、缺少空状态/加载状态/错误状态)
Liquid Glass 扫描 → 启动 liquid-glass-auditor Agent 或 /axiom:audit liquid-glass(采用机会、工具栏改进)
TextKit 扫描 → 启动 textkit-auditor Agent 或 /axiom:audit textkit(回退到 TextKit 1、已弃用的字形 API、Writing Tools)
决策树
digraph ios_ui {
start [label="UI issue" shape=ellipse];
is_tvos [label="tvOS?" shape=diamond];
is_swiftui [label="SwiftUI?" shape=diamond];
is_uikit [label="UIKit?" shape=diamond];
is_design [label="Design/guidelines?" shape=diamond];
start -> is_tvos;
is_tvos -> "axiom-tvos" [label="focus, remote, TVUIKit, text input, storage"];
is_tvos -> is_swiftui [label="no"];
is_swiftui -> swiftui_type [label="yes"];
is_swiftui -> is_uikit [label="no"];
is_uikit -> uikit_type [label="yes"];
is_uikit -> is_design [label="no"];
is_design -> design_type [label="yes"];
is_design -> "accessibility-diag" [label="accessibility"];
swiftui_type [label="What's wrong?" shape=diamond];
swiftui_type -> "swiftui-debugging" [label="view not updating"];
swiftui_type -> "swiftui-nav" [label="navigation"];
swiftui_type -> "swiftui-performance" [label="slow/lag"];
swiftui_type -> "swiftui-layout" [label="adaptive layout"];
swiftui_type -> "swiftui-containers-ref" [label="stacks/grids/outlines"];
swiftui_type -> "swiftui-architecture" [label="feature architecture"];
swiftui_type -> "app-composition" [label="app-level (root, auth, scenes)"];
swiftui_type -> "swiftui-animation-ref" [label="animations"];
swiftui_type -> "swiftui-gestures" [label="gestures"];
swiftui_type -> "transferable-ref" [label="drag/drop, sharing, copy/paste"];
swiftui_type -> "swiftui-search-ref" [label="search"];
swiftui_type -> "swiftui-26-ref" [label="iOS 26 features"];
swiftui_type -> "uikit-bridging" [label="UIKit interop"];
swiftui_type -> "ux-flow-audit" [label="UX dead ends, dismiss traps"];
uikit_type [label="UIKit issue?" shape=diamond];
uikit_type -> "auto-layout-debugging" [label="Auto Layout"];
uikit_type -> "uikit-animation-debugging" [label="animations"];
uikit_type -> "uikit-bridging" [label="SwiftUI embedding"];
uikit_type -> "ux-flow-audit" [label="UX dead ends, dismiss traps"];
design_type [label="Design topic?" shape=diamond];
design_type -> "liquid-glass" [label="Liquid Glass"];
design_type -> "sf-symbols" [label="SF Symbols"];
design_type -> "hig" [label="HIG compliance"];
design_type -> "typography-ref" [label="typography"];
design_type -> "textkit-ref" [label="TextKit/rich text"];
}
自动化扫描 Agent:
- 想进行架构审查(关注点分离、可测试性)?→ swiftui-architecture-auditor (Agent)
- 想扫描 SwiftUI 性能(视图 body 操作、不必要的更新)?→ swiftui-performance-analyzer (Agent)
- 想审查导航(深层链接、状态恢复)?→ swiftui-nav-auditor (Agent)
- 想审查布局(GeometryReader、自适应、硬编码尺寸)?→ swiftui-layout-auditor (Agent)
- 想审查 UX 流程(死胡同、无法关闭的困境、缺失状态)?→ ux-flow-auditor (Agent)
- 想扫描 Liquid Glass 的采用情况?→ liquid-glass-auditor (Agent)
- 想扫描 TextKit(Writing Tools、已弃用的 API)?→ textkit-auditor (Agent)
反合理化
| 想法 | 事实 |
|---|---|
| “SwiftUI 布局很简单,不需要布局技能” | SwiftUI 布局有 12 个陷阱。swiftui-layout 涵盖了所有陷阱。 |
| “我知道 NavigationStack 怎么用” | 导航涉及状态恢复、深层链接和身份陷阱。swiftui-nav 能避免耗时 2 小时的调试。 |
| “只是视图没有更新,我自己调试就行” | 视图更新失败有 4 个根本原因。swiftui-debugging 可在 5 分钟内诊断问题。 |
| “我先加上 .animation(),之后再修” | 动画问题会层层累积。swiftui-animation-ref 提供了正确的模式。 |
| “这个 UI 很简单,不需要架构设计” | 即使是小功能,也能从关注点分离中受益。swiftui-architecture 能避免重构债务。 |
| “UX 问题只是表面修饰,以后再改” | 死胡同和无法关闭的困境会导致 1 星评价。ux-flow-audit 几分钟内就能发现这些问题。 |
| “我知道 .searchable 怎么用” | 搜索有 6 个陷阱(导航容器、isSearching 的层级、建议项完成操作)。swiftui-search-ref 涵盖了所有陷阱。 |
| “我知道 SF Symbols,它就是 Image(systemName:)” | 4 种渲染模式、12 种以上效果、3 种 Draw 播放模式,以及自定义符号创作。sf-symbols 为所有这些情况提供了决策树。 |
| “拖放就是 .draggable 和 .dropDestination” | UTType 声明、表示顺序、文件生命周期、跨应用传输陷阱。transferable-ref 涵盖了所有这些情况。 |
| “我很快就把这个 UIView 包装一下” | UIViewRepresentable 涉及生命周期、协调器、尺寸调整和内存陷阱。uikit-bridging 能避免持续 1–2 小时的调试。 |
| “tvOS 就是电视上的 iOS” | tvOS 没有持久存储、没有 WebView,具有双重焦点系统,并有两代遥控器。axiom-tvos 涵盖了所有陷阱。 |
示例调用
用户:“我更改模型时,SwiftUI 视图没有更新”
→ 调用:/skill axiom-swiftui-debugging
用户:“如何在工具栏中实现 Liquid Glass?”
→ 调用:/skill axiom-liquid-glass
用户:“NavigationStack 意外弹出了”
→ 调用:/skill axiom-swiftui-nav
用户:“这个 SwiftUI 应用该使用 MVVM 吗?”
→ 调用:/skill axiom-swiftui-architecture
用户:“如何在登录界面和主界面之间切换?”
→ 调用:/skill axiom-app-composition
用户:“应用中的身份验证状态应该放在哪里?”
→ 调用:/skill axiom-app-composition
用户:“如何使用 LazyVGrid 创建网格布局?”
→ 调用:/skill axiom-swiftui-containers-ref
用户:“VStack 和 LazyVStack 有什么区别?”
→ 调用:/skill axiom-swiftui-containers-ref
用户:“如何使用 OutlineGroup 显示分层数据?”
→ 调用:/skill axiom-swiftui-containers-ref
用户:“如何为 SwiftUI 列表添加搜索功能?”
→ 调用:/skill axiom-swiftui-search-ref
用户:“我的搜索建议无法正常工作”
→ 调用:/skill axiom-swiftui-search-ref
用户:“如何在点按时为 SF Symbol 添加动画?”
→ 调用:/skill axiom-sf-symbols
用户:“我的自定义符号上的 SF Symbol Draw 动画无法正常工作”
→ 调用:/skill axiom-sf-symbols
用户:“工具栏图标应该使用哪种渲染模式?”
→ 调用:/skill axiom-sf-symbols
用户:“如何让我的模型在 SwiftUI 中可拖动?”
→ 调用:/skill axiom-transferable-ref
用户:“如何使用自定义预览添加 ShareLink?”
→ 调用:/skill axiom-transferable-ref
用户:“如何在 SwiftUI 中封装 UIKit 视图?”
→ 调用:/skill axiom-uikit-bridging
用户:“如何在我的 UIKit 应用中嵌入 SwiftUI?”
→ 调用:/skill axiom-uikit-bridging
用户:“我的 UIViewRepresentable 无法正确更新”
→ 调用:/skill axiom-uikit-bridging
用户:“如何在 collection view 单元格中使用 UIHostingConfiguration?”
→ 调用:/skill axiom-uikit-bridging
用户:“我正在开发 tvOS 应用,但焦点导航无法正常工作”
→ 调用:/skill axiom-tvos
用户:“如何在 tvOS 上处理文本输入?”
→ 调用:/skill axiom-tvos
用户:“检查我的应用是否存在 UX 流程死胡同和无法关闭的陷阱”
→ 调用:ux-flow-auditor Agent
用户:“检查我的 SwiftUI 架构是否做到了关注点分离”
→ 调用:swiftui-architecture-auditor Agent
用户:“扫描我的 SwiftUI 视图,查找性能问题”
→ 调用:swiftui-performance-analyzer Agent
用户:“审查我的导航是否存在深层链接缺口”
→ 调用:swiftui-nav-auditor Agent
用户:“检查我的布局是否存在 iPad 和多任务处理问题”
→ 调用:swiftui-layout-auditor Agent
用户:“检查我的应用有哪些采用 Liquid Glass 的机会”
→ 调用:liquid-glass-auditor Agent
用户:“为什么我的文本视图中没有显示 Writing Tools?”
→ 调用:textkit-auditor Agent