OTA Update (Expo Updates)
Аппаа App Store / Play Store-д нийтэлсэн. Гэтэл жижиг алдаа олдлоо. Дэлгүүрт дахин submit хийж, Apple-н шалгалтыг хоёр хоног хүлээх үү? Үгүй — Expo Updates ашиглаж JavaScript кодын өөрчлөлтийг хэдэн минутын дотор хэрэглэгч бүрт хүргэх боломжтой. Энэ бол Expo-н хамгийн хүчирхэг онцлогуудын нэг.
OTA Update гэж яаж ажилладаг вэ?
React Native апп хоёр давхаргатай:
- Native давхарга — iOS/Android-н жинхэнэ код. Энийг өөрчлөхөд заавал дэлгүүрт дахин нийтлэх шаардлагатай.
- JavaScript давхарга — таны бичсэн бүх React Native код. Энийг OTA-р шинэчилж болно.
Хэрэглэгч апп нээнэ
↓
Expo Updates серверт шинэ bundle байгаа эсэхийг шалгана
↓
Шинэ bundle байвал татаж авна (background-д)
↓
Дараагийн удаа нээхэд шинэ код ажиллана
Screen component, API endpoint, дизайн, логик — эдгээрийг бүгдийг OTA-р шинэчилж болно. Шинэ native module нэмэх, permissions өөрчлөх зэрэгт л дэлгүүр шаардлагатай.
Expo Updates суулгах ба тохируулга
npx expo install expo-updates
app.json-д updates тохируулгыг нэмнэ:
{
"expo": {
"name": "Миний Апп",
"slug": "minii-app",
"updates": {
"enabled": true,
"fallbackToCacheTimeout": 0,
"url": "https://u.expo.dev/your-project-id"
},
"runtimeVersion": {
"policy": "appVersion"
}
}
}
runtimeVersion нь native давхарга хоорондоо нийцтэй эсэхийг шалгадаг. appVersion policy ашиглавал app.json-н version утгатай таарах update л хэрэглэгдэнэ — буруу update тархахаас сэргийлнэ.
Update нийтлэх
JavaScript кодоо өөрчилсний дараа EAS Update ашиглан нийтэлнэ:
# EAS Update суулгана (нэг удаа)
npm install -g eas-cli
# Update нийтлэнэ — дэлгүүрт submit шаардлагагүй!
eas update --branch production --message "Нэвтрэх дэлгэцийн алдаа засав"
# Тодорхой платформд
eas update --platform android --branch production --message "Android layout засав"
# Preview branch-д (туршилтын хэрэглэгчдэд)
eas update --branch preview --message "Шинэ feature туршиж байна"
Команд ажиллаад дуусахад хэдэн секундын дотор серверт байршина. Аппаа нээж буй хэрэглэгчид дараагийн удаа нээхэд шинэчлэл автоматаар хэрэглэгдэнэ.
Кодоос update хянах
Хэрэглэгч update-г хүлээлгүй шууд авахыг хүсвэл кодоос хянах боломжтой:
import { useEffect, useState } from 'react';
import * as Updates from 'expo-updates';
import { View, Text, TouchableOpacity, StyleSheet, Alert } from 'react-native';
export function UpdateChecker() {
const [checking, setChecking] = useState(false);
const [updateAvailable, setUpdateAvailable] = useState(false);
async function checkForUpdate() {
// Development mode-д ажиллахгүй — production build-д л хэрэгтэй
if (__DEV__) return;
setChecking(true);
try {
const update = await Updates.checkForUpdateAsync();
if (update.isAvailable) {
setUpdateAvailable(true);
// Шинэчлэлийг татаж авна
await Updates.fetchUpdateAsync();
}
} catch (error) {
console.error('Update шалгах алдаа:', error);
} finally {
setChecking(false);
}
}
function applyUpdate() {
Alert.alert(
'Шинэчлэл бэлэн',
'Аппыг дахин эхлүүлэх үү?',
[
{ text: 'Болих', style: 'cancel' },
{
text: 'Тийм',
onPress: () => Updates.reloadAsync(),
},
]
);
}
useEffect(() => {
checkForUpdate();
}, []);
if (!updateAvailable) return null;
return (
<View style={styles.banner}>
<Text style={styles.text}>🔄 Шинэчлэл бэлэн болоод байна</Text>
<TouchableOpacity style={styles.button} onPress={applyUpdate}>
<Text style={styles.buttonText}>Шинэчлэх</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
banner: {
backgroundColor: '#0f172a',
borderTopWidth: 1,
borderTopColor: '#22d3ee',
padding: 12,
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
},
text: { color: '#94a3b8', fontSize: 14 },
button: { backgroundColor: '#22d3ee', paddingHorizontal: 16, paddingVertical: 6, borderRadius: 6 },
buttonText: { color: '#0b1120', fontWeight: 'bold', fontSize: 14 },
});
Branch стратеги
Том багийн хэрэглэгчдэд өөр өөр update хүргэхэд branch ашиглана:
# Хөгжүүлэгчдэд шинэ feature туршуулах
eas update --branch staging --message "Шинэ профайл дэлгэц"
# Бүх хэрэглэгчдэд нийтлэх
eas update --branch production --message "Профайл дэлгэц баталгаажлаа"
# Тодорхой хувилбарт холбох
eas channel:edit production --branch production
OTA Update нь хөгжүүлэгчдэд асар том эрх чөлөө өгдөг — алдааг хурдан засах, туршилтуудыг хурдан нийтлэх боломж. Энэ функцийг ашигла!
Дараагийн хичээлд:
Эцсийн төсөл — курсад сурсан бүх зүйлээ нэгтгэж бодит апп бүтээнэ. Navigation, Supabase backend, authentication, push notification, EAS Build — бүгдийг хамруулсан иж бүрдэл апп хийнэ.