Есть ли лучший способ запуска того же приложения из графического интерфейса или командной строки - PullRequest
2 голосов
/ 03 января 2011

Я разработал способ запуска моего приложения Cocoa (GUI). От обычного двойного щелчка по нему, Или из CLI.

Я понял, что когда приложение запускается из двойного щелчка (GUI), оно возвращает количество аргументов ( argc ), равное 2.

Но при запуске из CLI он будет иметь argc , равный 1. До тех пор, пока я сам не приведу никаких аргументов.

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

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

Но мне стало интересно, есть ли лучший способ сделать это.

Вот пример кода в main.m

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    //This determins if the app is launched from the command line or app itself is opened.

    if (argc == 1) {
        //app was run from CLI
        // Create a  object
        MyClass *mMyClass;
        mMyClass = [[MyClass alloc] init];
        // Read the Buffer
        [mMyClass readBuffer];

        // Write out file on disk
        [mMyClass createFile];
        [mMyClass doMoreStuff]; 

        [mMyClass release];
        mMyClass = nil;

    return 0;
    } else {

    //app was doubled click, (Opened)

   return NSApplicationMain(argc,  (const char **) argv);

   ;
   // */
   //  return NSApplicationMain(argc,  (const char **) argv);
   }
   [pool drain];
}

Большое спасибо. M

1 Ответ

1 голос
/ 04 января 2011

Помимо проверки argc, вы можете рассмотреть возможность проверки самого значения argv.

для приложений, запускаемых двойным щелчком:

1/4/11 9:43:30 AM   Untitled[605]   argc: 2
1/4/11 9:43:30 AM   Untitled[605]   argv0: /tmp/Untitled/build/Debug/Untitled.app/Contents/MacOS/Untitled
1/4/11 9:43:30 AM   Untitled[605]   argv1: -psn_0_131104

для приложений, работающих в командной строке:

1/4/11 9:43:44 AM   Untitled[608]   argc: 1
1/4/11 9:43:44 AM   Untitled[608]   argv0: ./Untitled
1/4/11 9:43:44 AM   Untitled[608]   argv1: (null)
...