Xcode 7'ye geçtikten sonra uygulama boyutu 9 MB'den 60 MB'a çıktı, bir düzeltme var mı?


96

Git geçmişinde çok büyük bir dosya boyutu değişikliğinin nedenini bulmak için geriye doğru gidiyorum, ancak bulabilmemin tek gerçek nedeni Xcode 6'dan Xcode 7 GM'ye geçiş.

Bunların, bir Sürüm oluşturma yapılandırmasındaki Arşiv işleminden .ipaoluşturulan dosya boyutuna katkıda bulunan ilk 10 kişi olduğunu buldum :

$ unzip -lv Roger\ Release.ipa | sort -k +3nr | head
41802768  Defl:N 16887199  60%  09-14-15 23:47  dc24cdc1  Payload/Roger.app/Frameworks/libswiftCore.dylib
41802400  Defl:N 16886076  60%  09-06-15 18:33  f939ea6a  SwiftSupport/iphoneos/libswiftCore.dylib
11184032  Defl:N  5915625  47%  09-14-15 23:48  6ceac4a2  Payload/Roger.app/Roger
 6399584  Defl:N  2670275  58%  09-14-15 23:47  0ac52d3f  Payload/Roger.app/Frameworks/libPhoneNumber_iOS.framework/libPhoneNumber_iOS
 5410384  Defl:N  2334189  57%  09-14-15 23:47  7a8cb03f  Payload/Roger.app/Frameworks/Alamofire.framework/Alamofire
 4521904  Defl:N  2292789  49%  09-14-15 23:47  95da0882  Payload/Roger.app/Frameworks/FBSDKCoreKit.framework/FBSDKCoreKit
 4731552  Defl:N  1926357  59%  09-14-15 23:48  e05337de  Payload/Roger.app/Frameworks/libswiftFoundation.dylib
 4731168  Defl:N  1925355  59%  09-06-15 18:33  19a5c3c4  SwiftSupport/iphoneos/libswiftFoundation.dylib
 2659232  Defl:N  1232897  54%  09-14-15 23:47  1a53a401  Payload/Roger.app/Frameworks/AFNetworking.framework/AFNetworking
 1196624  Defl:N   545343  54%  09-14-15 23:47  19a063cb  Payload/Roger.app/Frameworks/Bolts.framework/Bolts

Şimdiye kadar en büyük dosyalar, libswiftCore.dylibtoplamı 32 MB'ın üzerinde olan iki (biraz farklı) dosyadır. Xcode 6 tarafından oluşturulan pakette bu iki dosyanın toplamı yalnızca 3 MB'tı.

O halde soru 1: Swift çekirdek dosyaları neden iki kez orada? ( Gömülü İçerik Swift Kodu İçeriyor , Hayır olarak ayarlanmıştır ).

Ve soru 2: Ne oldu? Swift çekirdek boyutu neden 15 MB arttı? Bu kalıcı mı?

Bazı ek notlar:

  • Bu, tamamen Objective-C olan ancak şimdi çoğunlukla Swift olan bir projedir. Tanımlar Modülü ayarı olarak ayarlanır Evet .
  • Proje use_frameworks!set ile CocoaPods kullanıyor .
  • TestFlight'tan birden fazla cihazda ve iOS sürümünde gerçek indirme boyutunu doğruladım ve 30-60 MB aralığında (muhtemelen farkın uygulama dilimlemesinden kaynaklandığı tahmin ediliyor). Eskiden 9 MB'dı.

4
Xcode 7, uygulama dilimlemeyi kullanır, indirme boyutu büyük olasılıkla farklı olacaktır, hatta muhtemelen azalacaktır. Ben bunun için endişelenmem.
Adam

6
@Adam: Durum bu değil. Dağıtılan sürüm cihaza göre değişir, ancak şimdiye kadar iPhone 5'lerde 30 MB ve iPhone 6'da 60 MB gördüm . Kurulum süreleri belirgin şekilde arttı. Bu, eskiden 9 MB olduğu zaman kesinlikle endişelenecek bir şey.
Blixt

3
Aslında 30 MB ile 60 MB arasındaki fark büyük olasılıkla iPhone 5'lerin iOS 9.1'de ve iPhone 6'nın iOS 8'de olmasından kaynaklanıyor. Ancak tüm uygulama kullanıcıları iOS 9'a yükseltmiş olsa bile, 30 MB hala 9'dan çok büyük bir artış. MB.
Blixt

2
TestFlight aracılığıyla mı konuşlandırdınız? Uygulama inceltme işlemi Apple sunucularında yapılır, bu nedenle TestFlight / iTunes aracılığıyla yükleme yapmazsanız, küçültülmüş boyutu göremezsiniz.
MirekE

2
TestFlight'a yükledikten sonra, uygulama boyutum 74 MB'den 9,6 MB'ye düştü, bu yüzden endişelenmeyin
Gintama

