Mobil inkişafda Release: əsaslar, qurma və tətbiqlərin nəşri

Müəllif: IT Sectr Dərc olunub: 2026-05-06 Oxuma vaxtı: 8 dəq

Release (buraxılış qurması) — tətbiq mağazalarında nəşr üçün hazırlanmış mobil tətbiqin son konfiqurasiyasıdır. Apple Developer Documentation-ya görə, Release qurması kompilyator tərəfindən kod optimallaşdırılması, debug simvollarının silinməsi, obfuskasiya və distributiv sertifikatla rəqəmsal imzanı əhatə edir. Əsas fərq — Release son istifadəçi üçün nəzərdə tutulub, tərtibatçı üçün deyil.

Əsas məqamlar

  • Release — maksimum performansla App Store və Google Play-də nəşr üçün qurma konfiqurasiyası
  • Kompilyator optimallaşdırması (-Os, -O2) kodun icrasını sürətləndirir və ikili fayl ölçüsünü azaldır
  • Obfuskasiya (ProGuard, R8) mənbə kodunu tərs mühəndislikdən qoruyur
  • Rəqəmsal imza Distribution sertifikatı ilə istifadəçi cihazlarına quraşdırma üçün məcburidir
  • Debug simvolları Release qurmasından silinir, qəza jurnalları dSYM vasitəsilə symbolication tələb edir

Release qurması nədir

Release — bütün kompilyator optimallaşdırmalarının tətbiq olunduğu, debug məlumatlarının silindiyi, resursların sıxıldığı və icra olunan kodun əqli mülkiyyəti qorumaq üçün obfuska edildiyi qurma konfiqurasiyasıdır. Release-in məqsədi rəsmi kanallar vasitəsilə paylanmağa hazır olan maksimum sürətli və yığcam ikili fayl əldə etməkdir.

Debug-dan fərqli olaraq, Release qurmasında debugger üçün giriş nöqtələri yoxdur, assertlər söndürülüb və loginq minimuma endirilib. Bu sadəcə bayraq dəyişdirmək deyil — fərqli sertifikatlar, provisioning profile və paketləmə parametrləri olan fərqli qurma pipeline-idir. Release qurması daha çox vaxt tələb edir, çünki kompilyator əlavə optimallaşdırma keçidləri yerinə yetirir.

iOS üçün Release qurması Apple Distribution sertifikatı ilə imzalanır və App Store Connect-də yoxlamadan keçir. Android üçün Release qurması Upload Key ilə imzalanır və Google Play Console-a yüklənə bilər. Hər iki platforma rəqəmsal imza tələb edir: onsız qurulan tətbiq istifadəçinin cihazında quraşdırılmayacaq.

Release və Debug: konfiqurasiyaların müqayisəsi

Debug və Release arasındakı fərq bütün səviyyələrdə özünü göstərir: kompilyator bayraqlarından .apk və ya .ipa-nın son ölçüsünə qədər. Bu fərqləri başa düşmək CI/CD pipeline-i və yalnız Release qurmasında özünü göstərən reqressiyaların axtarışı üçün vacibdir.

Kompilyator bayraqları

Release-də kompilyator ölçü (-Os LLVM üçün) və ya sürət (-O2) optimallaşdırmasını aktivləşdirir. Bu, inline funksiyaların yerləşdirilməsi, ölü kodun silinməsi, təlimatların yenidən düzülməsi və dövrlərin aqressiv optimallaşdırılması deməkdir. Debug-da bütün bu mərhələlər buraxılır, bu da kodu daha yavaş edir, lakin mənbə kodu sətirləri ilə maşın təlimatları arasında tam uyğunluğu qoruyur.

Obfuskasiya və minifikasiya

ProGuard/R8 (Android) siniflərin, metodların və sahələrin adlarını qısa adlara (a, b, c) dəyişir ki, bu da reverse engineering-i çətinləşdirir və DEX fayl ölçüsünü azaldır. iOS-da ekvivalent funksionallıq Strip Symbols və Swift Symbolication tərəfindən təmin edilir. Reflection və ya XML düzümündə istifadə olunan siniflər üçün keep qaydalarını konfiqurasiya etmək vacibdir, əks halda tətbiq başlanğıcda ClassNotFoundException ilə çökəcək.

