2013-03-02 11 views
6

SETUP:
OS X 10.8.2
Xcode4.5.2 (4G2008a)
dokumentu opartego na kakao Application z QuickLook wtyczkaPlugIn QuickLook to "uszkodzone/brakujące zasoby". Czemu?


PROBLEM:

jestem próbuję dodać wtyczkę QuickLook do mojej aplikacji OS X opartej na dokumencie, ale wtyczka QL nie zostanie uruchomiona.

My QuickLook wtyczka musi osadzić i link dwóch ram że stworzyłem sobie (tzw IDEKit i TDAppKit). Przeczytałem to SO post about linking Frameworks in QuickLook PlugIns i postępowałem zgodnie z instrukcjami tam (ustawiłem DYLIB_INSTALL_NAME_BASE z moich dwóch frameworków na @loader_path/../Frameworks).

Oto kilka istotnych informacji na temat mojego QuickLook PlugIn po to jest zbudowany:

% 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) 

Połączone/wbudowany szkieletowe są na miejscu:

% 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 

Jednak gdy próbuję uruchomić mój QuickLook wtyczki używając qlmanage i dokumentu testowego, pojawia się następujący błąd:

dyld: DYLD_ environment variables being ignored because main executable (/System/Library/Frameworks/QuickLook.framework/Versions/A/Resources/quicklookd.app/Contents/MacOS/qlmanage) is code signed with entitlements 
Testing Quick Look preview with files: 
    /Users/itod/Desktop/test.shapes 
[ERROR] Can't load plug-in at file://localhost/Users/itod/Library/Developer/Xcode/DerivedData/Shapes-bqzarhutlkqukverhbjatfvaextg/Build/Products/Debug/Shapes.app/Contents/Library/QuickLook/ShapesQuickLook.qlgenerator/: The bundle “ShapesQuickLook” couldn’t be loaded because it is damaged or missing necessary resources. 

Zanotuj:

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

nie jestem pewien, że ten problem jest spowodowany przez problem z osadzonych ram (ale myślę, że to prawdopodobnie jest).

Czego może mi brakować? Jak mogę uruchomić PlugIn QuickLook?

Odpowiedz

5

OP tutaj. Znalazłem rozwiązanie w tym blog post about Dylibs, Install Names, and rpaths.

W szczególności porady dotyczące sekcji @rpath były dla mnie przydatne.

Tak więc w moich osadzonych frameworkach ustawiłem DYLIB_INSTALL_NAME_BASE na @rpath/.

Następnie Mam app i QL wtyczka których każdy osadzić ram:

w ustawieniach kompilacji mój cel aplikacji, dodałem następujące inne flagi Linker: -rpath @executable_path/../Frameworks/.

W ustawieniach kompilacji narzędzia QuickLook Plugin dodano następujące Inne znaczniki Linker: -rpath @loader_path/../Frameworks/.

To rozwiązało problem. Teraz aplikacja i wtyczka QL działają poprawnie.

+0

Problem polega na tym, że nazwa pliku wykonywalnego, który zwykle oznacza użytkownik, oznacza plik wykonywalny procesu i wtyczkę QL, która ma być quicklookd - czy nie można wskazać ścieżki ładowania w obu przypadkach? –

+1

Tak, rozumiem, że kwestia pliku wykonywalnego jest inna, gdy moja aplikacja działa, gdy działa moja wtyczka QL. Ale sama zmiana na ścieżkę '@ loader_path' nie rozwiązała problemu. Nie jestem do końca pewien, dlaczego, ale mam teorię. Zasadniczo: wtyczka nie tylko łączy się z obydwoma tymi ramami, ale jedna z tych ram także łączy się z innymi ramami, dodatkowo komplikując sprawę. Używanie '@ rpath' wydaje się pozwalać im wszystkim się odnaleźć. –

+0

Awesome - ten sam problem tutaj, te same kroki działały dla nas również !! – Jay

Powiązane problemy