所有开源包
工具TypeScript

sdkbump

检查 native iOS、Flutter 和 React Native 应用是否受 iOS 27 SDK 变更影响,并为每项问题给出对应的修复方法。

0星标数最新版本: v0.1.3更新时间: 2026年10月15日
支持平台:Node.js 22.12+macOSLinux

许可证: MIT

用 iOS 27 SDK 构建的应用如果没有声明 scene,会在无警告的情况下编译通过,然后在启动时停止运行。sdkbump 读取 native iOS、Flutter 或 React Native/Expo 项目的文件(project.pbxproj、Info.plist、Swift 和 Objective-C 源码、package.json、pubspec.yaml),以 SCN001 到 SCN004 规则报告 UIScene 生命周期问题,并挑选出适合该项目生态和版本的修复方法。它不会构建、运行或修改项目。

功能特性

  • 一个回答“能不能启动?”的结论:无法启动、启动后黑屏、通过一个 workaround 包启动、或无法判断启动结果
  • 在同一份报告中用相同的规则 ID 覆盖 native iOS、Flutter(应用和插件示例)、React Native 和 Expo
  • 按生态和版本挑选修复方法:React Native 0.88 或手写的 scene delegate,Expo SDK 57 的 opt-in 或 SDK 58,Flutter 的自动迁移或手动步骤
  • 规则以数据形式保存在 rules/ios27.json 中,用 zod 校验;每条规则、修复方法和 workaround 都带有来源,没有来源会导致测试失败
  • 终端、Markdown 和 JSON 报告,带有 --fail-on 以及供 CI 使用的 0、1、2 退出码
  • 能识别 react-native-uiscene-bridge 和 react-native-xcode27,并把它们在运行时处理的问题连同各自的限制标记为“handled”
  • 只读取文件,因此不需要 Xcode,也能在 Linux 上运行;被检查项目中的文本在每种格式下都以纯文本输出

快速开始

sh
1npx @mcamdali/sdkbump --format markdown --output sdkbump.md

安装

npm (global)

sh
1npm i -g @mcamdali/sdkbump
2sdkbump

npx

sh
1npx @mcamdali/sdkbump

Homebrew

sh
1brew install muhittincamdali/tap/sdkbump

截图

sdkbump 在一个 React Native 0.87 应用上的运行结果:用 iOS 27 SDK 构建后无法启动,发现 SCN001 和 SCN002,并给出三种修复方法
native UIKit fixture 在 iOS 27.0 模拟器上的表现:启动后没有在运行,并显示 UIKit 提示 UIScene 生命周期为必需的消息
native-uikit-scenes 和 native-swiftui fixture 在搭载 iOS 27.0 的 iPhone 17 模拟器上运行,使用 Xcode 27.0 构建
sdkbump 在一个自定义了 AppDelegate 的 Flutter 应用上的运行结果

时间线

  1. 首次 commit 和首个版本 0.1.0:面向 native iOS、Flutter、React Native 和 Expo 项目的 SCN001 到 SCN004

  2. 0.1.1 和 0.1.2:项目文件仅在是项目内的常规文件时才被读取;无法读取的 Info.plist 现在给出“Launch not determined”而不是启动失败

  3. 0.1.3:以 @mcamdali/sdkbump 发布到 npm;每种报告格式和 stderr 中的控制字符都被清理

相关链接

相关文章

阅读文章