On Dec 7, 2014, at 2:29 PM, SevenBits <[email protected]> wrote:
> I have a sandboxed app destined for the Mac App Store. Inside of it is an
> embedded console program which I want to open in Terminal (i.e Terminal.app
> opens and the app runs in its window). Here’s what I’m doing:
>
> NSString *interactiveExecutablePath = [[[NSBundle mainBundle] bundlePath]
> stringByAppendingPathComponent:@"/Contents/MacOS/app"];
> [NSTask launchedTaskWithLaunchPath:@"/usr/bin/open" arguments:@[@"-a",
> @"Terminal", interactiveExecutablePath]];
First, it never makes any sense for a program to spawn a subprocess to run
/usr/bin/open. /usr/bin/open is just a wrapper around Launch Services. So,
you could just call Launch Services directly or use NSWorkspace, which is also
a wrapper around Launch Services.
Second, even using Launch Services isn't the best way to do this (sandbox
issues aside). It's better to run the equivalent of this AppleScript script:
tell app "Terminal"
activate
do script "your command goes here"
end
You can do that using NSAppleScript or the Scripting Bridge.
I don't know if this approach is more likely to work in a sandboxed app. I
doubt it, because it would be an enormous hole in the sandbox. If you can
direct Terminal to run arbitrary commands, what protection does the sandbox
provide?
> I really need this to work as it’s an important aspect of my application. Can
> anyone advise?
I suspect you have a serious problem, then. You will probably need to deploy
outside of the Mac App Store so that you don't have to sandbox your app.
Alternatively, you can build a terminal emulator UI into your app and run the
embedded console program within that, instead of Terminal. Depending on the
needs of your console program, that may be a relatively straightforward
prospect or a very complex one.
Regards,
Ken
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]