Jacky's blog
首页
  • Android
  • Web
  • Server
  • Python
  • iOS
  • Java
  • Vue
  • 计算机基础
  • 工具链
  • AI
  • 个人成长
  • 博客
  • 分类
  • 标签
  • 归档
收藏
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • Android
  • Web
  • Server
  • Python
  • iOS
  • Java
  • Vue
  • 计算机基础
  • 工具链
  • AI
  • 个人成长
  • 博客
  • 分类
  • 标签
  • 归档
收藏
GitHub (opens new window)
  • iOS 开发完整指南
    • 📚 知识体系全景(本文地图)
    • 🎯 学习路径建议(四阶段)
    • 🤔 iOS 生态与核心概念
      • 与 Android / HarmonyOS 概念对照
    • 🧭 查询导航:官方资源与按场景速查
      • 官方文档总入口
      • 按场景查文档
    • 🛠️ 开发环境搭建
      • Xcode 安装
      • 命令行工具(CLT)
      • 模拟器与真机
      • CocoaPods(≈ npm/ohpm)
      • 项目结构
    • 📝 Swift 语言基础
    • 🖼️ UI 框架与布局
      • SwiftUI(声明式,新代码首选)
      • UIKit(命令式,存量工程主流)
      • Auto Layout 与 SnapKit
    • 🔄 生命周期与架构模式
      • App 生命周期
      • ViewController 生命周期(面试必考)
      • 架构模式
    • 📊 状态管理与数据流(SwiftUI 属性包装器)
    • 🌐 网络与数据
    • ⚡ 并发编程
    • 🔍 调试与测试
    • 📦 签名与分发
    • 🧠 底层原理指引
    • 🛠️ 工具链总览
    • 📦 第三方库选型(按需引入)
    • 🌍 外部学习资源
    • ❓ 常见问题速查
    • 📖 配套文档索引
  • Swift 语法与最佳实践
  • oc语法
  • iOS 运行时
  • xcode的使用
  • xcrun 与 Xcode 命令行工具
  • pod
  • xcodebuild 命令行构建
  • Xcode 工程文件说明
  • ios
Jacky
2026-09-21
目录

iOS 开发完整指南

# 🚀 iOS 开发完整指南(入门标杆版)

定位:本文 = 学习路径 + 知识体系总览 + 资源导航,是 iOS 学习的唯一入口;深度细节拆到配套专题文档,不在这里长篇展开。 适合人群:有 Android/其他平台经验的移动开发工程师、想系统入门 iOS 的开发者 学习时间:2-3 个月 | 前置知识:任一门面向对象语言基础 实测环境:Xcode 27.0 (Build 27A266a) / macOS Apple Silicon

# 📚 知识体系全景(本文地图)

本文各章即对应知识域的入门总览;「深入」列只标注需要继续下钻的专题文档,— 表示入门深度止于本文。

分组 知识域 入门掌握要求 深入
🧠 认知与上手 生态与概念 封闭生态、语言/UI 双轨、签名体系 —
环境与工具 Xcode、模拟器、真机调试、CLT xcode、xcrun
依赖管理 CocoaPods、SPM pod
📝 语言 Swift 语法、可选类型、闭包、协议、并发 swift
Objective-C 能读能改老代码、混编 oc
🖼️ UI 与架构 UI 框架 SwiftUI 基础 + UIKit 认知 + Auto Layout swift
生命周期与架构 App/VC 生命周期、MVC/MVVM —
状态与数据流 SwiftUI 属性包装器 swift
🌐 数据与运行 网络与存储 URLSession、Codable、持久化三档 —
并发编程 GCD 概念 + async/await 实战 swift
底层原理 runtime 消息机制、dyld 启动 ios_runtime
🏗️ 工程化 调试与测试 断点、LLDB、Instruments、XCTest xcode
签名与分发 证书/Profile、分发渠道 —
性能优化 循环引用、视图更新机制 swift

# 🎯 学习路径建议(四阶段)