Yanıtlar:


27

Büyük olasılıkla BitCode'un neden olduğu aynı büyümeyi gördüm, ancak App Store'dan dağıtıldıktan sonra uygulama boyutu aslında büyümedi.

BitCode'u uygulamanızda ve diğer hedeflerde devre dışı bırakabilirsiniz ve bir küçülme görmelisiniz.


Apple TestFlight'tan uygulama indirme boyutunun 9 MB yerine 30 ila 60 MB olduğunu onayladım. Muhtemelen aynı dağıtım mekanizmasını kullandıkları için App Store'da bir kez değişeceğini düşünmüyorum. Bitcode'u devre dışı bırakmayı deneyeceğim.
Blixt

Derleme ve yayınlama adımlarında Bitcode ve Hata Ayıklama Sembollerinin devre dışı bırakılması ve bir derleme sürümünün arşivlenmesi yine de libswiftCore.dylibher biri ~ 40 MB (~ 16 MB sıkıştırılmış) boyutundaki aynı iki dosyayı içerir . TestFlight aracılığıyla tüm dağıtımı onaylamadım, ancak bu büyük dosyalar hala .ipa'nın bir parçası olduğundan, dosya boyutuna katkılarının değişeceğinden şüpheliyim. Genel boyut yaklaşık ~ 10 MB küçüldü, bu muhtemelen çoğunlukla çarpışma sembolü desteğini almaktan kaynaklanıyor.
Blixt

1
Ben sadece kişisel deneyimlerimden çıkıyorum, .xcarchive'larım şimdi Xcode7 öncesinden çok daha büyük, ancak uygulama mağazası indirmesi, kaynak incelmesi vb. Nedeniyle biraz daha küçük olmasa da hala aynı boyutta.
David Rothera

10
Şimdi baktığımızda, TestFlight'tan gelen paket 33 MB'tı ve AppStore'daki aynı derleme için 10,5 MB, bu, inceltmenin TestFlight sürümlerinde yapılmadığını gösteriyor.
David Rothera

Tamam, bunu bilmek güzel. Uygulamayı App Store'da çalıştıracağım ve en iyisini umacağım!
Blixt

19

Bir çok ayarı ve kombinasyonu test ediyorum ve Xcode 7 tarafından oluşturulan paketlerin dosya boyutu hem cihaza hem de iOS sürümüne bağlı olarak çok değişiyor gibi görünüyor. Ayrıca, TestFlight yapıları artık öncekine göre çok büyük, ancak iyi haber, App Store'da bir kez çok büyük bir artış olmamasıdır (her ne kadar paket boyutuna öncekine kıyasla yaklaşık 1-2 MB eklendiğini görmeme rağmen) .

TestFlight, App Store ve cihazlar arasındaki farklılığı gösteren birkaç örnek:

TestFlight, iPhone 5s, iOS 9.1 üzerinde
35.6 MB

TestFlight, iPhone 6, iOS 8.4.1 üzerinde
70.1 MB

App Store
11,8 MB

App Store boyutu, test ettiğim tüm cihazlarda aynıydı. Yine de iPhone 6 Plus'ta test etmedim, @ 3x varlıkları kullandığından paket boyutunun daha büyük olması çok olası.


11

Hızlı dylib'lerin ve kendi kodunuzun boyutunun .xcarchive dosyasında ve bit kodunun eklenmesi nedeniyle mağaza dağıtımı için dışa aktardığınızda önemli ölçüde daha büyük olması beklenir. Bu ek boyut, gerçekte kullanıcılarınıza teslim edilenlere yansıtılmayacağından bir sorun olmamalıdır. Uygulamanızı mağazaya gönderdiğinizde mağaza, bit kodunu çıkarmak için işleyecektir ve IPA'nın işlenmiş sürümü, kullanıcılarınızın indireceği şeydir.

Arşivinizden, bir mağaza dışa aktarımı dışında herhangi bir tür dışa aktarırsanız (örneğin, geçici dağıtım için kaydetme), bit kodunu yerel olarak çıkarırız (ve hatta bu seçeneği dışa aktarmada işaretli bırakırsanız, önce bit kodundan ikili dosyalarınızı yeniden derleriz. iş akışı, mağazada ne olacağını yeniden oluşturmak için), böylece uygulamanızın gerçekte ne kadar büyük olacağını görebilirsiniz. TestFlight ayrıca sizin için bit kodunu çıkaracak ve size gerçek uygulama boyutunuzu gösterecektir.

Ayrıca, https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html adresinde okuyabileceğiniz uygulama inceltme yoluyla uygulamanızın boyutunun da küçültülebileceğini bilmelisiniz. . Yine de uygulamanızın her bir inceltilmiş varyantının boyutunu görmek için büyük olasılıkla geçici bir dışa aktarma gerçekleştirmek isteyeceksiniz.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.