当前阻塞状态
问题
使用 expo run:ios --device 通过 Xcode 27 / iOS 27 SDK 构建并安装 PlogKit 后,App 在 iOS 27 物理机上启动时立即崩溃。
环境
- Expo SDK:57.0.1
- React Native:0.86.0
- expo-dev-client:57.0.5
- Xcode:27.0(27A5218g)
- iOS SDK:27.0(24A5380g)
- 设备:iPhone 15 Pro,iOS 27.0(24A5390f)
已确认根因
Expo SDK 57 的 iOS prebuild 模板仍使用旧的 UIApplicationDelegate / UIWindow 生命周期:
Info.plist 缺少 UIApplicationSceneManifest。
AppDelegate 直接创建并持有 UIWindow。
AppDelegate 未实现 application(_:configurationForConnecting:options:)。
iOS 27 会对使用 iOS 27 SDK 构建、但未采用 UIScene 生命周期的 App 执行致命断言,因此 App 在 React Native、Skia 和业务代码开始运行前被 UIKit 终止。
崩溃报告的稳定特征:
Exception: EXC_BREAKPOINT (SIGTRAP)
Termination: Trace/BPT trap: 5
Top frame:
___UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption_block_invoke
复现
-
使用 Xcode 27:
-
在 iOS 27 物理机上启动 com.leonzym.plogkit。
-
App 在约 2–3 秒内退出,并生成 PlogKit-*.ips。
可使用以下命令构造紧凑的启动探针:
xcrun devicectl device process launch \
--device "<device>" \
--terminate-existing \
--console \
--timeout 10 \
com.leonzym.plogkit
当前输出:
Launched application with com.leonzym.plogkit bundle identifier.
Waiting for the application to terminate…
The app terminated with the exit code 0.
连续多次启动均产生相同的 .ips 崩溃报告。
已排除
- 不是仓库中
ios/ 生成物过期:在临时目录执行全新的 Expo SDK 57 expo prebuild --platform ios --clean,仍生成相同的非 UIScene 生命周期结构。
- 不是 Metro 或
DEV_CLIENT_DEFAULT_LAUNCHER_URL=http://localhost:8081:传入显式 development-client URL 后仍产生相同的 UIKit 崩溃。
- 不是签名、Hermes、Skia 或业务代码初始化问题:崩溃发生在 UIKit 创建 scene 时,调用栈未进入 React Native 或 App 代码。
处理策略
优先等待 Expo 发布正式支持 Xcode 27 / iOS 27 UIScene 生命周期的版本,然后升级并重新生成原生工程。
在此之前:
- 不直接手改生成的
ios/。
- 如必须在物理机上构建,可评估使用 iOS 26 SDK 构建;Apple 表示旧 SDK 构建的 App 在 iOS 27 上不会执行该强制检查。
- 日常开发可继续使用 iOS 26 模拟器。
完成条件
参考
当前阻塞状态
ios/;等待 Expo / React Native 正式支持后升级并重新 prebuild。问题
使用
expo run:ios --device通过 Xcode 27 / iOS 27 SDK 构建并安装 PlogKit 后,App 在 iOS 27 物理机上启动时立即崩溃。环境
已确认根因
Expo SDK 57 的 iOS prebuild 模板仍使用旧的
UIApplicationDelegate/UIWindow生命周期:Info.plist缺少UIApplicationSceneManifest。AppDelegate直接创建并持有UIWindow。AppDelegate未实现application(_:configurationForConnecting:options:)。iOS 27 会对使用 iOS 27 SDK 构建、但未采用 UIScene 生命周期的 App 执行致命断言,因此 App 在 React Native、Skia 和业务代码开始运行前被 UIKit 终止。
崩溃报告的稳定特征:
复现
使用 Xcode 27:
在 iOS 27 物理机上启动
com.leonzym.plogkit。App 在约 2–3 秒内退出,并生成
PlogKit-*.ips。可使用以下命令构造紧凑的启动探针:
xcrun devicectl device process launch \ --device "<device>" \ --terminate-existing \ --console \ --timeout 10 \ com.leonzym.plogkit当前输出:
连续多次启动均产生相同的
.ips崩溃报告。已排除
ios/生成物过期:在临时目录执行全新的 Expo SDK 57expo prebuild --platform ios --clean,仍生成相同的非 UIScene 生命周期结构。DEV_CLIENT_DEFAULT_LAUNCHER_URL=http://localhost:8081:传入显式 development-client URL 后仍产生相同的 UIKit 崩溃。处理策略
优先等待 Expo 发布正式支持 Xcode 27 / iOS 27 UIScene 生命周期的版本,然后升级并重新生成原生工程。
在此之前:
ios/。完成条件
expo prebuild --clean生成正确的 scene 配置和生命周期集成,无需手改ios/。PlogKit-*.ips。pnpm verify通过。参考