Размер сборки iOS с Swift 3 и стручками

Я только что заметил cocoapods с Swift, увеличивает размер сборки, однако, когда я использую те же библиотеки вручную, тогда размер сборки нормальный.

Я создал пустой проект с некоторыми контейнерами, а размер сборки - 10 МБ, а файл .app - около 40 МБ.

Я также замечаю, что мой файл .app содержит все мои рамки cocoapods (около 37 МБ), просмотрев "Содержимое упаковки". введите описание изображения здесь

Мой подклик, содержащий эти стручки

pod 'Alamofire', '~ > 4.4'

pod 'SwiftyJSON'

pod 'IQKeyboardManagerSwift'

pod 'ActionSheetPicker-3.0'

pod 'Kingfisher'

pod 'JKNotificationPanel'

Мои вопросы

  • почему мой файл .app содержит всю фреймворк, я предполагаю, что это происходит только с Swift и cocoapod (исправить меня, если я ошибаюсь)?
  • Как мы можем уменьшить размер сборки, используя cocoapods с Swift

Заранее спасибо

Ответ 1

Если вы используете библиотеки как статические библиотеки, компоновщик может исключить те части, которые вы не используете в сборке. То же самое не относится к фреймворкам. Поэтому, если вы просто создали приложение с этими библиотеками и не использовали их, они не будут включены вообще, поэтому это не справедливое сравнение.

Когда вы спрашиваете, почему ваше приложение содержит все фреймворки, я предполагаю, что вы имеете в виду те, которые используются для быстрой среды выполнения, а не для зависимостей, которые вы явно запрашивали в cocoapods. Все быстрые приложения имеют в них встроенную среду исполнения, по крайней мере до тех пор, пока среда выполнения не станет достаточно стабильной (сейчас очень часто меняются), а затем ОС телефона будет содержать несколько версий, и мы не будем включать ее в приложение.

Кроме того, не пугайтесь размера приложения. Фактический размер приложения, загружаемого пользователем, намного меньше. Вы можете увидеть его на вкладке активности iTunesConnect, а затем выбрать свою сборку, как только вы ее загрузите там, очевидно. Я видел приложения, которые загружают как 120 МБ или около того в iTunesConnect, а затем окончательная загрузка для пользователя составляет от 20 до 30 МБ.

Изменить после получения дополнительной информации: Вы сказали, что сравниваете перетаскивание источников библиотек в ваш проект против cocoapods, и здесь есть явная разница: если вы добавляете исходные файлы библиотеки, это не то же самое, что добавлять скомпилированную фреймворк для библиотеки. Если вы добавите источники, многие неиспользуемые материалы будут оптимизированы, что повлияет на размер. Пример этого - когда библиотека включает категорию, которую сама библиотека не использует. Если не используются некоторые флаги компоновщика, категория оптимизирована и она не работает в приложении с помощью библиотеки (вы можете искать all_load, если хотите получить дополнительную информацию). При использовании фреймворков ничего не оптимизируется, но этого не происходит из-за Cocoapods. Вы можете использовать фреймворки без Cocoapods, и вы должны получить точно такие же результаты относительно размера.