You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EAS+expo-dev-client构建的App执行expo publish不生效问题

相关问题解答

Expo.plist说明

  • 定义:Expo针对iOS平台生成的原生配置文件,用来存储expo-updates、应用标识、运行时版本等所有和Expo服务相关的配置项,你报错里提到的EXUpdatesReleaseChannel就是用来指定应用内置默认发布渠道的字段。
  • 存储位置:如果项目存在本地iOS原生目录,默认路径为ios/[你的项目名称]/Supporting/Expo.plist;如果是纯EAS云端托管、没有本地原生目录的项目,该文件会在EAS云端构建阶段自动生成,不会出现在本地项目中。
  • 配置不同步原因:你之前执行过expo run:ios生成本地原生目录,该命令生成的Expo.plist默认会将EXUpdatesReleaseChannel设置为default。而eas.json里的配置仅会在EAS云端构建时同步到云端生成的Expo.plist中,不会自动更新本地原生目录里的文件,所以本地执行publish命令时会读取本地旧的Expo.plist配置,和你指定的staging渠道不一致触发警告。
  • 更新方式:如果保留本地原生目录,直接手动修改Expo.plist中EXUpdatesReleaseChannel的字段值为staging即可;如果使用纯EAS托管模式,删除本地生成的ios目录即可,也就是你后续执行的操作,此时publish不会读取本地配置,警告会消失。

删除ios目录后仍收不到更新的排查方案

按以下步骤逐一排查即可:

  • 检查运行时版本匹配度:如果eas.json中没有显式指定runtimeVersion,默认会用app.json中的应用版本号作为运行时版本,若发布JS更新时app.json的版本号和你之前构建EAS安装包时的版本号不一致,更新会被直接忽略,不会推送到设备。
  • 验证更新触发逻辑:expo-updates默认仅在应用冷启动时检查更新,你可以先强制杀掉应用,重新打开两次(第一次打开后台检查、下载更新,第二次打开才会加载新的更新包);也可以在代码中手动调用Updates.checkForUpdateAsync()、Updates.fetchUpdateAsync()主动触发更新,打印日志确认是否能检测到可用更新。
  • 确认更新发布成功:执行eas update:list --release-channel staging,查看最新的更新记录是否存在,确认你发布的版本确实上传到了对应的staging渠道。
  • 检查expo-updates基础配置:确认app.json中expo.updates.enabled没有被设为false,同时expo.updates.url配置正确,配置错误会导致无法拉取更新。
  • 排查原生依赖变动:如果发布更新前你修改过原生依赖(比如升级react-native-firebase版本),此时不能仅发布JS更新,必须重新走EAS构建原生安装包,否则JS代码和原生依赖版本不匹配,更新会被直接忽略。

内容的提问来源于stack exchange,提问作者Daniel Loiterton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:54:03