Вопрос по macos, frameworks, xcode, bundle – Встраивание фреймворков в пакет приложений Mac

8

Я пытаюсь добавить каркасы SDL и SDL_ttf в свое приложение, и я сделал это обычным способом: добавил их в "Link Binaries with Libraries". раздел и добавлен этап копирования файлов, который копирует их в каталог Frameworks. Это создает пакет приложений со встроенными фреймворками. Однако, когда я запускаю приложение, я получаю эту ошибку:

dyld: Library not loaded: @rpath/SDL_ttf.framework/Versions/A/SDL_ttf Referenced from: /Users/matthew.davies/Library/Developer/Xcode/DerivedData/MacHub-ambfqujqxbxyiqapaoctvsucpdeu/Build/Products/Release/MacHub.app/Contents/MacOS/MacHub Reason: image not found

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

Есть идеи, пожалуйста?

Ваш Ответ

1   ответ
5

о установить & quot; Пути поиска Runpath & quot; установить настройку для & quot; @loader_path /../ Frameworks & quot; и рамки найдены.

Почему фреймворки не ищутся автоматически в каталоге Frameworks пакета приложений, для меня это полная загадка? Ты слушаешь Apple? :)

В моем проекте исполняемый файл собирал как копии / Library / Frameworks, так и приложения Contents / Frameworks, и предупреждал, что выбор библиотеки будет неопределенным (на самом деле SDL_Mixer не работал в этой конфигурации). Этот совет также решает эту проблему.
Настоящая проблема здесь в том, что у Apple есть хорошая документация для очень простого «начала работы». использование фреймворков и подробное описание того, как все это работает, но не слишком много между & # x2026;
Нет, вопрос был в том, как приложение находит те фреймворки, которые уже упакованы в приложение. Чтобы упаковать, вы должны связаться с ними в XCode и добавить их в фазе сборки файлов копирования. Но даже если у вашего пакета приложений есть фреймворки, они не были найдены. Этот вопрос решает эту проблему. Cthutu
Просто проверяю - я хочу связать сторонние фреймворки в моем фреймворке. В настоящее время я должен предоставить своим клиентам свою платформу и каждую фреймворк, на который я ссылаюсь. Я ищу способ упаковать все это в мою инфраструктуру, поэтому моим клиентам не нужно связываться с этими сторонними платформами. Это то, что вы пытаетесь сделать в этом вопросе? Если это так, я хотел бы получить от вас дополнительную информацию. Готов задать вопрос по вашему запросу.
Если вы строите вещи так, как рекомендует Apple, она в конечном итоге будет искать@loader_path/../Frameworks/SDL.framework во-первых, так что вам это не понадобится на пути поиска. Это более безопасное решение, поскольку оно гарантирует, что ваше приложение не будет связано с неверной версией фреймворка. Если вы не делаете вещи так, как они рекомендуют & # x2026; ну, тогда вы должны изучить все виды низкоуровневых деталей. (То, что вы, вероятно, действительно хотите здесь, этоinstall_name_tool, но вероятность того, что вы сами это узнаете, не зная заранее, невелика & # x2026;)

Похожие вопросы