Я возвращался в историю 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, установлено значение Нет ).
И вопрос №2: что случилось? Почему размер ядра Swift увеличился на 15 МБ? Это навсегда?
Некоторые дополнительные примечания:
- Это проект, который полностью был Objective-C, но теперь в основном Swift. Для параметра " Определяет модуль" установлено значение " Да" .
- В проекте используются CocoaPods с
use_frameworks!
set. - Я подтвердил фактический размер загрузки из TestFlight на нескольких устройствах и версиях iOS, и он находится в диапазоне 30–60 МБ (вероятно, разница связана с нарезкой приложений). Раньше было 9 МБ.
Ответы:
Скорее всего, это вызвано BitCode, я наблюдал такой же рост, однако после развертывания из App Store размер приложения фактически не увеличился.
Вы можете отключить BitCode в своем приложении и других целях, и вы должны увидеть сжатие.
источник
libswiftCore.dylib
файла размером ~ 40 МБ каждый (~ 16 МБ в сжатом виде). Я не подтвердил полное развертывание через TestFlight, но поскольку эти огромные файлы все еще являются частью .ipa, я сомневаюсь, что их вклад в размер файла изменится. Общий размер уменьшился примерно на 10 МБ, что, по-видимому, в основном связано с отсутствием поддержки символов сбоя.Я тестировал множество настроек и комбинаций, и, похоже, размер файлов пакетов, созданных 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 МБ
Магазин приложений
11,8 МБ
Размер App Store был одинаковым на всех протестированных мной устройствах. Я не тестировал его на iPhone 6 Plus, но вполне возможно, что размер пакета будет больше, поскольку он использует ресурсы @ 3x.
источник
Ожидается, что размер быстрых дилибов и вашего собственного кода будет значительно больше в .xcarchive и при экспорте для распространения в магазине из-за включения битового кода. Этот дополнительный размер не будет отражен в том, что фактически будет доставлено вашим пользователям, поэтому это не должно быть проблемой. Когда вы отправляете свое приложение в магазин, он обрабатывает его, чтобы удалить битовый код, и эту обработанную версию IPA будут загружать ваши пользователи.
Если вы выполняете любой тип экспорта из своего архива, кроме экспорта в магазин (например, сохраняете для специального развертывания), мы локально удалим битовый код (и даже сначала перекомпилируем ваши двоичные файлы из битового кода, если вы оставите этот параметр отмеченным в экспорте. рабочий процесс, чтобы воссоздать то, что будет происходить в магазине), чтобы вы могли увидеть, насколько большим будет ваше приложение. TestFlight также удалит бит-код и покажет вам истинный размер приложения.
Вы также должны знать, что размер вашего приложения также можно уменьшить за счет прореживания приложения, о котором вы можете прочитать на https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html. . Скорее всего, вы захотите выполнить специальный экспорт, чтобы в любом случае увидеть размер каждого прореженного варианта вашего приложения.
источник
Встроенный битовый код - причина.
Предполагая, что вы не хотите отключать ENABLE_BITCODE, вы можете удалить символы отладки.
См. Http://oguzbastemur.blogspot.com/2015/09/xcode-7-and-increaded-binary-size.html, поскольку удаление отладочных символов перед внедрением битового кода является одним из возможных вариантов.
источник
У нас также была эта проблема со Swift 1.2. См. Раздел Как предотвратить включение библиотек SwiftSupport дважды, чтобы ответить на мой исходный вопрос об этой же проблеме.
Я почти уверен, что это проблема с набором инструментов.
источник