Путаница с файлами Xcode

Я пишу небольшую программу на C++ для Xcode 5 для удовольствия, но я впервые использую Xcode, и меня смущает то, как Xcode обрабатывает пути при открытии файлов, включенных в проект. Я использую инфраструктуру SDL2_image, и когда я хочу загрузить изображение, которое я включил в проект, я просто делаю это, и оно находит изображение очень хорошо:

IMG_LoadTexture(renderer, "image_name.png");

Тем не менее, это, кажется, не работает в другом месте. Я пытаюсь загрузить XML-файл с libxml2, но этот код:

xmlDocPtr doc = xmlParseFile("doc_name.xml");

Просто результаты в этом:

I/O warning : failed to load external entity "doc_name.xml"

Подобные вещи случаются, когда я пытаюсь использовать другие способы загрузки файлов. Я не уверен, что это из-за того, что фреймворк SDL2_Image делает что-то особенное, или потому что у меня есть другое фундаментальное недопонимание того, как все работает. Все файлы должны быть включены одинаково, я просто щелкнул правой кнопкой мыши на проекте и выбрал "Добавить файлы в...". После компиляции они отображаются в папке "Contents/Resources" приложения. Я видел другие вопросы о stackru о том, как открывать файлы в комплекте (я предполагаю, что это папка с содержимым?), Но я запутался, почему мне не пришлось делать ничего, что эти ответы предлагают, чтобы это работало с материалом SDL_Image.

Я был бы очень признателен за любую помощь с этим. Я до сих пор исправлял все свои проблемы с волшебными настройками сборки из Интернета, которые я не понимаю, поэтому любое объяснение, которое показывает, как я мог бы выяснить это для себя, так что в следующий раз я мог бы быть высоко оценено

[ОБНОВЛЕНИЕ] Если я использую путь "Application_Name.app/Contents/Resources/file_name", я могу получить доступ к файлу. Однако я не понимаю, почему я должен делать это со всем, кроме библиотеки SDL2_Image, и я не хочу, чтобы мои пути зависели от имени приложения.

1 ответ

Решение

Вариант 1) Я думаю, что проблема здесь не в коде C++, а в расположении файла. В XCode бинарные программы встроены в расположение файла Executables. Вы должны настроить фазы сборки для копирования вашего входного файла в папку "Исполняемые файлы" через "Копировать ресурсы комплекта". Смотрите документацию Apple

Вариант 2) В качестве альтернативы вы можете работать с жестко запрограммированными путями и создать установщик, который быстро выполняется в bash, и запуск сценария может быть легко реализован в редакторе схем XCode на каждом этапе.

Вариант 3) Используйте CoreFoundation и макрос компилятора следующим образом: Относительные пути не работают в Xcode C++

Другие вопросы по тегам