Flutter iOS应用无法在模拟器运行、无法打包归档但真机正常问题
解决方案
核心原因
报错核心为APFS文件系统的全路径长度限制触发的NSPOSIXErrorDomain 63错误。iOS真机运行时的安装路径前缀更短,不会触发长度限制,而模拟器、归档构建的路径前缀非常长,叠加项目本身的路径长度后就会超出系统限制,触发报错。
修复步骤(按优先级从高到低执行)
- 缩短项目根目录路径
将项目从/Users/yassin/Desktop/Projects/handles移动到更短的根路径,比如直接放到/Users/yassin/handles,减少全路径总长度,重新构建测试。80%以上的同类问题都可以通过该方法解决。 - 修改Xcode构建输出路径
打开Xcode,点击顶部菜单栏File > Workspace Settings(单项目则选Project Settings),点击Advanced,将构建位置修改为Relative to Workspace,确认后保存,清空DerivedData重新构建。该方法可以规避Xcode默认的长DerivedData前缀路径,进一步降低全路径长度。 - 排查超长文件名/嵌套层级过深的文件
- 检查项目
assets目录下有没有文件名超过100字符、或嵌套层级超过5层的资源,修改文件名或减少嵌套层级 - 排查最近新增的pub依赖包,临时注释最近2周新增的依赖,执行
flutter clean后重新构建测试,确认是否为第三方包引入了超长路径文件
- 检查项目
- M1芯片适配调整
- 右键点击应用程序列表中的Xcode,选择「显示简介」,勾选「使用Rosetta打开」,重启Xcode后重新构建
- 若不想升级Flutter版本,可在执行flutter命令前添加
arch -x86_64前缀,比如arch -x86_64 flutter run,强制用x86架构构建模拟器包,规避M1原生构建的路径处理bug
- 优化dart分析与安装耗时
在项目根目录新建/修改analysis_options.yaml文件,添加以下排除规则,减少分析工具的扫描范围:
配置完成后重启IDE即可大幅提升dart analysis启动速度,同时减少构建时的扫描耗时。analyzer: exclude: - "build/**" - "ios/**" - "android/**" - "**.g.dart" - "**.freezed.dart"
内容的提问来源于stack exchange,提问作者Yassin Sameh
相关产品推荐
相关产品推荐

