Release (reliz qurilishi) — bu ilovalar do‘konlarida nashr qilish uchun tayyorlangan mobil ilovaning yakuniy konfiguratsiyasi. Apple Developer Documentation-ga ko‘ra, Release qurilishi kompilyator tomonidan kod optimallashtirish, disk raskadro’ka belgilarini olib tashlash, obfuskatsiya va distributiv sertifikat bilan raqamli imzoni o‘z ichiga oladi. Asosiy farq — Release yakuniy foydalanuvchi uchun mo‘ljallangan, dasturchi uchun emas.
Asosiy ma’lumotlar
Release — bu barcha kompilyator optimallashtirishlari qo‘llaniladigan, disk raskadro’ka ma’lumotlari olib tashlanadigan, resurslar siqiladigan va bajariladigan kod intellektual mulkni himoya qilish uchun obfuska qilinadigan qurish konfiguratsiyasi. Release maqsadi rasmiy kanallar orqali tarqatishga tayyor bo‘lgan eng tez va ixcham ikkilik faylni olishdir.
Debug-dan farqli o‘laroq, Release qurilishi tuzatuvchi uchun kirish nuqtalarini o‘z ichiga olmaydi, tasdiqlar o‘chirilgan va loglash minimal darajaga tushirilgan. Bu shunchaki bayroqni almashtirish emas — bu turli sertifikatlar, provisioning profile va paketlash sozlamalari bilan boshqa qurish pipeline-idir. Release qurilishi ko‘proq vaqt talab qiladi, chunki kompilyator qo‘shimcha optimallashtirish o‘tishlarini amalga oshiradi.
iOS uchun Release qurilishi Apple Distribution sertifikati bilan imzolanadi va App Store Connect-da tekshiruvdan o‘tadi. Android uchun Release qurilishi Upload Key bilan imzolanadi va Google Play Console-ga yuklanishi mumkin. Ikkala platforma ham raqamli imzoni talab qiladi: usiz qurilgan ilova foydalanuvchi qurilmasiga o‘rnatilmaydi.
Debug va Release o‘rtasidagi farq barcha darajalarda namoyon bo‘ladi: kompilyator bayroqlaridan tortib .apk yoki .ipa ning yakuniy hajmigacha. Bu farqlarni tushunish CI/CD pipeline va faqat Release qurilishida namoyon bo‘ladigan regressiyalarni topish uchun juda muhimdir.
Release-da kompilyator hajm (-Os LLVM uchun) yoki tezlik (-O2) bo‘yicha optimallashtirishni yoqadi. Bu inline funksiyalarni joylashtirish, o‘lik kodni olib tashlash, ko‘rsatmalarni qayta tartiblash va sikllarni agressiv optimallashtirishni anglatadi. Debug-da bu bosqichlarning barchasi o‘tkazib yuboriladi, bu kodni sekinlashtiradi, lekin manba kod satrlari bilan mashina ko‘rsatmalari o‘rtasida to‘liq muvofiqlikni saqlaydi.
ProGuard/R8 (Android) sinflar, metodlar va maydonlar nomlarini qisqa nomlarga (a, b, c) o‘zgartiradi, bu teskari muhandislikni qiyinlashtiradi va DEX fayl hajmini kamaytiradi. iOS-da ekvivalent funksionallik Strip Symbols va Swift Symbolication tomonidan ta’minlanadi. Reflection yoki XML maketida ishlatiladigan sinflar uchun keep qoidalarini sozlash muhim, aks holda ilova ishga tushganda ClassNotFoundException bilan ishdan chiqadi.
| Parametr | Android (Gradle) | iOS (Xcode) |
|---|---|---|
| Optimallashtirish | minifyEnabled true, proguardFiles | Optimization Level: Fastest, Smallest |
| Obfuskatsiya | R8 (standart) | Strip Linked Product, Symbols Hidden |
| Imzo | Android Signing Config v2/v3 | Apple Distribution Certificate |
| Resurslarni siqish | shrinkResources true | Asset Catalog Compiler |
| Versiyalash | versionCode, versionName | CFBundleVersion, CFBundleShortVersionString |
Release qurilishi Debug-ga qaraganda ancha ixcham. Odatdagi nisbat: Debug versiyasi 40–80 MB, Release — 15–30 MB egallaydi. Farq disk raskadro’ka belgilarini (DWARF) olib tashlash, resurslarni siqish (aapt2) va DEX obfuskatsiyasi tufayli yuzaga keladi. Foydalanuvchilar uchun ilova hajmi o‘rnatish konversiyasining muhim omilidir, shuning uchun Release-da hajm optimallashtirish majburiy amaliyotdir.
Gradle Release versiyasini qurish uchun o‘rnatilgan vazifalarni taqdim etadi: assembleRelease, bundleRelease (AAB uchun) va signingReport. Modul darajasida build.gradle ni to‘g‘ri sozlash barqaror CI/CD qurilishining asosidir. Oddiy loyiha misolida asosiy bosqichlarni ko‘rib chiqamiz.
buildTypes ichida release konfiguratsiyasi ko‘rsatiladi: minification yoqiladi, shrinkResources va proguard qoidalari o‘rnatiladi. signingConfig bloki storeFile, storePassword, keyAlias va keyPassword ga murojaat qilishi kerak — bu parametrlar VCS da saqlanmasligi kerak. CI/CD uchun atrof-muhit o‘zgaruvchilari yoki Keystore Provisioning Plugin-dan foydalaning.
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile(
"proguard-android-optimize.txt"
), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
}
Android App Bundle (AAB) — Google Play-da nashr qilish uchun tavsiya etilgan format. AAB bitta APK emas, balki resurslarning modulli to‘plamini o‘z ichiga oladi, undan Google Play ma’lum bir qurilma uchun optimallashtirilgan APK-ni dinamik ravishda yaratadi. ./gradlew bundleRelease buyrug‘i AAB, ./gradlew assembleRelease esa yuklashdan oldin sinov uchun universal APK qurilishini yaratadi.
Imzolangan APK/AAB apksigner verify orqali tekshiriladi. Google Play Console yuklashda imzoni avtomatik tekshiradi. Android 9 (API 28) dan boshlab Google v2 yoki v3 imzo sxemalarini talab qiladi. Wear OS va Android TV uchun qo‘shimcha ravishda rotating key ko‘rsatilgan v3.1 talab qilinadi.
Xcode Release versiyasini Archive konfiguratsiyasida quradi — bu shunchaki build emas, balki to‘liq pipeline: optimallashtirish bilan kompilyatsiya, .xcarchive ga paketlash, Distribution sertifikati bilan imzolash va .ipa ga eksport. Jarayon Product → Archive yoki xcodebuild buyrug‘i orqali boshlanadi.
Edit Scheme → Run → Build Configuration da yakuniy sinov uchun Release ni tanlang. App Store Connect ga yuborish uchun Product menyusidan Archive dan foydalaning. Xcode ikkilik fayl, dSYM va Resource-bundle ni o‘z ichiga olgan .xcarchive yaratadi. Arxivdan Ad Hoc, Development yoki App Store distributsiyasi uchun .ipa eksport qilinadi.
TestFlight App Store Distribution sertifikati bilan imzolangan Release qurilishlarini qabul qiladi. App Store ga yuborishdan oldin qurilish Xcode da avtomatik tekshiruvdan o‘tadi: sertifikatlarning muvofiqligi, barcha o‘lchamdagi piktogrammalarning mavjudligi, Info.plist ning to‘g‘riligi va ikkilik faylda emulyator arxitekturalarining yo‘qligi tekshiriladi.
# xcodebuild orqali Release qurish
xcodebuild archive \
-project MyApp.xcodeproj \
-scheme "MyApp" \
-configuration "Release" \
-archivePath "build/MyApp.xcarchive"
# .ipa ni App Store uchun eksport qilish
xcodebuild -exportArchive \
-archivePath "build/MyApp.xcarchive" \
-exportPath "build/" \
-exportOptionsPlist "export.plist"
App Thinning — yuklab olinadigan ilova hajmini kamaytirish uchun Apple texnologiyasi. App Store ga yuklashda Apple foydalanuvchining muayyan qurilmasi uchun ikkilik faylni qayta kompilyatsiya qiladi, foydalanilmagan arxitekturalarni olib tashlaydi. Bitcode (LLVM ning oraliq ko‘rinishi) Release qurilishida agar loyiha iOS 14+ va Xcode 12+ dan foydalansa yoqiladi.
Konfiguratsiya xatolari Release qurilishi uch toifaga bo‘linadi: kompilyatsiya muammolari, imzo muammolari va faqat optimallashtirishdan keyin namoyon bo‘ladigan mantiqiy xatolar. Dasturchilar Debug dan Release ga o‘tishda duch keladigan eng keng tarqalgan stsenariylarni ko‘rib chiqamiz.
Eng keng tarqalgan Android xatosi — minifyEnabled yoqilgandan so‘ng ishga tushishda ishdan chiqish. Sababi: R8 reflection orqali ishlatiladigan sinf nomini o‘zgartirdi (masalan, Gson serialization, data class bilan Retrofit @Body). Yechim — serializatsiyada qatnashadigan barcha sinflar uchun -keep qoidasini qo‘shing va qurishdan oldin proguard qoidalarini tekshiring.
iOS da dasturchilar ko‘pincha Archive dan keyin dSYM fayllarini saqlashni unutishadi. dSYM siz App Store Connect dan ishdan chiqish jurnallari o‘qiladigan funksiya nomlari o‘rniga o‘n oltilik manzillar ko‘rinishida keladi. Yechim — CI/CD ni dSYM larni .ipa bilan birga arxivlash va ularni App Store Connect ga yuklash uchun sozlang.
Muddati o‘tgan Distribution sertifikati yoki provisioning profile da noto‘g‘ri App ID — App Store Connect tomonidan qurilishni rad etish sababi. Sertifikatlar 1 yil (Apple) yoki 3 yil (Google) amal qiladi va ularni yangilash reliz kalendariga kiritilishi kerak. Har bir Release qurilishidan oldin sertifikat holatini tekshirish CI/CD pipeline da majburiy qadamdir.
Debug dan Release ga o‘tishda keng tarqalgan muammo — maqsadli operatsion tizim versiyasida mavjud bo‘lmagan API lardan foydalanish. Debug da qurilish barcha yangi API lar mavjud bo‘lgan eng so‘nggi versiyadagi simulyatorda sinovdan o‘tkaziladi. Release da ilova turli operatsion tizim versiyalariga ega foydalanuvchi qurilmalariga o‘rnatiladi va mavjud bo‘lmagan API ni chaqirish ishga tushishda ishdan chiqishga olib keladi. Minimal versiyani aniq ko‘rsatish uchun @available (Swift) yoki compileSdkVersion + minSdkVersion (Android) dan foydalaning.
Debug qurilishida resurslar ko‘pincha konfiguratsiyani tekshirmasdan manba kataloglaridan yuklanadi. Release da Gradle va Xcode resurs filtrlashni qo‘llaydi: agar string yoki drawable maqsadli lokalizatsiyada topilmasa, ilova yoki ishdan chiqadi yoki placeholder ko‘rsatadi. Bu ayniqsa Android uchun juda muhim: values-XX da tarjimaning yo‘qligi XML ni tahlil qilishda ClassCastException ga olib keladi. Release qurilishidan oldin barcha lokalizatsiyalarni lint va xcodebuild -showBuildSettings yordamida tekshiring. Bunday muammolarni aniqlash uchun ommaviy relizdan oldin TestFlight va Internal Testing track dan foydalaning — ular turli til sozlamalariga ega haqiqiy qurilmalarda ishlaydi.
Tez-tez beriladigan savollar
Texnik jihatdan ha, agar qurilmaga belgilar yoqilgan Ad Hoc Release qurilishi o‘rnatilgan bo‘lsa. Ammo amalda bu noqulay: optimallashtirilgan kod ko‘rsatmalarni qayta tartiblaydi, to‘xtash nuqtalari siljiydi va mahalliy o‘zgaruvchilar kompilyator tomonidan olib tashlanishi mumkin.
iOS simulyatori Apple Silicon ning barcha optimallashtirishlarini qo‘llab-quvvatlamaydi, shuning uchun ba‘zi Release bayroqlari (masalan, LTO) bog‘lash xatolariga olib kelishi mumkin. Release qurilishini sinash uchun jismoniy qurilmaga keyingi eksport bilan Archive dan foydalaning.
Split APK — ilovani arxitektura bo‘yicha (arm64-v8a, armeabi-v7a, x86) bir nechta APK ga bo‘lish uchun Android mexanizmi. Zamonaviy ishlanmada split APK o‘rniga har bir qurilma uchun avtomatik ravishda optimallashtirilgan qurilish yaratadigan Android App Bundle (AAB) tavsiya etiladi.
TestFlight (iOS) yoki Internal Testing Track (Google Play) orqali staging sinovini ishga tushiring. Avtorizatsiya, to‘lovlar, push bildirishnomalari va fayl tizimi bilan ishlashni tekshiring — bu stsenariylar ko‘pincha imzo va ruxsatlardagi farqlar tufayli Debug va Release da turlicha harakat qiladi.
Android da R8 to‘liq rejimidan, iOS da App Thinning dan foydalaning. Foydalanilmagan resurslarni olib tashlang (shrinkResources), PNG ni WebP bilan almashtiring, kutubxona dublikatlari uchun bog‘liqliklarni tekshiring va ProGuard ni o‘lik kodni agressiv olib tashlash uchun sozlang.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing