EAS Updates not appearing due to 'Failed to download manifest from URL' error

Today we are suddenly no longer seeing updates published with eas update on our deployed mobile app.

I have thoroughly checked that we have not made any changes to our app.json/eas.json files besides version/build numbers since we last used eas update, at which time it was working fine (early June). Although the updates appear to be published successfully, the app is simply no longer updating.

If I use the expo go app and open the branch manually from here, the update is accessible. It is only on the live version of the app (on the play store, I haven’t yet checked this on iOS) that it is not appearing.

We are using the managed workflow with SDK 48 and I have eas-cli version 3.14.0 win32-x64 node-v18.16.0.

I have tried the suggestions here: react native - Eas Update does not publish any new Expo Updates - Stack Overflow to no effect.

When I plug in my device and view the logs, I see the following:

Failed to download manifest from URL: https://exp.host/@me/my_project
java.lang.Exception: {"message":"Experience \"@me/my_project\" for platform \"android\" and release channel \"default\" does not exist or is not published.","errorCode":"EXPERIENCE_NOT_FOUND","metadata":{"fullName":"@me/my_project","platform":"android","sdkVersions":[],"runtimeVersion":"exposdk:48.0.0","releaseChannel":"default"}}
	at expo.modules.updates.loader.FileDownloader$downloadManifest$1.onResponse(FileDownloader.kt:312)
	at expo.modules.updates.loader.FileDownloader$downloadData$1.onResponse(FileDownloader.kt:393)
	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
	at java.lang.Thread.run(Thread.java:1012)

There isn’t a release channel called “default”, but I assume this would refer to our production channel, linked to our production branch, where the update is clearly visible. We do have one other channel, but we don’t actually use it for anything, and this has been the case for quite some time. I’m not aware of any way in which the default could have changed.

Does anyone have any idea what could have caused this error? See configuration below (again, this is unchanged since eas update was last working fine):

app.json:

{
  "expo": {
    "name": "myProject",
    "slug": "myProject",
    "platforms": [
      "ios",
      "android"
    ],
    "version": "1.8.8",
    "orientation": "portrait",
    "icon": "./assets/applogo.png",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0,
      "url": "https://u.expo.dev/[REDACTED]"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": false,
      "bundleIdentifier": "com.myProject.ios",
      "buildNumber": "1.8.8",
      "infoPlist": {
        "NSCameraUsageDescription": "[REDACTED]",
        "NSLocationWhenInUseUsageDescription": "[REDACTED]"
      }
    },
    "android": {
      "package": "com.myProject.android",
      "googleServicesFile": "./google-services.json",
      "versionCode": 84,
      "permissions": [
        "CAMERA",
        "ACCESS_COARSE_LOCATION",
        "ACCESS_FINE_LOCATION",
        "BLUETOOTH_SCAN",
        "BLUETOOTH_CONNECT"
      ],
      "adaptiveIcon": {
        "foregroundImage": "./assets/applogo.png",
        "backgroundColor": "#ffffff"
      }
    },
    "privacy": "unlisted",
    "runtimeVersion": {
      "policy": "sdkVersion"
    },
    "plugins": [
      [
        "with-rn-bluetooth-classic",
        {
          "peripheralUsageDescription": "[REDACTED]",
          "alwaysUsageDescription": "[REDACTED]"
        }
      ]
    ],
    "extra": {
      "eas": {
        "projectId": "[REDACTED]"
      }
    }
  }
}

eas.json:

{
  "cli": {
    "version": ">= 0.52.0"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "staging": {
      "channel": "staging",
      "distribution": "internal"
    },
    "production": {
      "channel": "production",
      "node": "16.15.0"
    }
  },
  "submit": {
    ...
  }
}

Anyone? This is a major issue and I cannot see anything wrong with our configuration.

hi there!

have you tried following these guides?

they are a good place to start when trying to debug issues with eas update, and they’ll equip you to better understand exactly where something is going wrong

Hi, thanks for responding. Yes I have gone through these already and was not able to identify any more than I have written into the description above. If there’s any additional information that would be useful please let me know.

https://exp.host/@me/my_project is a classic updates URL, so it looks like there may be some sort of misconfiguration (your builds are configured to read from classic updates rather than EAS Update). It’s hard for me to debug without seeing more about the project (your app.json indicates correct configuration for EAS update and the builds), but hopefully this points you in the right direction of a potential solution.

Thanks. I’m not sure how this could have happened - we stopped using classic updates quite a long time ago now, and this is the first time we’ve had any problem. I’m not really sure where to look to find the cause.

I have now noticed that the iOS app is getting the updates just fine - it’s only Android that has this problem. Does that help diagnose at all?

We found our issue by checking the build logs for our most recently submitted build. For some unknown reason, the read app config step on the Android build showed that updates.url was missing. This was not the case on the iOS build (even though both builds were started at the same time, with the same config). We rebuilt and resubmitted the Android version to the store, and now the updates are working again.

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