Mobil geliştirmede Release: uygulama temelleri, derleme ve yayınlama

Yazar: IT Sectr Yayınlanma: 2026-05-06 Okuma süresi: 8 dk

Release (sürüm derlemesi) — uygulama mağazalarında yayınlanmak üzere hazırlanmış mobil uygulamanın son yapılandırmasıdır. Apple Developer Documentation'a göre, Release derlemesi derleyici tarafından kod optimizasyonu, hata ayıklama sembollerinin kaldırılması, karartma ve dağıtım sertifikası ile dijital imzalamayı içerir. Ana fark Debug'dan — Release son kullanıcıya yöneliktir, geliştiriciye değil.

Önemli noktalar

  • Release — App Store ve Google Play'de maksimum performansla yayınlamak için derleme yapılandırması
  • Derleyici optimizasyonu (-Os, -O2) kod yürütmeyi hızlandırır ve ikili dosya boyutunu küçültür
  • Karartma (ProGuard, R8) kaynak kodunu tersine mühendislikten korur
  • Dijital imza dağıtım sertifikası ile kullanıcı cihazlarına kurulum için zorunludur
  • Hata ayıklama sembolleri Release derlemesinden kaldırılır; çökme günlükleri dSYM aracılığıyla sembolikasyon gerektirir

Release derlemesi nedir

Release — tüm derleyici optimizasyonlarının uygulandığı, hata ayıklama bilgilerinin kaldırıldığı, kaynakların sıkıştırıldığı ve fikri mülkiyeti korumak için yürütülebilir kodun karartıldığı bir derleme yapılandırmasıdır. Release'in amacı, resmi kanallar aracılığıyla dağıtıma hazır, mümkün olduğunca hızlı ve kompakt bir ikili dosya elde etmektir.

Debug'un aksine, Release derlemesi hata ayıklayıcı için giriş noktaları içermez, iddialar devre dışıdır ve günlük kaydı minimuma indirilmiştir. Bu sadece bir bayrak değişimi değil — farklı sertifikalar, provizyon profilleri ve paketleme ayarlarına sahip farklı bir derleme boru hattıdır. Release derlemesi daha uzun sürer çünkü derleyici ek optimizasyon geçişleri yapar.

iOS için Release derlemesi Apple Dağıtım sertifikası ile imzalanır ve App Store Connect'te incelemeden geçer. Android için Release derlemesi Yükleme Anahtarı ile imzalanır ve Google Play Console'a yüklenebilir. Her iki platform da dijital imza gerektirir: onsuz derlenen bir uygulama kullanıcının cihazına kurulmaz.

Release ve Debug: yapılandırma karşılaştırması

Debug ve Release arasındaki fark her düzeyde kendini gösterir: derleyici bayraklarından .apk veya .ipa'nın最终 boyutuna kadar. Bu farklılıkları anlamak CI/CD boru hattı ve yalnızca Release derlemelerinde ortaya çıkan regresyonları bulmak için kritiktir.

Derleyici bayrakları

Release'te derleyici, boyuta (-Os LLVM için) veya hıza (-O2) göre optimizasyonu etkinleştirir. Bu, satır içi işlevlerin yerleştirilmesi, ölü kodun kaldırılması, talimatların yeniden sıralanması ve agresif döngü optimizasyonu anlamına gelir. Debug'da tüm bu aşamalar atlanır, bu da kodu yavaşlatır ancak kaynak satırları ile makine talimatları arasında tam uyumu korur.

Karartma ve küçültme

ProGuard/R8 (Android) sınıfları, yöntemleri ve alanları kısa adlarla (a, b, c) yeniden adlandırarak tersine mühendisliği zorlaştırır ve DEX dosya boyutunu azaltır. iOS'te eşdeğer işlevsellik Strip Symbols ve Swift Symbolication tarafından sağlanır. Yansıma veya XML düzenleri aracılığıyla kullanılan sınıflar için keep kuralları yapılandırmak önemlidir, aksi halde uygulama başlangıçta ClassNotFoundException ile çöker.

ParametreAndroid (Gradle)iOS (Xcode)
OptimizasyonminifyEnabled true, proguardFilesOptimization Level: Fastest, Smallest
KarartmaR8 (varsayılan)Strip Linked Product, Symbols Hidden
İmzaAndroid Signing Config v2/v3Apple Distribution Certificate
Kaynak sıkıştırmashrinkResources trueAsset Catalog Compiler
SürümlemeversionCode, versionNameCFBundleVersion, CFBundleShortVersionString

Derleme boyutu

Release derlemeleri Debug derlemelerinden önemli ölçüde daha kompakttır. Tipik oran: Debug sürümü 40–80 MB, Release — 15–30 MB yer kaplar. Fark, hata ayıklama sembollerinin (DWARF) kaldırılması, kaynak sıkıştırması (aapt2) ve DEX karartmasından kaynaklanır. Kullanıcılar için uygulama boyutu, yükleme dönüşümünde önemli bir faktördür, bu nedenle Release'te boyut optimizasyonu zorunlu bir uygulamadır.

