expo-airpush
v0.1.1
Published
OTA Hot Updates for React Native apps
Maintainers
Readme
expo-airpush
Native OTA hot updates for Expo and React Native apps.
expo-airpush checks your AirPush server for a published bundle, downloads the zip, extracts it into the app sandbox, and restarts the app so React Native boots from the updated bundle.
Install
bun add expo-airpushThe package expects an Expo-managed or prebuilt React Native app.
App Integration
The JavaScript API handles update lookup and bundle download. Your native entrypoints still need to tell React Native to boot from the downloaded bundle when one exists.
Android
In MainApplication.kt, pass the AirPush bundle path into ExpoReactHostFactory.getDefaultReactHost:
override val reactHost: ReactHost by lazy {
ExpoReactHostFactory.getDefaultReactHost(
context = applicationContext,
packageList = PackageList(this).packages,
jsBundleFilePath = expo.modules.airpush.Airpush.getJSBundleFile(applicationContext)
)
}iOS
In AppDelegate.swift, prefer the downloaded bundle before the embedded one:
override func sourceURL(for bridge: RCTBridge) -> URL? {
if let bundle = Airpush.getBundleURL() {
return bundle
}
return bridge.bundleURL ?? bundleURL()
}Usage
import * as AirPush from "expo-airpush";
const result = await AirPush.checkForUpdate({
serverUrl: "https://ota.example.com",
appSlug: "my-app",
apiKey: "ota_your_api_key",
binaryVersion: "1.0.0",
platform: "android",
channel: "production",
});
if (result.hasUpdate && result.bundleUrl) {
await AirPush.downloadUpdate(result.bundleUrl, {
metadata: result.raw
? {
appSlug: "my-app",
channel: "production",
platform: "android",
runtimeVersion: "1.0.0",
bundleId: result.raw.bundle.id,
version: result.raw.bundle.version,
sha256Hash: result.raw.bundle.sha256Hash ?? undefined,
bundleUrl: result.raw.bundle.url,
installedAt: new Date().toISOString(),
}
: undefined,
});
AirPush.restartApp();
}Bundle Format
The downloaded archive should match the platform boot file names React Native expects:
- Android:
index.android.bundle - iOS:
main.jsbundle
Assets can be included alongside the bundle inside the zip and will be extracted into the active update directory.
