添加expo-updates后iOS构建版本无法加载资产的问题
Expo 46 + expo-updates 0.14.7 iOS构建后资产加载失败问题排查与解决
问题核心
使用Expo ^46.0.0并引入expo-updates ~0.14.7后,通过eas build -p ios构建的iOS包出现资产加载失败问题:
- 开发环境运行正常,仅生产构建包失效
- 即使移除代码中所有expo-updates相关实现,只要package.json保留该依赖,问题依旧存在
- 资产加载器位于项目根目录(非src文件夹)
可能原因与对应解决方案
1. 版本兼容性不匹配
Expo 46官方适配的expo-updates稳定版本为0.14.6,~0.14.7属于非适配小版本升级,其中的资产打包逻辑可能与Expo 46的底层机制冲突。
- 操作:降级expo-updates到适配版本
之后重新执行npm install expo-updates@~0.14.6 --save # 或 yarn add expo-updates@~0.14.6eas build -p ios测试。
2. expo-updates默认配置覆盖资产打包规则
expo-updates会自动修改Expo的资产打包策略,即使未启用更新功能,其默认配置可能未将根目录的资产加载器纳入打包范围。
- 操作:在
app.json/app.config.js中显式声明资产路径{ "expo": { "assetBundlePatterns": [ "**/*", // 确保所有目录下的资产被打包 "./[你的资产加载器文件名]" // 单独指定根目录的加载器文件 ] } }
3. EAS构建缓存残留问题
EAS构建的缓存可能保留了旧的依赖配置,导致修改依赖后仍沿用错误的打包逻辑。
- 操作:强制清理缓存后构建
eas build -p ios --clear-cache
4. 根目录文件的生产环境路径解析问题
开发环境中Node的路径解析逻辑与iOS生产包的沙盒环境不同,expo-updates可能改变了根目录文件的实际访问路径,导致加载失败。
- 操作:将资产加载器迁移至
src目录,同步修改代码中的引用路径,确保生产环境能正确解析。
验证流程
- 调整依赖或配置后,先执行
expo prebuild --clean清理本地构建缓存 - 运行
expo run:ios --configuration Release模拟生产环境测试,确认问题是否解决 - 本地测试正常后,再执行带缓存清理的EAS构建
内容的提问来源于stack exchange,提问作者EMATade
相关产品推荐
相关产品推荐

