Bundle framework с приложением в XCode - PullRequest
21 голосов
/ 25 октября 2009

Я новичок в XCode. Я пытаюсь следовать этим инструкциям . Очевидно, что я что-то упускаю, потому что, хотя я вижу, что требуемая среда была скопирована в комплект приложений, я не могу ссылаться на нее.

Когда я запускаю приложение с компьютера, отличного от моего (или если я удаляю OpenCV из / Library / Frameworks /), я получаю следующую ошибку:

Сообщение об ошибке Dyld: библиотека не нагрузить: /Users/david/Library/Frameworks/OpenCV.framework/Versions/A/OpenCV Ссылка от: /Users/g/Demo/Slates/ClipSplitter/build/Release/ClipSplitter.app/Contents/MacOS/ClipSplitter Причина: изображение не найдено

В моей системе нет пользователя "Дэвид", если это что-то меняет. Также это готовый OpenCV, загруженный из Интернета. ( Вот скриншот проекта в соответствии с просьбой в комментариях.)

Ответы [ 3 ]

30 голосов
/ 31 октября 2009

Когда OpenCV.framework был собран, он был настроен на использование пути установки /Users/david/Library/Frameworks/.

Поскольку вы хотите использовать библиотеку в качестве частного фреймворка (установленного в оболочке приложения на ClipSplitter.app/Contents/Frameworks/OpenCV.framework), вам необходимо изменить путь установки. Это можно легко сделать с помощью терминала следующим образом:

$ install_name_tool -id @executable_path/../Frameworks/OpenCV.framework/OpenCV <your_path>/OpenCV.framework/OpenCV

Конечно, вы должны скорректировать путь последнего аргумента.

Теперь, когда вы связываете ваше приложение, ваша измененная платформа сообщает компоновщику, что dyld должен искать OpenCV.framework в оболочке приложения вашего приложения (в каталоге ClipSplitter.app/Contents/Frameworks).

Теперь вам нужно скопировать OpenCV.framework в оболочку вашего приложения. Вы можете сделать это как часть процесса сборки, добавив фазу сборки файлов копирования: щелкните правой кнопкой мыши по своей цели, выберите Add-> New Build Phase-> New Copy Files Build Phase. Выберите «Frameworks» во всплывающем окне «Destination» и закройте диалоговое окно.

Ваша цель теперь будет содержать новую фазу, к которой вы можете добавить OpenCV.framework, перетаскивая значок из Навигатора проектов в левой части окна XCode. Обратите внимание, что XCode не позволит вам добавить папку в фазу «Копирование файлов» с помощью кнопки «+», поэтому для копирования инфраструктуры вам придется ее перетащить и отпустить.

6 голосов
/ 31 октября 2009

Вам необходимо установить параметр сборки "Каталог установки" на @executable_path/../Frameworks

См. Главу о встраивании частной инфраструктуры в комплект приложений в https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

Привет

2 голосов
/ 21 мая 2014

Используя Xcode 5, вы можете упростить это, используя панель Build Phases вашей цели приложения.

По умолчанию эта панель имеет вид

Нажатием «+»Кнопка под Копировать файлы , вы можете добавить вашу платформу в виде файла, который будет скопирован в Frameworks в вашем комплекте приложений.

Теперь, когда вы строите, ваши фреймворки будут скопированы в ваш пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...