Skip to content
Wen's Blog

Frontend & Mobile Engineering Weekly:Rosetta 进入退场期,Expo Go 开始要求登录

Sep 7, 2026 — Frontend , Mobile , macOS , React Native , Expo , pnpm , Next.js , Turbopack

这周没有新的 Flutter、React 或 Vue 大版本,真正会改项目排期的还是平台和工具链。Apple 把 Rosetta 的退出时间说清楚了,Expo Go 在真机开发里加上了登录,pnpm 12 正式发布后的第一轮密集修 bug 也露出几个升级时要盯的点。Next.js 同时公开了 Turbopack 新的分包实验,已经有明确前端性能问题的项目可以开始针对性验证。

Apple:macOS 27 是 Rosetta 支持 Intel-only App 的最后一版

Apple 9 月 1 日发布了 Rosetta 支持调整说明 (opens in a new window)。从 macOS 26.4 开始,依赖 Rosetta 的 App 启动时可能收到系统提示,要求用户更新到 Apple silicon 原生版本,macOS 27 则是 Apple silicon Mac 最后一个还能运行 Intel-only App 的 macOS 版本。Apple 建议尚未完成迁移的开发者现在就提供 universal binary。

纯 Dart 的 Flutter macOS App 通常不太受影响,因为 Flutter 自己早就支持 Apple silicon,真正麻烦的是打进包里的原生二进制、闭源 SDK、命令行工具和老插件。某个依赖如果还只有 x86_64 slice,主应用就算已经是 arm64,也不能把迁移当成完成。macOS 产品可以在 CI 或发版前检查最终 .app 里的 Mach-O 文件,确认关键依赖是否包含 arm64,并在真实 Apple silicon 机器上取消“靠 Rosetta 也能跑”的假设。

Electron、Node CLI、Flutter desktop 和其他带原生扩展的项目,也应该把这件事放进依赖管理。维护者长期不提供 arm64 binary 的 package 现在已经有明确的停止支持时间,没必要因为这则公告重写桌面技术栈,但 Intel-only 原生依赖不该再搁着,而应当成有截止日期的兼容工作。

Expo Go:iOS 真机开发开始要求 CLI 和 App 登录同一账号

Expo 在 9 月 3 日宣布,最新版 iOS Expo Go 运行项目时要求登录 (opens in a new window)。开发机上的 Expo CLI 和 iPhone 上的 Expo Go 都需要登录,而且必须用同一个 Expo 账号,Android 版本后续也会跟进。模拟器暂不受影响,development build 也不要求这样登录。

正常使用 Expo 账号的个人开发流程受影响不大,但共享测试机、培训环境、临时真机调试,以及不希望把开发账号放进设备的团队需要改流程。过去 npx expo start 之后,任意装了 Expo Go 的设备扫二维码就能加载项目,现在 iOS 真机必须先登录。

更关键的是 development build 不受影响。已经把真实项目从 Expo Go 转到自定义 development build 的团队没有迁移压力,如果项目还把 Expo Go 当成团队长期测试环境,与其做共用账号这类绕过,不如借这次变化重新判断要不要切到 development build。

pnpm 12.3:正式版刚出,补丁还在连着发

pnpm 12 上周正式发布,本周从 12.2 一路更新到 12.3.2 (opens in a new window)。这些版本大部分是修 bug,但有几项能说明 12.x 刚升级时会踩到什么。

12.3.0 修了本地目录、本地 tarball 和 file:<path> 依赖无法正常 pnpm add 的问题,也修了 .npmrc:_authToken="${TOKEN}" 这类带引号的环境变量展开后认证失败的问题。循环 peer dependency 再碰上 npm alias 时,--lockfile-only 还可能生成后续无法通过 --frozen-lockfile 的锁文件。12.3.1 又修了从 12.2 self-update 到 12.3 后,nodenpmyarn 等全局命令因 shim 迁移而无法启动的问题。12.3.2 继续修 Windows 文件时间精度导致 pnpm run / pnpm exec 每次都重新安装的问题,也继续优化大型 workspace 的解析和 lockfile 写入。

这些问题多数已经修掉,所以不必把 pnpm 12 当成不稳定版本,但从 11 升 12 时最好直接验证当前最新 12.x,不要把 12.0.0 当作目标版本。私有 registry、本地 file: 依赖、Windows 开发机、全局命令管理以及复杂的 peer dependency 都应该纳入升级测试。大型 Monorepo 可以顺便记下安装耗时,因为 12.2/12.3 连续在工作区扫描、依赖解析和 lockfile 保存上做了性能优化,但官方 changelog 里的数字替代不了你自己仓库的基准。

