Normally an application bundle on OS X can only be started once, however by simply copying the bundle the same application can be launched twice. What\'s the best strategy t
This is a combination of Romans' and Jeff's answers for Swift 2.0: If another instance of the app with the same bundle ID is already running, show an alert, activate the other instance and quit the duplicate instance.
func applicationDidFinishLaunching(aNotification: NSNotification) {
/* Check if another instance of this app is running. */
let bundleID = NSBundle.mainBundle().bundleIdentifier!
if NSRunningApplication.runningApplicationsWithBundleIdentifier(bundleID).count > 1 {
/* Show alert. */
let alert = NSAlert()
alert.addButtonWithTitle("OK")
let appName = NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleNameKey as String) as! String
alert.messageText = "Another copy of \(appName) is already running."
alert.informativeText = "This copy will now quit."
alert.alertStyle = NSAlertStyle.CriticalAlertStyle
alert.runModal()
/* Activate the other instance and terminate this instance. */
let apps = NSRunningApplication.runningApplicationsWithBundleIdentifier(bundleID)
for app in apps {
if app != NSRunningApplication.currentApplication() {
app.activateWithOptions([.ActivateAllWindows, .ActivateIgnoringOtherApps])
break
}
}
NSApp.terminate(nil)
}
/* ... */
}