2013-05-10 9 views
7

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

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

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

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

+0

Статические библиотеки на самом деле не являются объектами OS X. Они используются только в iOS, потому что динамическая загрузка сложна (может быть, даже невозможна?) в подписанных приложениях. Используйте динамические структуры, следуя инструкциям, которые вы указали. – duskwuff

+1

«Статические библиотеки на самом деле не на OS X». это не правда. –

+0

Почему бы просто не построить статическую библиотеку? – mipadi

ответ

1

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

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

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

Вы можете создать динамическую структуру на Mac OS X. В рамках динамического вы можете установить LD_DYLIB_INSTALL_NAME как @ RPATH/Foo.framework/Версии/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 

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

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

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

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

+0

... 'вы можете иметь Xcode скопировать заголовки для вас автоматически.'. Это действительно звучит очень близко к тому, что я хочу. Как мне это сделать? Могу ли я просто скопировать Xcode в системный каталог? – nneonneo

+0

Вы можете просто скопировать заголовки Xcode в папку сборки. Если я не ошибаюсь, ваш каталог сборки является частью пути поиска заголовка. – dimitrirostavo

Смежные вопросы