• 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: determine whether an ancillary program/task can run
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: determine whether an ancillary program/task can run


  • Subject: Re: determine whether an ancillary program/task can run
  • From: Peter <email@hidden>
  • Date: Fri, 02 Sep 2011 00:33:41 +0200

Am 02.09.2011 um 00:19 schrieb Philip Ershler:

>
> On Sep 1, 2011, at 4:11 PM, Martin Wierschin wrote:
>
>> Hi Dave,
>>
>> Thanks for your reply. I was hoping to avoid handling that inspection myself, but even if I go that route there's another problem: the ancillary tool isn't a proper bundle, it's just a plain executable, so NSBundle's initializers will just return nil. That's a pity because there's even -[NSBundle preflightAndReturnError:] which sounds to be exactly what I want.
>>
>> Offhand does anyone know how to inspect the architecture(s) of a plain executable file? I've been googling for a little bit and haven't hit upon anything that works yet.
>
> Won't otool do the job for you?
>
> Phil

Or file even - is otool included in the standard OS install, or does the user have to have dev tools installed?

file /Applications/Dashboard.app/Contents/MacOS/Dashboard
/Applications/Dashboard.app/Contents/MacOS/Dashboard: Mach-O universal binary with 3 architectures
/Applications/Dashboard.app/Contents/MacOS/Dashboard (for architecture x86_64):	Mach-O 64-bit executable x86_64
/Applications/Dashboard.app/Contents/MacOS/Dashboard (for architecture i386):	Mach-O executable i386
/Applications/Dashboard.app/Contents/MacOS/Dashboard (for architecture ppc7400):	Mach-O executable ppc



>>
>> Thanks,
>> ~Martin
>>
>>
>> On Sep 1, 2011, at 2:12 PM, Dave DeLong wrote:
>>
>>> You could probably catch this before attempting to launch the task.  Create a new NSBundle object pointing at the executable path, and then ask the bundle for the -executableArchitectures, and see if one of the returned values matches the architecture of the machine you're running. If it matches, then launch the task.  :)
>>>
>>> Cheers,
>>>
>>> Dave
>>>
>>> On Sep 1, 2011, at 2:09 PM, Martin Wierschin wrote:
>>>
>>>> Hello all,
>>>>
>>>> My application sometimes need to run an ancillary program (included in the app's resources). I do this via NSTask and normally it works great.
>>>>
>>>> The problem is that this ancillary program is sometimes Intel-only, or sometimes PPC-only, while the main application is Universal. The use of this ancillary program is not mandatory, so displaying an error message, or using a fallback solution is acceptable. The issue is that trying to run an ancillary program on an unsupported architecture triggers a hard crash:
>>>>
>>>>>> Exception Type:  EXC_BREAKPOINT (SIGTRAP)
>>>>>> Exception Codes: 0x0000000000000001, 0x000000009030c0b0
>>>>>> Crashed Thread:  0
>>>>>>
>>>>>> Application Specific Information:
>>>>>> *** NSTask: Task create for path '.../Resources/mysubtool' failed: 86, "Bad CPU type in executable".  Terminating temporary process.
>>>>>> *** multi-threaded process forked ***
>>>>
>>>>>>
>>>>>> Thread 0 Crashed:
>>>>>> 0   com.apple.Foundation          	0x9030c0b0 ___NEW_PROCESS_COULD_NOT_BE_EXECD___ + 0
>>>>>> 1   com.apple.Foundation          	0x901d0354 -[NSConcreteTask launchWithDictionary:] + 2472
>>>>
>>>> Is there an elegant way to catch this? I'd rather not try to figure out the arch of the ancillary program, host arch, and (if relevant) whether Rosetta is installed or not.
>>>>
>>>> Thanks,
>>>> ~Martin
>>>>
>>>> _______________________________________________
>>>>
>>>> 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
>>>

_______________________________________________

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

  • Follow-Ups:
    • Re: determine whether an ancillary program/task can run
      • From: Philip Ershler <email@hidden>
References: 
 >determine whether an ancillary program/task can run (From: Martin Wierschin <email@hidden>)
 >Re: determine whether an ancillary program/task can run (From: Dave DeLong <email@hidden>)
 >Re: determine whether an ancillary program/task can run (From: Martin Wierschin <email@hidden>)
 >Re: determine whether an ancillary program/task can run (From: Philip Ershler <email@hidden>)

  • Prev by Date: Re: determine whether an ancillary program/task can run
  • Next by Date: Re: determine whether an ancillary program/task can run
  • Previous by thread: Re: determine whether an ancillary program/task can run
  • Next by thread: Re: determine whether an ancillary program/task can run
  • Index(es):
    • Date
    • Thread