Создание статического фреймворка для OS X

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

Я недавно начал заниматься программированием на OS X, и первое, что я заметил, это то, что статические фреймворки, похоже, недоступны. Динамические фреймворки, очевидно, доступны и рекомендуются, но, поскольку я хочу сделать небольшую приватную фреймворк, предназначенный для использования в приложениях (не для установки в /Library/Frameworks), использование динамического фреймворка в новых проектах приложений все еще требует нескольких дополнительных шагов.

В моем идеальном мире я бы создал статический фреймворк (фреймворк, содержащий заголовочные файлы и скомпилированный .a файл), перетащите фреймворк на новый проект и начните кодировать. Есть ли способ сделать такой статический каркас на OS X?

PS Я уже пытался установить тип вывода Mach-O на "статическую библиотеку" в обычном фреймворковом проекте, но я просто получаю ошибку Framework target has invalid MACH_O_TYPE value of 'staticlib'.,

2 ответа

Вы можете создать динамический фреймворк в Mac OS X. В вашем динамическом фреймворке вы можете установить для LD_DYLIB_INSTALL_NAME значение @rpath/Foo.framework/Versions/A/Foo

Если у вас есть приложение, которое хочет связать с этим фреймворком, убедитесь, что вы запустили

  install_name_tool -add_rpath <rpath> <full-path-to-app-binary>

Так что, если бы у меня был Foo.app

  install_name_tool -add_rpath Foo.app/Contents/Library Foo.app/Contents/MacOS/Foo 

Теперь, если вы просто скопируете свою Foo.framework в Contents/Library, она должна загрузиться и все должно работать.

Надеюсь, это поможет.

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

Если вы используете статическую библиотеку, Xcode удалит мертвый код, который на самом деле не нужен вашему приложению, но скомпилирован в статическую библиотеку.

Статические платформы на самом деле не поддерживаются в OS X. Они все равно довольно хрупкие и решают конкретную проблему, которая существует в iOS, но не в OS X.

Если вы хотите облегчить разработчикам использование созданной вами библиотеки, у вас есть несколько вариантов:

  1. Используйте Cocoapods. У них есть учебник для публикации вашей библиотеки на CocoaPods. Это, вероятно, самый простой способ распространения библиотеки на OS X.
  2. Упакуйте свою библиотеку как основу. Если вы правильно установили имя установки (в @rpath/<library name>), нижестоящий разработчик просто должен скопировать платформу в свой проект Xcode и установить путь поиска во время выполнения своего приложения на @executable_path/../Frameworks).
Другие вопросы по тегам