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]; }