Ответ 1
Я никогда не использовал "Встроенные библиотеки", а вместо этого использовал фазу копирования для копирования всех необходимых сторонних библиотек и созданных различными целями в проекте. Вы можете просто перетащить dlilibs, которые вы хотите скопировать, из узлов контура "Рамочные" и "Продукты" в эту фазу копирования (или добавить их с помощью кнопки "+"). XCode также автоматически подпишет каждую библиотеку, если она включена (что по умолчанию):
Также взгляните на настройку "Каталог установки". Вы должны установить это значение @executable_path/../Frameworks (при условии, что это ваша фактическая папка фреймворка, по крайней мере, рекомендуемая). Это значение используется XCode для установки идентификатора вашего dylib и важно для правильной загрузки
Вы также можете использовать такой инструмент, как MacDependency, чтобы проверить детали ваших .app
, .dylib
и .framework
. Он также покажет вам, от каких библиотек зависят другие библиотеки и по какому пути они их ожидают. Этот путь должен совпадать с идентификатором связанной библиотеки, иначе загрузка не удастся.
Еще один очень полезный инструмент - это otool, который поставляется с XCode. Это дает аналогичную информацию, как MacDependency и многое другое. Вот список зависимостей для dylib с ожидаемыми им путями и версиями:
Mikes-iMac:Debug mike$ otool -L libcdbc.dylib
libcdbc.dylib:
@executable_path/../Frameworks/libcdbc.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libwbbase.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libgrt.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libgmodule-2.0.0.dylib (compatibility version 3401.0.0, current version 3401.2.0)
@executable_path/../Frameworks/libgthread-2.0.0.dylib (compatibility version 3401.0.0, current version 3401.2.0)
@executable_path/../Frameworks/libglib-2.0.0.dylib (compatibility version 3401.0.0, current version 3401.2.0)
@executable_path/../Frameworks/libmysqlcppconn.7.1.1.8.dylib (compatibility version 7.0.0, current version 7.1.1)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Другое обсуждение путей загрузчика здесь: Как установить dyld_library_path в Xcode.
Если ваше приложение или созданная вами библиотека ожидают, что dylibs будут находиться в системном расположении, а не в относительном, это может означать, что вы связали с ним неправильную библиотеку. На этапе сборки "Link Binary" вы можете выбрать библиотеки для ссылки, а в диалоговом окне выбора перечислены все цели вашего проекта. Кроме того, для списка компоновщиков вы можете просто перетащить dylib из узла "Продукты" в схему проекта, чтобы выполнить настройку. Также для таких библиотек справедливо требование установить правильный путь. Вы можете сделать это с помощью скрипта, который изменяет идентификатор после фазы копирования, или вы храните копию этих библиотек где-то еще, измените их идентификаторы один раз (например, после того, как вы их загрузили) и скопируйте их оттуда в ваше окончательное приложение.