UIKit 的场景强制要求:哪些应用在 iOS 27 上将无法启动
Apple 的迁移文档用一句话道出了 iOS 27 周期中最严苛的要求:”从 iOS 27、iPadOS 27、Mac Catalyst 27、tvOS 27 和 visionOS 27 开始,使用最新 SDK 构建的应用必须采用基于场景的生命周期,否则将无法启动。”1 不是废弃,不是警告,也不是变慢:而是无法启动。第 278 场会议同样说得直白:”使用最新 SDK 构建时,现在必须采用 UIScene 生命周期。没有它,你的应用将不再启动。”2 每一个仍运行在旧式 app-delegate 生命周期上的 UIKit 应用,都必须在它针对 iOS 27 SDK 构建之前完成迁移,而警告阶段早已持续了数年。
这一要求在第 278 场会议的 2:36 处给出。
TL;DR
- 使用 iOS 27 SDK 构建的应用必须采用 UIKit 基于场景的生命周期,否则将无法启动,这一点在 iOS、iPadOS、Mac Catalyst、tvOS 和 visionOS 27 上一律适用。1 用旧版 SDK 构建的现有二进制文件仍可正常运行;这堵墙取决于你针对哪个 SDK 构建。
- 这一升级是分阶段进行的:早在 iOS 18.4,UIKit 就开始为尚未迁移的应用记录迁移提示信息,到 iOS 26 该信息发生了变化。到了 iOS 27,这条日志就变成了启动失败。1
- 只要满足以下任一条件,你就需要迁移:你的 Info.plist 中没有带配置的
UIApplicationSceneManifest键,或者你的 app delegate 没有实现场景配置方法。1 - 最小化迁移的工作量很小:在属性列表中添加一个场景清单条目,或者为动态配置实现 delegate 方法。是否支持多场景仍是可选项。1
- Xcode 27 附带了一个应用现代化的 agent skill,它能把应用转换为场景生命周期、重写主屏幕和方向判断、在复杂任务上提出澄清性问题,并为一次会话内无法完成的工作留下注释。2
这是强制要求,不是废弃
27 周期有一个惯例:在替代方案成熟一个版本之后,便会修剪相应的 API:ImageCreator 在 iOS 27 中停止工作,而 MXMetricManager 也在其替代方案发布的同一周带上了 27.0 的废弃标记。场景要求是这一惯例中影响最深远的一项,因为它把守的是整个应用,而非某项功能。一个从不触及 Image Playground 的应用今年秋天不会有任何损失。而一个忽视场景生命周期的应用,在它用新 SDK 构建的那一天就会停止启动。
时间线显示出 Apple 在强制执行之前留出了多长的缓冲期。从 iOS 18.4、iPadOS 18.4、Mac Catalyst 18.4、tvOS 18.4 和 visionOS 2.4 开始,UIKit 就为尚未迁移的应用记录一条提示信息,而在 26 版本中该信息发生了变化。1 两个版本的警告之后,地板便塌了下去。其概念基础甚至更为久远:这场会议回溯到 WWDC 2014,引用了 Bruce Nilo 的论断——“设备旋转只不过是一次带动画的 bounds 变化”,并指出随着 iPad 窗口可调整大小、iPhone 应用也可调整大小,”如今这一洞见比以往任何时候都更具现实意义。”2
有一条边界值得精确陈述:这一要求约束的是”使用最新 SDK 构建的”应用。1 针对 iOS 26 或更早 SDK 构建并已发布的二进制文件仍可继续启动。而当你用 Xcode 27 的 SDK 重新构建以获取任何新特性的那一刻,场景生命周期便会随之而来。
你真的需要迁移吗?
文档给出了一个双条件判定。如果你的信息属性列表中缺少 UIApplicationSceneManifest 键(或没有指定任何配置),或者你的 app delegate 没有实现场景配置方法,那就需要迁移。1 大多数 2019 年之后启动的应用早已满足要求;自那时起,Xcode 的模板就一直生成基于场景的项目。被这条强制要求波及的,是那些长期存续、其 AppDelegate 仍然持有窗口的应用。
最小化的修复有两条路线之一。静态路线是在属性列表中添加一个带场景配置的 UIApplicationSceneManifest 键,可在目标的 General 设置中、Deployment Info 下的”Scene manifest”处找到。1 动态路线则改为实现场景配置 delegate 方法,适用于那些根据用户活动定制场景、或处理不同场景角色的应用;文档的示例使用会话的 role 属性来决定创建哪个场景。1 对于从 storyboard 加载根视图控制器的应用,在场景清单中包含 storyboard 名称即可,系统会自动配置 window scene 和根视图控制器。1
这条强制要求并不要求的,是多场景。文档明确指出多场景支持仍是可选项,且可能需要重构你的数据模型使其与场景相关联;它建议你在启用之前先考虑用户体验是否能从中受益。1 迁移意味着把生命周期事件从应用层移到场景层,其中 UIApplicationDelegate 保留进程级事件,而 scene delegate 接管 UI 相关的事件。1 有一个细节容易在配置时出错:要指定 UIWindowScene 对象,而非普通的 UIScene 对象,而 CarPlay 场景则使用其自有的 template-application 场景类型。1
为何是现在:一切都可调整大小
这条强制要求与让可调整大小变得普遍的版本同期落地,第 278 场会议把二者作为同一个故事来呈现。在 iOS 和 macOS 27 中,Mac 上的 iPhone Mirroring 窗口可以自由调整大小,而运行在 iPad 上的纯 iPhone 应用则变得”像任何其他 iPad 应用一样可完全调整大小。”2 用会议的话来说,场景生命周期是”任何自适应应用的基础”:是这场会议要求你修复的所有其他事项的前提。2
这份修复清单是对以屏幕为中心的种种假设的一次清洗。一旦你的场景置于另一块显示器上,对主屏幕的引用就会返回错误信息,因此会议建议通过窗口的 window scene 动态访问屏幕,或者更好的做法是彻底移除屏幕引用:屏幕缩放比例改为 trait collection 的 displayScale,屏幕边界改为 window scene 的有效几何尺寸,或者干脆改用周围视图的尺寸。2 自动 trait 跟踪让迁移更轻松:系统会跟踪哪些 trait 属性是在 layoutSubviews 这类布局和绘制方法中被读取的,并在被跟踪的 trait 发生变化时再次调用这些方法。2
有两个长期存在的信号彻底失去了它们的布局意义。用户界面 idiom”对于任何一种布局决策都不再有意义”,因为运行在 iPad 上的 iPhone 应用可完全调整大小,却仍报告手机 idiom;而支持的界面方向则变成了一个系统在可调整大小环境中会忽略的偏好,其中 iPhone Mirroring 无论窗口宽高比如何都始终报告竖屏。2 二者的替代方案都是 size class。游戏得到的是一种通融而非豁免:从 iOS 27 起,UIRequiresFullscreen 在可调整大小环境中的 iPhone 上仍被尊重,但其行为变为离散式调整大小,在每次调整大小时把场景过渡到一个匹配的屏幕配置,从而让游戏在可用空间中以完整画质渲染。2
在同一周期中,测试整个矩阵的成本也降低了:Device Hub 和 Xcode Previews 新增了一个”进入调整大小模式”,可以自由拖动设备边缘,会议建议之后再在 iPhone Mirroring 和 iPad 上做真机检查。2
这次迁移配有一个 agent skill
会议在收尾时承认了这项要求的工作量之大,并指向了 Xcode 27 给出的答案:一个全新的应用现代化 skill,它对会议所概述的”自适应任务有着深入的理解”。2 当被要求让一个应用更具适应性时,该 agent 会把主屏幕调用转换为 trait-collection 或 scene-bounds 判断,并在需要处加入失效逻辑,把界面方向判断替换为 size class,”甚至会把你的应用转换为使用场景生命周期。”2 对于复杂任务它会提出澄清性问题,对于一次会话内难以完成的工作,它会留下注释标记尚待处理的部分。2
其分发方式与 Apple 在本次 WWDC 推动 skill 的整体路径一致:xcrun agent skills export 会生成可导入其他工具的 markdown 文件,这正是 Xcode 27 的 agent skills export 所介绍的同一机制。2 由 SDK 强制执行的一次迁移,搭配一个能够执行这次迁移的 skill,是迄今为止对 Apple 期望在 agent 时代如何消化破坏性变更的最清晰表达:平台抬高地板,而工具链带你越过它。
FAQ
我现有的应用会在 iOS 27 上停止工作吗?
仅凭这一要求不会。该强制要求适用于”使用最新 SDK 构建的”应用。1 用旧版 SDK 已经发布的二进制文件仍可在 iOS 27 上启动。只有当你针对 iOS 27 SDK 重新构建、却未落实基于场景的生命周期时,才会出现启动失败。
我怎么知道我的应用是否受影响?
检查两件事。1 如果你的 Info.plist 缺少带配置的 UIApplicationSceneManifest 键,且你的 app delegate 没有实现场景配置方法,那么你的应用就处在 app-delegate 生命周期上,用 iOS 27 SDK 构建时将无法启动。自 iOS 18.4 起,UIKit 就一直为受影响的应用记录迁移提示信息。1
这会强制我支持多窗口吗?
不会。多场景支持仍是可选项,且 Apple 的文档建议你在启用前先权衡用户体验是否能从中受益,因为它可能需要让你的数据模型与场景相关联。1 这一强制要求只要求基于场景的生命周期本身:即把生命周期事件按场景处理,而非全局处理。
agent 能完成这次迁移吗?
Xcode 27 附带了一个应用现代化 skill,会议表示它能把应用转换为场景生命周期、重写主屏幕引用,并用 size class 替换方向判断,在变更存在歧义处提出澄清性问题,并为未完成的工作留下注释。2 它可通过 xcrun agent skills export 导出到其他工具。2 请像对待任何由 agent 编写的迁移那样对待它的产物:审查 diff,尤其是围绕状态恢复和窗口设置的部分。
这一强制要求完成了本周期的一个主题:Apple 在 27 这道边界上强制执行迁移,而非仅仅建议迁移,在此之前,ImageCreator 的停用已在一个更小的范围上展示了同样的分阶段升级。其 agent-skill 答案则与 Xcode 27 推出可随处导出的 Agent Skills 中更宏大的 skill 脉络相连。完整的系列中心是 Apple 生态系统系列。
References
-
Apple, Transitioning to the UIKit scene-based life cycle, Apple Developer Documentation. Source for the requirement (“Beginning in iOS 27, iPadOS 27, Mac Catalyst 27, tvOS 27, and visionOS 27, apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch”), the staged warnings (UIKit logging a migration message starting in iOS 18.4, iPadOS 18.4, Mac Catalyst 18.4, tvOS 18.4, and visionOS 2.4, with the message changing in the 26 releases), the two-condition migration test (missing
UIApplicationSceneManifestkey or no scene-configuration delegate method), the property-list and dynamic-configuration migration routes including the General settings “Scene manifest” location and the session-role example, the storyboard-name note with automatic window-scene configuration, multiple-scene support remaining optional with the data-model caution, the app-versus-scene split of life-cycle responsibilities, the guidance to specifyUIWindowSceneobjects rather thanUISceneobjects, and the CarPlay scene type. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC 2026 session 278, Modernize your UIKit app. Official transcript; presented by Michael Ochs, engineering manager on the UI Frameworks team. Source for the requirement statement (“UIScene lifecycle is now required when building with the latest SDKs. Without it, your application will no longer launch”), iPhone Mirroring resizing and iPhone-only apps running fully resizable on iPad, the scene life cycle as “the basis for any adaptive app,” the main-screen guidance (dynamic access through the window scene,
displayScalevia the trait collection, effective geometry and surrounding-view size over screen bounds), automatic trait tracking across layout and drawing methods, the idiom and interface-orientation guidance including the always-portrait behavior in iPhone Mirroring and the move to size classes, theUIRequiresFullscreendiscrete-resizing behavior for games, the Bruce Nilo WWDC 2014 quote (“a device rotation is only an animated bounds change”) and its framing, the Device Hub and Xcode Previews resize mode, and the app modernization skill (deep understanding of the adaptivity tasks, converting main-screen calls with invalidation logic, replacing orientation checks with size classes, converting apps to the scene life cycle, clarifying questions, progress comments, and export throughxcrun agent skills export). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