EAS Build — APK va AAB yasash, development build

~20 daq · React Native · Nashr qilish

Muammodan boshlaylik

Ilova Expo Go da ishlaydi. Endi:

  • Do'stingizga ilovani yuborish kerak — u Expo Go ni o'rnatmasligi kerak
  • Push bildirishnomalar (42-dars), ba'zi native kutubxonalar Expo Go da ishlamaydi
  • Google Play va App Store ga chiqarish kerak
  • iOS ilova yasash uchun Mac va Xcode kerak... sizda esa Windows

EAS (Expo Application Services) — Expo ning bulut xizmati: ilovani ularning serverlarida yasaydi (Android ham, iOS ham), imzolaydi va do'konlarga yuboradi. Mac shart emas.


O'rnatish va sozlash

npm install -g eas-cli
eas login                  # expo.dev hisobi (bepul)
eas build:configure

eas build:configure loyihani Expo hisobingizga bog'laydi (app.json ga projectId yoziladi) va eas.json yaratadi:

{
  "cli": { "version": ">= 16.0.0", "appVersionSource": "remote" },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "android": { "buildType": "apk" }
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

Uchta profil — uch xil maqsad.


Ilova identifikatorlari

Birinchi build dan oldin app.json da — noyob ID lar (4-dars):

{
  "expo": {
    "name": "Do'kon",
    "version": "1.0.0",
    "ios": { "bundleIdentifier": "uz.dokon.app" },
    "android": { "package": "uz.dokon.app" }
  }
}

[!WARNING] package va bundleIdentifier do'konga birinchi marta yuklangandan keyin o'zgartirib bo'lmaydi. Teskari domen formatida: uz.kompaniya.ilova. Faqat kichik harflar, raqamlar va nuqta.


1. Development build — Expo Go o'rniga

Expo Go — barcha ilovalar uchun umumiy konteyner, faqat Expo SDK modullari bilan. Development build — sizning ilovangizning o'z "Expo Go" si: sizning barcha native kutubxonalaringiz bilan, lekin baribir hot reload va debug bilan.

npx expo install expo-dev-client
eas build --profile development --platform android

Build tugagach (10-20 daqiqa) — QR kod va havola. Telefonda ochib, APK ni o'rnatasiz. Keyin:

npx expo start

Endi QR — Expo Go emas, sizning development build ingizda ochiladi.

Expo Go Development build
O'rnatish Do'kondan O'zingiz yasaysiz
Native kutubxonalar Faqat Expo SDK dagilar Istalgan
Push (Android), keyboard-controller, vision-camera ❌ ✅
Hot reload, debug ✅ ✅
Qayta build kerak Hech qachon Native kutubxona qo'shilganda

Qoida: o'rganish va prototip — Expo Go. Haqiqiy loyiha — development build dan boshlang. JavaScript o'zgarishlari uchun qayta build kerak emas; faqat native kutubxona qo'shilganda yoki app.json dagi plaginlar o'zgarganda.


2. Preview — sinovchilar uchun APK

eas build --profile preview --platform android

Natija — oddiy APK fayl. Havolani do'stlaringiz yoki buyurtmachiga yuborasiz — ular telefonga o'rnatadi ("Noma'lum manbalar" ruxsati bilan). Dev menyusiz, haqiqiy ilova kabi.

iOS uchun "internal distribution" — sinovchi qurilmalarning UDID lari ro'yxatdan o'tkaziladi (eas device:create). Yoki osonrog'i — TestFlight (50-dars).


3. Production — do'konlar uchun

eas build --profile production --platform android    # AAB — Google Play uchun
eas build --profile production --platform ios        # IPA — App Store uchun
eas build --profile production --platform all        # ikkalasi
  • Android: AAB (Android App Bundle) — Google Play talab qiladi; Play har bir qurilmaga mos kichik APK yasaydi
  • iOS: IPA — Apple Developer hisobi kerak (yiliga $99)

autoIncrement: true — har bir production build da versionCode (Android) / buildNumber (iOS) avtomatik oshadi. Do'kon bir xil raqamli build ni qabul qilmaydi.


Imzolash (signing)

Har bir ilova kriptografik imzo bilan imzolanadi — do'kon va telefon ilova haqiqatan sizdan ekanini shu bilan tekshiradi.

EAS buni o'zi boshqaradi: birinchi build da kalitlarni yaratadi va xavfsiz saqlaydi. Siz faqat savollarga "Ha" deysiz.

[!WARNING] Android imzo kaliti (keystore) yo'qolsa — ilovangizga hech qachon yangilanish chiqara olmaysiz (Play App Signing yoqilmagan bo'lsa). EAS uni saqlaydi, lekin zaxira nusxasini oling: eas credentials → Android → Download keystore. Xavfsiz joyda saqlang.


Muhit o'zgaruvchilari

Development da — mahalliy API, production da — haqiqiy:

"build": {
  "development": { "env": { "EXPO_PUBLIC_API_URL": "http://192.168.1.10:3000" } },
  "production": { "env": { "EXPO_PUBLIC_API_URL": "https://api.dokon.uz" } }
}

Yoki expo.dev saytida — eas env:create. Maxfiy server kalitlari — baribir ilovada emas (31-dars).


Build jarayonini kuzatish

eas build:list

Yoki https://expo.dev → loyiha → Builds. Xato bo'lsa — to'liq log: ko'pincha mos kelmagan kutubxona versiyasi (npx expo-doctor, 5-dars) yoki app.json dagi xato.

Bepul reja — oyiga cheklangan build lar, navbatda kutish bilan. Kichik loyiha uchun yetarli. Tez-tez build kerak bo'lsa — pullik reja yoki o'z kompyuteringizda: eas build --local (Android — istalgan OS da; iOS — faqat macOS da).

Mahalliy build (EAS siz)

npx expo run:android     # Android Studio va SDK kerak
npx expo run:ios         # macOS + Xcode kerak

android/ va ios/ papkalarini yaratadi (prebuild, 4-dars) va mahalliy yasaydi.


Nima uchun shunday?

Nima uchun iOS ilovani yasash uchun Mac kerak va EAS bu muammoni qanday hal qiladi?

Apple iOS ilovalarini yasash vositalarini (Xcode, kompilyator, imzolash) faqat macOS uchun chiqaradi. Bu Apple ning qarori va texnik jihatdan aylanib o'tib bo'lmaydi. EAS esa Mac kompyuterlarni bulutda ijaraga beradi: siz kodni yuborasiz, ular Mac da yasab, imzolab, tayyor faylni qaytaradi. Windows yoki Linux dagi dasturchi uchun bu iOS ilova chiqarishning eng oddiy yo'li.


Xulosa

Eslab qoling:

  • eas-cli, eas login, eas build:configure → eas.json
  • package / bundleIdentifier — noyob, keyin o'zgarmaydi
  • development — o'z Expo Go ingiz, native kutubxonalar bilan
  • preview — APK, sinovchilarga havola
  • production — AAB (Play), IPA (App Store); autoIncrement
  • Imzolashni EAS boshqaradi; Android keystore zaxirasini oling
  • Har profil uchun o'z env i
  • Mac siz iOS — EAS bulutda

Keyingi dars

49-dars: Google Play ga chiqarish