2012-04-30 8 views
6

Ich versuche, die SampleFTPExportPlugIn, die mit dem Aperture SDK 2.1 kommt zu laufen. Ich musste die Base SDK-Einstellung optimieren und manuell den Ordner "PluginManager.Framework" nach/Library/Frameworks kopieren, wie beschrieben here.Aperture Plug-in Abstürze mit EXC_BAD_ACCESS

Alle kompiliert und Aperture 3.2.3 bietet jetzt den Menüpunkt Datei/Export/FTP.

Beim Auswählen der "FTP" -Exportmethode und dem Auslösen des Plug-in-Codes stürzt Aperture mit einer EXC_BAD_ACCESS ab. Der illegale Speicherzugriff geschieht in der initWithAPIManager Methode der Klasse SampleFTPExportPlugIn wenn eine Referenz auf die ApertureExportManager zu bekommen versuchen:

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

Dies ist die zweite Zeile, die nach Aperture übergibt die Steuerung an den Plug-in ausgeführt wird und scheint Die Standardmethode, einen Verweis auf die ApertureExportManager in einem beliebigen Aperture Plug-in zu erhalten (ich habe keine alternativen Möglichkeiten gefunden, um das gleiche irgendwo zu erreichen).

Hier die 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 

Ich lese alles über Objective-C-Management-Speicher, kann aber nicht Sinn daraus machen. Alle anderen Beispiele, die ich im Internet gefunden habe, sind so implementiert, dass ich ein Kompatibilitätsproblem habe, etwas fehlt in meiner Aperture/Library-Installation. Wie kann ich das Problem eingrenzen?

EDIT:

Das Problem scheint mit dem übergebenen in apiManager zu sein. Die Methodensignatur ist:

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

Der Parameter dann zu unserem internen Referenz zugeordnet:

_apiManager = apiManager; 

jedoch die in bestanden tatsächlichen Klasse ist PROPlugInFirewall, da dieser Ausgang reviels:

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

Dann führt der Aufruf der respondsToSelector zum gleichen Absturz, obwohl diese Methode von NSObject geerbt wird.

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

Die _apiManager selbst beschreibt sich selbst als:

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

Noch stecken ...

EDIT:

So ist es wie Aperture sieht in einem Zeiger vorbei, die Punkte zu Nirvana ... Allerdings habe ich gerade ein anderes Plugin installiert, von der Apple Webseite, mit dem Installer und allem. Dieser Fehler ist auch beim Aufruf aufgetreten ...

+1

Ich habe dieses Problem auch, obwohl es für Aperture 3.2 nicht spezifisch erscheint. Ich habe ein Plugin ursprünglich für Aperture 3.1 mit Snow Leopard gebaut (XCode 4.3?); jetzt verursacht genau der gleiche Code den obigen Absturz bei jeder Version von Aperture, die ich versuche (3.1, 3.2 oder 3.3). Dies verwendet OSX 10.8 und XCode 4.5.1. Perfekte – Graham

Antwort

2
  • Download FXPlug 1.2.5 SDK
  • Öffnen Sie den Inhalt des Installationspakets
  • Kopieren PluginManager.framework/Library/Frameworks

Ihr Plugin sollte jetzt arbeiten!

Die neueren Versionen von PluginManager.framework in FxPlug SDK (2.2/2.4) wird diesen Absturz führen.

4,5

auf 10.8 mit Xcode Getestet
+0

- bestätigt dies für mich gearbeitet 10.8 mit Xcode 4.5. Vielen Dank – Graham

1

ich, dass Justins Antwort gefunden oben nicht für mich arbeiten, wenn für Aperture 3.4 zu bauen benötigen, da es x86_64-Architektur erfordert, welche die FxPlug 1.x-Versionen nicht unterstützen .

Nach dem Ausprobieren verschiedener Versionen des PluginManager-Frameworks stellte ich fest, dass die Version available here den obigen Absturz nicht verursacht und außerdem die gültige 64-Bit-Architektur enthält. Ersetzen Sie einfach den Inhalt des /Library/Frameworks/PluginManager.framework/Versions/B mit dem Inhalt der verlinkten Archiv und du bist gut zu gehen.