• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Test for launched from (Apple)Script?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Test for launched from (Apple)Script?


  • Subject: Re: Test for launched from (Apple)Script?
  • From: vinai <email@hidden>
  • Date: Wed, 10 Nov 2010 14:08:59 -0800 (PST)

--- On Wed, 11/10/10, McLaughlin, Michael P. <email@hidden> wrote:

> Jonathan wrote:
>
>>> On 10 Nov 2010, at 18:34, McLaughlin, Michael P. wrote:
>>>
>>> Is there any standard way for a Cocoa app to test whether it was
>>> launched from a script, esp. AppleScript?  I would like to set a
>>> flag to disable dialogs so that users could run the app in
>>> (faceless) batch mode.
>>>
>>> Thanks.
>>>
>>> --
>>> Mike McLaughlin
>>>
>>
>> Maybe it's just me but I am not sure if this question makes a whole
>> lot of sense.
>>
>> AppleScript runs in process so a multitude of applications could
>> launch your app by generating and dispatching the appropriate
>> AppleEvent.
>> Or do you want to ascertain if the app was launched by AppleScript
>> Editor.app?
>>
>> Is the app to be scripted by users?
>>
>> In that case it might be better to make your app scriptable and send
>> it an explicit event to request batch mode.
>
> The idea is that the app will be scriptable but I was trying to find
> a way to avoid forcing the user to send a special command to set a
> fromBatch flag (seems kludgy).
>
> I would like the user to be able to queue up a lot of separate input
> files (jobs) for the app to 1) process and 2) save results, disabling
> the various OK buttons, etc. that would normally have to be clicked.
> That way, the user could launch a script and come back later to a
> folder full of results without ever seeing the app.
>
> Most of the time, the normal app behavior would be interactive (a GUI).
>
> --
>
> Mike McLaughlin

Mike,

What I did was to check the value of argc that your main function sees in main.m

If there are more than 2 arguments (and that was something I never fully resolved - my app is 1 argument on the command line, but I never figured out what the 2nd one is).  Regardless, if I call my application via:

   path to application.app folder/Contents/MacOS/applicationBinary

with more than 2 arguments on the command line, I call a function to process command line arguments, which then directly initializes the necessary objects and puts my application in "batch mode".

If argc <= 2, then in my code I call:

    return NSApplicationMain (argc,  (const char **) argv);

which happily launches a graphical front end and lets the user interact with my app from the OS X or GNUStep GUI (it can be compiled and run on either OS X or any linux distro that ships the GNUStep libraries).

My solution is very ugly, but entirely functional for my needs.  After I acquire data, I can pull up a sample via the GUI, see how the processing works, and can tweak parameters there and get direct feedback.   I can then put those parameters into a shell script and drive the program in batch mode.  I had my doubts when I first did this, but as ugly as it is under the hood, it's entirely stable and functional.

Hope this helps!

cheers
vinai




_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

References: 
 >Re: Cocoa-dev Digest, Vol 7, Issue 1044 (From: "McLaughlin, Michael P." <email@hidden>)

  • Prev by Date: Re: NSTableView within NSScrollView in code
  • Next by Date: Re: NSTableView within NSScrollView in code
  • Previous by thread: Re: Cocoa-dev Digest, Vol 7, Issue 1044
  • Next by thread: NSTableView within NSScrollView in code
  • Index(es):
    • Date
    • Thread