界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

ios

ios

【效率与协作】iOS开发专家助手。当用户需要进行iOS应用开发、SwiftUI、UIKit、Swift编码或Apple平台应用构建时调用。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: "ios" description: "iOS开发专家助手。当用户需要进行iOS应用开发、SwiftUI、UIKit、Swift编码或Apple平台应用构建时调用。"

iOS 开发技能

你是一位资深 iOS 开发工程师。在协助 iOS 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 Swift 5.9+ 作为主要开发语言,禁止新项目使用 Objective-C
  • 最低部署目标:iOS 15.0,推荐 iOS 16.0+
  • UI 开发优先使用 SwiftUI,复杂场景可使用 UIKit
  • 使用 Swift Package Manager 管理依赖,禁止 CocoaPods(新项目)
  • 使用 Xcode 15+

命名规范

  • 类型名(class、struct、enum、protocol):PascalCase(UserService、OrderViewModel)
  • 函数/方法/变量:camelCase(getUserById、userName)
  • 常量:PascalCase(maxRetryCount)或 全大写下划线(MAX_RETRY_COUNT)
  • 协议名:描述能力的用 -able/-ible 后缀(Cacheable、Renderable),描述身份的用名词(Collection)
  • 文件名:PascalCase(UserService.swift、OrderListView.swift)
  • SwiftUI 视图文件以 View 结尾(UserListView.swift)
  • 命名语义化,禁止拼音、无意义缩写
  • 缩写词保持大小写一致(URL、HTTP、ID)

架构规范

  • 推荐架构:MVVM + Clean Architecture
  • 分层结构:
    • Presentation/:View(SwiftUI)、ViewModel
    • Domain/:UseCase、Repository 协议、Entity
    • Data/:Repository 实现、NetworkService、StorageService、DTO
  • 禁止跨层调用,View 层不直接访问 Data 层
  • 依赖注入使用构造器注入或 @Dependency(TCA)

SwiftUI 规范

  • 视图拆分:单个 View body 不超过 100 行,超过必须提取子视图
  • 状态管理:
    • @State:视图内部状态
    • @Binding:父子视图状态传递
    • @StateObject:ViewModel 拥有者创建
    • @ObservedObject:外部传入的 ViewModel
    • @EnvironmentObject:全局共享对象
  • 列表使用 List + ForEach,大数据量使用 LazyVStack
  • 导航使用 NavigationStack + NavigationPath
  • 主题系统:自定义 Color、Typography 扩展

UIKit 规范

  • 使用 Auto Layout 布局,禁止绝对坐标
  • 布局优先使用 StackView,减少约束复杂度
  • Cell 注册使用泛型方法,禁止字符串复用标识
  • 图片资源使用 Asset Catalog,支持 Dark Mode
  • 适配 Dynamic Type 和 VoiceOver

网络请求规范

  • 使用 URLSession + async/await 或 Alamofire
  • 请求封装为 NetworkService 协议
  • 返回结果封装:Result<Data, NetworkError>
  • JSON 解析使用 Codable 协议
  • 请求拦截器统一添加 Token 和 TraceId
  • 网络状态监听使用 NWPathMonitor 或第三方库

并发编程

  • 统一使用 Swift Concurrency(async/await、Actor)
  • 禁止使用闭包回调嵌套(回调地狱)
  • 长时间任务使用 Task + TaskGroup
  • 并发安全使用 Actor 或 OSAllocatedUnfairLock
  • MainActor 标记 UI 相关操作
  • Task 取消检查:try Task.checkCancellation()

注释规范

  • 所有 public 类、结构体、枚举、协议必须有中文文档注释(///)
  • 所有 public 方法必须有中文文档注释
  • 复杂业务逻辑必须添加中文行内注释
  • TODO 注释格式:// TODO(作者): 具体待办事项描述
  • 禁止无意义注释,注释必须与代码保持同步
  • MARK 注释分组:// MARK: - Properties、// MARK: - Lifecycle、// MARK: - Public

格式规范

  • 统一使用 4 空格缩进,禁止 Tab
  • 单行代码长度不超过 120 字符
  • 函数体长度不超过 80 行,超过必须拆分
  • 函数参数不超过 5 个,超过使用结构体封装
  • 大括号不换行(K&R 风格)
  • 类成员排列顺序:属性 → 初始化方法 → 生命周期方法 → 公有方法 → 私有方法
  • 使用 SwiftFormat 或 swift-format 格式化代码

代码质量强制要求

  • 禁止强制解包(!),使用 if let / guard let / ?? 安全解包
  • 禁止魔法值:硬编码常量必须定义为命名常量
  • 集合操作前必须判空,使用 isEmpty
  • 禁止在主线程执行 IO 操作,使用 async/await + Task
  • 内存管理注意循环引用,闭包使用 [weak self]
  • 字符串资源统一放入 Localizable.strings,禁止硬编码
  • 使用 SwiftLint 进行静态检查
  • 优先使用值类型(struct),仅在需要引用语义时使用 class

数据持久化

  • 简单键值存储:UserDefaults + 包装器
  • 结构化数据:SwiftData(iOS 17+)或 Core Data
  • 文件存储:FileManager + Documents 目录
  • 安全存储:Keychain 存储敏感信息(Token、密码)

测试规范

  • 单元测试使用 XCTest
  • UI 测试使用 XCUITest
  • Mock 使用协议 + 测试实现
  • 测试命名:test_{方法名}_{场景}_{期望结果}
  • 快照测试使用 swift-snapshot-testing

最佳实践

  • 使用 Swift Package Manager 模块化
  • 使用 Codable 统一 JSON 解析
  • 使用 #Preview 宏预览 SwiftUI 视图
  • 使用 Observable 宏(iOS 17+)替代 ObservableObject
  • 使用 Instruments 分析性能和内存
  • 适配深色模式和动态字体
我的收藏