ParametrAndroid (Gradle)iOS (Xcode)
OptimallaşdırmaminifyEnabled true, proguardFilesOptimization Level: Fastest, Smallest
ObfuskasiyaR8 (standart)Strip Linked Product, Symbols Hidden
İmzaAndroid Signing Config v2/v3Apple Distribution Certificate
Resurs sıxılmasıshrinkResources trueAsset Catalog Compiler
VersiyalamaversionCode, versionNameCFBundleVersion, CFBundleShortVersionString

Qurma ölçüsü

Release qurması Debug-dan əhəmiyyətli dərəcədə yığcamdır. Tipik nisbət: Debug versiyası 40–80 MB, Release — 15–30 MB yer tutur. Fərq debug simvollarının (DWARF) silinməsi, resursların sıxılması (aapt2) və DEX obfuskasiyası ilə bağlıdır. İstifadəçilər üçün tətbiq ölçüsü quraşdırma konversiyasının vacib amilidir, buna görə də Release-də ölçü optimallaşdırması məcburi təcrübədir.

Android-də Release qurma prosesi

Gradle Release versiyasını qurmaq üçün daxili tapşırıqlar təqdim edir: assembleRelease, bundleRelease (AAB üçün) və signingReport. Modul səviyyəsində build.gradle-ın düzgün konfiqurasiyası stabil CI/CD qurmasının əsasıdır. Tipik bir layihə nümunəsində əsas mərhələləri nəzərdən keçirək.

build.gradle konfiqurasiyası

buildTypes daxilində release konfiqurasiyası göstərilir: minification aktivləşdirilir, shrinkResources və proguard qaydaları təyin edilir. signingConfig bloku mütləq storeFile, storePassword, keyAlias və keyPassword-ə istinad etməlidir — bu parametrlər VCS-də saxlanılmamalıdır. CI/CD üçün ətraf mühit dəyişənlərindən və ya Keystore Provisioning Plugin-dən istifadə edin.

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

AAB və APK qurulması

Android App Bundle (AAB) — Google Play-də nəşr üçün tövsiyə olunan formatdır. AAB bir APK deyil, resursların modul dəstini ehtiva edir, ondan Google Play müəyyən cihaz üçün optimallaşdırılmış APK-nı dinamik şəkildə yaradır. ./gradlew bundleRelease əmri AAB, ./gradlew assembleRelease isə yükləmədən əvvəl sınaq üçün universal APK qurur.

İmza və yoxlama

İmzalanmış APK/AAB apksigner verify vasitəsilə yoxlanılır. Google Play Console yükləmə zamanı imzanı avtomatik yoxlayır. Android 9-dan (API 28) başlayaraq Google v2 və ya v3 imza sxemlərini tələb edir. Wear OS və Android TV üçün əlavə olaraq rotating key göstərilməklə v3.1 tələb olunur.

iOS-da Release qurma prosesi

Xcode Release versiyasını Archive konfiqurasiyasında qurur — bu sadəcə build deyil, tam pipeline: optimallaşdırma ilə kompilasiya, .xcarchive-ə paketləmə, Distribution sertifikatı ilə imzalama və .ipa-ya ixrac. Proses Product → Archive və ya xcodebuild əmri ilə başladılır.

Qurma sxeminin konfiqurasiyası

Edit Scheme → Run → Build Configuration-də son sınaq üçün Release seçin. App Store Connect-ə göndərmək üçün Product menyusundan Archive istifadə edin. Xcode ikili fayl, dSYM və Resource-bundle ehtiva edən .xcarchive yaradır. Arxivdən Ad Hoc, Development və ya App Store distribusiyası üçün .ipa ixrac edilir.

App Store Connect və TestFlight

