axiom-auto-layout-debugging by charleswiltgen/axiom
npx skills add https://github.com/charleswiltgen/axiom --skill axiom-auto-layout-debugging在以下情况时使用:
核心原则:Auto Layout 约束错误遵循可预测的模式。使用适当的工具进行系统性调试,可以在几分钟内而非几小时内识别问题。
节省时间:不使用此工作流的典型约束调试:30-60 分钟。使用系统性方法:5-10 分钟。
Constraint error in console?
├─ Can't identify which views?
│ └─ Use Symbolic Breakpoint + Memory Address Identification
├─ Constraint conflicts shown?
│ └─ Use Constraint Priority Resolution
├─ Ambiguous layout (multiple solutions)?
│ └─ Use _autolayoutTrace to find missing constraints
└─ Views positioned incorrectly but no errors?
└─ Use Debug View Hierarchy + Show Constraints
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list you don't need.
(
"<NSLayoutConstraint:0x7f8b9c6... 'UIView-Encapsulated-Layout-Width' ... (active)>",
"<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>",
"<NSLayoutConstraint:0x7f8b9c3... UILabel:0x7f8b9c4... .leading == ... + 20 (active)>",
"<NSLayoutConstraint:0x7f8b9c2... ... .trailing == UILabel:0x7f8b9c4... .trailing + 20 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
关键组成部分:
0x7f8b9c4... 标识视图和约束(active) 状态 — 约束当前正在强制执行UIView-Encapsulated-Layout-Width/Height:
自动调整大小掩码约束:
h=--& 或 v=&--- = 固定尺寸& = 灵活尺寸h=--& = 固定左边距和宽度,灵活右边距目的:在约束冲突发生时、系统破坏约束之前中断。
设置:
+ → "Symbolic Breakpoint"UIViewAlertForUnsatisfiableConstraints为何有效:在约束冲突的确切时刻暂停执行,让你可以访问调试器中的所有视图和约束。
当断点命中时,控制台会显示类似 UILabel:0x7f8b9c4... 的内存地址。
# Print all involved views and constraints
po $arg1
# Or on older Xcode versions
po $rbx
输出:包含所有冲突约束和受影响视图的 NSArray。
# Set background color on suspected view
expr ((UIView *)0x7f8b9c4...).backgroundColor = [UIColor redColor]
# Continue execution to see which view turned red
结果:直观地识别哪个视图对应内存地址。
Objective-C 项目:
po [[UIWindow keyWindow] _autolayoutTrace]
Swift 项目:
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
输出:整个视图层次结构,其中 * 标记不明确的布局。
示例:
*<UIView:0x7f8b9c4...>
| <UILabel:0x7f8b9c3...>
* 表示此 UIView 具有不明确的约束。
# Horizontal constraints (axis: 0)
po [0x7f8b9c4... constraintsAffectingLayoutForAxis:0]
# Vertical constraints (axis: 1)
po [0x7f8b9c4... constraintsAffectingLayoutForAxis:1]
输出:影响该视图布局的所有约束。
何时使用:视图定位不正确,约束在代码中不可见。
工作流:
关键功能:
发现问题:
原因:使错误消息可读,而不是晦涩的内存地址。
之前:
<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>
之后:
<NSLayoutConstraint:0x7f8b9c5... 'ProfileImageWidthConstraint' UILabel:0x7f8b9c4... .width == 300 (active)>
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 100)
widthConstraint.identifier = "ProfileImageWidthConstraint"
widthConstraint.isActive = true
影响:无需在代码中搜寻,即可立即知道哪个约束被破坏。
原因:错误消息显示视图类和你自定义的标签。
之前:
<UIImageView:0x7f8b9c4... (active)>
之后:
<UIImageView:0x7f8b9c4... 'Profile Image View' (active)>
imageView.accessibilityIdentifier = "ProfileImageView"
注意:当可用时,Xcode 会自动使用文本组件(UILabel 文本、UIButton 标题)作为标识符。
症状:
Container width: 375
Child width: 300
Child leading: 20
Child trailing: 20
// 20 + 300 + 20 = 340 ≠ 375
❌ 错误:
// Conflicting constraints
imageView.widthAnchor.constraint(equalToConstant: 300).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Over-constrained: width + leading + trailing = 3 horizontal constraints (only need 2)
✅ 正确 选项 1(移除固定宽度):
// Let width be calculated from leading + trailing
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Width will be container width - 40
✅ 正确 选项 2(使用优先级):
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 300)
widthConstraint.priority = .defaultHigh // 750 (can be broken if needed)
widthConstraint.isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Required constraints (1000) will break lower-priority width constraint if needed
症状:表格单元格或集合视图单元格与 UIView-Encapsulated-Layout-Width 冲突。
原因:系统根据表格/集合视图设置单元格宽度。你的约束与之冲突。
❌ 错误:
// In UITableViewCell
contentLabel.widthAnchor.constraint(equalToConstant: 320).isActive = true
// Conflicts with system-determined cell width
✅ 正确:
// Use relative constraints, not fixed widths
contentLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16).isActive = true
contentLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16).isActive = true
// Width adapts to cell width automatically
症状:混合使用 Auto Layout 和 autoresizingMask 或未设置 translatesAutoresizingMaskIntoConstraints = false。
❌ 错误:
let imageView = UIImageView()
view.addSubview(imageView)
// Forgot to disable autoresizing mask
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
// Conflicts with autoresizing mask constraints
✅ 正确:
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false // ← 关键
view.addSubview(imageView)
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
原因:translatesAutoresizingMaskIntoConstraints = true 会创建与你显式约束冲突的自动约束。
症状:视图出现,但位置意外移动或 _autolayoutTrace 显示 *(不明确)。
问题:没有足够的约束来确定唯一的位置/尺寸。
❌ 错误(不明确的 X 位置):
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
// Missing: horizontal position (leading/trailing/centerX)
✅ 正确:
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true // ← 已添加
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
规则:每个视图都需要:
症状:意外的约束破坏,但所有约束似乎都正确。
问题:多个相同优先级的约束相互竞争。
❌ 错误:
// Both required (priority 1000)
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 150).isActive = true
// Impossible: width can't be 100 AND >= 150
✅ 正确:
let preferredWidth = imageView.widthAnchor.constraint(equalToConstant: 100)
preferredWidth.priority = .defaultHigh // 750
preferredWidth.isActive = true
let minWidth = imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 150)
minWidth.priority = .required // 1000
minWidth.isActive = true
// Result: width will be 150 (required constraint wins)
优先级级别(越高越强):
.required (1000) — 必须满足.defaultHigh (750) — 强烈偏好.defaultLow (250) — 弱偏好translatesAutoresizingMaskIntoConstraints = false使用场景:视图应为特定尺寸,但在需要时可以缩小。
// Preferred size: 200x200
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 200)
widthConstraint.priority = .defaultHigh // 750
widthConstraint.isActive = true
let heightConstraint = imageView.heightAnchor.constraint(equalToConstant: 200)
heightConstraint.priority = .defaultHigh // 750
heightConstraint.isActive = true
// But never smaller than 100x100
imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
imageView.heightAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
// And never larger than container
imageView.widthAnchor.constraint(lessThanOrEqualTo: containerView.widthAnchor).isActive = true
imageView.heightAnchor.constraint(lessThanOrEqualTo: containerView.heightAnchor).isActive = true
结果:当有可用空间时,图像为 200x200,否则缩小以适应容器(最小 100x100)。
内容吸附(抵抗扩展):
// Label should not stretch beyond its text width
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
压缩阻力(抵抗收缩):
// Label should not truncate if possible
label.setContentCompressionResistancePriority(.required, for: .horizontal)
常见模式:
// In horizontal stack: priorityLabel (hugs) + spacer + valueLabel (hugs)
priorityLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
valueLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
// Spacer fills remaining space (low hugging priority)
spacerView.setContentHuggingPriority(.defaultLow, for: .horizontal)
问题:视图变换(旋转、缩放)不影响 Auto Layout。
陷阱:
imageView.transform = CGAffineTransform(rotationAngle: .pi / 4) // 45° rotation
// Auto Layout still uses original (un-rotated) frame for calculations
解决方案:Auto Layout 工作正常,但视觉调试可能会令人困惑。使用原始帧进行约束调试。
检查:
UIViewAlertForUnsatisfiableConstraints解决方案 1:使用背景颜色技巧
expr ((UIView *)0x7f8b9c4...).backgroundColor = [UIColor redColor]
continue
解决方案 2:打印递归描述
po [0x7f8b9c4... recursiveDescription]
解决方案 3:检查视图的类
po [0x7f8b9c4... class]
检查:
检查:
错误:看到约束警告,却继续执行。
正确:立即修复每个约束警告。它们会累积并在以后导致不可预测的布局。
错误:通过内存地址调试约束。
正确:始终设置约束标识符。现在花 30 秒,以后节省 30 分钟。
错误:同时设置 leading + trailing + width。
正确:使用 3 个中的 2 个(leading + trailing,或 leading + width,或 trailing + width)。
错误:
imageView.frame = CGRect(x: 50, y: 50, width: 100, height: 100) // 手动 frame
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true // Auto Layout
正确:选择一种方法。如果使用 Auto Layout,设置 translatesAutoresizingMaskIntoConstraints = false 并让约束决定位置/尺寸。
之前(无系统性方法):
之后(系统性调试):
axiom-xcode-debugging 技能axiom-swiftui-performance 技能axiom-ui-testing 技能文档:/library/archive/documentation/userexperience/conceptual/autolayoutpg/debuggingtricksandtips
最后更新:2024 最低要求:Xcode 12+, iOS 11+(符号断点适用于所有版本)
每周安装次数
100
仓库
GitHub 星标数
601
首次出现
Jan 21, 2026
安全审计
安装于
opencode85
gemini-cli78
codex78
claude-code77
cursor75
github-copilot74
Use when:
Core Principle : Auto Layout constraint errors follow predictable patterns. Systematic debugging with proper tools identifies issues in minutes instead of hours.
Time Savings : Typical constraint debugging without this workflow: 30-60 minutes. With systematic approach: 5-10 minutes.
Constraint error in console?
├─ Can't identify which views?
│ └─ Use Symbolic Breakpoint + Memory Address Identification
├─ Constraint conflicts shown?
│ └─ Use Constraint Priority Resolution
├─ Ambiguous layout (multiple solutions)?
│ └─ Use _autolayoutTrace to find missing constraints
└─ Views positioned incorrectly but no errors?
└─ Use Debug View Hierarchy + Show Constraints
Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list you don't need.
(
"<NSLayoutConstraint:0x7f8b9c6... 'UIView-Encapsulated-Layout-Width' ... (active)>",
"<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>",
"<NSLayoutConstraint:0x7f8b9c3... UILabel:0x7f8b9c4... .leading == ... + 20 (active)>",
"<NSLayoutConstraint:0x7f8b9c2... ... .trailing == UILabel:0x7f8b9c4... .trailing + 20 (active)>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>
Key Components :
0x7f8b9c4... identifies views and constraints(active) status — Constraint is currently enforcedUIView-Encapsulated-Layout-Width/Height :
Autoresizing Mask Constraints :
h=--& or v=&--- = fixed dimension& = flexible dimensionh=--& = fixed left margin and width, flexible right marginPurpose : Break when constraint conflict occurs, before system breaks constraint.
Setup :
+ → "Symbolic Breakpoint"UIViewAlertForUnsatisfiableConstraintsWhy this works : Pauses execution at exact moment of constraint conflict, giving you debugger access to all views and constraints.
When breakpoint hits, console shows memory addresses like UILabel:0x7f8b9c4...
# Print all involved views and constraints
po $arg1
# Or on older Xcode versions
po $rbx
Output : NSArray containing all conflicting constraints and affected views.
# Set background color on suspected view
expr ((UIView *)0x7f8b9c4...).backgroundColor = [UIColor redColor]
# Continue execution to see which view turned red
Result : Visually identifies which view corresponds to memory address.
Objective-C projects :
po [[UIWindow keyWindow] _autolayoutTrace]
Swift projects :
expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
Output : Entire view hierarchy with * marking ambiguous layouts.
Example :
*<UIView:0x7f8b9c4...>
| <UILabel:0x7f8b9c3...>
The * indicates this UIView has ambiguous constraints.
# Horizontal constraints (axis: 0)
po [0x7f8b9c4... constraintsAffectingLayoutForAxis:0]
# Vertical constraints (axis: 1)
po [0x7f8b9c4... constraintsAffectingLayoutForAxis:1]
Output : All constraints affecting that view's layout.
When to use : Views positioned incorrectly, constraints not visible in code.
Workflow :
Key Features :
Finding Issues :
Why : Makes error messages readable instead of cryptic memory addresses.
Before :
<NSLayoutConstraint:0x7f8b9c5... UILabel:0x7f8b9c4... .width == 300 (active)>
After :
<NSLayoutConstraint:0x7f8b9c5... 'ProfileImageWidthConstraint' UILabel:0x7f8b9c4... .width == 300 (active)>
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 100)
widthConstraint.identifier = "ProfileImageWidthConstraint"
widthConstraint.isActive = true
Impact : Instantly know which constraint is breaking without hunting through code.
Why : Error messages show view class AND your custom label.
Before :
<UIImageView:0x7f8b9c4... (active)>
After :
<UIImageView:0x7f8b9c4... 'Profile Image View' (active)>
imageView.accessibilityIdentifier = "ProfileImageView"
Note : Xcode automatically uses textual components (UILabel text, UIButton titles) as identifiers when available.
Symptom :
Container width: 375
Child width: 300
Child leading: 20
Child trailing: 20
// 20 + 300 + 20 = 340 ≠ 375
❌ WRONG :
// Conflicting constraints
imageView.widthAnchor.constraint(equalToConstant: 300).isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Over-constrained: width + leading + trailing = 3 horizontal constraints (only need 2)
✅ CORRECT Option 1 (Remove fixed width):
// Let width be calculated from leading + trailing
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Width will be container width - 40
✅ CORRECT Option 2 (Use priorities):
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 300)
widthConstraint.priority = .defaultHigh // 750 (can be broken if needed)
widthConstraint.isActive = true
imageView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true
imageView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true
// Required constraints (1000) will break lower-priority width constraint if needed
Symptom : Table cells or collection view cells conflicting with UIView-Encapsulated-Layout-Width.
Why it happens : System sets cell width based on table/collection view. Your constraints fight it.
❌ WRONG :
// In UITableViewCell
contentLabel.widthAnchor.constraint(equalToConstant: 320).isActive = true
// Conflicts with system-determined cell width
✅ CORRECT :
// Use relative constraints, not fixed widths
contentLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16).isActive = true
contentLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16).isActive = true
// Width adapts to cell width automatically
Symptom : Mixing Auto Layout with autoresizingMask or not setting translatesAutoresizingMaskIntoConstraints = false.
❌ WRONG :
let imageView = UIImageView()
view.addSubview(imageView)
// Forgot to disable autoresizing mask
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
// Conflicts with autoresizing mask constraints
✅ CORRECT :
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false // ← CRITICAL
view.addSubview(imageView)
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
Why : translatesAutoresizingMaskIntoConstraints = true creates automatic constraints that conflict with your explicit constraints.
Symptom : View appears, but position shifts unexpectedly or _autolayoutTrace shows * (ambiguous).
Problem : Not enough constraints to determine unique position/size.
❌ WRONG (Ambiguous X position):
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
// Missing: horizontal position (leading/trailing/centerX)
✅ CORRECT :
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 20).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true // ← Added
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.heightAnchor.constraint(equalToConstant: 100).isActive = true
Rule : Every view needs:
Symptom : Unexpected constraint breaks, but all constraints seem correct.
Problem : Multiple constraints at same priority competing.
❌ WRONG :
// Both required (priority 1000)
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true
imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 150).isActive = true
// Impossible: width can't be 100 AND >= 150
✅ CORRECT :
let preferredWidth = imageView.widthAnchor.constraint(equalToConstant: 100)
preferredWidth.priority = .defaultHigh // 750
preferredWidth.isActive = true
let minWidth = imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 150)
minWidth.priority = .required // 1000
minWidth.isActive = true
// Result: width will be 150 (required constraint wins)
Priority levels (higher = stronger):
.required (1000) — Must be satisfied.defaultHigh (750) — Strong preference.defaultLow (250) — Weak preferenceUse case : View that should be certain size, but can shrink if needed.
// Preferred size: 200x200
let widthConstraint = imageView.widthAnchor.constraint(equalToConstant: 200)
widthConstraint.priority = .defaultHigh // 750
widthConstraint.isActive = true
let heightConstraint = imageView.heightAnchor.constraint(equalToConstant: 200)
heightConstraint.priority = .defaultHigh // 750
heightConstraint.isActive = true
// But never smaller than 100x100
imageView.widthAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
imageView.heightAnchor.constraint(greaterThanOrEqualToConstant: 100).isActive = true
// And never larger than container
imageView.widthAnchor.constraint(lessThanOrEqualTo: containerView.widthAnchor).isActive = true
imageView.heightAnchor.constraint(lessThanOrEqualTo: containerView.heightAnchor).isActive = true
Result : Image is 200x200 when space available, shrinks to fit container (min 100x100).
Content Hugging (resist expanding):
// Label should not stretch beyond its text width
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
Compression Resistance (resist shrinking):
// Label should not truncate if possible
label.setContentCompressionResistancePriority(.required, for: .horizontal)
Common pattern :
// In horizontal stack: priorityLabel (hugs) + spacer + valueLabel (hugs)
priorityLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
valueLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
// Spacer fills remaining space (low hugging priority)
spacerView.setContentHuggingPriority(.defaultLow, for: .horizontal)
Problem : View transformations (rotate, scale) don't affect Auto Layout.
Gotcha :
imageView.transform = CGAffineTransform(rotationAngle: .pi / 4) // 45° rotation
// Auto Layout still uses original (un-rotated) frame for calculations
Solution : Auto Layout works correctly, but visual debugging can be confusing. Use original frame for constraint debugging.
Check :
UIViewAlertForUnsatisfiableConstraintsSolution 1 : Use background color technique
expr ((UIView *)0x7f8b9c4...).backgroundColor = [UIColor redColor]
continue
Solution 2 : Print recursive description
po [0x7f8b9c4... recursiveDescription]
Solution 3 : Check view's class
po [0x7f8b9c4... class]
Check :
Check :
Wrong : Seeing constraint warning, continuing anyway.
Correct : Fix every constraint warning immediately. They compound and cause unpredictable layout later.
Wrong : Debugging constraints by memory address.
Correct : Always set constraint identifiers. 30 seconds now saves 30 minutes later.
Wrong : Setting leading + trailing + width.
Correct : Use 2 of 3 (leading + trailing, OR leading + width, OR trailing + width).
Wrong :
imageView.frame = CGRect(x: 50, y: 50, width: 100, height: 100) // Manual frame
imageView.widthAnchor.constraint(equalToConstant: 100).isActive = true // Auto Layout
Correct : Choose one approach. If using Auto Layout, set translatesAutoresizingMaskIntoConstraints = false and let constraints determine position/size.
Before (no systematic approach):
After (systematic debugging):
axiom-xcode-debugging skillaxiom-swiftui-performance skillaxiom-ui-testing skillDocs : /library/archive/documentation/userexperience/conceptual/autolayoutpg/debuggingtricksandtips
Last Updated : 2024 Minimum Requirements : Xcode 12+, iOS 11+ (symbolic breakpoints work on all versions)
Weekly Installs
100
Repository
GitHub Stars
601
First Seen
Jan 21, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode85
gemini-cli78
codex78
claude-code77
cursor75
github-copilot74
Sigma Tutor:基于布鲁姆2-Sigma方法的AI个性化学习导师,诊断提问精通进阶
1,100 周安装
Refero Design:研究优先设计方法,学习最佳实践,打造独特用户体验
1,000 周安装
Flutter MVVM架构实现指南:可扩展应用开发与provider依赖注入
1,100 周安装
CTF杂项挑战快速参考指南 | 沙箱逃逸、编码解码、信号处理与提权技术
1,200 周安装
安全最佳实践指南:识别语言框架漏洞,编写安全代码与生成修复报告
1,100 周安装
Playwright 交互式测试技能:持久会话调试本地Web/Electron应用,无需重启工具链
1,100 周安装