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

Expo构建iOS版本未更新,TestFlight提交失败求助

Expo EAS构建iOS包版本不生效,TestFlight上传版本不符问题解决

问题场景

我有一个预构建完成的Expo应用,使用命令npx expo prebuild -p ios && eas build -p ios构建iOS包,Expo控制台显示构建版本为999.0.0(12),但提交到App Store Connect时收到错误:

Error: Asset validation failed This bundle is invalid. The value for key CFBundleShortVersionString [1.0] in the Info.plist file must contain a higher version than that of the previously approved version [40.2.0]

已完成的排查操作:

  • 确认本地Info.plist中CFBundleShortVersionString值为999.0.0而非1.0
  • 将package.json的version字段修改为999.0.0
  • 在app.json中设置expo.version为999.0.0、expo.ios.buildNumber为12
  • 在Xcode的target中手动配置版本号和构建号
    每次修改后都重新执行prebuild,但提交时仍被检测到版本为1.0。

我的app.json配置如下:

{
  "expo": {
     "name": "name",
     "slug": "name",
     "version": "999.0.0",
     "orientation": "portrait",
     "icon": "./assets/images/icon.png",
     "userInterfaceStyle": "automatic",
     "splash": {
         "image": "./assets/images/splash.png",
         "resizeMode": "contain",
         "backgroundColor": "#ffffff"
     },
     "assetBundlePatterns": [
          "**/*"
      ],
     "ios": {
        "supportsTablet": true,
        "bundleIdentifier": "xxx.xxxxx.xxxxxx",
        "buildNumber": "12"
      },
    "extra": {
      "supportsRTL": false,
      "oneSignalAppId": "xxxxxxx",
      "router": {
        "origin": false
      },
      "eas": {
        "build": {
          "experimental": {
            "ios": {
              "appExtensions": [
                {
                  "targetName": "OneSignalNotificationServiceExtension",
                  "bundleIdentifier": "xxxxxxx",
                  "entitlements": {
                    "com.apple.security.application-groups": [
                      "xxxxxxxx"
                    ]
                  }
                }
              ]
            }
          }
        },
        "projectId": "xxxx"
      }
    }
  },
  "react-native-google-mobile-ads": {
    "android_app_id": "ca-xxx-xx-xxx~xxxx",
    "ios_app_id": "ca-xxx-xxx-xxxx~xxx"
  }
}

更新:手动在Xcode中修改shortVersion和buildNumber后直接上传,成功提交,推测问题出在EAS CLI或远程构建流程中。


针对性解决步骤

1. 清理EAS远程构建缓存

EAS远程构建可能缓存了旧的配置或产物,导致新版本号不生效,执行以下命令清除缓存:

eas build:clear-cache

之后重新执行构建命令。

2. 同步App Extension的版本配置

你的项目中配置了OneSignalNotificationServiceExtension,EAS构建时可能仅更新了主应用版本,而Extension的版本仍沿用旧值,导致上传时校验失败。在app.json的ios.appExtensions中添加版本配置:

"appExtensions": [
  {
    "targetName": "OneSignalNotificationServiceExtension",
    "bundleIdentifier": "xxxxxxx",
    "version": "999.0.0",
    "buildNumber": "12",
    "entitlements": {
      "com.apple.security.application-groups": [
        "xxxxxxxx"
      ]
    }
  }
]

添加后重新执行prebuild和eas build。

3. 构建时强制指定版本参数

在执行eas build时直接传入版本号参数,强制覆盖远程配置:

eas build -p ios --version 999.0.0 --build-number 12

4. 检查eas.json中的硬编码配置

如果项目存在eas.json,确认其中的iOS构建配置没有硬编码版本号,避免覆盖app.json的设置:

{
  "build": {
    "production": {
      "ios": {
        // 移除或修改这里的硬编码版本号
        // "version": "1.0",
        // "buildNumber": "1"
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:23