build:ios Can't update `ios:buildNumber` without publishing

This one had me a little flummoxed. I was very confused why the buildNumber on expo build servers wouldn’t change unless I removed the no-publish from expo build:ios --no-publish? Does that sound correct?

I’m nearly certain the expo build servers are using a different buildNumber from my app.json, and pretty sure it’s the value from the last time I built with publish on.

My use case is I don’t want build’s planned for the testflight upload to be published, and don’t want to run an android build in that flow

Is it possible to have the buildservers use the buildNumber from the app.json at the time expo build is run? I’ve got builds running again but feel like I’m wasting energy with an extra android build and expo publish

Hey could you share your app.json here?

Sorry posted this from our a team account.

Here is the local app.json when I was running expo build:ios --no-publish and expo upload:ios. Sorry I can’t post it all (private repo), happy to send the full details over email.

  "expo": {
    "privacy": "unlisted",
    "sdkVersion": "33.0.0",
    "platforms": [
    "version": "***",
    "orientation": "default",
    "updates": {
      "enabled": false,
      "fallbackToCacheTimeout": 0
    "assetBundlePatterns": ["**/*"],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "***",
      "buildNumber": "32"

But when I look at my expo build logs reading manifest I see the buildNumber only matches my last -> expo published app.json.

  "android": {
    "adaptiveIcon": { "backgroundColor": "#ffffff" },
    "package": "***",
    "permissions": []
  "bundledAssets": [],
  "dependencies": ["***"],
  "description": "***",
  "ios": {
    "buildNumber": "28",
    "bundleIdentifier": "***",
    "supportsTablet": true
  "locales": {},
  "name": "***",
  "orientation": "default",
  "platforms": ["ios", "android", "web"],
  "privacy": "unlisted",
  "sdkVersion": "33.0.0",
  "slug": "***",
  "splash": {
    "backgroundColor": "#ffffff",
    "image": "./assets/images/splash.png",
    "imageUrl": "***",
    "resizeMode": "contain"
  "updates": { "enabled": false, "fallbackToCacheTimeout": 0 },
  "version": "0.9.2",
  "web": {},
  "id": "***",
  "revisionId": "0.9.2-r.zrgM0OPk7p",
  "publishedTime": "2019-07-30T23:58:53.263Z",
  "commitTime": "2019-07-30T23:58:53.314Z",
  "bundleUrl": "***",
  "releaseChannel": "default",
  "hostUri": "***"

That old build number is also set in the build artifact when I go to run expo upload:ios

[iTMSTransporter] 		ERROR ITMS-90189: "Redundant Binary Upload. You've already uploaded a build with build number '28' ...

Just tried the same with an android build, similar result expo build service uses the app.json from my last expo publish. It doesn’t seem possible to increment a buildNumber/versionCode in my app.json locally then build using that app.json on the expo servers?

Maybe that’s intended behaviour?

It looks like your buildNumber doesn’t follow Apple’s specified format

You should be able to increment this manually

Oh strange, thanks for that. I’ve always followed the ‘One big number’ format :smile: for CFBundleVersion.

I also never see any complaints from apple or expo about it, and it’s been fine in other ios apps I’ve worked with, I’ve seen lots of other ‘one/two big number’ formats used in the wild too

I’ll switch to the spec format and incrementing that and see if that makes a difference, but I’m not really expecting it to?

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.