Android'de Release derleme süreci

Gradle, Release sürümünü derlemek için yerleşik görevler sağlar: assembleRelease, bundleRelease (AAB için) ve signingReport. Modül düzeyinde build.gradle'ın doğru yapılandırması, kararlı bir CI/CD derlemesinin temelidir. Tipik bir proje örneğini kullanarak ana aşamaları inceleyelim.

build.gradle yapılandırması

buildTypes bloğunda release yapılandırması belirtilir: küçültme etkinleştirilir, shrinkResources açılır ve proguard kuralları ayarlanır. signingConfig bloğu storeFile, storePassword, keyAlias ve keyPassword'e başvurmalıdır — bu parametreler VCS'de saklanmamalıdır. CI/CD için ortam değişkenlerini veya Keystore Provisioning Plugin'ini kullanın.

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

AAB ve APK derlemesi

Android App Bundle (AAB) Google Play'de yayınlamak için önerilen formatır. AAB tek bir APK değil, Google Play'in belirli bir cihaz için optimize edilmiş bir APK'yı dinamik olarak oluşturduğu modüler bir kaynak seti içerir. ./gradlew bundleRelease komutu AAB'yi derlerken, ./gradlew assembleRelease yüklemeden önce test için evrensel bir APK derler.

İmza ve doğrulama

İmzalanmış APK/AAB, apksigner verify aracılığıyla doğrulanır. Google Play Console, yükleme sırasında imzayı otomatik olarak kontrol eder. Android 9'dan (API 28) itibaren Google, v2 veya v3 imza şemalarını gerektirir. Wear OS ve Android TV için dönen anahtarlı v3.1 ek olarak gereklidir.

iOS'te Release derleme süreci

Xcode, Release sürümünü Archive yapılandırmasında derler — bu sadece bir derleme değil, tam bir boru hattıdır: optimizasyonlu derleme, .xcarchive'de paketleme, dağıtım sertifikasıyla imzalama ve .ipa'ya aktarma. Süreç, Product → Archive veya xcodebuild komutuyla başlatılır.

Derleme şeması yapılandırması

Edit Scheme → Run → Build Configuration'da son testler için Release'i seçin. App Store Connect'e göndermek için Product menüsünden Archive'ı kullanın. Xcode, ikili dosya, dSYM ve kaynak paketlerini içeren bir .xcarchive oluşturur. Arşivden Ad Hoc, Development veya App Store dağıtımı için .ipa dışa aktarılır.

App Store Connect ve TestFlight

TestFlight, App Store Dağıtım sertifikasıyla imzalanmış Release derlemelerini kabul eder. App Store'a göndermeden önce derleme, Xcode'da otomatik doğrulamadan geçer: sertifika uygunluğu, tüm boyutlardaki simgeler, Info.plist'in doğruluğu ve ikili dosyada simülatör mimarilerinin bulunmaması kontrol edilir.

bash
# xcodebuild ile Release derlemesi
xcodebuild archive \
  -project MyApp.xcodeproj \
  -scheme "MyApp" \
  -configuration "Release" \
  -archivePath "build/MyApp.xcarchive"

# App Store için .ipa dışa aktarma
xcodebuild -exportArchive \
  -archivePath "build/MyApp.xcarchive" \
  -exportPath "build/" \
  -exportOptionsPlist "export.plist"

Bitcode ve App Thinning

App Thinning, indirilen uygulamanın boyutunu azaltmak için Apple'ın teknolojisidir. App Store'a yükleme sırasında Apple, ikili dosyayı kullanıcının belirli cihazı için yeniden derler ve kullanılmayan mimarileri kaldırır. Bitcode (LLVM ara temsili), proje iOS 14+ ve Xcode 12+ kullanıyorsa Release derlemelerine dahil edilir.

Release hazırlarken sık yapılan hatalar

Release derlemesi yapılandırma hataları üç kategoriye ayrılır: derleme sorunları, imza sorunları ve yalnızca optimizasyondan sonra ortaya çıkan mantıksal hatalar. Debug'dan Release'e geçiş yaparken geliştiricilerin karşılaştığı en yaygın senaryolara bakalım.

Karartma sonrası ClassNotFoundException

Android'te en yaygın hata — minifyEnabled etkinleştirildikten sonra başlangıçta çökme. Nedeni: R8, yansıma yoluyla kullanılan bir sınıfı (örneğin, Gson serileştirme, data class ile Retrofit @Body) yeniden adlandırdı. Çözüm — serileştirmeye dahil olan tüm sınıflar için -keep kuralı ekleyin ve derlemeden önce proguard kurallarını kontrol edin.

Sembolikasyon için dSYM eksikliği

iOS'te geliştiriciler genellikle Archive'dan sonra dSYM dosyalarını kaydetmeyi unutur. dSYM olmadan, App Store Connect'ten gelen çökme günlükleri okunabilir işlev adları yerine onaltılık adresler olarak gelir. Çözüm — .ipa ile birlikte dSYM'yi arşivlemek ve App Store Connect'e yüklemek için CI/CD'yi yapılandırın.