阶段 重点 配套
入门(0-1月) Swift 语法 + Xcode 操作 + 模拟器跑起来 + 写一个简单页面 swift、xcode
基础(1-3月) Auto Layout、UITableView、网络请求、数据存储、GCD、真机调试 pod、xcrun
进阶(3-6月) SwiftUI、async/await、架构模式(MVVM)、内存管理、Instruments swift、oc
高级(6月+) 性能优化、组件化、CI/CD、runtime 原理、系统能力深度集成 ios_runtime

# 🤔 iOS 生态与核心概念

iOS 是 Apple 的移动操作系统,与 Android 开放生态不同,iOS 是封闭生态闭环:IDE(Xcode)、语言(Swift/OC)、框架、分发(App Store)、签名体系全部由 Apple 主导。

  • 系统分层:应用层 → Cocoa Touch(UIKit/SwiftUI)→ Core Services(Foundation/网络)→ Core OS(内核)
  • 语言双轨:新代码 Swift,老工程 OC;可混编,桥接头文件互通
  • UI 双轨:SwiftUI 声明式(类比 Compose/ArkUI),UIKit 命令式(类比 View 体系);存量 App 以 UIKit 为主,新 App 推荐 SwiftUI
  • 签名体系:证书(身份)+ App ID + Entitlements(能力)+ Provisioning Profile(打包进 App),与 Android 的 APK 签名模型差异极大

# 与 Android / HarmonyOS 概念对照

概念 Android HarmonyOS iOS
语言 Java/Kotlin ArkTS Swift / OC
声明式 UI Jetpack Compose ArkUI SwiftUI
命令式 UI View 体系 — UIKit
IDE Android Studio DevEco Studio Xcode
构建 Gradle hvigor xcodebuild / Xcode
包管理 Gradle/Maven ohpm CocoaPods / SPM
设备工具 adb hdc simctl(模拟器)/ devicectl(真机)
工具入口 — — xcrun
安装包 .apk/.aab .hap/.app .ipa(真机)/ .app(模拟器)
签名 keystore 证书+Profile 证书+Provisioning Profile
后台机制 Service 后台任务 无常驻 Service,严格后台策略

# 🧭 查询导航:官方资源与按场景速查

# 官方文档总入口

资源 地址 用途
Apple Developer 文档 https://developer.apple.com/documentation API 参考、框架文档
Swift 语言手册 https://docs.swift.org/swift-book/ 语法、语言特性
WWDC 视频 https://developer.apple.com/videos/ 新特性发布、最佳实践(有中文字幕)
开发者论坛 https://developer.apple.com/forums/ 官方工程师答疑
SwiftUI 官方教程 https://developer.apple.com/tutorials/swiftui 跟着做一遍的入门教程

API 文档无官方中文版,Chrome 右键"翻译为中文"是最实用的方案,代码块不受影响。

# 按场景查文档

语言(Swift / OC)

问题 查哪里
语法、可选类型、协议、泛型 Swift Book → The Basics / Language Guide
与 OC 混编、桥接 搜 "Swift and Objective-C in the Same Project"
并发(async/await、Task、Actor) Swift Book → Concurrency 章节
宏(Macro) 搜 "Macros"

UI

问题 查哪里
UIKit 组件 https://developer.apple.com/documentation/uikit
Auto Layout / 约束 搜 "Auto Layout Guide"
SwiftUI 视图与布局 https://developer.apple.com/documentation/swiftui
SwiftUI 状态管理 SwiftUI → State and Data Flow
列表/表格 UITableView / UICollectionView / List
导航 UINavigationController / NavigationStack
Window / Scene UIWindow、UIWindowScene、UIScene

数据存储 / 网络 / 并发

场景 查哪里
轻量偏好设置 UserDefaults
关系型数据 Core Data 或 SwiftData(iOS 17+)
文件读写 FileManager
键值加密存储 Keychain(Security 框架)
HTTP/HTTPS URLSession、URLRequest
JSON 编解码 Codable、JSONEncoder/JSONDecoder
WebSocket / 后台下载 URLSessionWebSocketTask / background Configuration
网络状态 NWPathMonitor(Network 框架)
现代并发(推荐) async/await、Task、Actor
旧代码维护 GCD(DispatchQueue)、OperationQueue
定时器 Timer、Task.sleep

生命周期 / 调试 / 发布 / 系统能力

