OTA updates problem: Failed to download new update

Recently, we updated our expo sdk from version 44 to version 48. However, after publishing our app in the Apple store and releasing a few OTA updates, we began to receive an overwhelming amount of errors in Sentry, with the current count exceeding 1000. Unfortunately, we’re unsure how these errors are affecting user experience or if users are receiving the new updates as intended. The error message we’re receiving is simply stating “Failed to download new update.”

Do you have any suggestions on how we can fix this problem?

Our setup:

  • eas-cli: eas-cli/3.9.2 darwin-arm64 node-v18.16.0
  • Expo: ^48.0.0
  • expo-updates: ~0.16.4

app.config.js

{
  "name": "***",
  "jsEngine": "hermes",
  "slug": "***",
  "originalFullName": "***",
  "scheme": "***",
  "version": "0.0.44",
  "plugins": [
    "sentry-expo",
    "expo-tracking-transparency",
    [
      "expo-build-properties",
      {
        "ios": {
          "flipper": true
        }
      }
    ],
    [
      "expo-location",
      {
        "locationAlwaysAndWhenInUsePermission": "Location is used to provide suggestions for closest property to resident location."
      }
    ],
    [
      "expo-media-library",
      {
        "photosPermission": "Grant us photos permission to send photos of your car or apartment for better service."
      }
    ],
    [
      "expo-camera",
      {
        "cameraPermission": "Grant us camera permission to send photos of your car or apartment for better service.",
        "microphonePermission": "Grant us microphone permission to record audio for better service."
      }
    ],
    [
      "@config-plugins/react-native-branch",
      {
        "apiKey": "***",
        "iosAppDomain": "***"
      }
    ],
    [
      "react-native-fbsdk-next",
      {
        "appID": "***",
        "clientToken": "***",
        "scheme": "fb***",
        "advertiserIDCollectionEnabled": false,
        "autoLogAppEventsEnabled": false,
        "isAutoInitEnabled": true,
        "iosUserTrackingPermission": "This identifier will be used to deliver personalized ads to you."
      }
    ]
  ],
  "icon": "./assets/icon.png",
  "splash": {
    "image": "./assets/splash-image.png",
    "backgroundColor": "#00121A",
    "resizeMode": "cover"
  },
  "facebookDisplayName": "Facebook SSO",
  "facebookScheme": "fb***",
  "runtimeVersion": {
    "policy": "sdkVersion"
  },
  "updates": {
    "url": "https://u.expo.dev/f91a2d0b-813d-4c46-85a7-a386d1c86632"
  },
  "ios": {
    "bundleIdentifier": "***",
    "icon": "./assets/icon.png",
    "requireFullScreen": true,
    "associatedDomains": [
      "applinks:***",
      "applinks:***"
    ],
    "infoPlist": {
      "LSApplicationQueriesSchemes": [
        "geo",
        "http",
        "https",
        "instagram",
        "mailto",
        "maps",
        "sms",
        "tel"
      ],
      "NSLocationWhenInUseUsageDescription": "Location is used to provide suggestions for closest property to resident location.",
      "NSUserTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you.",
      "NSPhotoLibraryUsageDescription": "Grant us photos permission to send photos of your car or apartment for better service.",
      "NSPhotoLibraryAddUsageDescription": "Allow $(PRODUCT_NAME) to save photos",
      "SKAdNetworkItems": [
        {
          "SKAdNetworkIdentifier": "v9wttpbfk9.skadnetwork"
        },
        {
          "SKAdNetworkIdentifier": "n38lu8286q.skadnetwork"
        }
      ]
    }
  },
  "android": {
    "package": "***",
    "icon": "./assets/android-icon.png",
    "adaptiveIcon": {
      "foregroundImage": "./assets/android-icon.png",
      "backgroundColor": "#00121A"
    },
    "intentFilters": [
      {
        "autoVerify": true,
        "action": "VIEW",
        "data": [
          {
            "scheme": "***"
          }
        ],
        "category": [
          "BROWSABLE",
          "DEFAULT"
        ]
      },
      {
        "autoVerify": true,
        "action": "VIEW",
        "data": [
          {
            "scheme": "fb***"
          }
        ],
        "category": [
          "BROWSABLE",
          "DEFAULT"
        ]
      }
    ],
    "permissions": [
      "CAMERA",
      "INTERNET",
      "NOTIFICATIONS",
      "ACCESS_NETWORK_STATE",
      "READ_EXTERNAL_STORAGE",
      "WRITE_EXTERNAL_STORAGE",
      "ACCESS_COARSE_LOCATION",
      "android.permission.ACCESS_COARSE_LOCATION",
      "android.permission.ACCESS_FINE_LOCATION",
      "android.permission.FOREGROUND_SERVICE",
      "android.permission.READ_EXTERNAL_STORAGE",
      "android.permission.WRITE_EXTERNAL_STORAGE",
      "android.permission.CAMERA",
      "android.permission.RECORD_AUDIO",
      "android.permission.INTERNET"
    ],
    "googleServicesFile": "./config/google-services.json",
  },
  "extra": {
    "sentryEnvironment": "prod",
    "eas": {
      "projectId": "f91a2d0b-813d-4c46-85a7-a386d1c86632"
    }
  },
  "sdkVersion": "48.0.0",
  "platforms": [
    "ios",
    "android",
    "web"
  ],
}

:apple: Build profile “prod”

{
  "credentialsSource": "remote",
  "distribution": "store",
  "channel": "prod",
  "autoIncrement": true,
  "env": {
    "APP_ENV": "prod",
    "API_URI": "***",
  },
  "resourceClass": "m-medium"
}

Code that triggers the update:

  try {
    const { isAvailable } = await Updates.checkForUpdateAsync();

    if (isAvailable) {
      await Updates.fetchUpdateAsync();
      await Updates.reloadAsync();
    }
  } catch (error) {
    Sentry.captureException(error.message, {
      extra: {
        level: 'warning',
        logger: 'device.ota_updates',
      },
    });
  }
}

@eddie_amenify did you find a solution to this issue? We’re experiencing the same thing with the same code and the same errors.