Setelah beralih ke Xcode 7, ukuran aplikasi bertambah dari 9 MB menjadi 60 MB, apakah ada perbaikan?

96

Saya telah mundur ke belakang dalam sejarah Git untuk menemukan penyebab perubahan ukuran file yang sangat besar, tetapi satu-satunya alasan sebenarnya yang dapat saya temukan adalah peralihan dari Xcode 6 ke Xcode 7 GM.

Saya telah menemukan bahwa ini adalah 10 besar kontributor ukuran file yang .ipadibuat dari operasi Arsip pada konfigurasi build Rilis :

$ 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

Sejauh ini file terbesar adalah dua file (sedikit berbeda) libswiftCore.dylib, yang totalnya lebih dari 32 MB. Dalam bundel yang dibangun oleh Xcode 6, kedua file ini hanya berukuran 3 MB.

Jadi pertanyaan # 1 adalah: Mengapa file inti Swift ada dua kali? ( Konten Tersemat Berisi Kode Swift diatur ke Tidak ).

Dan pertanyaan # 2 adalah: Apa yang terjadi? Mengapa ukuran inti Swift bertambah 15 MB? Apakah ini permanen?

Beberapa catatan tambahan:

  • Ini adalah proyek yang sepenuhnya Objective-C tetapi sekarang kebanyakan Swift. Pengaturan Defines Module diatur ke Yes .
  • Proyek ini menggunakan CocoaPods dengan use_frameworks!set.
  • Saya telah mengonfirmasi ukuran unduhan sebenarnya dari TestFlight di beberapa perangkat dan versi iOS dan berkisar antara 30-60 MB (mungkin perbedaannya disebabkan oleh pemotongan aplikasi). Dulu 9 MB.
Blixt
sumber
4
Xcode 7 menggunakan pengiris aplikasi, ukuran unduhan kemungkinan besar akan berbeda, bahkan mungkin akan berkurang. Saya tidak akan khawatir tentang ini.
Adam
6
@Adam: Ini bukan masalahnya. Versi yang diterapkan bervariasi tergantung pada perangkat, tetapi sejauh ini saya telah melihat 30 MB di iPhone 5s dan 60 MB di iPhone 6. Waktu penginstalan telah meningkat secara nyata. Ini pasti sesuatu yang perlu dikhawatirkan ketika dulu berukuran 9 MB.
Blixt
3
Sebenarnya perbedaan 30 vs 60 MB kemungkinan besar karena iPhone 5 berada di iOS 9.1 dan iPhone 6 menggunakan iOS 8. Tetapi bahkan jika semua pengguna aplikasi meningkatkan ke iOS 9, 30 MB masih merupakan peningkatan yang sangat besar dari 9 MB.
Blixt
2
Apakah Anda menerapkan melalui TestFlight? Penipisan aplikasi dilakukan di server Apple, jadi kecuali Anda menginstal melalui TestFlight / iTunes, Anda tidak akan dapat melihat ukuran yang diperkecil, saya kira.
MirekE
2
Setelah mengunggah ke TestFlight, ukuran aplikasi saya berkurang dari 74MB menjadi 9,6MB, jadi jangan khawatir
Gintama

Jawaban:

27

Kemungkinan besar disebabkan oleh BitCode, saya telah melihat pertumbuhan yang sama namun setelah diterapkan dari App Store, ukuran aplikasi belum benar-benar berkembang.

Anda dapat menonaktifkan BitCode di aplikasi Anda dan target lainnya juga dan Anda akan melihat penyusutan.

