Ответ 1
Скорее всего, вызванный BitCode, я видел тот же рост, однако после его развертывания из App Store размер приложения фактически не вырос.
Вы можете отключить BitCode и в своем приложении, и в других целях, и вы должны увидеть усадку.
Я вернулся в историю 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 МБ. В комплекте, построенном Xcode 6, эти два файла составляли всего 3 МБ.
Итак, вопрос № 1: Почему файлы Swift ядра там дважды? ( Вложенное содержимое содержит Swift Code установлено значение Нет).
И вопрос № 2: что случилось? Почему размер ядра Swift увеличился на 15 МБ? Это постоянный?
Некоторые дополнительные примечания:
use_frameworks!
.Скорее всего, вызванный BitCode, я видел тот же рост, однако после его развертывания из App Store размер приложения фактически не вырос.
Вы можете отключить BitCode и в своем приложении, и в других целях, и вы должны увидеть усадку.
Я тестировал множество настроек и комбинаций, и кажется, что размер файлов пакетов, созданных Xcode 7, сильно варьируется в зависимости от устройства и версии iOS. Кроме того, сборки TestFlight теперь огромны по сравнению с предыдущими, но хорошая новость заключается в том, что когда-то в App Store не было огромного увеличения (хотя я вижу около 1-2 МБ, добавленных к размеру пакета по сравнению с предыдущим).
Вот несколько примеров, чтобы показать разницу между TestFlight, магазином приложений и устройствами:
TestFlight, iPhone 5s на iOS 9.1
35.6 МБ
TestFlight, iPhone 6 на iOS 8.4.1
70,1 МБ
Магазин приложений
11.8 МБ
Размер App Store был идентичен для всех тестируемых устройств. Я не тестировал его на iPhone 6 Plus, но очень вероятно, что размер пакета будет больше, поскольку он использует активы @3x.
Ожидается, что размер быстрых dylib и ваш собственный код будет значительно больше в .xcarchive, и когда вы экспортируете дистрибутив хранилища, из-за включения битового кода. Этот дополнительный размер не будет отражен в том, что фактически доставляется вашим пользователям, поэтому это не должно быть проблемой. Когда вы отправляете свое приложение в магазин, хранилище будет обрабатывать его, чтобы вырезать биткод, и эта обработанная версия IPA - это то, что будут загружать ваши пользователи.
Если вы делаете какой-либо экспорт из своего архива, кроме экспорта магазина (например, для развертывания ad-hoc), мы локально вычеркиваем бит-код (и даже сначала перекомпилируем ваши двоичные файлы из битового кода, если вы оставите этот параметр отмеченным в рабочем процессе экспорта, чтобы воссоздать, что произойдет в магазине), чтобы вы могли видеть, насколько на самом деле будет ваше приложение. TestFlight также вырезает для вас биткод и покажет вам ваш истинный размер приложения.
Вы также должны знать, что размер вашего приложения также можно уменьшить с помощью прореживания приложения, о котором вы можете прочитать в https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html. Вероятно, вы захотите выполнить экспорт ad-hoc, чтобы увидеть размер каждого утонченного варианта вашего приложения.
Введенный биткод является причиной.
Предполагая, что вы не хотите отключать ENABLE_BITCODE, вы можете удалить символы отладки.
См. http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html в качестве удаления отладочных символов перед тем, как вставлять биткод - это один из вариантов, который вы можете сделать.
У нас также была эта проблема с Swift 1.2. См. Как предотвратить включение библиотек SwiftSupport дважды для моего первоначального вопроса об этой же проблеме.
Я уверен, что это проблема с программными цепочками.