谨慎升级macOS 15.4,规避 ITMS-90048 错误

哈喽,我是老刘

最近不少朋友升级macOS 15.4​​后碰到了 ​​ITMS-90048​​ 错误提示,所以临时更新本文提醒各位读者。

老刘这里整理一下现象原因,以及网上给出的解决方案。

现象整理

  1. 提交被拒 :使用 Flutter/RN 等框架构建的 IPA 包提交至 App Store Connect 时,触发 ITMS-90048 错误,提示包含无效的隐藏文件 ._Symbols。
  2. 特定构建方式影响 :通过脚本生成的 IPA 包(如 flutter build ipa 或 RN 命令行构建)会触发此问题,而通过 Xcode 的 Product > Archive 方式提交的应用不受影响。
  3. 系统版本关联 :问题主要出现在 macOS 15.4 系统,即使未升级 Xcode 或降级 Command Line Tools 仍会复现。

从现象基本可以判断,是macOS 15.4系统造成的,而非Xcode 或 Command Line Tools 的原因。


原因分析

macOS 15.4 的 APFS 文件系统在处理文件时,会为某些操作(如 rsync)自动生成以 ._ 开头的隐藏文件,用于存储 Finder 元数据或资源 fork。

而在 iOS 构建过程中,生成 Symbols 目录时,系统可能因文件操作触发元数据文件 ._Symbols 的创建。

• 脚本构建 :Flutter/RN 的脚本式构建(如 flutter build ipa)可能依赖 rsync 等工具,导致隐藏文件被错误打包到 .xcarchive。

• Xcode Archive:原生通过 Xcode 的归档流程会自动过滤隐藏文件,因此无此问题。


解决方案

1、临时规避方案

如果已经升级到macOS 15.4,也不用慌,有两种方案:

改用 Xcode Archive 构建

执行 flutter build ios 生成项目后,通过 Xcode 的 Product > Archive 流程提交,避免脚本构建引入隐藏文件。

自动化脚本清理

在 Flutter 构建后添加脚本(如 cleanup.sh),自动检查并删除 ._Symbols:

bash 复制代码
IPA_PATH="build/ios/ipa/your_app_name.ipa"
if [ -f "$IPA_PATH" ]; then
  unzip -l "$IPA_PATH" | grep ._Symbols && zip -d "$IPA_PATH" ._Symbols/ || echo "未发现 ._Symbols"
else
  echo "IPA 文件未找到"
fi

这种方式比较适合有专门的打包机,自动化构建ipa的情况。

2、暂缓升级

• 暂不升级至 macOS 15.4 ,等待 Apple 或框架官方修复。

• 已升级用户需严格使用上述规避方案。


总结

感觉最近Flutter SDK或者系统升级造成的问题还是挺多的,但说实话老刘这边基本都没有踩坑。

其实老刘带着团队做Flutter开发6年多了,最开始的时候也踩过不少的坑,但是最近这几年就基本不会再踩了。

秘诀就在于我们这边对SDK版本、系统版本、IDE版本等环境要素,统一采用谨慎升级策略。

如果一个版本工作的很好我们通常不会追踪新版本的。

如果有必须要升级的因素,我们通常也会升级到一个使用过一段时间的相对比较稳定的版本。

总之对于大型项目来说,稳定性是一个非常重要的指标,尽量避免因为追踪新版的sdk、工具等产生额外的人力开销。

当然对于喜欢尝鲜的个人开发者,是没有这种问题的。

如果看到这里的同学对客户端开发或者Flutter开发感兴趣,欢迎联系老刘,我们互相学习。

点击免费领老刘整理的《Flutter开发手册》,覆盖90%应用开发场景。

可以作为Flutter学习的知识地图。
覆盖90%开发场景的《Flutter开发手册》

相关推荐
传奇开心果编程7 小时前
【Flutter入门练中学】第11课:状态管理进阶与声明式路由
android·学习·flutter·ui·ios
JasonSJX7 小时前
四端自建播放器怎么落地:Android、iOS、tvOS、Tizen 的 DRM 播放 SDK 技术盘点
android·ios·音视频·视频防录屏·加密保护课程·直播安全
陆断枫7 小时前
Flutter 列表性能优化
flutter
恋猫de小郭8 小时前
Flutter 多窗口重要优化合并,多窗口性能和实用性大幅提升
android·前端·flutter
k4m7v2pz9 小时前
用中文编程语言写游戏:玄铁语言生命游戏的 macOS 适配实录
游戏·macos·玄铁·生命游戏·中文编程语言·玄铁中文编程
茶底世界之下10 小时前
HDR 曲线为什么必须显式决定:端点钳位还是线性外推
ios
gnip15 小时前
Flutter 原生插件开发实战指南
前端·flutter
茶底世界之下21 小时前
导出进度不是一个百分比:AVFoundation 收尾阶段的状态建模
ios·swift
chenyin21 小时前
Flutter 架构设计:Feature-First 与 Pub workspaces
flutter
大熊猫侯佩21 小时前
macOS27 上可变界面尺寸 iOS App 揭秘
macos·ios·swiftui