场景 查哪里
App 启动与前后台 UIApplicationDelegate、UISceneDelegate
SwiftUI App 生命周期 App 协议、@main
后台执行 BGTaskScheduler
崩溃排查 Xcode 崩溃报告、MetricKit
内存泄漏 Instruments → Leaks、Allocations
性能瓶颈 / 启动耗时 Instruments → Time Profiler / App Launch
证书与签名 developer.apple.com → Account → Certificates
TestFlight 内测 App Store Connect → TestFlight
审核指南 https://developer.apple.com/app-store/review/guidelines/
隐私清单 搜 "Privacy Manifest Files"
内购(IAP) StoreKit 框架
定位/相机/蓝牙/推送 CoreLocation / AVFoundation+Photos / CoreBluetooth / UserNotifications+APNs
Widget / Face ID / 快捷指令 WidgetKit / LocalAuthentication / App Intents

# 🛠️ 开发环境搭建

# Xcode 安装

推荐官网下载(https://developer.apple.com/download,App Store 版更新滞后且不便多版本共存)。多版本共存:重命名 /Applications/Xcode.app 为 Xcode_26.app 等,用 xcode-select 切换。

# 命令行工具(CLT)

xcode-select -p          # 当前激活的开发者目录
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer   # 切换
xcode-select --install   # 只装命令行工具(服务器/CI)
xcodebuild -version      # 验证
1
2
3
4

# 模拟器与真机

xcrun simctl boot "iPhone 15 Pro" && open -a Simulator   # 启动模拟器
1

模拟器/真机的设备列表、安装/卸载、截图录屏、隐私授权等全部命令,以及 simctl help 帮助体系,统一见 xcrun。

真机调试:Xcode → Settings → Accounts 添加 Apple ID → 设备开启开发者模式(iOS 16+)→ 自动管理签名。免费账号限制:最多 3 个 App ID、7 天过期、无推送等受限能力;付费 $99/年解除。

# CocoaPods(≈ npm/ohpm)

pod init && pod install   # 生成 xcworkspace,以后打开它而非 xcodeproj
1

pod install 只按 Podfile.lock 装锁定版本,pod update 才查新版本——高频坑,详见 pod。

# 项目结构

MyApp/
├── MyApp.xcodeproj / .xcworkspace
├── MyApp/
│   ├── AppDelegate / SceneDelegate / ViewControllers
│   ├── Assets.xcassets      # 资源(1x/2x/3x)
│   ├── Info.plist           # 权限声明/URL Scheme
│   └── *.entitlements       # 能力声明
└── Podfile
1
2
3
4
5
6
7
8

# 📝 Swift 语言基础

Swift 是强类型安全语言,有 Kotlin 基础上手极快:

特性 Kotlin Swift
空安全 String? + ?. String? + ?. / ! 强解包
只读/可变 val / var let / var
数据类 data class struct(值类型,默认推荐)
接口 interface protocol(可带默认实现)
扩展 extension fun extension(核心语言特性)
异步 suspend / coroutine async / await / Task
单例 object static let shared
var name: String? = "Jack"
let len = name?.count ?? 0          // 空合并,同 Kotlin 的 ?:
if let n = name { print(n) }        // 安全解包
guard let n = name else { return }  // 提前返回解包(更常用)
1
2
3
4

语法细节与最佳实践见 swift;OC 混编见 oc。

# 🖼️ UI 框架与布局

# SwiftUI(声明式,新代码首选)

struct ContentView: View {
    @State private var count = 0
    var body: some View {
        VStack { Text("count: \(count)"); Button("Tap") { count += 1 } }
    }
}
1
2
3
4
5
6

心智模型与 Compose/ArkUI 相同:UI = f(state),状态变 UI 自动刷新。

# UIKit(命令式,存量工程主流)

UIKit 组件体系速览:

  • 视图:UILabel/UIButton/UITextField/UIImageView 等基础视图,可组合成复杂界面
  • 视图控制器:UIViewController 管理视图的展示、布局与生命周期;UINavigationController/UITabBarController 管理导航与多视图切换
  • 布局:Auto Layout 约束系统,适配不同屏幕与方向
  • 事件:delegate、target-action、手势识别器(多点触控)
  • 列表:UITableView / UICollectionView 展示大量数据(列表/网格)
  • 其他:动画过渡、Core Graphics 绘制、文本字体处理
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)                    // 手动加视图树
NSLayoutConstraint.activate([...])       // 手动布局
1
2
3
4

