Sau khi chuyển sang Xcode 7, kích thước ứng dụng đã tăng từ 9 MB lên 60 MB, có cách nào khắc phục không?


96

Tôi đã quay ngược lại lịch sử Git để tìm nguyên nhân của sự thay đổi kích thước tệp lớn, nhưng lý do thực sự duy nhất mà tôi có thể tìm thấy là việc chuyển từ Xcode 6 sang Xcode 7 GM.

Tôi nhận thấy rằng đây là 10 người đóng góp kích thước tệp hàng đầu trong hoạt động .ipađược tạo từ hoạt động Lưu trữ trên cấu hình bản phát hành :

$ 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

Cho đến nay, các tệp lớn nhất là hai tệp (hơi khác nhau) libswiftCore.dylib, tổng cộng hơn 32 MB. Trong gói được xây dựng bởi Xcode 6, tổng cộng hai tệp này chỉ có 3 MB.

Vì vậy, câu hỏi số 1 là: Tại sao các tệp lõi Swift lại có hai lần? ( Nội dung nhúng Chứa Mã Swift được đặt thành Không ).

Và câu hỏi số 2 là: Chuyện gì đã xảy ra? Tại sao kích thước lõi của Swift lại tăng 15 MB? Cái này có vĩnh viễn không?

Một số lưu ý bổ sung:

  • Đây là một dự án hoàn toàn là Objective-C nhưng bây giờ chủ yếu là Swift. Các Định nghĩa Mô-đun thiết lập được thiết lập để Yes .
  • Dự án sử dụng CocoaPods với use_frameworks!bộ.
  • Tôi đã xác nhận kích thước tải xuống thực tế từ TestFlight trên nhiều thiết bị và phiên bản iOS và nó nằm trong khoảng 30–60 MB (có lẽ sự khác biệt là do cắt ứng dụng). Nó từng là 9 MB.

4
Xcode 7 sử dụng tính năng cắt ứng dụng, kích thước tải xuống rất có thể sẽ khác, thậm chí có thể sẽ giảm xuống. Tôi sẽ không lo lắng về điều này.
Adam

6
@Adam: Đây không phải là trường hợp. Phiên bản được triển khai thay đổi tùy theo thiết bị, nhưng cho đến nay tôi đã thấy 30 MB trên iPhone 5s và 60 MB trên iPhone 6. Thời gian cài đặt đã tăng lên đáng kể. Đây chắc chắn là một điều đáng lo ngại khi nó từng là 9 MB.
Blixt

3
Trên thực tế, sự khác biệt 30 so với 60 MB rất có thể là do iPhone 5s chạy trên iOS 9.1 và iPhone 6 lên iOS 8. Nhưng ngay cả khi tất cả người dùng ứng dụng nâng cấp lên iOS 9, 30 MB vẫn là một mức tăng rất lớn so với 9 MB.
Blixt

2
Bạn đã triển khai qua TestFlight? Việc làm mỏng ứng dụng được thực hiện trên các máy chủ của Apple, vì vậy trừ khi bạn cài đặt qua TestFlight / iTunes, bạn sẽ không thể thấy kích thước giảm, tôi nghĩ.
MirekE

2
Sau khi tải lên để TestFlight, kích thước ứng dụng của tôi giảm từ 74MB đến 9.6MB, do đó, không lo lắng
Gintama

Câu trả lời:


27

Rất có thể do BitCode gây ra, tôi đã thấy sự tăng trưởng tương tự, tuy nhiên sau khi được triển khai từ App Store, kích thước ứng dụng đã không thực sự tăng lên.

Bạn có thể tắt BitCode trong ứng dụng của mình và các mục tiêu khác và bạn sẽ thấy sự co lại.


Tôi đã xác nhận kích thước tải xuống ứng dụng từ Apple TestFlight là 30 đến 60 MB thay vì 9 MB. Tôi không nghĩ rằng nó sẽ thay đổi khi nó có trên App Store vì họ có lẽ sử dụng cùng một cơ chế phân phối. Tôi sẽ thử tắt Bitcode.
Blixt

Việc vô hiệu hóa Bitcode và Debug Symbols trong các bước xây dựng và xuất bản cũng như lưu trữ phiên bản xây dựng vẫn bao gồm hai libswiftCore.dylibtệp chính xác giống nhau với dung lượng ~ 40 MB mỗi tệp (nén ~ 16 MB). Tôi chưa xác nhận toàn bộ việc triển khai thông qua TestFlight, nhưng vì những tệp khổng lồ này vẫn là một phần của .ipa nên tôi nghi ngờ rằng đóng góp của chúng vào kích thước tệp sẽ thay đổi. Kích thước tổng thể giảm khoảng ~ 10 MB, có lẽ phần lớn là do lấy ra hỗ trợ biểu tượng sự cố.
Blixt

