iOS 最低支持版本怎么定?2026 年 App 最低支持版本选择
iOS 最低支持版本,2026 年新开的 App 一般定 iOS 16 或 iOS 17,iOS 15 以下不必考虑。按 Apple 系统占比、自己的用户数据、核心 API 和依赖库要求三者取最高,附各版本最老机型和主流框架最低要求。
iOS 最低支持版本怎么定?2026 年新开的 App 一般定在 iOS 16 或 iOS 17,iOS 15 只在用户里还有不少旧机型时才保留,iOS 15 以下不必考虑。具体做法是看三样东西:Apple 公布的系统占比、你自己 App 的用户数据、核心 API 和依赖库要求的最低版本,取三者里最高的那个。下面附各版本支持的最老机型和主流框架的最低要求,Apple 规则截至 2026 年 10 月。
Apple 公布的 iOS 系统占比是多少?
Apple 在 App Store 设备使用情况页面公布各系统的占比,按某一天在 App Store 有过交易的设备统计。截至 2026 年 10 月,页面上最新的一次统计日期是 2026 年 6 月 7 日。
| 统计范围 | 已在最新大版本上的比例 |
|---|---|
| 所有 iPhone | 79% 在 iOS 26 |
| 近四年发布的 iPhone | 86% 在 iOS 26 |
| 所有 iPad | 68% 在 iPadOS 26 |
| 近四年发布的 iPad | 79% 在 iPadOS 26 |
这组数字只告诉你「最新版本占多少」,剩下的 21% 分布在 iOS 18 及更早的各版本,Apple 没有逐版拆开。这 21% 里有一部分是 iPhone XS、XR 这类已经装不了 iOS 26 的机型,见下一节的表。
用这组数据时注意两点。它统计的是全球 App Store 活跃设备,你的用户群可能偏老(例如面向中老年人、二线城市、企业采购的旧机)或偏新(例如面向开发者、摄影爱好者)。另外,iOS 27 在 2026 年 9 月发布,下一次更新的数字会变成 iOS 27 的占比。
怎么用自己的用户数据定最低支持版本?
已经上线的 App,以自己的数据为准,它比任何全网统计都准。
- 统计或崩溃分析 SDK。大多数统计和崩溃分析工具都能按系统版本分组,看最近 30 天的活跃用户分布。
- 服务端日志。App 请求接口时在 User-Agent 或请求头里带上系统版本,按日活去重后统计。
- 按收入加权。付费用户和免费用户的设备分布可能不同。如果 iOS 15 的用户占 3%,但贡献的订阅收入接近零,砍掉的代价就很小。
一个常用的判断线是:某个版本及以下的活跃用户加起来不到 2% 到 5%,就可以考虑在下一个大版本里放弃它。还没上线的新 App,直接用上一节 Apple 的数字。
常用 API 需要的最低 iOS 版本是多少?
部署目标低于某个 API 的引入版本,编译器会报 is only available in iOS 17.0 or newer,只能用 if #available 包起来,在老系统上另写一套或者隐藏这个功能。下表是常见能力的最低版本,取自 iOS SDK 里的可用性标注。
| 能力 | 框架 | 最低 iOS |
|---|---|---|
| App 内购买新接口 | StoreKit 2 | 15 |
| Swift Charts 图表 | Charts | 16 |
| 快捷指令与 Siri 动作 | App Intents | 16 |
| 实时活动与灵动岛 | ActivityKit | 16.1 |
| 本地数据库 | SwiftData | 17 |
| 可交互的小组件按钮 | SwiftUI Button(intent:) |
17 |
| 功能提示气泡 | TipKit | 17 |
| 设备端大模型 | Foundation Models | 26 |
SwiftUI 各版本能用的界面能力另有一张更细的表,见 SwiftUI 还是 UIKit。如果 App 的核心卖点就是某个新能力,比如实时活动或 SwiftData,最低版本直接定到它要求的版本,比在每个调用点写判断省事得多。
不是核心功能的,可以保留低版本,只在新系统上打开这个功能。
1import SwiftUI
2import TipKit
3
4@available(iOS 17.0, *)
5struct NotificationTip: Tip {
6 var title: Text { Text("打开通知") }
7 var message: Text? { Text("到货提醒会第一时间推送给你") }
8}
9
10struct SettingsView: View {
11 var body: some View {
12 List {
13 if #available(iOS 17.0, *) {
14 TipView(NotificationTip())
15 }
16 Toggle("到货提醒", isOn: .constant(true))
17 }
18 }
19}
20
21func configureTips() {
22 if #available(iOS 17.0, *) {
23 try? Tips.configure()
24 }
25}
这段代码在部署目标 iOS 15、Swift 5 和 Swift 6 语言模式下都能编译通过。iOS 15、16 的用户看不到提示气泡,其他功能照常。
各 iOS 版本最老支持哪款 iPhone?
最低版本定在哪一版,就等于放弃了装不上这一版的机型。下表来自 Apple 官方的 iPhone 兼容机型列表。
| iOS 版本 | 支持的最老 iPhone | 和上一版相比去掉的机型 |
|---|---|---|
| iOS 15 | iPhone 6s、6s Plus、iPhone SE(第 1 代) | 与 iOS 14 相同 |
| iOS 16 | iPhone 8、8 Plus、iPhone X、iPhone SE(第 2 代) | iPhone 6s、7 系列、SE(第 1 代) |
| iOS 17 | iPhone XR、XS、XS Max | iPhone 8、8 Plus、iPhone X |
| iOS 18 | iPhone XR、XS、XS Max | 与 iOS 17 相同 |
| iOS 26 | iPhone 11 系列、iPhone SE(第 2 代) | iPhone XR、XS、XS Max |
| iOS 27 | iPhone 11 系列、iPhone SE(第 2 代) | 与 iOS 26 相同 |
来源:iOS 15、iOS 16、iOS 17、iOS 18 的 iPhone 使用手册「支持的机型」页,以及 iOS 27 页面的兼容设备列表。iOS 18 和 iOS 27 没有去掉任何 iPhone,所以最低版本定在 iOS 17 和 iOS 18 覆盖的机型一样,定在 iOS 26 和 iOS 27 覆盖的机型也一样。
由此可以看出一个取舍点:最低版本定在 iOS 17 或 iOS 18,仍能照顾到 2018 年的 iPhone XR、XS;定在 iOS 26,这三款就装不上了。
Apple 对上传 App 的最低版本有什么要求?
最低版本还受 Apple 规则约束。截至 2026 年 10 月,Upcoming requirements 里和版本有关的两条如下。
| 要求 | 生效日期 | 内容 |
|---|---|---|
| SDK 最低版本 | 2026 年 4 月 28 日 | 上传的 App 必须用 Xcode 26 或更高、iOS 26 SDK 构建 |
| 最低部署目标 | 2026 年 9 月 9 日 | 上传的 iOS 和 iPadOS App 部署目标必须是 iOS 13 或更高 |
iOS 13 只是上传的底线。Apple 的 Xcode 支持页写明,Xcode 26 和 Xcode 27 支持上传的部署目标范围都从 iOS 15 开始。所以实际能选的最低版本是 iOS 15。
SDK 版本和部署目标是两回事。SDK 决定你能调用哪些接口,部署目标决定 App 能装在哪些系统上。用 iOS 27 SDK 构建、部署目标设成 iOS 16 是正常的组合。
Flutter、React Native、Expo 要求的最低支持版本是多少?
用跨平台框架或大型第三方 SDK 时,你的最低版本不能低于它们的要求。截至 2026 年 10 月,各官方文档写明的版本如下。
| 框架 / SDK | 版本 | 最低 iOS | 来源 |
|---|---|---|---|
| Flutter | 3.47 | 15 | Supported deployment platforms |
| React Native | 0.76 起 | 15.1 | React Native 社区公告 |
| Expo | SDK 56、57、58 | 16.4 | Expo SDK 版本表 |
| Firebase Apple SDK | 13.0.0 | 15 | Firebase iOS 版本说明 |
以上是框架本身的要求,你用到的插件、Pod 可能要求更高。最终的最低版本取所有依赖里最高的那个。Flutter 插件把版本提上去导致 pod install 失败的情况,见 Flutter iOS 编译常见错误。用 Expo 的,最低版本至少是 16.4。
提高最低支持版本会影响现有用户吗?
把最低版本从 iOS 15 提到 iOS 17,提交的新版本只能在 iOS 17 及以上安装。对系统低于 iOS 17 的用户,影响如下。
- 已经装好的旧版本继续能用。App 不会被删除,也不会被强制停用。
- 收不到新版本。之后发布的功能和修复都到不了他们手上。
- 新用户可能装不上。旧系统上的 App Store 有时会提示下载与该系统兼容的最后一个旧版本,这多见于以前下载过这个 App 的 Apple 账户。Apple 没有给开发者正式承诺这项行为,不要把它当成兼容方案。
- 服务端要兼容旧版本。旧版本 App 还在调你的接口,接口改字段、下线旧接口前,先确认旧版本的用户量,或者在旧版本里给出升级提示。
提高最低版本前,做三件事:
- 用统计数据算出会受影响的用户比例。
- 在最后一个支持旧系统的版本里,把已知的严重问题修完,它会在旧设备上存在很长时间。
- 在 App 内或更新说明里告诉用户,新版本需要的系统版本。
在 KXBuild 里怎么修改部署目标?
在 Windows、Linux、macOS 上用 KXBuild 时,KXBuild 视图里右键 target,选「KXBuild: 编辑目标设置」,在 General 页 Deployment 分组的 iOS Deployment Target 里改,按 Ctrl+S 保存。它对应构建设置 IPHONEOS_DEPLOYMENT_TARGET,见工程设置。内置模板的部署目标是 iOS 15,见内置模板。
也可以用命令行改。
1kxbuild project add-setting -k IPHONEOS_DEPLOYMENT_TARGET -v 16.0 -t MyApp -P .\MyApp.xcodeproj
工程用 CocoaPods 的,把 Podfile 里的 platform :ios 改成同一个值,再重新 pod install,两处不一致时依赖可能按旧版本编译。改完重新构建一次,编译器会把所有高于新部署目标的 API 调用都检查一遍,确认新的 iOS 最低支持版本下没有漏掉的 if #available。
常见问题
2026 年新 iOS App 最低支持版本定多少合适?
一般定在 iOS 16 或 iOS 17。按 Apple 2026 年 6 月 7 日的统计,79% 的 iPhone 已在 iOS 26;最低版本定在 iOS 17 仍能覆盖 iPhone XR、XS。用 Expo 的至少是 16.4,用到 SwiftData 的至少是 17。
Apple 要求的最低部署目标是多少?
截至 2026 年 10 月,自 2026 年 9 月 9 日起上传的 iOS App 部署目标必须是 iOS 13 或更高。Xcode 26 和 27 支持的部署目标从 iOS 15 开始,所以实际可选的最低版本是 iOS 15。
提高最低支持版本后,老系统用户的 App 还能用吗?
能用。已安装的旧版本不会被删除,只是收不到新版本。新用户在旧系统上可能装不上,App Store 有时会提示下载最后一个兼容版本,但 Apple 没有向开发者承诺这项行为。
iOS 27 支持哪些 iPhone?
按 Apple 的兼容列表,iOS 27 支持 iPhone 11 系列、iPhone SE(第 2 代)及之后的机型,和 iOS 26 相同。iPhone XR、XS、XS Max 最高只能升到 iOS 18。
部署目标和 SDK 版本有什么区别?
SDK 版本决定构建时能调用哪些接口,Apple 要求用 iOS 26 及以上的 SDK 构建。部署目标决定 App 能安装的最低系统版本,可以比 SDK 低很多,例如用 iOS 27 SDK 构建、部署目标设为 iOS 16。