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