Есть ли способ для программы на C ++ или Objective-C определить, запускается ли она как приложение командной строки (например, с ./myprog
в оболочке) или как пакет приложений (например, двойным щелчком по.app в Finder или open myprog.app/
в терминале)?
В настоящее время я использую следующее.
CFBundleRef bundle = CFBundleGetMainBundle();
CFURLRef bundleUrl = CFBundleCopyBundleURL(bundle);
char bundleBuf[PATH_MAX];
CFURLGetFileSystemRepresentation(bundleUrl, TRUE, (UInt8*) bundleBuf, sizeof(bundleBuf));
На данный момент bundleBuf
теперь содержит путь к.app bundle или каталог, содержащий исполняемый файл командной строки.Я могу проверить, заканчивается ли строка ".app"
, но это хакерство.Есть ли лучший способ сделать это?