หลังจากเปลี่ยนมาใช้ Xcode 7 ขนาดแอพเพิ่มขึ้นจาก 9 MB เป็น 60 MB มีการแก้ไขหรือไม่?


96

ฉันย้อนกลับไปในประวัติ Git เพื่อค้นหาสาเหตุของการเปลี่ยนแปลงขนาดไฟล์ที่ใหญ่โต แต่เหตุผลเดียวที่ฉันพบคือการเปลี่ยนจาก Xcode 6 เป็น Xcode 7 GM

ฉันพบว่านี่คือผู้ให้ข้อมูลขนาดไฟล์ 10 อันดับแรกในการ.ipaสร้างจากการดำเนินการเก็บถาวรในการกำหนดค่ารุ่นรุ่น

$ 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

ไฟล์ที่ใหญ่ที่สุดคือสองไฟล์ (แตกต่างกันเล็กน้อย) libswiftCore.dylibซึ่งมีขนาดรวมมากกว่า 32 MB ในบันเดิลที่สร้างโดย Xcode 6 ทั้งสองไฟล์มีทั้งหมดเพียง 3 MB

คำถาม # 1 คือทำไมไฟล์ Swift core ถึงมีสองครั้ง? ( เนื้อหาที่ฝังประกอบด้วย Swift Codeถูกตั้งค่าเป็นไม่ใช่ )

และคำถาม # 2 คือเกิดอะไรขึ้น? เหตุใดขนาดคอร์ของ Swift จึงเพิ่มขึ้น 15 MB ถาวรหรือไม่?

หมายเหตุเพิ่มเติมบางประการ:

  • นี่เป็นโครงการที่เป็น Objective-C ทั้งหมด แต่ตอนนี้ส่วนใหญ่เป็น Swift กำหนดโมดูลการตั้งค่าถูกตั้งไว้ที่ใช่
  • โครงการใช้ CocoaPods พร้อมuse_frameworks!ชุด
  • ฉันได้ยืนยันขนาดการดาวน์โหลดจริงจาก TestFlight บนอุปกรณ์และ iOS หลายเวอร์ชันแล้วและอยู่ในช่วง 30–60 MB (น่าจะเป็นความแตกต่างเนื่องจากการแบ่งส่วนแอป) เคยมีขนาด 9 MB

4
Xcode 7 ใช้การแบ่งส่วนแอปขนาดการดาวน์โหลดส่วนใหญ่จะแตกต่างกันและอาจลดลงด้วยซ้ำ ฉันจะไม่กังวลเกี่ยวกับเรื่องนี้
อดัม

6
@Adam: นี่ไม่ใช่กรณี เวอร์ชันที่ปรับใช้จะแตกต่างกันไปขึ้นอยู่กับอุปกรณ์ แต่จนถึงตอนนี้ฉันเห็น 30 MB บน iPhone 5s และ60 MBบน iPhone 6 เวลาในการติดตั้งเพิ่มขึ้นอย่างเห็นได้ชัด นี่เป็นสิ่งที่ต้องกังวลเมื่อก่อนเคยมีขนาด 9 MB
Blixt

3
จริงๆแล้วความแตกต่าง 30 กับ 60 MB น่าจะเกิดจาก iPhone 5s อยู่บน iOS 9.1 และ iPhone 6 อยู่บน iOS 8 แต่แม้ว่าผู้ใช้แอปทั้งหมดจะอัปเกรดเป็น iOS 9 แต่ 30 MB ก็ยังเพิ่มขึ้นมากจาก 9 ลบ.
Blixt

2
คุณปรับใช้ผ่าน TestFlight หรือไม่ การทำให้แอปบางลงนั้นทำบนเซิร์ฟเวอร์ของ Apple ดังนั้นหากคุณไม่ติดตั้งผ่าน TestFlight / iTunes คุณจะไม่สามารถเห็นขนาดที่ลดลงได้
MirekE

2
หลังจากอัปโหลดไปที่ TestFlight ขนาดแอปของฉันลดลงจาก 74MB เป็น 9.6MB ดังนั้นไม่ต้องกังวล
Gintama

คำตอบ:


27

สาเหตุส่วนใหญ่เกิดจาก BitCode ฉันได้เห็นการเติบโตเช่นเดียวกัน แต่เมื่อใช้งานจาก App Store แล้วขนาดแอปยังไม่เติบโตขึ้นจริง

คุณสามารถปิดใช้งาน BitCode ในแอปของคุณและเป้าหมายอื่น ๆ ได้เช่นกันและคุณจะเห็นการหดตัว


ฉันยืนยันขนาดการดาวน์โหลดแอพจาก Apple TestFlight เป็น 30 ถึง 60 MB แทนที่จะเป็น 9 MB ฉันไม่คิดว่ามันจะเปลี่ยนไปเมื่ออยู่ใน App Store เนื่องจากพวกเขาน่าจะใช้กลไกการกระจายเดียวกัน ฉันจะลองปิด Bitcode
Blixt

การปิดใช้งาน Bitcode และ Debug Symbols ในขั้นตอนการสร้างและการเผยแพร่และการเก็บถาวรเวอร์ชันบิวด์ยังคงมีlibswiftCore.dylibไฟล์สองไฟล์ที่เหมือนกันทุกประการที่ ~ 40 MB ต่อไฟล์ (บีบอัด ~ 16 MB) ฉันยังไม่ได้ยืนยันการปรับใช้ทั้งหมดผ่าน TestFlight แต่เนื่องจากไฟล์ขนาดใหญ่เหล่านี้ยังคงเป็นส่วนหนึ่งของ. ipa ฉันสงสัยว่าการมีส่วนร่วมกับขนาดไฟล์จะเปลี่ยนไป ขนาดโดยรวมหดลงประมาณ ~ 10 MB ซึ่งส่วนใหญ่น่าจะมาจากการรองรับสัญลักษณ์ข้อขัดข้อง
Blixt

