Статическая библиотека префиксов iOS


person Liyan Chang    schedule 16.07.2012    source источник
comment
Я также буду использовать CocoaPods, чтобы они обрабатывали зависимости для тех, у кого они есть, но хотели бы иметь возможность распространять фреймворк, отличный от CocoaPods.   -  person Liyan Chang    schedule 17.07.2012
comment
Одно слово: НЕТ! Нет ничего плохого в наличии внешних зависимостей.   -  person Till    schedule 17.07.2012
comment
Мне кажется, что многие фреймворки делают это, чтобы упростить установку. Один пример: Dropbox переименовал SBJson в DBJson.   -  person Liyan Chang    schedule 17.07.2012
comment
Нет простого способа сделать это. Тщательный поиск и замена работали в прошлом для меня.   -  person kels    schedule 18.09.2012


Ответы (1)


Единственное безопасное решение (кроме того, чтобы вообще этого не делать) — строить любые зависимости с префиксом для всех символов.

Самый простой метод префикса — классический «найти и заменить». Это подвержено ошибкам, поэтому рекомендуется нажать .a с помощью nm -a и просмотреть результаты на предмет любых символов без префикса.

Второй, гораздо более безопасный метод — использовать двухпроходный процесс компиляции.

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

Для справки, мы используем это с Nimbus для создания заголовков префикса Nimbus: https://github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header

Это позволяет вам распространять .framework со встроенной версией Nimbus с префиксом.

Теперь вы можете связать полученный файл .a со своей структурой и безопасно избежать любых конфликтов компоновщика, когда сторонний разработчик неизбежно связывает свою собственную версию зависимости со своим проектом.

person featherless    schedule 13.10.2013
comment
Это здорово, как и ваш репозиторий iOS-Framework. Было бы здорово, если бы вы каким-то образом добавили это в репозиторий. Большое спасибо за оба! - person aranasaurus; 05.11.2013
comment
Я хотел бы увидеть раздел об этом, с немного более подробной информацией для новичков. - person Paul Solt; 15.11.2013
comment
Я написал статью, в которой эта тема рассматривается более подробно, если кому-то интересно: pdx.esri.com/blog/2013/12/13/namespacing-dependencies - person aranasaurus; 13.02.2014
comment
Ваша запись потрясающая, хотя я обнаружил, что она не совсем работает, когда вашими внешними зависимостями были другие библиотеки .a. На самом деле он не связывает все эти символы из .a с вашей целью ext, пытаясь придумать способ обойти это. - person Matt Foley; 17.07.2014
comment
См. новый ответ на часто задаваемые вопросы на Как мне включить сторонние библиотеки в мою платформу? подробнее об этом. - person featherless; 17.07.2014
comment
@featherless: небольшая ошибка с генерацией вашего пространства имен: в вашем пространстве имен строк вы исключаете на основе .eh. Поскольку grep принимает регулярные выражения, это будет соответствовать любой строке, содержащей eh в середине. Точка должна быть экранирована, чтобы соответствовать правильно. Кроме того, сценарий работает замечательно. - person David Liu; 24.01.2015
comment
Использует ли решение Nimbus методы категории пространства имен? - person malhal; 09.07.2016
comment
@aranasaurus Я довольно долго следил за вашим блогом, но у меня ничего не получилось. Будет здорово, если вы предоставите образец проекта. Спасибо - person Cullen SUN; 23.08.2016