Після переходу на Xcode 7 розмір програми виріс з 9 МБ до 60 МБ, чи є виправлення?


96

Я повертався назад в історії Git, щоб знайти причину величезної зміни розміру файлу, але єдиною реальною причиною, яку я можу знайти, є перехід з Xcode 6 на Xcode 7 GM.

Я виявив, що це 10 найкращих вкладників розміру файлу в .ipaствореному за допомогою операції архівування у конфігурації збірки Release :

$ 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 МБ. У наборі, створеному Xcode 6, ці два файли мали лише 3 МБ.

Тож питання №1: Чому там двічі є основні файли Swift? ( Вбудований вміст містить швидкий код , встановлений на Ні ).

І питання No2: Що сталося? Чому розмір ядра Swift збільшився на 15 МБ? Це постійно?

Деякі додаткові примітки:

  • Це проект, який був цілком Objective-C, але зараз є в основному Swift. Для параметра Визначення модуля встановлено значення Так .
  • Проект використовує CocoaPods з use_frameworks!набором.
  • Я підтвердив фактичний розмір завантаження з TestFlight на декількох пристроях та версіях iOS, і він знаходиться в межах 30–60 МБ (імовірно, різниця пов’язана з нарізанням додатків). Раніше він становив 9 Мб.

4
Xcode 7 використовує нарізування додатків, розмір завантаження, швидше за все, буде іншим, можливо, він навіть зменшиться. Я б не хвилювався з цього приводу.
Адам

6
@ Адам: Це не так. Розгорнута версія дійсно відрізняється залежно від пристрою, але дотепер я бачив 30 Мб на iPhone 5s та 60 Мб на iPhone 6. Час встановлення помітно збільшився. Це, безумовно, щось, про що слід турбуватися, коли раніше воно становило 9 Мб.
Blixt

3
Насправді різниця між 30 і 60 МБ, швидше за все, пов’язана з тим, що iPhone 5s знаходиться на iOS 9.1, а iPhone 6 - на iOS 8. Але навіть якщо всі користувачі додатків перейшли на iOS 9, 30 Мб все одно дуже сильно збільшилася з 9 Мб.
Blixt

2
Ви розгортали за допомогою TestFlight? Програмування програми виконується на серверах Apple, тому, якщо ви не встановите його за допомогою TestFlight / iTunes, ви не зможете побачити зменшений розмір, я думаю.
MirekE

2
Після завантаження на TestFlight розмір мого додатка зменшився з 74 МБ до 9,6 МБ, тому не хвилюйтеся
Джінтама

Відповіді:


27

Швидше за все, спричинений BitCode, я спостерігав те саме зростання, однак після розгортання з App Store розмір програми насправді не виріс.

Ви можете вимкнути BitCode у своєму додатку та інших цілях, і ви повинні побачити усадку.


Я підтвердив, що розмір завантаження програми з Apple TestFlight становить від 30 до 60 Мб замість 9 Мб. Я не думаю, що це зміниться, як тільки з’явиться в App Store, оскільки вони, мабуть, використовують той самий механізм розподілу. Я спробую вимкнути Bitcode.
Blixt

Вимкнення символів біт-коду та налагодження на етапах збірки та публікації та архівування версії збірки все ще включає в себе абсолютно однакові два libswiftCore.dylibфайли розміром ~ 40 МБ кожен (стиснуті ~ 16 МБ). Я не підтвердив повне розгортання за допомогою TestFlight, але оскільки ці величезні файли все ще є частиною .ipa, я сумніваюся, що їх внесок у розмір файлів зміниться. Загальний розмір зменшився приблизно на ~ 10 МБ, що, мабуть, здебільшого пов’язано з вилученням підтримки символів аварії.
Blixt

1
Я просто виходжу з особистого досвіду, мої .xcarchive набагато більше, ніж попередній Xcode7, однак завантаження магазину додатків все ще того самого розміру, якщо не трохи менше через зменшення ресурсів тощо
Девід Ротера

10
Щойно дивлячись зараз, комплект від TestFlight становив 33 Мб, а для самої ж збірки на AppStore він становить 10,5 Мб, це показує, що витончення не зроблено на збірках TestFlight.
Девід Ротера

Гаразд, це добре знати. Я запущу програму до App Store і сподіваюся на краще!
Blixt

19

Я тестував багато налаштувань і комбінацій, і, здається, розмір файлів пакетів, створених Xcode 7, сильно варіюється залежно від пристрою та версії iOS. Крім того, збірки TestFlight зараз величезні в порівнянні з попередніми, але хороша новина полягає в тому, що одного разу в App Store не відбулося величезного збільшення (хоча я бачу, що до розміру пакета додано приблизно 1–2 МБ порівняно з попередніми) .

Ось кілька зразків, щоб показати відхилення між TestFlight, App Store та пристроями:

TestFlight, iPhone 5s на iOS 9.1
35,6 МБ

TestFlight, iPhone 6 на iOS 8.4.1
70,1 МБ

App Store
11,8 МБ

Розмір App Store був однаковим на всіх тестованих пристроях. Однак я не тестував його на iPhone 6 Plus, цілком можливо, що розмір комплекту буде більшим, оскільки він використовує ресурси @ 3x.


11

Очікується, що розмір швидких дилібів та власного коду буде значно більшим у .xcarchive, а під час експорту для розповсюдження в магазині через включення бітового коду. Цей додатковий розмір не відображатиметься на тому, що насправді доставляється вашим користувачам, тому це не повинно бути проблемою. Коли ви надсилаєте свій додаток до магазину, магазин обробляє його, щоб видалити біт-код, і ця оброблена версія IPA - це те, що завантажать ваші користувачі.

Якщо ви виконуєте будь-який тип експорту з вашого архіву, окрім експорту магазину (наприклад, зберігаєте для розгортання спеціально), ми локально видалимо біт-код (і навіть перекомпілюємо ваші двійкові файли з біт-коду, якщо ви залишите цю опцію позначеною в експорті робочий процес, щоб відтворити те, що відбуватиметься в магазині), щоб ви могли побачити, наскільки великий буде ваш додаток насправді. TestFlight також позбавить вас бітового коду та покаже вам справжній розмір програми.

Ви також повинні пам’ятати, що розмір вашого додатка також можна зменшити за допомогою витончення програм, про що ви можете прочитати на https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html . Ви, мабуть, захочете виконати спеціальний експорт, щоб у будь-якому випадку побачити розмір кожного розрідженого варіанту вашого додатка.


6

Причиною є вбудований біт-код.

Припускаючи, що ви не хочете вимикати ENABLE_BITCODE, ви можете видалити символи налагодження.

Див http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html також зачистка отладочную геть перед вкладенням є одним бітового коду з варіантів ви можете зробити.


1
Чи не означає це, що ви не отримаєте символічних звітів про аварії?
Юліан Онофрей

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.