2015-05-12 2 views
3

Как программно открыть приложение OS X (.app), которое содержится в приложении, которое я создаю?Запуск OS X Application Programally

+1

Вы могли бы сделать систему терминала вызова с помощью «открытой» /path/to/file.app – SnoApps

+0

Что бы путь будет, если приложение, которое я хочу открыть, содержится в комплекте текущего приложения? –

+1

вы можете попробовать 'NSString * path = [[NSBundle mainBundle] pathForResource: @" myapp.app "]; system [[NSString stringWithFormat: @ "open% @", путь] UTF8String]) ' – SnoApps

ответ

4

Предпочтительный способ сделать это на OS X лежит через NSWorkspace класса, который предоставляет несколько методов для запуска приложений. Один из них: launchApplicationAtURL:options:configuration:error: позволяет указать URL-адрес файла для запуска приложения. Помимо отсутствия проблем с песочницей, таких как system() и решения Apple Event, он также дает вам простой способ управлять запуском приложения, например. вы можете указать переменные среды, которые будут переданы в приложение.

0

Вы можете использовать скрипт Apple.

NSDictionary* errorDict; 
NSAppleEventDescriptor* returnDescriptor = NULL; 

NSAppleScript* scriptObject; 
scriptObject = [[NSAppleScript alloc] initWithSource:@"try\n 
run application \"Macintosh HD:Applications:_Sandbox-AppleScript0.app\"\n 
on error number -609 # 'Connection is invalid' error that is spuriously reported # simply ignore\n 
end try"]; 

if (returnDescriptor != NULL) { 
    // successful execution 
    if (kAENullEvent != [returnDescriptor descriptorType]) { 
     // script returned an AppleScript result 
     if (cAEList == [returnDescriptor descriptorType]) { 
      // result is a list of other descriptors 
     } 
     else { 
       // coerce the result to the appropriate ObjC type 
     } 
    } 
} 
1

Следующий фрагмент кода используется для запуска приложения программно:

NSString *path = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent]; 
path = [path stringByAppendingString:@"/MyApp.app"]; // App Path 
NSWorkspace *ws=[NSWorkspace sharedWorkspace]; 
NSURL* url = [NSURL fileURLWithPath:path isDirectory:NO]; 
[ws launchApplicationAtURL:url 
          options:NSWorkspaceLaunchWithoutActivation 
        configuration:nil 
          error:nil]; 
Смежные вопросы