TestFlight App Store Distribution sertifikatı ilə imzalanmış Release qurmalarını qəbul edir. App Store-a göndərilməzdən əvvəl qurma Xcode-da avtomatik yoxlamadan keçir: sertifikatların uyğunluğu, bütün ölçülərdə ikonların mövcudluğu, Info.plist-in düzgünlüyü və ikili faylda emulator arxitekturalarının olmaması yoxlanılır.

bash
# xcodebuild vasitəsilə Release qurulması
xcodebuild archive \
  -project MyApp.xcodeproj \
  -scheme "MyApp" \
  -configuration "Release" \
  -archivePath "build/MyApp.xcarchive"

# .ipa-nın App Store üçün ixracı
xcodebuild -exportArchive \
  -archivePath "build/MyApp.xcarchive" \
  -exportPath "build/" \
  -exportOptionsPlist "export.plist"

Bitcode və App Thinning

App Thinning — yüklənən tətbiqin ölçüsünü azaltmaq üçün Apple texnologiyasıdır. App Store-a yükləmə zamanı Apple istifadəçinin konkret cihazı üçün ikili faylı yenidən kompilə edir, istifadə olunmayan arxitekturaları silir. Bitcode (LLVM-nin aralıq təsviri) Release qurmasında aktivləşdirilir, əgər layihə iOS 14+ və Xcode 12+ istifadə edirsə.

Release hazırlığında tipik səhvlər

Konfiqurasiya səhvləri Release qurması üç kateqoriyaya bölünür: kompilasiya problemləri, imza problemləri və yalnız optimallaşdırmadan sonra özünü göstərən məntiqi səhvlər. Tərtibatçıların Debug-dan Release-ə keçərkən qarşılaşdığı ən çox yayılmış ssenariləri nəzərdən keçirək.

Obfuskasiyadan sonra ClassNotFoundException

Ən çox yayılmış Android səhvi — minifyEnabled aktivləşdirildikdən sonra başlanğıcda çökmə. Səbəb: R8 reflection vasitəsilə istifadə olunan sinfin adını dəyişib (məsələn, Gson serialization, data class ilə Retrofit @Body). Həll — serializasiyada iştirak edən bütün siniflər üçün -keep qaydası əlavə edin və qurmadan əvvəl proguard qaydalarını yoxlayın.

Symbolication üçün dSYM çatışmazlığı

iOS-da tərtibatçılar tez-tez Archive-dən sonra dSYM fayllarını saxlamağı unudurlar. dSYM olmadan App Store Connect-dən qəza jurnalları oxunan funksiya adları əvəzinə onaltılıq ünvanlar şəklində gəlir. Həll — CI/CD-ni dSYM-ləri .ipa ilə birlikdə arxivləşdirmək və onları App Store Connect-ə yükləmək üçün konfiqurasiya edin.

Provisioning profile ilə problemlər

Müddəti bitmiş Distribution sertifikatı və ya provisioning profile-də yanlış App ID — App Store Connect-in qurmanı qəbul etməməsinin səbəbi. Sertifikatlar 1 il (Apple) və ya 3 il (Google) etibarlıdır və onların yenilənməsi buraxılış təqviminə daxil edilməlidir. Hər Release qurmasından əvvəl sertifikat statusunun yoxlanılması CI/CD pipeline-də məcburi addımdır.

SDK versiyalarının və deployment target-in uyğunsuzluğu

Debug-dan Release-ə keçərkən tez-tez rast gəlinən problem — hədəf ƏS versiyasında mövcud olmayan API-lərdən istifadə. Debug-da qurma bütün yeni API-lərin mövcud olduğu ən son versiya ilə simulyatorda sınaqdan keçirilir. Release-də tətbiq müxtəlif ƏS versiyaları olan istifadəçi cihazlarında quraşdırılır və mövcud olmayan API-nin çağırılması başlanğıcda çökməyə səbəb olur. Minimal versiyanı açıq şəkildə göstərmək üçün @available (Swift) və ya compileSdkVersion + minSdkVersion (Android) istifadə edin.

