Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Aperture Plug-in crashes with EXC_BAD_ACCESS

I try to run the SampleFTPExportPlugIn that comes with the Aperture SDK 2.1. I had to tweak the Base SDK setting and manually copy the PluginManager.Framework folder to /Library/Frameworks, as described here.

All compiles and Aperture 3.2.3 now offers the menu item File/Export/FTP.

When selecting the "FTP" export method and thus triggering the plug-in code, Aperture crashes with a EXC_BAD_ACCESS. The illegal memory access happens in the initWithAPIManager method of class SampleFTPExportPlugIn when trying to get a reference to the ApertureExportManager:

   _exportManager = [[_apiManager apiForProtocol:@protocol(ApertureExportManager)] retain];

This is the second line that gets executed after Aperture hands over control to the plug-in and seems to be the standard way of getting a reference to the ApertureExportManager in any Aperture plug-in (I haven't found any alternative ways of achieving the same anywhere).

Here the stacktrace:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: 0x000000000000000d, 0x0000000000000000

VM Regions Near 0:
--> 
    __TEXT                 0000000100000000-0000000100798000 [ 7776K] r-x/rwx SM=COW  /Applications/Aperture.app/Contents/MacOS/Aperture

Application Specific Information:
objc_msgSend() selector name: class
objc[3000]: garbage collection is OFF
Performing @selector(a_exportPlugIn:) from sender NSMenuItem 0x111d2a540

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                 0x00007fff8711c090 objc_msgSend_vtable2 + 16
1   com.apple.CoreFoundation        0x00007fff8381e25f -[__NSCFString isEqualToString:] + 63
2   com.apple.PluginManager         0x0000000101211218 -[PROBundleHandler apiForProtocol:] + 109
3   com.apple.CoreFoundation        0x00007fff83852f4c __invoking___ + 140
4   com.apple.CoreFoundation        0x00007fff83852de4 -[NSInvocation invoke] + 132
5   com.apple.CoreFoundation        0x00007fff83852fb4 -[NSInvocation invokeWithTarget:] + 52
6   com.apple.CoreFoundation        0x00007fff8384dff4 ___forwarding___ + 756
7   com.apple.CoreFoundation        0x00007fff8384dc88 _CF_forwarding_prep_0 + 232
8   com.apple.SampleFTPExportPlugIn 0x000000012c0d5361 -[SampleFTPExportPlugIn initWithAPIManager:] + 209
9   com.apple.PluginManager         0x000000010120c6fa -[PROConcretePlugIn plugInInstance] + 212

I read all about Objective-C memory management but cannot make sense of it. All the other examples I found on the web are implemented just like that so I guess I have a compatibility problem, something missing in my Aperture / Library installation. How can I narrow down the problem?

EDIT:

The problem seems to be with the passed in apiManager. The method signature is:

     - (id)initWithAPIManager:(id<PROAPIAccessing>)apiManager

The parameter is then assigned to our internal reference:

  _apiManager = apiManager;

However the actual class passed in is PROPlugInFirewall, as this output reviels:

   NSLog(@"_apiManager class is: %@", [[_apiManager class] description]);

Then calling the respondsToSelector leads to the same crash although this method is inherited from NSObject.

   if ( [_apiManager respondsToSelector:@selector(apiForProtocol:)] ) {
        NSLog(@"responds");
    }

The _apiManager itself describes itself as:

   _apiManager is: <[*<PROBundleHandler: 0x14d79130> (PROAPIAccessing)*]>

Still stuck...

EDIT:

So it looks like Aperture is passing in a pointer that points to nirvana... However, I just installed another plugin, from the Apple webpage, with installer and everything. That one failed too when invoked...

like image 820
raoulsson Avatar asked Apr 30 '12 15:04

raoulsson


1 Answers

  • Download FXPlug 1.2.5 SDK
  • Open the contents of the installer package
  • Copy PluginManager.framework to /Library/Frameworks

Your plugin should work now!

The newer versions of PluginManager.framework in FXPlug SDK(2.2/2.4) will cause this crash.

Tested on 10.8 with Xcode 4.5

like image 90
MayorJustin Avatar answered Oct 18 '22 13:10

MayorJustin