Добавление большой статической библиотеки в качестве cocoapod или непосредственное добавление ВСЕХ объектных файлов в результирующий двоичный файл из-за флага -ObjC linker

ПРОБЛЕМА: Соединение с моей библиотекой добавляет 2 МБ в двоичный файл.

Я пытаюсь распространить свою собственную статическую библиотеку на iOS. Моя библиотека зависит от модулей KSCrash и ProtobufObjc. Стручки скомпилированы в своих собственных целях, а затем как статические библиотеки (libabc.a) связаны с целевым приложением - это обычная процедура для работы с cocoapods. В компоновщик передается флаг '-ObjC', который заставляет ВСЕ объектные файлы из KSCrash и Protobuf извлекаться в полученный двоичный файл приложения. В моем коде есть файлы, которые содержат только категории, поэтому я не могу удалить эти флаги без последствий. Вытягивание этих двух библиотек добавляет до 1,5 МБ к полученному двоичному размеру приложения. Если я добавлю ссылку без '-ObjC', добавленный размер будет примерно наполовину меньше - потому что флаг dead_stip, который, я полагаю, работает, только если нет флагов '-ObjC', 'load_all' и т. Д.

Вопрос: Как я могу заставить работать 'dead_strip' или любой другой механизм, не теряя при этом категории Objective-C?

примечание 1: я не могу позволить себе зачистку символов, потому что мне нужна символика на устройстве.

Примечание2: Регенерация кода protobuf с флагом LITE не уменьшает размер, я думаю, что я должен использовать версию C++, чтобы она работала.

1 ответ

-force_load Флаг линкера должен решить вашу проблему. Из документации Apple:

-all_load заставляет компоновщик загружать все объектные файлы из каждого архива, который он видит, даже без кода Objective-C. -force_load доступен в Xcode 3.2 и позже. Это позволяет лучше контролировать загрузку архива. Каждый параметр -force_load должен сопровождаться путем к архиву, и каждый объектный файл в этом архиве будет загружен.

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

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