2013-05-08 5 views
1

У меня есть приложение на основе OS X FUSE (т.е. у меня есть собственная файловая система на базе OS X FUSE). Когда OSXFUSE установлен, я могу, конечно, включить OSXFUSE.framework из/Library/Frameworks. Однако когда я распространять приложения я не могу ожидать, что пользователь уже он установлен, поэтому я попытался включить рамки с расслоением следующим образом:Включая фреймворк OSXFUSE в проект XCode

  • перетащил рамки из/Library/Frameworks моего проекта
  • создал новый этап копирования файлов сборки (с целевыми рамочные)
  • добавлены рамки для этой фазы копия сборки

Однако, когда я бегу, что в системе без плавкой установлен я получаю сообщение об ошибке:

dyld: Library not loaded: /Library/Frameworks/OSXFUSE.framework/Versions/A/OSXFUSE Referenced from: /Users/me/Library/Developer/Xcode/DerivedData/

Не следует ли предотвратить фазу сборки копии? Что мне здесь не хватает?

+0

Первое, что нужно проверить, конечно, если структура фактически был скопирован в приложение пачке. Вы пытались использовать «Показать содержимое пакета» у искателя в комплекте приложений? Альтернативно, 'cd' в пакет из терминала. Затем вам может потребоваться установить правильные пути ссылок (в то время как я коснулся этого). См. Мой комментарий о закрытом голосовании. – Monolo

+0

Довольно уверен, что это обман этого: [Как создать рабочую среду с файлами dylib в Xcode 4] (http://stackoverflow.com/questions/7562793/how-do-create-a-working -framework-with-dylib-files-in-xcode-4) – Monolo

+0

Да, фреймворк фактически скопирован в пакет приложений (в папку Frameworks). Я прочитал ваши связанные вопросы, и я добавил '@loader_path /../ Frameworks' в« Путь поиска пути », но это не имело никакого эффекта ... – codingFriend1

ответ

1

Я, наконец, узнал, что я могу сказать XCode явно слабо связать фреймворк, изменив флаг required на optional.

Это можно сделать в Project Overview > Target > Linked Frameworks and Libraries. Рядом с каждой структурой находится выпадающее меню, в котором вы можете выбрать optional.

Change link status for framework

Так что мой вопрос на самом деле является дубликатом этого How do I weak link frameworks on Xcode 4?

0

Я считаю, что для платформы OSXFuse необходим соответствующий модуль ядра. Это необходимо установить отдельно, поэтому вам придется собрать пакет установщика, который сначала устанавливает модуль ядра и панель настроек, а затем устанавливает ваше приложение.

Кроме того, вы можете уведомить пользователя о том, что модуль необходимо установить отдельно и предоставить ссылку для загрузки или что-то в этом роде.

+0

Я думал, что фактическая цель динамических библиотек/фреймворков состоит в том, что они слабо связаны.Я включаю установщика, но как я могу уведомить пользователя о пропавшей библиотеке FUSE, когда мое приложение даже не запустится. То, что я хотел бы сделать, это проверить установку FUSE во время выполнения и попросить установить его, если он отсутствует. Как я могу это сделать? Я не хочу иметь установщик для своего приложения, потому что компонент FUSE не является обязательным. – codingFriend1

+0

Да, DLL и их эквивалент OSX предназначены для включения связывания во время выполнения, но это не означает, что наличие библиотеки является необязательным. Что касается вашей конкретной проблемы, возможно, вы можете добавить отдельный исполняемый файл, чтобы проверить, есть ли библиотека, и запустить приложение, если оно есть, или попросить пользователя загрузить его, если это не так. – dandan78

+0

Я вижу. Спасибо за ответ. У меня уже есть отдельный исполняемый файл, чтобы проверить установку и предложить загрузку. Я просто надеялся, что могу поместить все в одно приложение и проверить во время выполнения ... – codingFriend1

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