Next.js 16.3:Turbopack 开始允许更细地拆 chunk,但仍是实验能力

Next.js 团队 9 月 3 日发布了 Turbopack chunking 的设计说明 (opens in a new window),解释当前默认算法如何在请求数量、重复下载和跨页面缓存之间取舍,并介绍 Next.js 16.3 新增的两个实验方向。

experimental.turbopackChunking.generateComponentChunks 会同时生成合并和未合并的 chunk,运行时按浏览器已经加载的内容挑更省的那份,减少页面跳转时因为 chunk 被合并而重复下载代码。另一类实验允许继续调整 module fragments 这类拆分方式。官方在 nextjs.org 的测试里展示了默认策略、完全不合并、更激进合并之间的请求数和下载量差异,但这些数字只对得上它自己的站点和跳转路径,套不到别的应用上。

项目如果没有明确的包体或跳转性能问题,继续用默认策略更合适。大型内容站、路由很多的 SaaS,或者已经通过 RUM 发现客户端跳转在重复下载的项目,可以单独做实验,对比真实用户路径,而不是只看一次首页 Lighthouse。实验开关也要和 Next.js 升级分开提交,方便出现回归时快速撤回。

本周新开的 GitHub issue 正好说明这些开关现在有多脆。#98128 (opens in a new window) 在一个很小的 Pages Router 复现项目中报告 turbopackModuleFragments 会触发 panic,#98205 (opens in a new window) 则报告了另一个 Turbopack module graph panic。它们目前只是特定实验配置下的已报告问题,不能据此判断默认 Turbopack 构建存在同样风险,但足以说明这些新开关暂时不适合在生产项目里随手全开。

Swift:这个月官方月报更集中在 Web、Windows 和更严的内存安全

Swift.org 9 月 4 日发布 What’s new in Swift: August 2026 Edition (opens in a new window)。这一期不是新的 Swift 正式版本,而是官方社区摘要,内容跨度比较大。其中几条对长期方向还有参考价值,Swift + WebAssembly 的前端实验在继续推进,Swift on Windows 仍在补工具链体验,安全敏感代码则继续用 Span、non-copyable types 和 strict memory safety 缩小 unsafe 范围。

这些内容目前还撑不起 iOS App 换技术选型。对移动团队更实际的是 Swift 能跑的平台还在变多,以后共享业务代码或 CLI 不一定只能待在 Apple 生态里,不过 ElementaryUI 这类 Swift Web UI 项目仍然年轻,适合作为技术观察,不适合当成 React/Vue 的替代方案进入正式选型。

Flutter:本周没有新的稳定版,3.47 的平台问题仍需按场景看

Flutter 本周没有新的 stable release。3.47 系列已经在前几期讨论过 Apple 最低版本、SwiftPM、桌面 Impeller 和 Web 相关回归,本周没有足够的新证据,不必把那些结论再放大一遍。

Flutter 团队近期发布的 iOS 适配流程文章 (opens in a new window) 补了一个值得留下的工程细节。团队会在 WWDC 后按影响范围筛选 Apple 的平台变化,再用纯 UIKit 复现来区分问题出在 Flutter 还是系统。文章里的 WebView 手势案例也说明,PlatformView 一类问题不能只靠 Flutter widget test 判断根因。应用团队遇到 iOS 新版本的原生视图回归时,先做最小 Swift/UIKit 复现,通常比继续在完整 Flutter 工程里调参数更快定位。

没必要只因为零散的 3.47 issue 就暂缓整个 SDK 系列,用了 WebView、PlatformView、桌面纹理或较老 Windows GPU 的项目仍应单独做回归,其他移动项目可以按已有升级计划推进。

总结

这周最明确的长期兼容工作来自 macOS,Rosetta 已经有清楚的退出时间,桌面项目该开始盘点 Intel-only 原生依赖。React Native / Expo 团队则需要留意 Expo Go 的登录要求,如果团队还高度依赖共享真机扫码调试,development build 会比共用账号更稳妥。

pnpm 12 已经可以进升级分支,但本周连续修掉的本地依赖、registry token、shim 和 lockfile 问题说明,升级验证不能只看一次安装成功。Next.js 16.3 的 Turbopack 分包值得对性能比较在意的项目拿来试,现阶段仍应看真实跳转数据再决定是否开启,而不是把实验开关当成默认优化。