I am using eas build and update in my expo app, followed the docs for the implementation and everything was working fine. But I just tested it yesterday and it is not working now.
But what I realised is that, when I refresh the app 2 times (as mentioned in docs), it doesn't download any new updates but if I do it multiple times (nearly 5 times), though the update works on that particular refresh but the assets (images and icons) are gone.
And if I refresh the app again, then the update is gone and assets are back, like it reverts back to older update (which is actually the build itself).
Right now, i am using app.config.js as well as app.json (i need app.json for google ads as that is not reading the config from app.config.js).
Here are the config files;
app.config.js
import "dotenv/config";
export default {
expo: {
backgroundColor: "#1A1A1A",
owner: "owner",
name: "name",
slug: "slug",
version: "1.0.0",
assetBundlePatterns: ["**/*"],
extra: {
eas: {
projectId: "<project id>",
},
...
},
runtimeVersion: "1.0.1", // changed the runtime version from 1.0.0 to 1.0.1 as i thought this may be the reason
updates: {
url: "https://u.expo.dev/<project id>",
},
android: {
...,
},
},
};
app.json
{
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-****************" // my google ads id
}
}
androidManifest.xml
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://u.expo.dev/<project id>"/>
<meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
<meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="1.0.1"/>
I think this is the only relevant code to eas and eas updates.
Any help is greatly appretiated.
Thanks
I was using this code to access env variables;
In my app.config.js, inside the extra
object;
extra: {
BASE_URL: process.env.BASE_URL
}
This will load the BASE_URL
from .env during build.
Now to access it in my code, I was using;
import Constants from 'expo-constants'
const baseUrl = Constants.manifest.extra.BASE_URL
The problem lies in Constants.manifest
, it gets undefined after we send an update this extra
in that case is undefined, breaking the app. And if the app breaks due to an update, eas rolls back to the previous update.
To fix it, use Constants.expoConfig.extra.BASE_URL
.
One more thing to note is, while sending an update, we also need to upload the env variables with the new update too, which is done like this;
BASE_URL=https://example.com ANOTHER_VAR=some_value eas update --branch preview --message "some message"