Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Objective-C iOS Maintenance Agent Skill

一个面向 Objective-C + UIKit 项目的 Agent Skill,可用于 Codex 和 Claude Code,帮助维护、审查、重构、调试和编写更安全的 OC iOS 代码。

它重点关注旧项目里最容易出问题的地方:ARC 所有权、循环引用、KVO/KVC、Swift 混编、Xcode 工程与依赖配置、静态库/Pod category 符号裁剪、-ObjC / -force_load、CocoaPods/SPM 混用、闭源 .axcframework 迁移、头文件/PCH/modulemap、编译速度、废弃 API 与合规适配、UIWebViewWKWebView、隐私清单、Required Reason API、ATT/IDFA、权限体系、UIKit 性能、列表滚动、渲染卡顿、网络异步、本地数据持久化、内存泄漏、野指针诊断、崩溃日志符号化、dSYM/MetricKit、OOM/Jetsam/watchdog、pre-main 启动拆解、崩溃边界、重构安全网、安全审计、推送后台和静态扫描工具链落地。

适合场景

  • 维护老 Objective-C iOS 项目。
  • 审查 .h.m.mm 中的内存、线程、崩溃和性能风险。
  • 治理 Xcode 工程、.xcconfig、CocoaPods、SPM、静态库、闭源二进制、modulemap/PCH 和编译速度问题。
  • 盘点并迁移废弃 API,处理 App Store 隐私清单、Required Reason API、ATT/IDFA、相册/定位权限和现代 UI 适配。
  • 优化 UIKit 页面、列表、cell 复用、Auto Layout、渲染和启动性能。
  • 处理 retain cycle、block capture、timer、observer、delegate、KVO/KVC 等常见坑。
  • 为无测试老代码补 characterization test、OCMock、快照测试,并安全拆分 Massive ViewController、收敛单例和 NSNotificationCenter
  • 审查 ATS 例外、SSL pinning、硬编码密钥、WKWebView JS bridge 注入面、本地敏感数据和越狱检测边界。
  • 治理 APNs 证书到 p8 token auth 迁移、推送回调、beginBackgroundTask 泄漏和 BackgroundTasks 适配。
  • 落地 clang static analyzer、Infer、OCLint 和 -Wall warning baseline / 分级 / CI 门禁。
  • 审查 NSUserDefaults、Keychain、文件存储、归档、Core Data、SQLite/FMDB、离线缓存和数据迁移问题。
  • 改善 Objective-C 与 Swift 混编边界。
  • 给新手生成更保守、更不容易出错的 OC + UIKit 基础架构。

