Apple her yıl yeni bir iPhone piyasaya sürüyor, RAM ve ana belleğin boyutunu kademeli olarak artırarak çipe güç katıyor. Bugün iPhone 15'te "Resident Evil 4" gibi konsol oyunlarını zaten çalıştırabiliyorsunuz. Ve mantıklı bir soru ortaya çıkabilir: Uygulamamın boyutunu optimize etmeli miyim yoksa üzerinde daha fazla zaman harcayamaz mıyım?
Kısacası, yine de boyutu optimize etmeye değer. Bu makalede, bunu yapmanın neden gerekli olduğuna dair nedenleri bir araya getirdim ve bazı yararlı optimizasyon yöntemleri sundum.
Öyleyse “Boyut neden önemlidir?” sorusunun en banal cevabıyla başlayalım. - App Store'un sınırlamaları. App Store Connect, belirtilen boyut sınırını aşan bir dosyayı indirmenize izin vermez.
iOS ve tvOS uygulamaları için uygulamanızın, desteklenen işletim sistemlerindeki maksimum dosya boyutlarını aşmadığını doğrulayın. Uygulamanızın toplam sıkıştırılmamış boyutu 4 GB'tan az olmalıdır.
Apple Watch uygulamalarının boyutu 75 MB'tan az olmalıdır. Ayrıca, her bir Mach-O çalıştırılabilir dosyası (örneğin, uygulama_adı.app/uygulama_adı) bu maksimum dosya boyutlarını aşmamalıdır.
Bağlantı
Bahsettikleri belirli dosyalar biraz kafa karıştırıcı olabilir. Bunu daha iyi anlamak için başvurunuzu App Store Connect'e gönderme sürecini inceleyelim.
İlk adım bir arşiv oluşturmaktır. Bu arşiv, bir iOS, macOS, watchOS veya tvOS uygulamasına ilişkin derleme yapıtlarının ve ilgili bilgilerin bir koleksiyonunu saklar.
Arşivde tam olarak neyin, hangi biçimde yer aldığını inceleme fırsatımız var.
Ana dosyalar arasında şunları bulacaksınız:
Uygulamanızın bulunduğu Ürünler klasörü;
dSYM'ler ("hata ayıklama sembollerinin kısaltması"), hata ayıklama için gerekli bilgileri içeren Xcode tarafından oluşturulan özel dosyalar, kısacası kilitlenme günlükleri;
Info.plist;
Bu arada, Uygulama dosyası "Paket içeriğini göster" seçeneğiyle de açılabilir ve dosyalar arasında kod imzalamanın bir sonucu olan yürütülebilir dosyayı ve CodeResources'u bulacaksınız; çeşitli uygulama kaynaklarının (resimler vb.) dijital imzalarını takip eder.
Xcode'a döndüğümüzde, Arşivi oluşturduktan sonra Distribute App
düğmesini kullanabilirsiniz. Bu aşamada .xcarchive .ipa’ya dönüşüyor.
Bir .ipa dosyası, bir "Payload" klasörü içeren sıkıştırılmış bir paket olarak düşünülebilir. Bu "Payload" klasörünün içinde temel "YourApp.app" paketi bulunur. ".app" paketi içinde, aşağıdaki gibi kaynaklar da dahil olmak üzere uygulamanızın tüm kritik bileşenlerini bulacaksınız:
Ayrıca uygulamanın bütünlüğünü ve güvenliğini sağlamak için kod imzalama kaynaklarını da barındırır.
.ipa dosyanızın iç kısmına bakmak için Dağıtımdan sonra Export
tıklayın, türü .ipa'dan .zip'e dönüştürün ve çıkartın.
Özetle .ipa dosyası, son kullanıcıların iOS cihazlarına yükledikleri paketli uygulamadır; .xcarchive ise uygulamaya yönelik çeşitli varlıkları ve derleme bilgilerini içeren geliştirici odaklı bir arşivdir.
.ipa dağıtım için kullanılırken .xcarchive hata ayıklama, arşivleme ve daha fazla geliştirme amacıyla kullanılır. Yürütülebilir dosya ise uygulamanın işlevlerini gerçekleştiren merkezi koddur ve .ipa paketinde bulunur.
Böylece AppStore'un sınırlamaları aşağıdaki gibi gösterilebilir.
OS sürümü | .ipa boyutu | .ipa -> Yük -> Uygulama -> exe boyutu |
---|---|---|
iOS 9.0 ve üzeritvOS 9.0 ve üzeri | 4 CİGABAYT | 500 MB |
iOS 7.X'ten iOS 8.X'e | 2GB | 60 MB |
Ancak, son uygulamanızın boyutunu, yani belirli bir kullanıcının cihazına kaç bayt yüklemesi gerektiğini tahmin etmek için, uygulama boyutu raporu oluşturmak gibi ek işlemlere ihtiyacınız olacaktır. Belgeler onu oluşturma prosedürünü iyi bir şekilde açıklıyor, bu yüzden bir bırakacağım
Uygulamanızın boyutunu düşünmenin bir sonraki nedeni… yine AppStore, ancak şimdi sistem kısıtlamalarından değil indirme hızından bahsediyoruz. Burada her şey ortadadır; boyut ne kadar küçükse oran da o kadar yüksek olur.
Üstelik kullanıcıların uygulamayı yüklemek için bir Wi-Fi ağına bağlanması gereken 200 MB sınırı da bulunuyor. Gecikme kullanıcıların cesaretini kırabilir ve daha yüksek vazgeçme oranlarına yol açabilir.
Apple'ın App Store arama ve keşif algoritmaları, kullanıcıların indirmesi ve denemesi daha kolay olduğundan genellikle daha küçük uygulamaları tercih eder. Daha küçük uygulama boyutları, uygulamanızın arama sonuçları ve önerilerdeki görünürlüğünü potansiyel olarak artırabilir.
Uygulama cihaza yüklendikten sonra boyutu hala önemlidir. Daha küçük uygulamalar daha hızlı başlatılarak daha iyi bir kullanıcı deneyimi sağlanır. Bir uygulama depolamayı optimize ettiğinde, pil ömrünün uzamasına, uygulama ayak izinin azaltılmasına ve cihazın sağlığının iyi olmasına katkıda bulunur. Sonuç olarak, iPhone'dan ne kadar çok kişi memnun olursa, o kadar çok potansiyel kullanıcıya sahip olursunuz.
Geliştirme sırasında uygulamanızın boyutunu gereksiz yere büyütmekten kaçınmak için bazı basit ipuçları vardır. Bunlardan ilki imgelerle bilinçli çalışmadır.
Öncelikle JPEG yerine HEIC'i seçin. HEIC, benzer görüntü kalitesini korurken, JPEG'e kıyasla yüzde 50 daha küçük dosyalar sağlar. Bu, cihazınızdaki depolama alanının azalmasına neden olur. Daha küçük dosyaların ağlar arasında aktarılması daha kolaydır, ayrıca daha hızlı yüklenir ve diske kaydedilir.
HEIC'ler görüntü şeffaflığını ve derinlik ve farklılık bilgileri içeren tamamlayıcı görüntüleri saklama yeteneğini destekler. Kayıpsız sıkıştırmayı destekler ve birden fazla görüntüyü tek bir kapta saklamanıza olanak tanır.
İkinci olarak, PDF ve PNG yerine SVG'yi (iki boyutlu vektör grafiklerini görüntülemek için kullanılan XML tabanlı bir vektör görüntü formatı) benimsemeye çalışın. Raster görüntülerin aksine, vektör grafikler genellikle daha küçük dosya boyutları sergiler çünkü tek tek pikselleri depolamak yerine şekilleri ve eğrileri tanımlayan matematiksel denklemlerle karakterize edilir.
Başlangıçta, önekli 3 resim eklemek gerekiyordu (her piksel yoğunluğu için). Daha sonra PNG desteği eklendi (=belirli bir boyuta sahip vektör görüntüsü), ancak yine de “projeyi birleştirdiğimizde PDF'den 3 PNG kes” düzeyinde çalıştı.
Ve ancak o zaman SVG'yi kullanmak ve varlık kataloğuna "vektör tarihini kullan" onay kutusunu eklemek mümkün hale geldi, böylece kullanılan görsellerin boyutu gerçekten küçültüldü ve kalite kaybı olmadan sonsuz ölçeklendirme olanağı eklendi.
Üçüncü olarak, Varlık Kataloglarının yeteneklerinden en iyi şekilde yararlanın. Varlık Katalogları, aynı görüntünün birden fazla çözünürlüğü için kullanımı kolay bir depolama alanı sağlar. Üstelik kataloglar, tüm görüntü varlıklarını tek tek dosyalar yerine meta verilerle optimize edilmiş tek bir formatta saklar.
App Store'un yalnızca belirli cihazlar için gerekli varlıkları sağlamasına olanak tanır. Bu da indirme hızının artmasına neden oluyor ve kullanıcıların beklemekten hoşlanmadığını zaten biliyoruz.
Kaynağı "isteğe bağlı" olarak ayarlamak mümkündür, yani kaynak yalnızca gerekirse cihaza indirilecek ve bir süre kullanılmadığında kaldırılacaktır.
Büyük bir “ücretsiz” resim kataloğunuz olduğunu unutmayın - SF Sembolleri . Apple sürekli olarak karakterleri artırmak, renkleri ve hatta animasyonları kişiselleştirme yeteneği eklemek için çalışıyor.
Yani resimler ve diğer grafik kaynaklarıyla her şey net görünüyor; doğru formatları kullanıyoruz ve Varlıklar aracılığıyla bir katalog ekliyoruz. Her zaman büyük kaynakları son derlemeye dahil etmeme, ancak gerektiğinde sadece İnternetten yükleme yapma fırsatı vardır. Şimdi kodlardan ve kütüphanelerin kullanımından bahsedelim.
Linkleme konusunu hızlıca hatırlatayım. Bunun iki türü vardır: statik ve dinamik.
| Statik | Dinamik |
---|---|---|
Bağlantı oluştuğunda | Yapım Zamanı | Çalışma süresi |
Bağımlılıkların depolandığı yer | Son yürütülebilir dosyada | Ayrı dinamik kitaplıklarda |
Bağımlılıklar nasıl paylaşılır? | Aynı kopya, uygulamanın tüm örnekleri tarafından kullanılır | Uygulamanın her örneğinin kendi kopyası vardır |
Bağımlılıklardaki güncellemeler nasıl işlenir? | Uygulamayı yeniden oluşturun | Dinamik kitaplığı güncelleyin |
Bu makalenin temasına göre, bağımlılıkların depolanması bizim için özellikle önemlidir ve dinamik bağlantı bizim favorimiz gibi görünüyor.
Dinamik kitaplıklar istemci uygulamalarına statik olarak bağlı değildir; yürütülebilir dosyanın parçası haline gelmezler. Bunun yerine dinamik kitaplıklar, uygulama başlatıldığında veya çalışırken bir uygulamaya yüklenebilir (ve bağlanabilir).
Bağlantı
Uzun lafın kısası, statik kitaplıklar yerine dinamik kitaplıkları tercih etmek, daha küçük uygulama dosyası boyutlarına ve daha düşük başlangıç bellek kullanımına neden olur. Ancak, uygulamanın başlatılması sırasında performansta gecikmeye neden olabileceğinden, bir denge kurmak ve dinamik kitaplıkların aşırı kullanımından kaçınmak yine de önemlidir.
Apple ayrıca uygulamanızda modüler bir kod tabanı ( SPM ) oluşturmanızı da önerir; bu, örneğin App Clipps gibi diğer hedeflerle kod paylaşırken kullanışlı olabilir.
Swift Paket Yöneticisi, Swift projelerinizdeki bağımlılıkları yönetmenin kolaylaştırılmış ve yerel bir yolunu sunar.
Uygulamanızın boyutunu küçültmenin en etkili yollarından biri tüm gereksiz dosyaları kaldırmaktır. Bu ekstra dosyalar örneğin Read.me veya kalan resimler olabilir. Aslında, .ipa'nın ne olduğunu anladığımız makalenin en başında, AppStore'a girecek tüm dosyaları nasıl bulacağımızı zaten öğrenmiştik: .ipa -> .zip -> Uygulama -> paketi göster içindekiler.
İhtiyacınız olmayan tüm kaynakları öğrenin ve bunları uygulamanızdan silmekten çekinmeyin .
Sadece özetlemek gerekirse. Uygulama boyutumuza dikkat etmemizin hâlâ bazı önemli nedenleri var:
Uygulama boyutunu küçültmenin bazı yöntemleri de vardır:
Bu nedenle rutin gelişiminiz sırasında bunu unutmayın; her gün daha akıllı ol 🙃