Mobil ishlanmada Release: asoslar, qurish va ilovalarni nashr qilish

Muallif: IT Sectr Nashr etilgan: 2026-05-06 O'qish vaqti: 8 daq

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 — maksimal unumdorlik bilan App Store va Google Play-da nashr qilish uchun qurish konfiguratsiyasi
  • Kompilyator optimallashtirishi (-Os, -O2) kod bajarilishini tezlashtiradi va ikkilik fayl hajmini kamaytiradi
  • Obfuskatsiya (ProGuard, R8) manba kodini teskari muhandislikdan himoya qiladi
  • Raqamli imzo Distribution sertifikati bilan foydalanuvchi qurilmalariga o‘rnatish uchun majburiydir
  • Debug belgilari Release qurilishidan olib tashlanadi, ishdan chiqish jurnallari dSYM orqali symbolication talab qiladi

Release qurilishi nima

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.

Release va Debug: konfiguratsiyalarni taqqoslash

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.

Kompilyator bayroqlari

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.

Obfuskatsiya va minifikatsiya

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.

ParametrAndroid (Gradle)iOS (Xcode)
OptimallashtirishminifyEnabled true, proguardFilesOptimization Level: Fastest, Smallest
ObfuskatsiyaR8 (standart)Strip Linked Product, Symbols Hidden
ImzoAndroid Signing Config v2/v3Apple Distribution Certificate
Resurslarni siqishshrinkResources trueAsset Catalog Compiler
VersiyalashversionCode, versionNameCFBundleVersion, CFBundleShortVersionString

Qurish hajmi

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.

Android-da Release qurish jarayoni

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.

build.gradle sozlamalari

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.

groovy
android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile(
                "proguard-android-optimize.txt"
            ), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }
}

AAB va APK qurish

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.

Imzo va tekshirish

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.

iOS-da Release qurish jarayoni

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.

Qurish sxemasini sozlash

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.

App Store Connect va TestFlight

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.

bash
# 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"

Bitcode va App Thinning

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.

Release tayyorlashdagi odatiy xatolar

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.

Obfuskatsiyadan keyin ClassNotFoundException

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.

Symbolication uchun dSYM yetishmasligi

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.

Provisioning profile bilan muammolar

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.

SDK versiyalari va deployment target mos kelmasligi

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.

Turli konfiguratsiyalar uchun yetishmaydigan lokalizatsiya va resurslar

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

Release qurilishini qurilmada disk raskadro’ka qilish mumkinmi?

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.

Nega Release qurilishi simulyatorda ishlamaydi?

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 nima va qachon kerak?

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.

Nashrdan oldin Release qurilishini qanday tekshirish mumkin?

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.

Release qurilishi hajmini qanday kamaytirish mumkin?

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

  • Release qurilishi yakuniy foydalanuvchilar uchun mo‘ljallangan va optimallashtirish, obfuskatsiya hamda raqamli imzoni o‘z ichiga oladi
  • Kompilyator -Os/-O2 optimallashtirishini qo‘llaydi, kodni tezlashtiradi va ikkilik fayl hajmini kamaytiradi
  • R8/ProGuard obfuskatsiyasi teskari muhandislikdan himoya qiladi, lekin reflection uchun -keep qoidalarini talab qiladi
  • iOS Archive .xcarchive yaratadi, xcodebuild esa App Store Connect uchun .ipa eksport qiladi
  • Android AAB — split APK ni almashtirgan zamonaviy nashr formati
  • dSYM fayllari iOS da ishdan chiqish jurnallarini symbolication qilish uchun majburiydir
  • Relizdan oldin sinov TestFlight va Internal Testing orqali Release regressiyalarini aniqlaydi

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.

Loyihani muhokama qilish

Shuningdek o'qing