Я создал собственный фреймворк в iOS с swift4 в Xcode 9.2. Фреймворк содержит 9 файлов .swift, когда я попытался заархивировать и создать файл .framework, результат показал размер 5 МБ. Однако файлы 9swift имеют общий размер всего 72 КБ. Заархивированный файл .framework имеет слишком большой размер (5 МБ), с чем мой клиент не согласен.
Я попытался удалить нежелательный код, но размер остался прежним, они хотят, чтобы я сделал его похожим на платформу Android, размер которой составляет всего 34 КБ. Это первый раз, когда я создаю фреймворк, и у меня нет решений. Может ли кто-нибудь помочь мне уменьшить размер фреймворка без уменьшения файлов?
Да, у меня есть связанный файл .framework, который будет работать с симулятором и с реальным устройством, надеюсь, вы имеете в виду это под термином двоичные файлы, исправьте меня, если я ошибаюсь, также предложите свой ответ, чтобы помочь мне уменьшить размер?
Да, я имею в виду двоичные файлы. Лично я считаю, что вашему клиенту не следует беспокоиться об этом, существует значительная разница в способах работы двоичных файлов для iOS и Android - но это только мое мнение.
Я должен четко знать, нет ли возможности уменьшить размер, прежде чем сообщать им об этом, поэтому я пытаюсь выяснить, есть ли что-то, что я пропустил.
Я пробовал две вещи, и они у меня сработали. Может быть, это также может быть полезно для вас.
По умолчанию компоновщик экспортирует все символы. Вы можете ограничить это с помощью некоторых обсуждаемых методов в этой статье о видимости символов. Кроме того, в компоновщике есть приятная функция, которая позволяет указать, должны ли символы экспортироваться или не экспортироваться. Экспорт только символов интерфейса может помочь вам уменьшить размер, а ваш клиент не тратит впустую память.
Итак, на практике:
Учитывая, что мой архив фреймворка - MyFramework.framework
.
Я перечислил все символы MyFramework.framework/MyFramework
, запустив $ nm -g MyFramework.framework/MyFramework
, и выбрал символы, которые мой двоичный файл необходимо экспортировать (символы, к которым мой клиент должен будет получить доступ).
Все выбранные символы были сохранены в текстовом файле. Итак, предполагая, что среди всех перечисленных символов вам нужно сохранить в текстовый файл только те, которые вам нужны (нужны вашему клиенту).
Откройте проект MyFramework
и установите Build Settings -> Exported Symbols File
так, чтобы он указывал на только что созданный текстовый файл.
Имея двоичный код в руках, вы можете вырезать некоторые символы с помощью strip -N MyFramework.framework/MyFramework
.
В моем случае я мог бы добиться чего-то хорошего, но думаю, что это может меняться от проекта к проекту. Кроме того, я имел дело с Objective-C. Я сделал образец Swift-проекта с достигнутыми результатами. Вы можете проверить это на https://github.com/gbazilio/ios-framework-size.
Надеюсь, это поможет вам, как и мне.
Не могли бы вы объяснить мне процесс по шагам, как вы этого добились. с начала создания универсальной мишени.
(1) Вы получаете оригинальный .framework
, как указано в шаге №1. (2) Вы запускаете nm -g ABC.framework/ABCBinary
, чтобы получить все экспортированные символы. (3) Вы удаляете ненужные символы. Вы должны выбрать только те, с которыми будет взаимодействовать ваш клиент. (4) Вы сохраняете это в текстовом файле и устанавливаете путь к нему в Build Settings -> Exported Symbols File
. (5) Вы перестраиваете свой .framework. Затем вы можете снова запустить nm -g ABC.framework/ABCBinary
, чтобы проверить, изменились ли экспортированные символы соответствующим образом. (6) Затем вы выполняете шаг полосы, упомянутый в исходном ответе.
Можете ли вы подробнее рассказать о шагах 1 и 2?
Я взглянул на Размер рамки и Понимание размера фреймворка iOS, и мне просто интересно, есть ли у вас просто несколько двоичных файлов, включенных в структуру - насколько я понимаю, вам не нужно удалять их или иным образом делать что-либо, как это делает Apple со своей стороны - но я мог ошибаться