1
Tôi chỉ dừng lại ở trải nghiệm cá nhân, .xcarchive của tôi hiện lớn hơn RẤT NHIỀU so với trước Xcode7, tuy nhiên, lượt tải xuống cửa hàng ứng dụng vẫn có cùng kích thước nếu không muốn nói là nhỏ hơn một chút do tài nguyên mỏng, v.v.
David Rothera 15/09/15

10
Bây giờ chỉ cần nhìn vào, gói từ TestFlight là 33MB và đối với cùng một bản dựng trên AppStore, nó là 10,5MB, điều này cho thấy việc làm mỏng không được thực hiện trên các bản dựng TestFlight.
David Rothera

Được rồi, thật tốt khi biết. Tôi sẽ chạy ứng dụng qua App Store và hy vọng điều tốt nhất!
Blixt

19

Tôi đã thử nghiệm rất nhiều cài đặt và kết hợp và có vẻ như kích thước tệp của các gói được tạo bởi Xcode 7 khác nhau rất nhiều tùy thuộc vào cả thiết bị và phiên bản iOS. Ngoài ra, các bản dựng TestFlight hiện rất lớn so với trước đây, nhưng tin tốt là khi trên App Store đã không có sự gia tăng đáng kể (mặc dù tôi thấy khoảng 1–2 MB được thêm vào kích thước gói so với trước đây) .

Dưới đây là một số mẫu để hiển thị sự khác biệt giữa TestFlight, App Store và các thiết bị:

TestFlight, iPhone 5s trên iOS 9.1
35,6 MB

TestFlight, iPhone 6 trên iOS 8.4.1
70.1 MB

Cửa hàng ứng dụng
11,8 MB

Kích thước App Store giống hệt nhau trên tất cả các thiết bị tôi đã thử nghiệm. Tuy nhiên, tôi chưa thử nghiệm nó trên iPhone 6 Plus, rất có thể kích thước gói sẽ lớn hơn vì nó sử dụng nội dung @ 3x.


11

Dự kiến, kích thước của mã nhanh và mã của riêng bạn, sẽ lớn hơn đáng kể trong .xcarchive và khi bạn xuất để phân phối tại cửa hàng, do bao gồm mã bit. Kích thước bổ sung này sẽ không được phản ánh trong những gì thực sự được phân phối đến người dùng của bạn, vì vậy nó không phải là vấn đề. Khi bạn gửi ứng dụng của mình đến cửa hàng, cửa hàng sẽ xử lý ứng dụng đó để loại bỏ mã bit và phiên bản IPA đã xử lý đó là thứ mà người dùng của bạn sẽ tải xuống.

Nếu bạn thực hiện bất kỳ loại xuất nào từ kho lưu trữ của mình ngoại trừ xuất tại cửa hàng (ví dụ: lưu để triển khai đột xuất), chúng tôi sẽ loại bỏ cục bộ bitcode (và thậm chí biên dịch lại mã nhị phân của bạn từ bitcode trước, nếu bạn chọn tùy chọn đó trong quá trình xuất quy trình làm việc, để tạo lại những gì sẽ xảy ra trên cửa hàng), vì vậy bạn có thể thấy ứng dụng của mình sẽ thực sự lớn như thế nào. TestFlight cũng sẽ tách bitcode cho bạn và hiển thị cho bạn kích thước ứng dụng thực của bạn.

Bạn cũng nên lưu ý rằng kích thước ứng dụng của bạn cũng có thể được giảm xuống thông qua việc làm mỏng ứng dụng. Bạn có thể đọc thông tin này tại https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Bạn có thể sẽ muốn thực hiện xuất đặc biệt để xem kích thước của từng biến thể thu nhỏ trong ứng dụng của mình.


6

Lý do là Embedded Bitcode.

Giả sử bạn không muốn tắt ENABLE_BITCODE, bạn có thể loại bỏ các ký hiệu gỡ lỗi.

Xem http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html vì loại bỏ các ký hiệu gỡ lỗi trước khi nhúng bitcode là một trong những tùy chọn bạn có thể làm.


1
Điều đó không có nghĩa là bạn sẽ không nhận được các báo cáo sự cố tượng trưng?
Iulian Onofrei 21/02/17

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.