Экспорт интерфейса платформы
Когда Вы создаете платформу или приложение с помощью XCode, компоновщик экспортирует все символы, определенные в коде по умолчанию. Для поставляющей платформы со многими символами это может привести к проблемам производительности во время выполнения. Когда платформа загружается, редактор динамического канала загружает символы, связанные с платформой. Если платформа содержит много закрытых функций, символы для тех закрытых функций не будут используемыми, но все еще загружаются вместе с символами для государственных функций. Загрузка этих дополнительных символов не только тратит впустую память, она также требует, чтобы больше работы обошло список во время поиска символа.
В XCode можно ограничить символы, экспортируемые исполнимой программой путем указания файла экспорта в опциях компоновщика.
Создание файла экспорта
Файл экспорта является простым текстовым файлом (.txt
или другое расширение текстового файла), который содержит список символов, которые Вы хотите экспортировать. Для создания файла добавьте новый пустой файл к проекту XCode. К этому файлу добавьте список символов, которые Вы хотите экспортировать, один символ на строку.
Для ANSI код на базе С можно обычно просто снабжать префиксом символ подчеркивания к имени функции или переменной для получения имени символа. Для языков как C++, использующий искаженные имена символа, Вы, возможно, должны работать nm
инструмент для получения списка существующих имен символа. Выполненный nm
с -g
опция видеть в настоящее время экспортируемые символы. Можно тогда скопировать вывод с инструмента и вставить его в файл экспорта, удалив любую постороннюю информацию. Следующий текст показывает некоторый демонстрационный вывод для платформы Какао, сгенерированной nm
:
U .objc_class_name_NSDate |
b000ad54 T _InitCocoaFW |
b000aea8 T _addNumbers |
b000ade8 T _getInitDate |
U _objc_msgSend |
Экспортировать функции платформы указало в этом выводе, Вы создали бы текстовый файл с этим текстом:
_InitCocoaFW |
_addNumbers |
_getInitDate |
Можно временно удалить символ из файла экспорта путем помещения знака фунта в начале строки, содержащей символ. Например, следующий текст временно удаляет _getInitDate
функция из списка экспорта:
_InitCocoaFW |
_addNumbers |
#_getInitDate |
Указание файла экспорта
Для указания файла экспорта для платформы в XCode сделайте следующее:
Откройте свой проект в XCode.
Добавьте свой файл экспорта к проекту и поместите его в группу Ресурсов.
Откройте окно Info цели платформы и нажмите Build.
Установите Экспортируемую установку сборки Файла Символов в имя Вашего файла экспорта.
Можно определить местоположение этой установки сборки путем выбора All из всплывающего меню Наборов и ввода его имени в поле поиска.
Если Вы хотите экспортировать все символы за исключением ограниченного подмножества, можно использовать Неэкспортируемую установку сборки Файлов символов, чтобы сделать так. Создайте свой файл символов как прежде, но на сей раз включайте список символов, которые Вы не хотите экспортировать. В Соединении настроек сборки для цели найдите установку Unexported Symbol Files и установите ее значение в имя Вашего файла.
Если Неэкспортируемая установка сборки Файлов символов не присутствует, поскольку это не могло бы быть на версиях XCode до v2.2, можно использовать “Другую сборку” флагов компоновщика, устанавливающую вместо этого. Для сокрытия ряда символов установите значение той установки сборки в следующий текст, заменив exports_filename с именем файла экспорта:
-unexported_symbols_list
exports_filename