Связывание фреймворков с плагинами QuickLook - PullRequest
6 голосов
/ 22 апреля 2011

Я пытаюсь написать генератор QuickLook. Для этого мне нужно создать ссылку на созданную мной структуру. Однако, как только я сделаю ссылку на указанную платформу, qlmanage отказывается загружать мой плагин, сказав мне:

[ERROR] Can't load plug-in at /path/to/my-ql.qlgenerator: The bundle “my-ql” couldn’t be loaded because it is damaged or missing necessary resources.

Я прочитал все соответствующие учебные пособия по Linking, Frameworks и QuickLook, но не нашел ответа.

Вещи, которые я выяснил / исключил до сих пор

  • Архитектура: при включении Framework в виде 32-разрядного двоичного файла весь процесс компоновки завершается сбоем, поэтому это не является проблемой.
  • Я подтвердил, что Framework копируется в комплект плагина под Contents/Frameworks.
  • Путь установки фреймворка установлен на @executable_path/../Frameworks

Также при использовании фреймворка в другом приложении все идет хорошо. Единственное возможное объяснение, которое я могу понять, заключается в следующем: при выполнении qlmanage, @executable_path фактически указывает на этот двоичный файл, и поэтому мой фреймворк никогда не найден. Если это так, как я должен установить путь установки, чтобы разрешить расположение относительно плагина? Я не хочу устанавливать мою платформу глобально.

EDIT

otool -L на встроенном плагине QuickLook выдает следующее:

/System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook (compatibility version 1.0.0, current version 327.4.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler (compatibility version 1.0.0, current version 1.0.0) <== *this is my framework*
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)

otool -D в моем фреймворке выдает это:

@executable_path/../Frameworks/PESHandler.framework/Versions/A/PESHandler

Framework не требует сборки мусора.

Ответы [ 2 ]

7 голосов
/ 29 апреля 2011

@ executetable_path преобразуется в основной исполняемый образ процесса. Это был бы демон quicklook, а не ваш плагин. Вместо этого вы должны использовать @loader_path.

Вот сообщение в блоге , охватывающее это.

1 голос
/ 28 апреля 2011

Вы не говорите, если приложение, в котором вы использовали ваш фреймворк, требует сборки мусора.Также вы не говорите, если ваша структура требует этого.Возможно, вы пытаетесь скомпилировать генератор Quick Look, используя сборку мусора.Но «генераторы Беглого взгляда не скомпилированы с включенной сборкой мусора», согласно ответу Николаса Райли на это сообщение .Это само по себе может объяснить, почему, как вы говорите, «весь процесс связывания не работает», если действительно это то, что вы пытаетесь.устраните зависимость от сборки мусора (если, опять же, это так), но ваша среда может потребовать доработки для использования в генераторе Quick Look.

...