1
ฉันเพิ่งจะเลิกใช้ประสบการณ์ส่วนตัว. xcarchive ของฉันตอนนี้มีขนาดใหญ่กว่าก่อน Xcode7 มาก แต่การดาวน์โหลด App Store ยังคงมีขนาดเท่าเดิมหากไม่เล็กลงเล็กน้อยเนื่องจากทรัพยากรที่บางลงเป็นต้น
David Rothera

10
ดูตอนนี้บันเดิลจาก TestFlight มีขนาด 33MB และสำหรับการสร้างแบบเดียวกันใน AppStore คือ 10.5MB แสดงให้เห็นว่าการทำให้ผอมบางไม่ได้ทำในรุ่น TestFlight
David Rothera

โอเคนั่นคือสิ่งที่ควรรู้ ฉันจะเรียกใช้แอปไปยัง App Store และหวังว่าจะดีที่สุด!
Blixt

19

ฉันได้ทดสอบการตั้งค่าและชุดค่าผสมต่างๆมากมายและดูเหมือนว่าขนาดไฟล์ของกลุ่มที่สร้างโดย Xcode 7 จะแตกต่างกันมากขึ้นอยู่กับทั้งอุปกรณ์และเวอร์ชันของ iOS นอกจากนี้บิวด์ TestFlight ยังมีขนาดใหญ่เมื่อเทียบกับรุ่นก่อน แต่ข่าวดีก็คือครั้งหนึ่งใน App Store ไม่มีการเพิ่มขึ้นมากนัก (แม้ว่าฉันจะเห็นขนาดกลุ่มที่เพิ่มขึ้นประมาณ 1–2 MB เมื่อเทียบกับก่อนหน้านี้) .

นี่คือตัวอย่างบางส่วนเพื่อแสดงความแตกต่างระหว่าง TestFlight, App Store และอุปกรณ์:

TestFlight, iPhone 5s บน iOS 9.1
35.6 MB

TestFlight, iPhone 6 บน iOS 8.4.1
70.1 MB

App Store
11.8 ลบ

ขนาดของ App Store เหมือนกันในทุกอุปกรณ์ที่ฉันทดสอบ ฉันยังไม่ได้ทดสอบบน iPhone 6 Plus เป็นไปได้มากที่ขนาดของกลุ่มจะใหญ่ขึ้นเนื่องจากใช้เนื้อหา @ 3x


11

คาดว่าขนาดของ dylibs ที่รวดเร็วและรหัสของคุณจะใหญ่ขึ้นอย่างมีนัยสำคัญใน. xcarchive และเมื่อคุณส่งออกเพื่อการจัดจำหน่ายในร้านค้าเนื่องจากการรวม bitcode ไว้ด้วย ขนาดเพิ่มเติมนี้จะไม่แสดงในสิ่งที่ส่งมอบให้กับผู้ใช้ของคุณจริงดังนั้นจึงไม่น่าเป็นปัญหา เมื่อคุณส่งแอปของคุณไปยังร้านค้าร้านค้าจะดำเนินการเพื่อตัด bitcode ออกและ IPA เวอร์ชันประมวลผลนั้นคือสิ่งที่ผู้ใช้ของคุณจะดาวน์โหลด

หากคุณทำการส่งออกประเภทใดก็ได้จากที่เก็บถาวรของคุณยกเว้นการส่งออกร้านค้า (เช่นบันทึกสำหรับการปรับใช้เฉพาะกิจ) เราจะตัด bitcode ในเครื่องออก (และแม้แต่คอมไพล์ไบนารีของคุณใหม่จาก bitcode ก่อนหากคุณปล่อยให้ตัวเลือกนั้นถูกตรวจสอบในการส่งออก เวิร์กโฟลว์เพื่อสร้างสิ่งที่จะเกิดขึ้นในร้านค้าใหม่) เพื่อให้คุณเห็นว่าแอปของคุณจะใหญ่แค่ไหน TestFlight จะตัด bitcode สำหรับคุณและแสดงขนาดแอปที่แท้จริงของคุณ

นอกจากนี้คุณควรทราบด้วยว่าแอปของคุณสามารถลดขนาดได้ด้วยการทำให้บางลงของแอพซึ่งคุณสามารถอ่านได้ที่https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . คุณอาจต้องการส่งออกแบบเฉพาะกิจเพื่อดูขนาดของแอปที่มีขนาดเล็กแต่ละตัว


6

Embedded Bitcode คือเหตุผล

สมมติว่าคุณไม่ต้องการปิดใช้งาน ENABLE_BITCODE คุณสามารถดึงสัญลักษณ์การดีบักออกได้

โปรดดูhttp://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.htmlเนื่องจากการลอกสัญลักษณ์การดีบักออกไปก่อนที่จะฝัง bitcode เป็นหนึ่งในตัวเลือกที่คุณสามารถทำได้


1
นั่นหมายความว่าคุณจะไม่ได้รับรายงานข้อขัดข้องในเชิงสัญลักษณ์ใช่หรือไม่
Iulian Onofrei

0

เรามีปัญหากับ Swift 1.2 เช่นกัน ดูวิธีป้องกันไม่ให้รวมไลบรารี SwiftSupport สองครั้งสำหรับคำถามเดิมของฉันเกี่ยวกับปัญหาเดียวกันนี้

ฉันค่อนข้างมั่นใจว่านี่เป็นปัญหาของ toolchain

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.