用途
该技能用于指导构建 Apple 平台原生应用,覆盖 iOS、iPadOS、tvOS,并延伸至 watchOS 与 visionOS。适用于开发 Apple 平台应用、实现 iOS 特定功能,或遵循 Apple Human Interface Guidelines 的场景。
平台支持
资料给出的最低目标与当前版本对照:
| 平台 | 最低目标 | 当前 |
|---|---|---|
| iOS | iOS 15.0+ | iOS 17+ |
| iPadOS | iPadOS 15.0+ | iPadOS 17+ |
| tvOS | tvOS 15.0+ | tvOS 17+ |
| watchOS | watchOS 8.0+ | watchOS 10+ |
新项目建议最低目标设为 iOS 17+,以便使用 @Observable(17)、SwiftData(17)、NavigationStack(16)、Swift Charts(16)、MeshGradient(18)、ControlWidget(18)等能力。
主要能力
SwiftUI(新项目首选)
- 基本结构:使用
@main的 App 与WindowGroup,视图通过@State管理局部状态,使用.buttonStyle(.borderedProminent)等修饰符。 - 状态管理:
@State、@Binding、@StateObject、@ObservedObject、@Environment、@EnvironmentObject、@AppStorage(UserDefaults)。 - 现代并发:
async/await、在视图中用.task调用异步方法、使用@MainActor类配合@Published更新 UI。 - 导航(iOS 16+):
NavigationStack结合NavigationPath与navigationDestination(for:)实现类型安全导航。 - 列表与网格:
List配合ForEach、.onDelete、.onMove、.listStyle(.insetGrouped)、.searchable、.refreshable;LazyVGrid配合GridItem(.adaptive(minimum: 150))。
UIKit(遗留/复杂 UI)
- 视图控制器生命周期:
viewDidLoad、viewWillAppear、viewDidAppear。 - Auto Layout:通过
NSLayoutConstraint.activate编写约束,使用safeAreaLayoutGuide。
数据持久化
- Core Data:
NSManagedObject模型与@FetchRequest排序查询。 - SwiftData(iOS 17+):使用
@Model定义模型,视图中用@Query查询,通过@Environment(\.modelContext)插入数据。 - Keychain:使用 Security 框架的
SecItemDelete与SecItemAdd存储敏感数据。
网络
使用 URLSession 的 async/await 请求,通过 HTTPURLResponse 校验状态码(200...299),并用 JSONDecoder 解码;示例以 actor NetworkService 封装。
人机界面指南
iOS 设计原则:Clarity(文本清晰、图标精确、装饰克制)、Deference(内容优先、UI 不喧宾夺主)、Depth(视觉层次与真实动效传达层级)。关键尺寸:触摸目标最小 44x44 pt、导航栏 44 pt、标签栏 49 pt、状态栏 47 pt(刘海屏)/ 20 pt(旧版)。安全区域使用 .safeAreaInset、.ignoresSafeArea。
平台特定
iPadOS:NavigationSplitView 分栏、.keyboardShortcut 快捷键、.hoverEffect 悬停效果。tvOS:使用 @FocusState 与 .focused、.focusable() 管理焦点,适配 10 英尺界面的大号字体(如 .font(.system(size: 38)))。
App Store 要求
必需资源包括 App 图标(1024x1024)、各设备尺寸截图、隐私政策 URL、App 描述(最多 4000 字符)。隐私需在 Info.plist 中声明 NSCameraUsageDescription、NSPhotoLibraryUsageDescription 等;App Transport Security 通过 NSAppTransportSecurity 配置。
测试
单元测试使用 XCTest(@testable import、XCTAssertEqual,支持 async 测试);UI 测试使用 XCUIApplication,在 setUp 中设置 continueAfterFailure = false 并启动应用,通过 app.buttons、app.staticTexts 断言。
使用方式
技能以代码示例形式给出可直接参考的模式,包括项目结构建议:App/(入口)、Features/(按功能划分视图与 ViewModel)、Core/(Models、Services、Extensions)、Resources/(Assets.xcassets、Localizable.strings)、Tests/。
最佳实践(DO):新项目用 SwiftUI、支持 Dynamic Type 无障碍、处理所有设备方向、实现完善错误处理、充分利用 Swift 类型系统。避免(DON'T):无校验地强制解包可选值、主线程阻塞网络调用、硬编码字符串(应本地化)、忽略内存管理(循环引用)、跳过无障碍标签。
进阶内容
@Observable 宏(iOS 17+,替代 ObservableObject)
使用 @Observable 标注类,属性用普通 var 即可,视图中用 @State 持有实例,无需 @StateObject/@ObservedObject;双向绑定使用 @Bindable。迁移对照:class: ObservableObject → @Observable class;@Published var → var(自动);@StateObject → @State;@ObservedObject → 直接引用;@EnvironmentObject → @Environment(TypeName.self)。
SwiftUI 6 新视图与修饰符
包括 MeshGradient(iOS 18+)、缩放导航过渡 matchedTransitionSource、ScrollView 增强(scrollPosition、defaultScrollAnchor)、自定义容器与 @Entry 宏。
Swift 6 并发
严格并发检查(SWIFT_STRICT_CONCURRENCY = complete);跨隔离边界的数据需 Sendable;actor 隔离;全局 actor(如 @MainActor);类型化 throws(throws(DataError))。
visionOS 与空间计算
使用 WindowGroup 创建 2D 窗口、ImmersiveSpace 创建沉浸空间、.windowStyle(.volumetric) 创建 3D 体积窗口;集成 RealityKit 的 RealityView、MeshResource、ModelEntity 与空间点击手势。
watchOS 开发
SwiftUI 构建 watchOS App,Widget 与 StaticConfiguration 创建复杂功能/小组件(支持 .accessoryCircular、.accessoryRectangular、.accessoryInline),使用 WatchConnectivity 的 WCSessionDelegate 实现 iPhone 与 Watch 通信。
适用场景与限制
适用场景:开发 iOS/iPadOS/tvOS 原生应用、实现 iOS 特定功能、遵循 Apple 人机界面指南、进行 Apple 平台数据持久化与网络开发、编写 Apple 平台测试。
限制:资料未提供该技能的安装命令、收费模式、价格、平台依赖或效果说明,上述信息暂未提供。