2013-03-02 18 views
6

SETUP:
OS X 10.8.2
Xcode4.5.2 (4G2008a)
dokumentenbasierte Cocoa-Anwendung mit einem Info PlugInQuickLook PlugIn ist "beschädigte/fehlende Ressourcen". Warum?


PROBLEM:

Ich bin Ich versuche, meiner Document-basierten OS X-Anwendung ein QuickLook-Plugin hinzuzufügen, aber das QL-PlugIn wird nicht gestartet.

Meine Info PlugIn braucht einzubetten und Link zu zwei Frameworks, die ich selbst erstellt habe (Called IDEKit und TDAppKit). Ich habe diese SO post about linking Frameworks in QuickLook PlugIns gelesen und befolgte die Anweisungen dort (ich setzte die DYLIB_INSTALL_NAME_BASE meiner zwei Rahmenwerke auf @loader_path/../Frameworks).

Hier einige relevante Informationen über meine Info PlugIn, nachdem es gebaut wird:

% otool -L /Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook: 
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 47.0.0) 
    @loader_path/../Frameworks/IDEKit.framework/Versions/A/IDEKit (compatibility version 1.0.0, current version 1.0.0) 
    @loader_path/../Frameworks/TDAppKit.framework/Versions/A/TDAppKit (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/QuickLook.framework/Versions/A/QuickLook (compatibility version 1.0.0, current version 555.4.0) 
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) 
    /System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 55179.0.2) 
    /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore (compatibility version 1.2.0, current version 1.8.0) 
    /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 19.0.0) 
    /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 45.0.0) 
    /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 57.0.0) 
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.1.0) 
    /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 945.11.0) 
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) 
    /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1187.33.0) 

Die verlinkten/embedded Frameworks sind vorhanden:

% file /Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook: Mach-O universal binary with 2 architectures 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook (for architecture x86_64): Mach-O 64-bit bundle x86_64 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/MacOS/ShapesQuickLook (for architecture i386): Mach-O bundle i386 
% file /Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/IDEKit.framework/IDEKit 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/IDEKit.framework/IDEKit: Mach-O universal binary with 2 architectures 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/IDEKit.framework/IDEKit (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/IDEKit.framework/IDEKit (for architecture i386): Mach-O dynamically linked shared library i386 
% file /Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/TDAppKit.framework/TDAppKit 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/TDAppKit.framework/TDAppKit: Mach-O universal binary with 2 architectures 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/TDAppKit.framework/TDAppKit (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 
/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/Contents/Frameworks/TDAppKit.framework/TDAppKit (for architecture i386): Mach-O dynamically linked shared library i386 

Allerdings, wenn ich versuche, meine Info PlugIn zu starten unter Verwendung von qlmanage und einem Testdokument, erhalte ich die folgende Fehlermeldung:

Notierte die:

The bundle “ShapesQuickLook” couldn’t be loaded because it is damaged or missing necessary resources. 

Ich bin nicht sicher, dass dieses Problem durch ein Problem mit eingebetteter Frameworks verursacht wird (aber ich denke, es ist wahrscheinlich ist).

Was könnte ich vermissen? Wie kann ich mein QuickLook PlugIn zum Starten bringen?

Antwort

5

OP hier. Ich fand die Lösung in dieser blog post about Dylibs, Install Names, and rpaths.

Insbesondere der Rat unter der @rpath Abschnitt arbeitete für mich.

Also in meinem eingebetteten Frameworks, setze ich die DYLIB_INSTALL_NAME_BASE zu @rpath/.

Dann habe ich eine App und ein QL PlugIn, die jeweils den Rahmen einzubetten:

In meinem Anwendungsziel der Buildeinstellungen, habe ich die folgenden Andere Linker Flags: -rpath @executable_path/../Frameworks/.

Und in den Build-Einstellungen meines QuickLook Plugin-Ziels habe ich die folgenden Andere Linker-Flags: -rpath @loader_path/../Frameworks/ hinzugefügt.

Das löste das Problem. Jetzt funktionieren die App und das QL PlugIn korrekt.

+0

das Problem ist, dass der ausführbare Name, den man normalerweise Benutzer die ausführbare Datei des Prozesses und für Ihre QL-Plugin, dass quicklookd würde bedeuten - können Sie nicht den Loader-Pfad in beiden Fällen? –

+1

Ja, ich verstehe das Problem, dass die ausführbare Datei anders ist, wenn meine App läuft und wenn mein QL-Plugin läuft. Aber das Ändern auf 'loader_path' allein hat das Problem nicht behoben. Ich bin mir nicht ganz sicher warum, aber ich habe eine Theorie. Grundsätzlich: Das Plugin verbindet nicht nur diese beiden Frameworks, sondern eines dieser Frameworks verbindet sich auch mit dem anderen Framework, was die Sache noch komplizierter macht. Die Verwendung von '@ rpath' scheint es allen zu ermöglichen, sich zu finden. –

+0

Awesome - das gleiche Problem hier, die gleichen Schritte funktionierten auch für uns !! – Jay

Verwandte Themen