# Auto Layout 与 SnapKit

代码写 Auto Layout 原生 API 冗长,SnapKit 是事实标准的布局 DSL 库:链式调用、类型安全(非法约束编译期报错)、支持相对约束,让代码布局接近自然语言:

view.snp.makeConstraints { make in
    make.center.equalToSuperview()
    make.width.height.equalTo(100)
}
1
2
3
4

面试与维护老代码必须懂 UIKit。

# 🔄 生命周期与架构模式

# App 生命周期

  • UIKit:AppDelegate(旧,全局事件)→ iOS 13+ 拆出 SceneDelegate(前台/后台激活等场景事件):didFinishLaunching → sceneDidBecomeActive ↔ sceneWillResignActive → sceneDidEnterBackground
  • SwiftUI:@main App 协议 + .scenePhase(.active/.inactive/.background)观察

# ViewController 生命周期(面试必考)

init → loadView → viewDidLoad → viewWillAppear → viewDidAppear
      → viewWillDisappear → viewDidDisappear → deinit
1
2
  • viewDidLoad:只执行一次,做一次性初始化(加子视图、网络请求)
  • viewWillAppear/Appear:每次进入屏幕都执行,刷新数据
  • deinit:释放回调,没走说明有循环引用

# 架构模式

模式 结构 适用
MVC(Apple 官方) View+Controller 耦合在 VC 里,易成 Massive VC 小页面、老代码
MVVM ViewModel 持有状态与逻辑,View 订阅渲染 主流,配 SwiftUI/Combine 更顺
MVC+MVVM 混合 VC 管导航生命周期,VM 管数据逻辑 存量工程渐进重构

# 📊 状态管理与数据流(SwiftUI 属性包装器)

入门先掌握三个:

包装器 用途 类比
@State 视图私有值类型状态 Compose remember
@Binding 子视图可写父视图状态 传 state + lambda
@Observable 引用类型可观察模型(iOS 17+) ViewModel

完整对比(8 个包装器速查表、@StateObject vs @ObservedObject 所有权选择、@AppStorage 在 ObservableObject 中的坑)见 swift。

# 🌐 网络与数据

struct Repo: Codable { let name: String; let stars: Int }
func fetch() async throws -> [Repo] {
    let (data, _) = try await URLSession.shared
        .data(from: URL(string: "https://api.github.com/...")!)
    return try JSONDecoder().decode([Repo].self, from: data)
}
1
2
3
4
5
6

持久化三档:UserDefaults(KV 轻量,≈ SharedPreferences)、文件/沙盒(FileManager)、Core Data/SwiftData(ORM)。加密键值用 Keychain。

# ⚡ 并发编程

三代演进:Thread(几乎不用)→ GCD/Operation(存量主流)→ async/await(现代推荐)。

  • 主线程更新 UI 是铁律:耗时操作丢 DispatchQueue.global(),回 DispatchQueue.main 更新
  • GCD 核心:串行/并发队列 + 同步/异步派发,任务以闭包提交,DispatchGroup 做协同等待
  • 新代码用 async/await + @MainActor,可读性和安全性都更好

GCD 实战、闭包循环引用([weak self])、Timer 泄漏等高频坑见 swift。

# 🔍 调试与测试

  • 断点:普通/条件断点、Exception Breakpoint 抓崩溃;LLDB 常用 po(打印对象)、p(打印值)、expr(运行时改值)
  • 视图调试:Xcode → Debug View Hierarchy 看视图层级(排查布局问题神器)
  • 日志:OSLog(可过滤、发布可保留)优于 print
  • 性能:Instruments → Time Profiler(CPU)/ Leaks(泄漏)/ App Launch(启动)
  • 内存:Memory Graph Debugger 查引用关系;deinit 打日志确认释放
  • 测试:XCTest 单元测试(xcodebuild test)+ UI 测试;先会写断点调试,再补测试习惯

快捷键与 Xcode 操作细节见 xcode。

