Как найти постоянный каталог пакета приложения OS X - программно - PullRequest
2 голосов
/ 03 ноября 2010

У меня есть приложение OS X в виде пакета .app, которое может находиться в любом произвольном месте в файловой системе.Есть ли способ найти текущий путь пакета программно с помощью.

NOTE

getcwd () не работает, так как текущий каталог всех открытых пакетов - через нажатие кнопки open илис помощью открытой команды "/".Если я вызываю исполняемый файл из myapp.app/Contents/MacOS, каталог отображается правильно.Это приложение какао.

Любые подсказки?

Ответы [ 2 ]

7 голосов
/ 03 ноября 2010

Вы можете найти местоположение .app по [[NSBundle mainBundle] bundleURL]; или [[NSBundle mainBundle] bundlePath];.

Однако вы, вероятно, захотите получить доступ к ресурсам внутри .app, пройдя через NSBundle, чтобы найтиих в большинстве случаев (это касается таких вопросов, как локализация).

Примечание: Если вы планируете изменить комплект приложений; не. Вы не должны, не можете и не должны предполагать, что у вас есть права на запись в пакет приложений;и если вы это сделаете, то, скорее всего, что-то очень не так.

Редактировать: Интересно, если вы пишете программу на C для OS X и вам нужно найти местоположение исполняемого файла;Вы можете использовать непереносимое главное объявление, например:

int main (int argc, const char *argv[], const char *env[], const char *path[]) {
  // path[0] now contains the path to the executable
  // NOT PORTABLE! OS X ONLY!
  return 0;
}
2 голосов
/ 16 октября 2012

Начиная с версии argv[0], указанной выше, вы также можете получить путь от:

    NSArray* arguments = [[NSProcessInfo processInfo] arguments];

    NSString* exe = [args objectAtIndex:0];

из init или applicationDidFinishLaunching

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...