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 — 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.
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.
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.
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.
| Parametre | Android (Gradle) | iOS (Xcode) |
|---|---|---|
| Optimizasyon | minifyEnabled true, proguardFiles | Optimization Level: Fastest, Smallest |
| Karartma | R8 (varsayılan) | Strip Linked Product, Symbols Hidden |
| İmza | Android Signing Config v2/v3 | Apple Distribution Certificate |
| Kaynak sıkıştırma | shrinkResources true | Asset Catalog Compiler |
| Sürümleme | versionCode, versionName | CFBundleVersion, CFBundleShortVersionString |
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.
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.
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.
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'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.
İ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.
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.
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.
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.
# 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"
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 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.
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.
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.
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.
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.
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
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.
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, 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.
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.
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
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.
Ayrıca okuyun