Относительные пути, не работающие в XCode C++

Нажатие на координаты не рекомендуется, так как это может привести к противоречивым результатам. Лучше всего найти идентификатор элемента или Xpath элемента, на котором вы хотите щелкнуть.

Вы можете использовать Appium Desktop , чтобы найти xpath или идентификатор элемента для запрошенного элемента

30
задан Brock Woolf 18 January 2010 в 10:42
поделиться

4 ответа

Взял меня приблизительно 5 часов Google и пробующий разные вещи для окончательного нахождения ответа!

#ifdef __APPLE__
#include "CoreFoundation/CoreFoundation.h"
#endif

// ----------------------------------------------------------------------------
// This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle
#ifdef __APPLE__    
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
    char path[PATH_MAX];
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
    {
        // error!
    }
    CFRelease(resourcesURL);

    chdir(path);
    std::cout << "Current Path: " << path << std::endl;
#endif
// ----------------------------------------------------------------------------

я бросил, некоторые дополнительные включают защиту, потому что это заставляет его скомпилировать Apple только (я разрабатываю кросс-платформенный), и делает код более хорошим.

я благодарю другие 2 парней за Ваши ответы, Ваша справка в конечном счете заставила меня на правильном пути находить этот ответ, таким образом, я проголосовал за Вас обоих.Спасибо, ребята!!!!

62
ответ дан Brock Woolf 27 November 2019 в 23:22
поделиться

Мое предположение является типом приложения, которое Вы создаете, одноразовый исполняемый файл вместо того, чтобы быть исполняемым комплектом приложений. На OS X и Unixes в целом, ресурсы загружаются из абсолютного корня диска, который отличается, чем обработка Visual C++ "корня", являющегося путем относительно корня проекта. Не полагайтесь на путь, никогда являющийся относительно ничего в особенности через Ose (или версии ОС в этом отношении). Можно установить рабочий каталог в XCode, но это только повлияет на приложения, запущенные от XCode. Если бы необходимо было выполнить его от каталога сборки в Средстве поиска, то это было бы еще раз установлено на корень диска.

2
ответ дан wisequark 27 November 2019 в 23:22
поделиться

Не зависьте от текущего рабочего каталога в двоичном коде. Просто не делайте. Вы не можете доверить операционную систему или оболочку для установки его туда, где Вы ожидаете, что это будет установлено, на Mac, Windows или Unix.

Для прямого C, используйте _NSGetExecutablePath в dyld.h для получения пути к текущему исполняемому файлу, затем можно пойти родственник оттуда.

, Если Вы просто экспериментируете и хотите, чтобы это работало в XCode, выбирают Project> Edit Active Executable, и существует панель там, в которой можно установить первоначальный рабочий каталог на каталог проекта, родительский каталог исполняемого файла или любой произвольный каталог. Это должно только использоваться для тестирования. В Mac OS, когда Вы пишете реальное приложение и запускаете его от Средства поиска, рабочий каталог/. И для приложений Unix Вы не имеете никакого контроля вообще над тем, каков рабочий каталог.

12
ответ дан smokris 27 November 2019 в 23:22
поделиться

Просто комментарий об относительных путях и XCode.

я недавно заметил что, если бы ваше приложение не имеет никаких файлов, которые были бы скопированы в папку ресурсов, текущий рабочий каталог собирается быть тем из фактических .app - например, на уровне: myApp.app

Однако, если вы добавляете файл к своему проекту и скопировали его в папку Resources вашего комплекта приложений, он устанавливает cwd быть 3 уровнями глубоко в .app., например, на уровне myApp.app/Contents/MacOS/myApp

, Это кажется XCode, пытается быть умным для вас и принимает, нет ли у вас ресурсов в вашем комплекте приложений затем, вы хотели бы загрузить файлы a .app уровень а не внутренний исполнимый уровень.

Это сохраняется, даже когда приложение запускается от Средства поиска. Таким образом, возможно, другая причина избежать относительных путей.

0
ответ дан 27 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

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