核心能力

  • 内存与所有权strong / weak / copy / assign、block 必须 copy、weak delegate、weak/strong dance。
  • 崩溃治理:崩溃分类、证据闭环、崩溃日志符号化、dSYM/UUID 管理、MetricKit 接入、集合 nil/越界、KVC/KVO 崩溃、动态 selector、列表批量更新一致性、野指针诊断、OOM/Jetsam/FOOM/watchdog、运行时兜底边界。
  • UIKit 性能:离屏渲染、圆角、阴影、mask、透明混合、shouldRasterize、cell 复用、滚动掉帧、pre-main/+load/动态库启动拆解。
  • 异步与线程NSError **、completion handler、GCD、NSOperation、NSURLSession、主线程 UI 更新、队列死锁、QoS 优先级反转、锁迁移、GCD 线程膨胀和 atomic 边界。
  • 数据持久化NSUserDefaults 滥用、Keychain 后台访问时机、文件目录与备份策略、原子写、NSCodingNSSecureCoding、Core Data 跨线程和迁移失败兜底、SQLite/FMDB 线程安全与 WAL、离线缓存和数据迁移。
  • Swift 混编:bridging header、module、生成的 -Swift.h、nullability、generics、NS_SWIFT_NAMENS_REFINED_FOR_SWIFT
  • 构建系统与依赖project.pbxproj 冲突、target/scheme 配置漂移、.xcconfig 分层、CocoaPods/SPM 混用、静态库 category 符号裁剪、-ObjC / -force_load、闭源 .axcframework、PCH/modulemap 和编译速度治理。
  • 合规与废弃 APIUIWebViewWKWebView、JS bridge 白名单、cookie/session、AddressBook→Contacts、ALAssetsLibrary→Photos/PHPicker、UIAlertViewUIAlertControllerPrivacyInfo.xcprivacy、Required Reason API、ATT/IDFA、相册 Limited、精确定位、安全区、Dark Mode、Dynamic Type 和 iPad 多窗口。
  • 重构安全网:characterization test、OCMock、快照测试、Massive ViewController 拆分、单例 façade/protocol 化和 notification typed payload 收敛。
  • 安全审计:ATS 例外收敛、SSL pinning 设计与轮换、硬编码密钥扫描、WKWebView JS bridge 注入面、deep link、本地敏感数据和越狱检测。
  • 推送与后台:APNs p8 token auth、device token 环境隔离、notification extension、静默推送、beginBackgroundTaskBGTaskScheduler 生命周期。
  • 静态工具链:clang static analyzer / xcodebuild analyze、Infer、OCLint、warning baseline、CI 分级门禁和误报处理。
  • 诊断辅助:提供 Objective-C 风险巡检脚本,帮助快速发现需要人工 review 的代码线索。
  • 新手安全层:当用户经验不明确或从零写功能时,默认采用保守 MVC + MVVM-lite 分层,避免 runtime/swizzling/manual KVO 等高风险方案。

安装与使用

这个仓库以 SKILL.md 作为统一入口,Codex 和 Claude Code 都可以读取。agents/openai.yaml 只用于 Codex/OpenAI UI 展示;Claude Code 会使用 SKILL.mdreferences/scripts/assets/

Codex

将仓库克隆到 Codex skills 目录:

mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
git clone https://github.com/sun6762/objc-ios-maintenance.git "${CODEX_HOME:-$HOME/.codex}/skills/objc-ios-maintenance"

在 Codex 中可通过 $objc-ios-maintenance 明确调用,也可以让 Codex 根据任务自动选择:

使用 $objc-ios-maintenance 审查这个 Objective-C 页面退出后不释放的问题。
使用 $objc-ios-maintenance 帮我优化这个 UITableView 滚动掉帧问题。
使用 $objc-ios-maintenance 从零写一个安全的 Objective-C + UIKit 列表页。

Claude Code

作为个人 skill 安装到 Claude Code:

mkdir -p ~/.claude/skills
git clone https://github.com/sun6762/objc-ios-maintenance.git ~/.claude/skills/objc-ios-maintenance

也可以作为某个项目的 project skill 安装。若希望团队共享,推荐用 git submodule 提交到业务项目:

mkdir -p .claude/skills
git submodule add https://github.com/sun6762/objc-ios-maintenance.git .claude/skills/objc-ios-maintenance

在 Claude Code 中可通过 /objc-ios-maintenance 明确调用,也可以直接描述任务让 Claude 自动选择:

/objc-ios-maintenance 审查这个 Objective-C 页面退出后不释放的问题。
/objc-ios-maintenance 帮我优化这个 UITableView 滚动掉帧问题。
/objc-ios-maintenance 从零写一个安全的 Objective-C + UIKit 列表页。

使用建议

  • 如果是审查、修复或重构旧 OC 项目,直接描述代码位置和问题现象。
  • 如果是从零写 OC + UIKit 功能,说明页面类型、数据来源、是否已有 Masonry/SDWebImage 等项目依赖。
  • 如果是处理本地数据问题,说明数据类型、存储位置、是否涉及账号切换/退出登录、升级迁移、离线可用或敏感数据。
  • 如果要求 runtime 防崩溃兜底,需要同时提供崩溃日志、启用范围、灰度/回滚要求;该 Skill 默认不会把 runtime/swizzling 当作首选方案。
  • Claude Code skills 官方说明见 Extend Claude with skills

目录结构