Provizyon profili sorunları

Süresi dolmuş bir dağıtım sertifikası veya provizyon profilinde yanlış App ID, App Store Connect'in derlemeyi reddetmesinin nedenidir. Sertifikalar 1 yıl (Apple) veya 3 yıl (Google) geçerlidir ve yenilemeleri sürüm takvimine dahil edilmelidir. Her Release derlemesinden önce sertifika durumunu kontrol etmek, CI/CD boru hattında zorunlu bir adımdır.

SDK sürümü ve dağıtım hedefi uyumsuzluğu

Debug'dan Release'e geçerken yaygın bir sorun — hedef işletim sistemi sürümünde bulunmayan API'lerin kullanılmasıdır. Debug'da derleme, tüm yeni API'lerin mevcut olduğu en son sürümdeki simülatörde test edilir. Release'te uygulama, farklı işletim sistemi sürümlerine sahip kullanıcı cihazlarına kurulur ve bulunmayan bir API'yi çağırmak başlangıçta çökmeye neden olur. Minimum sürümü açıkça belirtmek için @available (Swift) veya compileSdkVersion + minSdkVersion (Android) kullanın.

Eksik yerelleştirme ve farklı yapılandırmalar için kaynaklar

Debug derlemelerinde kaynaklar genellikle yapılandırma doğrulaması olmadan kaynak dizinlerinden yüklenir. Release'te Gradle ve Xcode kaynak filtrelemesi uygular: hedef yerel ayarda bir dize veya drawable bulunamazsa uygulama çöker veya bir yer tutucu gösterir. Bu özellikle Android için kritiktir: values-XX'te çeviri eksikliği, XML ayrıştırma sırasında ClassCastException'a neden olur. Release derlemesinden önce lint ve xcodebuild -showBuildSettings ile tüm yerel ayarları kontrol edin. Bu tür sorunları tespit etmek için genel sürümden önce TestFlight ve Internal Testing track'lerini kullanın — bunlar farklı dil ayarlarına sahip gerçek cihazlarda çalışır.

Sıkça sorulan sorular

Bir cihazda Release derlemesinde hata ayıklayabilir miyim?

Teknik olarak evet, semboller etkinleştirilmiş bir Ad Hoc Release derlemesini cihaza yüklerseniz. Ancak pratikte bu uygun değildir: optimize edilmiş kod talimatları yeniden sıralar, kesme noktaları kayar ve yerel değişkenler derleyici tarafından kaldırılabilir.

Release derlemesi neden simülatörde çalışmaz?

iOS simülatörü tüm Apple Silicon optimizasyonlarını desteklemez, bu nedenle bazı Release bayrakları (örneğin LTO) bağlantı hatalarına neden olabilir. Release derlemelerini test etmek için Archive'ı kullanın ve ardından fiziksel bir cihaza aktarın.

Split APK nedir ve ne zaman gereklidir?

Split APK, bir uygulamayı mimariye (arm64-v8a, armeabi-v7a, x86) göre birden fazla APK'ya bölen bir Android mekanizmasıdır. Modern geliştirmede split APK yerine Android App Bundle (AAB) önerilir çünkü her cihaz için otomatik olarak optimize edilmiş bir derleme oluşturur.

Yayınlamadan önce Release derlemesini nasıl doğrularım?

TestFlight (iOS) veya Internal Testing Track (Google Play) aracılığıyla staging testi çalıştırın. Kimlik doğrulama, ödemeler, push bildirimleri ve dosya sistemi işlemlerini kontrol edin — bu senaryolar, imza ve izinlerdeki farklılıklar nedeniyle Debug ve Release'te genellikle farklı davranır.

Release derlemesinin boyutunu nasıl azaltırım?

Android'te R8 tam modunu ve iOS'te App Thinning'i kullanın. Kullanılmayan kaynakları kaldırın (shrinkResources), PNG'yi WebP ile değiştirin, yinelenen kütüphaneler için bağımlılıkları kontrol edin ve ölü kodun agresif bir şekilde kaldırılması için ProGuard'ı yapılandırın.

Özet

  • Release derlemesi son kullanıcılar içindir ve optimizasyon, karartma ve dijital imzayı içerir
  • Derleyici -Os/-O2 optimizasyonu uygulayarak kodu hızlandırır ve ikili dosya boyutunu küçültür
  • R8/ProGuard karartması tersine mühendisliğe karşı korur ancak yansıma için -keep kuralları gerektirir
  • iOS Archive .xcarchive oluşturur ve xcodebuild App Store Connect için .ipa dışa aktarır
  • Android AAB split APK'nın yerini alan modern yayınlama formatıdır
  • dSYM dosyaları iOS'te çökme günlüklerinin sembolikasyonu için zorunludur
  • Sürüm öncesi testler (TestFlight ve Internal Testing) Release regresyonlarını belirler

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun