Flutter图片资源在Debug模式正常但iOS Release构建中提示‘Asset not found’加载失败
Flutter图片资源在Debug模式正常但iOS Release构建中提示‘Asset not found’加载失败
我之前也踩过这个一模一样的坑,折腾了好一阵才摸清楚几个靠谱的解决方向,你可以逐一排查试试:
1. 重点检查路径大小写(最常见原因!)
iOS的文件系统是严格大小写敏感的,Debug模式下热重载/模拟器可能会忽略大小写差异,但Release打包时会严格校验:
- 对比代码里的资源路径
assets/img/santren/splash_screen1.jpg和实际文件系统中的文件名、文件夹名是否完全一致(比如是不是实际文件叫Splash_Screen1.jpg,或者文件夹是Santren?) - 确保代码里的每一级路径大小写都和本地文件100%匹配
2. 验证pubspec.yaml的资源配置是否正确
YAML对缩进和格式要求极严,很容易因为小错误导致资源不被打包:
- 检查资源声明的缩进:必须用2个空格,不能用Tab键
- 确保资源路径正确,两种声明方式都可以:
flutter: assets: # 方式1:导入整个目录下的所有资源 - assets/img/santren/ # 方式2:单独导入指定图片 - assets/img/santren/splash_screen1.jpg - 修改pubspec后,记得执行
flutter pub get刷新配置
3. 清理缓存后重新构建打包
缓存残留是Release打包的常见坑,彻底清理后再试:
- 清理Flutter全局缓存:
flutter clean - 进入iOS目录清理Pod缓存并重新安装:
cd ios pod deintegrate && pod install cd .. - 重新构建Release版本:
flutter build ios --release
4. 检查Xcode中资源是否被正确添加到Target
有时候Flutter自动打包会漏加资源,需要手动确认:
- 打开
ios/Runner.xcworkspace - 左侧导航栏选中
Runner→ 切换到Build Phases标签页 - 找到
Copy Bundle Resources列表,检查你的图片或assets目录是否在其中:- 如果不在,点击
+按钮,从本地文件系统中选中对应的资源添加
- 如果不在,点击
- 同时选中图片文件,查看右侧
Inspectors面板,确保Target Membership已经勾选Runner
5. 排查图片本身的问题
少数情况下,图片格式损坏或不兼容会导致Release打包失败:
- 尝试重新导出图片(用PS或其他工具另存为标准JPG格式)
- 临时将图片转为PNG格式替换原文件,看是否能正常加载
附上你提供的错误日志,方便对照排查:
══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════ **The following assertion was thrown image failed to precache: Unable to load asset: "assets/img/santren/splash_screen1.jpg". Exception: Asset not found When the exception was thrown, this was the stack: #0 PlatformAssetBundle.loadBuffer (package:flutter/src/services/asset_bundle.dart:295:7) #1 AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:731:35) #2 AssetBundleImageProvider.loadBuffer (package:flutter/src/painting/image_provider.dart:695:14) #3 ImageProvider.resolveStreamForKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:513:13) #4 ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:384:22) #5 ImageProvider.resolveStreamForKey (package:flutter/src/painting/image_provider.dart:511:81) #6 ImageProvider.resolve.<anonymous closure> (package:flutter/src/painting/image_provider.dart:358:9) #7 ImageProvider._createErrorHandlerAndKey.<anonymous closure> (package:flutter/src/painting/image_provider.dart:473:24) #8 SynchronousFuture.then (package:flutter/src/foundation/synchronous_future.dart:41:39) #9 ImageProvider._createErrorHandlerAndKey (package:flutter/src/painting/image_provider.dart:470:9) #10 ImageProvider.resolve (package:flutter/src/painting/image_provider.dart:355:5) #11 precacheImage (package:flutter/src/widgets/image.dart:115:39) #12 _StartWizardPageState._precacheImage (package:mobile/Products/santren/layout/wizard.dart:22:13) #13 _StartWizardPageState.didChangeDependencies (package:mobile/Products/santren/layout/wizard.dart:39:5) ...
内容来源于stack exchange
相关产品推荐
相关产品推荐