Müxtəlif konfiqurasiyalar üçün itkin lokallaşdırma və resurslar

Debug qurmasında resurslar çox vaxt konfiqurasiyanı yoxlamadan mənbə kataloqlarından yüklənir. Release-də Gradle və Xcode resurs filtrləmə tətbiq edir: əgər string və ya drawable hədef lokallaşdırmada tapılmazsa, tətbiq ya çökür, ya da placeholder göstərir. Bu xüsusilə Android üçün vacibdir: values-XX-də tərcümənin olmaması XML-in pars edilməsi zamanı ClassCastException-a səbəb olur. Buraxılış qurmasından əvvəl lint və xcodebuild -showBuildSettings istifadə edərək bütün lokallaşdırmaları yoxlayın. Bu cür problemləri aşkar etmək üçün ictimai buraxılışdan əvvəl TestFlight və Internal Testing track-dan istifadə edin — onlar müxtəlif dil parametrləri olan real cihazlarda işləyir.

Tez-tez verilən suallar

Release qurmasını cihazda debug etmək mümkündürmü?

Texniki olaraq bəli, əgər cihazda simvollar aktivləşdirilmiş Ad Hoc Release qurması quraşdırılıbsa. Amma praktikada bu əlverişsizdir: optimallaşdırılmış kod təlimatları yenidən düzür, dayanma nöqtələri yerdəyişir və lokal dəyişənlər kompilyator tərəfindən silinə bilər.

Niyə Release qurması simulyatorda işləmir?

iOS simulyatoru Apple Silicon-un bütün optimallaşdırmalarını dəstəkləmir, buna görə də bəzi Release bayraqları (məsələn, LTO) linkinq xətalarına səbəb ola bilər. Release qurmasını sınamaq üçün fiziki cihaza sonrakı ixrac ilə Archive istifadə edin.

Split APK nədir və nə vaxt lazımdır?

Split APK — tətbiqi arxitektura üzrə (arm64-v8a, armeabi-v7a, x86) bir neçə APK-ya bölmək üçün Android mexanizmidir. Müasir inkişafda split APK əvəzinə hər cihaz üçün optimallaşdırılmış qurma avtomatik yaradan Android App Bundle (AAB) tövsiyə olunur.

Nəşrdən əvvəl Release qurmasını necə yoxlamaq olar?

TestFlight (iOS) və ya Internal Testing Track (Google Play) vasitəsilə staging sınağı keçirin. Avtorizasiyanı, ödənişləri, push bildirişlərini və fayl sistemi ilə işi yoxlayın — bu ssenarilər tez-tez imza və icazələrdəki fərqlər səbəbindən Debug və Release-də fərqli davranır.

Release qurmasının ölçüsünü necə azaltmaq olar?

Android-də R8 tam rejimindən, iOS-da App Thinning-dən istifadə edin. İstifadə olunmayan resursları silin (shrinkResources), PNG-ni WebP ilə əvəz edin, kitabxana dublikatları üçün asılılıqları yoxlayın və ProGuard-ı ölü kodun aqressiv silinməsi üçün konfiqurasiya edin.

Nəticə

  • Release qurması son istifadəçilər üçün nəzərdə tutulub və optimallaşdırma, obfuskasiya və rəqəmsal imzanı əhatə edir
  • Kompilyator -Os/-O2 optimallaşdırması tətbiq edir, kodu sürətləndirir və ikili fayl ölçüsünü azaldır
  • R8/ProGuard obfuskasiyası reverse engineering-dən qoruyur, lakin reflection üçün -keep qaydaları tələb edir
  • iOS Archive .xcarchive yaradır, xcodebuild isə App Store Connect üçün .ipa ixrac edir
  • Android AAB — split APK-nı əvəz edən müasir nəşr formatı
  • dSYM faylları iOS-da qəza jurnallarının symbolication-ı üçün məcburidir
  • Buraxılıqdan əvvəl sınaq TestFlight və Internal Testing vasitəsilə Release reqressiyalarını aşkar edir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun