EAS Update不允许scheme含大写字母,已上架应用如何解决?
问题背景
使用Expo SDK 48、EAS CLI 3.15.1裸工作流,应用已上架App Store,bundle identifier为com.name.NAME(含大写字母),配置EAS Update后执行eas update时触发以下错误:
❌ Failed to publish updates
Manifest Validation Error:
scheme:‘scheme’ should match pattern “[a-z0-9+.-]*$”
scheme:should be array
scheme:should match exactly one schema in oneOf
This is likely a problem with your app.json, or app.config.js
由于不能修改bundle identifier(会导致生成新应用),需要找到不改动bundle id的解决办法。
可行解决方案
核心思路:将bundle identifier和scheme配置分离——bundle identifier保持上架时的com.name.NAME不变,单独配置符合EAS要求的scheme字段。
修改app.json/app.config.js配置
在Expo配置文件中,明确区分bundleIdentifier和scheme字段:bundleIdentifier保留原有的com.name.NAME(确保和App Store一致)scheme设置为小写字母组成的数组,比如["com.name.name"]
示例配置:
{ "expo": { "name": "你的应用名称", "bundleIdentifier": "com.name.NAME", "scheme": ["com.name.name"], // 其他原有配置... } }同步iOS原生项目配置(裸工作流)
打开iOS项目的Info.plist文件,找到CFBundleURLSchemes数组,将其中的scheme替换为你在app.json中设置的小写值com.name.name。确保数组格式正确,所有元素都是小写字符串。重新执行EAS Update
完成配置后,运行命令:eas update此时Manifest验证会通过,正常发布更新。
关键说明
bundle identifier是App Store识别应用的唯一标识,绝对不能修改;而scheme是用于URL跳转、深层链接等功能的标识,只要符合EAS的格式要求(小写、数组形式)即可,无需与bundle identifier完全一致。这种方法不会影响已上架应用的状态,也能满足EAS Update的验证规则。
内容的提问来源于stack exchange,提问作者pbrune

