Expo는 Over The Air(OTA) 지원합니다. expo publish 명령어로 Javascript 번들을 만든 다음 Cloud에 업로드하고 App을 실행할 때 마다 App은 Cloud를 체크해서 Javascript 번들 업데이트를 실행합니다. 즉 App Store나 Play Store에 앱을 새로 올리지 않고 업데이트 할 수 있는 기술입니다. Expo에서는 기본으로 OTA가 설정되어있습니다. 오늘은 OTA설정에 대해서 알아보겠습니다.
app.json 파일을 열어서 updates 필드를 확인합니다.
fallbackToCacheTimeout: 0 은 백그라운드에서 최신 번들 다운을 진행하고 다운이 진행되기 전까지 캐시된 번들로 앱을 실행한다는 의미입니다. 그리고 백그라운드에서 업데이트가 완료되면 바로 적용되는 것은 아니며 앱을 다 시작할 때 백그라운드에 업데이트 된 번들로 실행됩니다.
백그라운드 자동 업데이트를 해제하고 소스레벨에서 업데이트를 제어할 수도 있습니다.
import { Updates } from "expo";
import { Alert } from "react-native";checkForUpdates = async () => {try {
const update = await Updates.checkForUpdateAsync();
if (update.isAvailable) {
Alert.alert(
'알림!',
'새로운 버전이 있습니다. 업데이트 하시겠습니까?',
[
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel',
},
{text: 'OK', onPress: () => this.runUpdate()},
],
{cancelable: false},
);
}
} catch (e) {
alert(e)
// handle or log error
}
}runUpdate = async () => {
await Updates.fetchUpdateAsync(); //최신업데이트 동기화, 로컬 캐시에 저장
// ... notify user of update ...
Updates.reloadFromCache();
}
위의 소스를 참고해서 수동 업데이트를 구현합니다. 저는 App.js 에 구현했습니다.
OTA 업데이트 설정을 끄고 싶다면 updates.enabled 에 false를 지정합니다.