2012-04-30 22 views
6

próbuję uruchomić SampleFTPExportPlugIn, że pochodzi z Aperture SDK 2.1. Musiałem zmodyfikować ustawienie Base SDK i ręcznie skopiować folder PluginManager.Framework do katalogu/Library/Frameworks, zgodnie z opisem here.Aperture plug-in wywala z EXC_BAD_ACCESS

Wszystkie kompilacje i Aperture 3.2.3 oferuje teraz pozycję menu Plik/Eksport/FTP.

Po wybraniu metody eksportu "FTP" i tym samym wyzwoleniu kodu wtyczki, Aperture ulega awarii za pomocą EXC_BAD_ACCESS. Nielegalnego dostępu do pamięci dzieje w metodzie klasy SampleFTPExportPlugIninitWithAPIManager gdy próbuje uzyskać referencję do ApertureExportManager:

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

To jest druga linia, która zostanie wykonana po Aperture rąk kontrolę nad do plug-in i wydaje się być standardowym sposobem uzyskania odniesienia do ApertureExportManager w dowolnej wtyczce Aperture (nie znalazłem żadnych alternatywnych sposobów osiągnięcia tego samego w dowolnym miejscu).

tu 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 

czytam wszystko o zarządzaniu pamięcią Objective-C, ale nie może mieć sens z niego. Wszystkie inne przykłady znalezione w sieci są zaimplementowane właśnie tak, więc myślę, że mam problem ze zgodnością, czegoś brakuje w mojej instalacji Aperture/Library. Jak mogę zawęzić problem?

EDIT:

Problem wydaje się być z przekazany w apiManager. Podpis metoda jest:

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

Parametr jest następnie przypisany do naszego wewnętrznego odniesienia:

_apiManager = apiManager; 

Jednak rzeczywista klasa przekazany jest PROPlugInFirewall, jak to wyjście reviels:

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

Następnie wywołanie respondsToSelector prowadzi do tej samej awarii, chociaż ta metoda jest dziedziczona z NSObject.

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

Sam _apiManager opisuje się jako:

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

nadal tkwi ...

EDIT:

Tak wygląda Aperture przechodzi w wskaźnik, który punkty do nirvany ... Zainstalowałem jednak inną wtyczkę ze strony Apple, z instalatorem i ze wszystkim. Ten też się nie powiodło po wywołaniu ...

+1

Mam również ten problem, chociaż nie wydaje się być specyficzny dla programu Aperture 3.2. Mam wtyczkę oryginalnie zbudowaną dla Aperture 3.1 z wykorzystaniem Snow Leopard (XCode 4.3?); teraz dokładnie ten sam kod powoduje powyższą awarię w dowolnej wersji Aperture I (3.1, 3.2 lub 3.3). Używa się OSX 10.8 i XCode 4.5.1. – Graham

Odpowiedz

2
  • Pobierz FXPlug 1.2.5 SDK
  • Otwórz zawartość pakietu instalacyjnego
  • Kopiowanie PluginManager.framework do/Library/Frameworks

Twój plugin powinien działać już teraz!

Nowsze wersje PluginManager.framework w FXPlug SDK (2.2/2.4) spowodują tę awarię.

Testowane na 10,8 z Xcode 4.5

+0

Perfect - potwierdzono, że zadziałało to dla mnie na 10.8 z Xcode 4.5. Dzięki – Graham

1

Okazało się, że odpowiedź Justina powyżej nie działa na mnie, kiedy konieczności budowania Aperture 3.4, gdyż wymaga x86_64 architekturę wersje FxPlug 1.x nie obsługują .

Po wypróbowaniu różnych wersji frameworka PluginManager, stwierdziłem, że wersja available here nie powoduje powyższej awarii i zawiera poprawną architekturę 64-bitową. Po prostu zamień zawartość /Library/Frameworks/PluginManager.framework/Versions/B na zawartość połączonego archiwum i możesz już iść.

Powiązane problemy