Экспорт интерфейса платформы

Когда Вы создаете платформу или приложение с помощью 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 сделайте следующее:

  1. Откройте свой проект в XCode.

  2. Добавьте свой файл экспорта к проекту и поместите его в группу Ресурсов.

  3. Откройте окно Info цели платформы и нажмите Build.

  4. Установите Экспортируемую установку сборки Файла Символов в имя Вашего файла экспорта.

    Можно определить местоположение этой установки сборки путем выбора All из всплывающего меню Наборов и ввода его имени в поле поиска.

Если Вы хотите экспортировать все символы за исключением ограниченного подмножества, можно использовать Неэкспортируемую установку сборки Файлов символов, чтобы сделать так. Создайте свой файл символов как прежде, но на сей раз включайте список символов, которые Вы не хотите экспортировать. В Соединении настроек сборки для цели найдите установку Unexported Symbol Files и установите ее значение в имя Вашего файла.

Если Неэкспортируемая установка сборки Файлов символов не присутствует, поскольку это не могло бы быть на версиях XCode до v2.2, можно использовать “Другую сборку” флагов компоновщика, устанавливающую вместо этого. Для сокрытия ряда символов установите значение той установки сборки в следующий текст, заменив exports_filename с именем файла экспорта:

-unexported_symbols_listexports_filename