Как уменьшить размер моей пользовательской платформы iOS?

Я создал пользовательский фреймворк в iOS с swift4 в Xcode 9.2. Фреймворк содержит 9 файлов.swift, когда я попытался заархивировать и создать файл.framework, в результате показывается размер 5 МБ. Тем не менее, файлы 9swift полностью показывают размер файла всего 72 КБ. Архивный файл.framework слишком большой по размеру (5 МБ), с которым мой клиент не согласен.

Я пытался удалить ненужный код, но размер остался прежним, они хотят, чтобы я сделал его похожим на Android Framework, размер которого составляет всего 34 КБ. Это первый раз, когда я создаю фреймворк и у меня нет решений, может ли кто-нибудь помочь мне уменьшить размер фреймворка без уменьшения количества файлов?

1 ответ

Я попробовал две вещи, и это сработало для меня. Может быть, это также может быть полезно для вас.

Компоновщик экспортирует все символы по умолчанию. Вы можете ограничить это с помощью некоторых методов, обсуждаемых в этой статье о символьной видимости. Кроме того, в компоновщике есть приятная функция, которая позволяет указывать символы, которые нужно экспортировать или не экспортировать. Экспорт только символов интерфейса может помочь вам уменьшить размер, и ваш клиент не будет тратить впустую память.

Итак, на практике:

  1. Учитывая, что мой каркасный архив MyFramework.framework,

  2. Я перечислил все символы MyFramework.framework/MyFramework запустив $ nm -g MyFramework.framework/MyFramework и выбрал символы, которые мой двоичный файл должен был экспортировать (символы, к которым мой клиент должен был бы получить доступ).

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

  4. открыто MyFramework проект и набор Build Settings -> Exported Symbols File чтобы указать на текстовый файл, который вы только что создали.

  5. С бинарным в руках, вы можете удалить некоторые символы, используя strip -N MyFramework.framework/MyFramework,

В моем случае я мог достичь чего-то хорошего, но я думаю, что это может измениться от проекта к проекту. Также я имел дело с Objective-C. Я сделал образец проекта Swift с достигнутыми результатами. Вы можете проверить это по адресу https://github.com/gbazilio/ios-framework-size.

Надеюсь, это поможет вам, как и мне.

Другие вопросы по тегам