EAS Update code signing requires a subscription to the EAS Enterprise plan.

When trying to run eas update on a build, it works fine, until the end where it logs:
Exported bundle(s)
:heavy_check_mark: Uploaded 2 app bundles
:heavy_check_mark: Uploading assets skipped - no new assets found
:heavy_check_mark: Channel: development pointed at branch: development
:lock: Signing updates
:heavy_multiplication_x: Failed to publish updates
CombinedError: [GraphQL] EAS Update code signing requires a subscription to the EAS
Enterprise plan.

I have access to the ‘Production Plan’, which seems to have the ability to push expo updates, so I do not understand this issue.

Could you please share what version of EAS CLI you’re using (eas --version) as well as what the “updates” section of your app.json or app.config.js file looks like? Specifically, it will help to know if you have a “codeSigningMetadata” field in there.

Hi @albuick

You can push updates with the free plan even. Also, all apps are signed regardless of the plan.

The error is about signed updates which are separate from app signing and are only available with the Enterprise plan.
See EAS Update - Code Signing

version is: eas-cli/3.9.0 darwin-x64 node-v18.15.0

mu app.config.js looks like this:
import test from “./app-test.json”;
import main from “./app-master.json”;

export default () => {
return process.env.APP_ENV === “production” ? main : test;

with two different json files depending on build.

Within the json file updates shows (i’ve removed URL for privacy reasons):

"updates": {
  "fallbackToCacheTimeout": 0,
  "codeSigningCertificate": "./certs/certificate.pem",
  "codeSigningMetadata": {
    "keyid": "main",
    "alg": "rsa-v1_5-sha256"
  "url": "xxxx"

You’ll need to get rid of the codeSigning* stuff, since you are not on the Enterprise plan.

See also the “Removing Code Signing” section of the page I linked to in my last comment.

1 Like

Thanks Wodin. That has fixed the error when running eas update. However, my main issue is that although the update runs and updates the channel with a new update, and the correct branch is linked, the live app is not updating, even when closing and reopening a few times

It could be the runtime version maybe?

See if the debugging guide helps:

Also, I think it helps to have a button to click on to check for and download updates, at least while testing, instead of restarting the app and not being able to see what’s happening.

e.g. add a button that calls Updates.checkForUpdateAsync() . If an update is available, download it using Updates.fetchUpdateAsync() and then reloads the app using Updates.reloadAsync() .

Put in a few console.log() calls to see what’s going on.