使用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
相关产品推荐
相关产品推荐