objc-ios-maintenance/
├── SKILL.md
├── agents/
│   └── openai.yaml        # Codex/OpenAI UI 元数据;Claude Code 可忽略
├── scripts/
│   ├── scan_objc_risks.py
│   └── test_scan_objc_risks.py
├── references/
│   ├── beginner-uikit-architecture.md
│   ├── memory-ownership.md
│   ├── scrolling-performance.md
│   ├── uikit-rendering-performance.md
│   ├── crash-symbolication-metrickit.md
│   ├── build-system-dependencies.md
│   ├── refactoring-safety-net.md
│   ├── security-audit.md
│   ├── push-background.md
│   ├── static-analysis-toolchain.md
│   ├── compliance-adaptation.md
│   ├── dangling-pointer-diagnostics.md
│   ├── data-persistence.md
│   ├── oom-watchdog-diagnostics.md
│   ├── runtime-crash-guard.md
│   └── ...
├── assets/
│   ├── snippets/
│   │   └── webview/
│   └── templates/
└── evals/
    └── evals.json

可用脚本

scripts/scan_objc_risks.py 可以对 Objective-C 项目做启发式风险扫描:

python3 scripts/scan_objc_risks.py /path/to/YourProject
python3 scripts/scan_objc_risks.py /path/to/YourProject --category rendering
python3 scripts/scan_objc_risks.py /path/to/YourProject --category build
python3 scripts/scan_objc_risks.py /path/to/YourProject --category compliance
python3 scripts/scan_objc_risks.py /path/to/YourProject --category persistence
python3 scripts/scan_objc_risks.py /path/to/YourProject --category runtime
python3 scripts/scan_objc_risks.py /path/to/YourProject --category security
python3 scripts/scan_objc_risks.py /path/to/YourProject --category background
python3 scripts/scan_objc_risks.py /path/to/YourProject --category toolchain
python3 scripts/scan_objc_risks.py /path/to/YourProject --min-level warning
python3 scripts/scan_objc_risks.py /path/to/YourProject --format json --max-findings 50

注意:脚本输出是 review 线索,不是确定缺陷。每条命中都需要结合调用路径、生命周期、线程和业务语义人工判断。runtime 分类会重点提示 +load、KVC/KVO、swizzling/hook、消息转发链和 NSClassFromString 字符串类名。

内置模板

  • assets/snippets/UIView+OCMPerformance.*:显式调用的 UIView 渲染性能辅助分类。
  • assets/snippets/OCMWeakProxy.*:用于 timer / display link target 循环引用场景。
  • assets/snippets/OCMCrashSafety.*:用于集合边界、JSON 类型收敛和主线程 UI 回调的显式 helper。
  • assets/snippets/webview/:WKWebView 合规模板,包含页面级 OCMWebView、factory、cookie coordinator、安全白名单和 weak script message delegate。
  • assets/templates/beginner-uikit/:新手安全层的 Objective-C + UIKit 列表页模板,包含 Model、Service、ViewModel、Cell、ViewController。

复制模板到业务项目后,建议把 OCM 前缀替换为项目自己的前缀,避免 category 或类名冲突。

重要边界

这个 Skill 默认优先修真实问题,不鼓励用“全局防崩溃分类”掩盖业务缺陷。

运行时兜底、method swizzling、集合 swizzling、KVO swizzling 属于非默认方案,只适合历史包袱项目的线上止血。使用前应具备崩溃日志、白名单、日志限频、灰度、远端开关和回滚方案。

野指针、内存破坏、OOM、Jetsam、FOOM、watchdog、C/C++ 崩溃不能依靠 Objective-C runtime guard 可靠兜底。

后续计划

  • 增加更多真实旧项目审查案例。
  • 扩展静态扫描脚本的规则和输出格式。

License

本项目使用 MIT License

About

Objective-C iOS maintenance skill for legacy UIKit apps. Helps review, refactor, debug, and write safer OC code with guidance on ARC ownership, retain cycles, KVO/KVC, Swift interop, performance, scrolling, rendering, crash prevention, networking, and beginner-safe UIKit architecture.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages