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


> 
> 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 (Cocoa-dev@lists.apple.com)
>>> 
>>> 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:
>>> http://lists.apple.com/mailman/options/cocoa-dev/davedelong%40me.com
>>> 
>>> This email sent to davedel...@me.com
>> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> 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:
> http://lists.apple.com/mailman/options/cocoa-dev/ershler%40cvrti.utah.edu
> 
> This email sent to ersh...@cvrti.utah.edu


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to