2012-04-30 8 views
6

trato de ejecutar el SampleFTPExportPlugIn que viene con el SDK 2.1 Apertura . Tuve que modificar la configuración del Base SDK y copiar manualmente la carpeta PluginManager.Framework a/Library/Frameworks, como se describe en here.Aperture Plug-en choques con EXC_BAD_ACCESS

Todas las compilaciones y Aperture 3.2.3 ahora ofrecen la opción de menú Archivo/Exportar/FTP.

Al seleccionar el método de exportación "FTP" y desencadenar el código del complemento, Aperture se bloquea con un EXC_BAD_ACCESS. El acceso a la memoria ilegal ocurre en el método de la clase SampleFTPExportPlugIninitWithAPIManager cuando se trata de obtener una referencia a la ApertureExportManager:

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

Esta es la segunda línea que se ejecuta después de las manos de apertura el control al plug-in y parece ser la forma estándar de obtener una referencia al ApertureExportManager en cualquier complemento de Aperture (no he encontrado ninguna forma alternativa de lograr el mismo en ninguna parte).

Aquí el 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 

He leído todo acerca de la gestión de memoria de Objective-C, pero no puede hacer sentido de ella. Todos los otros ejemplos que encontré en la web se implementan así, así que supongo que tengo un problema de compatibilidad, algo que falta en mi instalación de Aperture/Library. ¿Cómo puedo reducir el problema?

EDIT:

El problema parece estar relacionado con la aprobada en apiManager. La firma del método es:

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

se asigna el parámetro luego a nuestra referencia interna:

_apiManager = apiManager; 

Sin embargo la clase real ha pasado es PROPlugInFirewall, ya que este reviels de salida:

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

Luego, al llamar al respondsToSelector se produce el mismo bloqueo, aunque este método se hereda de NSObject.

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

El _apiManager misma se describe como:

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

todavía está atascado ...

EDIT:

Así que parece que la abertura está pasando en un puntero que los puntos al nirvana ... Sin embargo, acabo de instalar otro complemento, desde la página web de Apple, con el instalador y todo. Eso también falló cuando se invocó ...

+1

También estoy teniendo este problema, aunque no parece específico para Aperture 3.2. Tengo un plugin originalmente creado para Aperture 3.1 usando Snow Leopard (XCode 4.3?); ahora el mismo código causa el bloqueo anterior en cualquier versión de Aperture que pruebo (3.1, 3.2 o 3.3). Esto es usando OSX 10.8 y XCode 4.5.1. – Graham

Respuesta

2
  • Descargar FXPlug 1.2.5 SDK
  • Abrir el contenido del paquete de instalación
  • Copia PluginManager.framework a/Library/Frameworks

Tu lector debería funcionar ahora!

Las versiones más nuevas de PluginManager.framework en FXPlug SDK (2.2/2.4) provocarán este bloqueo.

probado en 10.8 con Xcode 4.5

+0

Perfecto: confirmé que esto funcionó para mí en 10.8 con Xcode 4.5. Gracias – Graham

1

encontré que la respuesta de Justin anterior no funcionó para mí cuando se necesita para construir for Aperture 3.4, ya que requiere la arquitectura x86_64, que las versiones 1.x fxplug no son compatibles .

Después de probar varias versiones del marco PluginManager, encontré que la versión available here no causa el bloqueo anterior y también contiene la arquitectura válida de 64 bits. Simplemente reemplace los contenidos de /Library/Frameworks/PluginManager.framework/Versions/B con los contenidos del archivo vinculado y estará listo.

Cuestiones relacionadas