From 31233f812da529cccc24a338f5c87085794fcd72 Mon Sep 17 00:00:00 2001 From: Christian Beer Date: Tue, 24 Sep 2013 10:10:16 +0200 Subject: [PATCH] New method launchApplicationAtPath:arguments: to launch an application with given arguments (like "-AppleLanguages"...) --- src/JSTalk.m | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/JSTalk.m b/src/JSTalk.m index 3335835..d7167b1 100644 --- a/src/JSTalk.m +++ b/src/JSTalk.m @@ -436,6 +436,41 @@ + (id)application:(NSString*)app { return [self applicationOnPort:[NSString stringWithFormat:@"%@.JSTalk", bundleId]]; } ++ (id)launchApplicationAtPath:(NSString*)appPath arguments:(NSArray*)arguments +{ + + NSBundle *appBundle = [NSBundle bundleWithPath:appPath]; + NSString *bundleId = [appBundle bundleIdentifier]; + + // make sure it's running + NSArray *runningApps = [[[NSWorkspace sharedWorkspace] launchedApplications] valueForKey:@"NSApplicationBundleIdentifier"]; + + if ([runningApps containsObject:bundleId]) { + NSLog(@"App with same bundleID was already running"); + return [NSNumber numberWithBool:NO]; + } + + NSURL *appURL = [NSURL fileURLWithPath:appPath]; + NSDictionary *configuration = nil; + NSError *error; + + if (arguments) { + configuration = [NSDictionary dictionaryWithObjectsAndKeys:arguments, NSWorkspaceLaunchConfigurationArguments, + nil]; + } + + BOOL launched = [[NSWorkspace sharedWorkspace] launchApplicationAtURL:appURL + options:NSWorkspaceLaunchWithoutActivation | NSWorkspaceLaunchAsync + configuration:configuration + error:&error]; + if (!launched) { + NSLog(@"Could not open up %@", appPath); + return 0x00; + } + + return [self applicationOnPort:[NSString stringWithFormat:@"%@.JSTalk", bundleId]]; +} + + (id)app:(NSString*)app { return [self application:app]; }