# 📦 签名与分发

概念链:证书(开发者身份)+ App ID(应用标识)+ Entitlements(声明能力)+ Provisioning Profile(把前三者与设备绑定,打包进 App)。

渠道 证书类型 限制 场景
开发调试 免费/付费均可 免费 7 天过期、3 个 App ID 日常真机调试
Ad-hoc 付费 每年 100 台设备 内测分发
TestFlight 付费 经 App Store Connect,最多 1 万人 正式内测(推荐)
App Store 付费 需审核 正式发布
企业签 $299 企业证书 理论仅内部分发 不上架分发(风险自担)

上架流程:xcodebuild archive 归档 → exportArchive 导出 ipa → App Store Connect 上传 → TestFlight 内测 → 提审。

# 🧠 底层原理指引

  • OC runtime 消息机制:方法调用推迟到运行时(objc_msgSend),支持动态添加/交换方法(Method Swizzling)——详见 ios_runtime
  • dyld 启动优化:dyld2(in-process,启动时才链接)→ dyld3(部分 out-of-process,安装时预分析 Mach-O 写缓存,加快启动)——详见 ios_runtime
  • UITableView 刷新原理(数据源驱动)——详见 ios_runtime

# 🛠️ 工具链总览

工具 定位 类比
xcodebuild 命令行构建/测试/打包 gradle
xcrun 开发工具统一入口 见 xcrun
simctl / devicectl 模拟器 / 真机管理 adb / hdc
pod 依赖管理 ohpm / npm
instruments 性能分析 Android Profiler
xcodebuild archive -workspace MyApp.xcworkspace -scheme MyApp \
  -configuration Release -archivePath build/MyApp.xcarchive
xcodebuild -exportArchive -archivePath build/MyApp.xcarchive \
  -exportOptionsPlist ExportOptions.plist -exportPath build/ipa
1
2
3
4

# 📦 第三方库选型(按需引入)

用途 库
网络请求 Alamofire(简单场景 URLSession 即可)
图片加载 Kingfisher(Swift)/ SDWebImage(OC 老项目)
自动布局 SnapKit(UIKit 代码布局)
JSON 系统 Codable 足够
数据库 Realm(替代 Core Data 的轻量方案)
自动化 Fastlane(打包、签名、上架)

原则:能不用第三方就不用,系统框架优先,减少维护成本和审核风险。新项目依赖管理优先 SPM,老项目 CocoaPods。

# 🌍 外部学习资源

资源 地址 说明
Stanford CS193p https://cs193p.sites.stanford.edu/ 经典公开课,SwiftUI 版
Hacking with Swift https://www.hackingwithswift.com/ 免费,示例丰富
Ray Wenderlich https://www.raywenderlich.com/ 高质量教程(付费为主)
AppCoda https://www.appcoda.com/ 初学者友好
开源 iOS App 集合 https://github.com/dkhamsing/open-source-ios-apps 参考项目结构

# ❓ 常见问题速查

问题 答案
必须用 Mac 吗? 是,Xcode 仅支持 macOS
Swift 还是 OC? 新项目学 Swift,维护老项目再补 OC
最低支持版本? 建议 iOS 15+,覆盖绝大多数设备
UIKit 还是 SwiftUI? 新项目优先 SwiftUI;精细控制或兼容老系统用 UIKit
遇到崩溃怎么办? 崩溃栈 → 定位代码行 → 复现 → 断点排查
文档看不懂? 浏览器整页翻译 + 看 API 页底部 sample 代码

# 📖 配套文档索引

文档 内容
swift Swift 语法与最佳实践(闭包引用/GCD/SwiftUI 机制/内存/性能)
oc OC 语法专题
ios_runtime runtime 消息机制、dyld 启动、UITableView 原理
xcode Xcode 快捷键与使用
xcrun xcrun/simctl/devicectl 命令行专题
pod CocoaPods 专题
#iOS#Swift#Xcode
上次更新: 2026/10/09, 15:51:11
Swift 语法与最佳实践

Swift 语法与最佳实践→

最近更新
01
GitHub CLI(gh)工作流与 CI 排查
10-08
02
Xcode 工程文件说明
09-28
03
osascript
09-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式