参考#
Foundation
https://developer.apple.com/documentation/foundation
App 审核指南
https://developer.apple.com/cn/app-store/review/guidelines/
中文文档
https://developer.apple.com/cn/documentation/
SwiftGG
https://swiftgg.team/
这个页面可以找到更多苹果官方开发教程,以及下面几个链接
https://developer.apple.com/learn/
体系结构#
Apple 开发技术栈分类表#
| 分类 | 技术/框架名称 | 描述 | 适用平台 |
|---|---|---|---|
| 编程语言 | Swift | 现代、安全的编程语言,Apple 生态首选语言,支持面向协议、函数式编程。 | 全平台(iOS/macOS等) |
| Objective-C | 传统 Apple 开发语言,兼容 C,现逐渐被 Swift 替代,但仍用于维护旧项目。 | 全平台 | |
| C/C++ | 用于底层开发(如游戏引擎、系统级代码),通过 Objective-C 或 Swift 桥接调用。 | 全平台 | |
| UI 框架 | SwiftUI | 声明式 UI 框架,统一 iOS/macOS/watchOS/tvOS 开发,支持实时预览。 | iOS 13+/macOS 10.15+ 等 |
| UIKit | 传统 iOS/tvOS UI 框架,基于 MVC 模式,提供丰富的控件和交互。 | iOS/tvOS | |
| AppKit | macOS 原生 UI 框架,类似 UIKit,专为桌面应用设计。 | macOS | |
| WatchKit | 用于开发 watchOS 应用的 UI 框架,功能相对简化。 | watchOS | |
| 核心框架 | Foundation | 基础框架,提供字符串、集合、文件管理、日期等基础功能。 | 全平台 |
| Core Data | 数据持久化框架,支持对象关系映射(ORM)和复杂数据模型管理。 | 全平台 | |
| Core Animation | 动画和图层渲染框架,用于实现流畅的界面动画。 | 全平台 | |
| 图形与动画 | Metal | 高性能图形和计算 API,替代 OpenGL,支持 GPU 加速。 | 全平台 |
| Core Graphics (Quartz) | 2D 绘图框架,支持矢量图形、PDF 渲染等。 | 全平台 | |
| SpriteKit | 2D 游戏开发框架,支持动画、物理引擎和粒子效果。 | 全平台 | |
| SceneKit | 3D 图形渲染框架,支持模型加载、光照和物理模拟。 | 全平台 | |
| 数据与网络 | Combine | 响应式编程框架,处理异步事件流(类似 RxSwift)。 | iOS 13+/macOS 10.15+ 等 |
| URLSession | 网络请求框架,支持 HTTP/HTTPS、WebSocket 等协议。 | 全平台 | |
| CloudKit | 云端数据存储和同步服务,与 iCloud 深度集成。 | 全平台 | |
| 系统服务 | Core Location | 地理位置和定位服务,支持 GPS、蓝牙信标等。 | 全平台 |
| HealthKit | 健康和健身数据管理框架,与 Apple Health 集成。 | iOS/watchOS | |
| ARKit | 增强现实开发框架,支持面部追踪、环境感知等。 | iOS/iPadOS | |
| Core ML | 机器学习模型集成框架,支持设备端推理。 | 全平台 | |
| SiriKit | 集成 Siri 语音交互功能,支持自定义意图和响应。 | iOS/macOS/watchOS | |
| 开发工具 | Xcode | 官方集成开发环境(IDE),支持代码编辑、调试、界面设计和性能分析。 | macOS |
| Instruments | 性能分析工具,用于检测内存泄漏、CPU 使用率等。 | macOS | |
| Swift Package Manager | 依赖管理和代码分发工具,集成在 Xcode 中。 | 全平台 | |
| TestFlight | Beta 测试分发平台,用于内部和外部测试。 | 全平台 | |
| 跨平台技术 | Catalyst | 将 iPad 应用移植到 macOS 的技术,共享代码库。 | macOS (iPad 应用移植) |
| Flutter (第三方) | Google 的跨平台 UI 框架,支持 iOS/macOS 开发。 | 全平台(需 Dart 语言) | |
| React Native (第三方) | Meta 的跨平台框架,使用 JavaScript/TypeScript 开发原生应用。 | 全平台 | |
| 其他关键框架 | StoreKit | 应用内购买和订阅管理框架,支持 Apple 支付流程。 | 全平台 |
| AVFoundation | 音视频处理框架,支持录制、播放、编辑和流媒体。 | 全平台 | |
| MapKit | 地图和地理位置服务集成,支持自定义标注和路线规划。 | 全平台 | |
| WidgetKit | 开发主屏幕小组件(Widget),支持动态数据和交互。 | iOS 14+/macOS 11+ | |
| GameKit | 游戏社交功能集成(如排行榜、多人对战)。 | 全平台 | |
| PassKit (Apple Pay) | 集成 Apple Pay 和电子钱包(Wallet)功能。 | 全平台 | |
| WeatherKit | 天气数据 API,提供实时和预报天气信息。 | iOS 16+/macOS 13+ | |
| 新近技术 | Swift Concurrency | 异步编程模型(async/await),简化多线程和任务管理。 | iOS 15+/macOS 12+ |
| Swift Charts | 声明式图表绘制框架,集成于 SwiftUI。 | iOS 16+/macOS 13+ | |
| RealityKit | AR 和 3D 内容开发框架,支持实体交互和物理效果。 | iOS/iPadOS |
补充说明#
平台适配:
- iOS/iPadOS:主推 SwiftUI + UIKit,结合 ARKit、Core ML 等。
- macOS:AppKit(传统)或 SwiftUI(现代),Catalyst 用于跨平台移植。
- watchOS:SwiftUI + WatchKit,侧重轻量化交互。
- tvOS:UIKit 或 SwiftUI,支持焦点交互和媒体播放。
- 跨平台:优先使用 SwiftUI + Combine,减少平台差异代码。
技术选型建议:
- 新项目:SwiftUI + Combine + Core Data + Swift Concurrency。
- 旧项目维护:UIKit/AppKit + Objective-C(逐步迁移至 Swift)。
- 游戏开发:Metal + SpriteKit/SceneKit(或第三方引擎如 Unity)。
- 机器学习:Core ML + Create ML(模型训练工具)。
扩展学习:
- 官方文档:Apple Developer Documentation
- 技术栈图谱:Swift → SwiftUI → Combine → Core Data → Core ML/ARKit。
基本概念#
Foundation#
Foundation 框架提供了基础的、不依赖用户界面的核心功能。它是 Cocoa 应用程序的基础,使用了许多核心数据类型和服务,例如字符串处理、集合操作、日期和时间管理、多线程、文件操作、网络处理等。
- 数据类型:如
NSString、NSArray、NSDictionary、NSSet等。 - 日期与时间:如
NSDate、NSCalendar等。 - 文件管理:如
NSFileManager、NSData等。 - URL 和 NSData:如
NSURL、NSURLRequest等。 - 通知:如
NSNotificationCenter。 - 多线程与并发:如
NSThread、NSOperationQueue等。
Foundation 是构建所有 Cocoa 框架的基石,不依赖任何具体平台(相同的框架也存在于 iOS 的 Foundation 框架中)。
AppKit#
AppKit 框架则是专门用于 macOS 的应用程序开发的,它建立在 Foundation 之上,提供了开发图形用户界面(GUI)所需的所有组件和功能。
- 窗口和视图:如
NSWindow、NSView。 - 控件:如
NSButton、NSTableView、NSCollectionView。 - 事件处理:如键盘事件、鼠标事件。
- 绘图:如
NSImage、NSBezierPath、NSGraphicsContext。 - 动画:如
NSAnimation。 - 文档处理:如
NSDocument、NSDocumentController。 - 菜单:如
NSMenu、NSMenuItem。
UIKit#
UIKit 是专门用于 iOS、watchOS 和 tvOS 平台的 GUI 框架,用于构建这些系统的图形用户界面。它也建立在 Foundation 框架之上并提供了以下功能:
- 窗口和视图管理:如
UIWindow、UIView。 - 用户控件:如
UIButton、UITableView、UICollectionView。 - 事件处理:如触摸事件、手势识别。
- 绘图功能:如
UIImage、UIBezierPath、UIGraphicsContext。 - 动画和过渡:如
UIView动画、过渡动画。 - 导航控制:如
UINavigationController、UITabBarController。 - 手势识别:如
UITapGestureRecognizer、UIPanGestureRecognizer。
SwiftUI#
SwiftUI 和 Appkit、UIKit 一样,也是构建在 Foundation 之上的高级 UI 框架。
关系和区别#
关系#
- 继承关系:
- Foundation:位于基础层,提供通用的数据处理和应用程序管理功能。
- AppKit 和 UIKit:都建立在 Foundation 之上,分别为 macOS 和 iOS 提供 GUI 组件。
- 互补关系:
- Foundation 提供核心功能:如数据管理、文件操作、网络通信和多线程支持等。
- AppKit 和 UIKit 拓展了 Foundation:提供了 GUI 组件和用户交互功能,确保可以在各自平台上构建丰富的用户界面应用。
区别#
平台:
- Foundation:跨多平台使用,包括 macOS、iOS、watchOS 和 tvOS。
- AppKit:仅用于 macOS 平台。
- UIKit:用于 iOS、watchOS 和 tvOS 平台。
功能侧重:
- Foundation:侧重于非图形用户界面的核心功能。
- AppKit 和 UIKit:专注于图形用户界面的构建和用户事件处理,但它们的控件和 API 是针对各自的平台进行优化和设计的。
类前缀:
- Foundation:类通常以
NS前缀开头(源于 NeXTSTEP,历史原因)。 - AppKit:大多数类也以
NS前缀开头。 - UIKit:类通常以
UI前缀开头。
- Foundation:类通常以
除了 NS 和 UI 前缀,苹果平台上还有其他一些常见的前缀或命名约定,这些前缀通常用于标识特定功能或框架。以下是几个主要的前缀及其含义:
常见前缀和命名约定#
NS
- 框架: Foundation 和 AppKit
- 用途: 主要用于表示 NeXTSTEP 系统中的类,这是由于苹果公司在收购 NeXT 公司后继承了其命名约定。
- 示例:
NSString,NSArray,NSView,NSWindow
UI
- 框架: UIKit
- 用途: 主要用于 iOS, watchOS 和 tvOS 的用户界面相关类。
- 示例:
UIButton,UILabel,UIView,UITableView
CG
- 框架: Core Graphics
- 用途: 主要用于处理低级别的 2D 图形绘制。
- 示例:
CGContext,CGImage,CGRect,CGPoint
CA
- 框架: Core Animation
- 用途: 主要用于动画和图层相关的功能。
- 示例:
CALayer,CAAnimation,CABasicAnimation
AV
- 框架: AVFoundation、AVKit
- 用途: 主要用于音频和视频处理。
- 示例:
AVPlayer,AVAudioPlayer,AVCaptureSession
CL
- 框架: Core Location
- 用途: 主要用于定位和地理信息相关的功能。
- 示例:
CLLocation,CLLocationManager,CLGeocoder
MK
- 框架: MapKit
- 用途: 主要用于地图和地理位置相关的功能。
- 示例:
MKMapView,MKAnnotation,MKOverlay
SK
- 框架: SpriteKit
- 用途: 主要用于 2D 游戏开发及物理引擎。
- 示例:
SKSpriteNode,SKScene,SKAction
SCN
- 框架: SceneKit
- 用途: 主要用于 3D 图形渲染和游戏开发。
- 示例:
SCNNode,SCNScene,SCNCamera
MTL
- 框架: Metal
- 用途: 主要用于高性能图形和计算。
- 示例:
MTLDevice,MTLCommandBuffer,MTLRenderPipelineState
开发原则#
纯属个人经验
- 添加的 gesture 最好不要在组件内部,而是哪里使用了在哪里添加,避免多层 gesture 冲突。