David Rothera
sumber
Saya telah mengonfirmasi ukuran unduhan aplikasi dari Apple TestFlight menjadi 30 hingga 60 MB, bukan 9 MB. Saya tidak berpikir itu akan berubah setelah di App Store karena mereka mungkin menggunakan mekanisme distribusi yang sama. Saya akan mencoba menonaktifkan Bitcode.
Blixt
Menonaktifkan Simbol Bitcode dan Debug dalam langkah-langkah pembuatan dan penerbitan serta mengarsipkan versi build masih menyertakan dua libswiftCore.dylibfile yang sama persis masing-masing berukuran ~ 40 MB (~ 16 MB terkompresi). Saya belum mengonfirmasi seluruh penerapan melalui TestFlight, tetapi karena file besar ini masih merupakan bagian dari .ipa, saya ragu kontribusi mereka terhadap ukuran file akan berubah. Ukuran keseluruhan menyusut sekitar ~ 10 MB, yang mungkin sebagian besar karena mengambil dukungan simbol crash.
Blixt
1
Saya hanya akan memberikan pengalaman pribadi, .xcarchive saya sekarang BANYAK lebih besar daripada pra-Xcode7 namun unduhan app store masih berukuran sama jika tidak sedikit lebih kecil karena sumber daya yang menipis, dll.
David Rothera
10
Lihat saja sekarang, bundel dari TestFlight adalah 33MB dan untuk build yang sama di AppStore adalah 10,5MB, ini menunjukkan penipisan tidak dilakukan pada build TestFlight.
David Rothera
Oke, senang mengetahuinya. Saya akan menjalankan aplikasi melalui App Store dan berharap yang terbaik!
Blixt
19

Saya telah menguji banyak pengaturan dan kombinasi dan tampaknya ukuran file bundel yang dibuat oleh Xcode 7 sangat bervariasi tergantung pada perangkat dan versi iOS. Selain itu, build TestFlight sekarang sangat besar dibandingkan sebelumnya, tetapi kabar baiknya adalah bahwa di App Store belum ada peningkatan yang besar (meskipun saya melihat sekitar 1–2 MB ditambahkan ke ukuran bundel dibandingkan sebelumnya) .

Berikut beberapa contoh untuk menunjukkan perbedaan antara TestFlight, App Store, dan perangkat:

TestFlight, iPhone 5s pada iOS 9.1
35.6 MB

TestFlight, iPhone 6 di iOS 8.4.1
70.1 MB

App Store
11,8 MB

Ukuran App Store identik di semua perangkat yang saya uji. Saya belum mengujinya di iPhone 6 Plus, sangat mungkin ukuran bundelnya akan lebih besar karena menggunakan aset @ 3x.

Blixt
sumber
11

Diharapkan bahwa ukuran dylib swift, dan kode Anda sendiri, akan jauh lebih besar di .xcarchive, dan saat Anda mengekspor untuk distribusi toko, karena penyertaan bitcode. Ukuran tambahan ini tidak akan tercermin dalam apa yang sebenarnya dikirimkan ke pengguna Anda, jadi ini seharusnya tidak menjadi masalah. Saat Anda mengirimkan aplikasi ke toko, toko akan memprosesnya untuk menghapus kode bit, dan versi IPA yang telah diproses tersebut akan diunduh oleh pengguna Anda.

Jika Anda melakukan jenis ekspor apa pun dari arsip Anda kecuali ekspor toko (mis. Simpan untuk penerapan ad-hoc), kami akan menghapus bitcode secara lokal (dan bahkan mengkompilasi ulang binari Anda dari bitcode terlebih dahulu, jika Anda membiarkan opsi itu dicentang di ekspor alur kerja, untuk membuat ulang apa yang akan terjadi di store), sehingga Anda dapat melihat seberapa besar aplikasi Anda nantinya. TestFlight juga akan menghapus bitcode untuk Anda dan menunjukkan ukuran aplikasi Anda yang sebenarnya.

Anda juga harus menyadari bahwa ukuran aplikasi Anda juga dapat dikurangi melalui penipisan aplikasi, yang dapat Anda baca di https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Anda mungkin ingin melakukan ekspor ad-hoc untuk melihat ukuran setiap varian aplikasi Anda yang dikurangi.

Rick Ballard
sumber
6

Bitcode yang disematkan adalah alasannya.

Dengan asumsi Anda tidak ingin menonaktifkan ENABLE_BITCODE, Anda dapat menghapus simbol debug.

Lihat http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html karena menghilangkan simbol debug sebelum menyematkan bitcode adalah salah satu opsi yang dapat Anda lakukan.

Nuray Altin
sumber
1
Bukankah itu berarti Anda tidak akan mendapatkan laporan kerusakan yang disimbolkan?
Iulian Onofrei