2013-03-02 4 views
6

सेटअप:
ओएस एक्स 10.8.2
Xcode4.5.2 (4G2008a)
दस्तावेज के आधार पर के साथ कोको आवेदन एक quicklook प्लगइनक्विकलुक प्लगइन "क्षतिग्रस्त/अनुपलब्ध संसाधन" है। क्यूं कर?


समस्या:

मैं मेरे दस्तावेज़-आधारित ओएस एक्स अनुप्रयोग में एक क्विकलुक प्लगइन जोड़ने की कोशिश कर रहा है, लेकिन क्यूएल प्लगइन लॉन्च नहीं होगा।

मेरे quicklook प्लगइन एम्बेड और दो व्यवस्थाएं कि मैं अपने आप को बनाने के बाद (IDEKit और TDAppKit कहा जाता है) के लिए लिंक की जरूरत है। मैंने यह SO post about linking Frameworks in QuickLook PlugIns पढ़ा है, और वहां दिए गए निर्देशों का पालन किया है (मैंने अपने दो फ्रेमवर्कों के DYLIB_INSTALL_NAME_BASE को @loader_path/../Frameworks पर सेट किया है)।

यहाँ मेरी quicklook प्लगइन के बारे में कुछ प्रासंगिक जानकारी के बाद यह बनाया गया है:,

% 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 

हालांकि जब मैं अपने quicklook प्लगइन शुरू करने के लिए प्रयास करें:

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

जुड़ा हुआ/एम्बेडेड फ़्रेमवर्क स्थान पर हैं qlmanage और एक परीक्षण दस्तावेज़ का उपयोग करके, मुझे निम्न त्रुटि मिलती है:

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. 

नोट:

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

मुझे विश्वास है कि इस मुद्दे एम्बेडेड फ़्रेमवर्क के साथ एक समस्या के कारण होता है नहीं कर रहा हूँ (लेकिन मुझे लगता है कि यह शायद है)।

मुझे क्या याद आ रही है? लॉन्च करने के लिए मैं अपने क्विकलुक प्लगइन कैसे प्राप्त कर सकता हूं?

उत्तर

5

ओपी यहां। मुझे इस blog post about Dylibs, Install Names, and rpaths में समाधान मिला।

विशेष रूप से, @rpath अनुभाग के तहत सलाह मेरे लिए काम करती है।

तो मेरे एम्बेडेड ढांचे में, मैंने DYLIB_INSTALL_NAME_BASE@rpath/ होने के लिए सेट किया है। -rpath @executable_path/../Frameworks/:

मेरी आवेदन लक्ष्य के निर्माण सेटिंग्स में, मैं निम्नलिखित अन्य लिंकर झंडे कहा:

तो मैं एक अनुप्रयोग है और एक QL प्लगइन प्रत्येक चौखटे एम्बेड जो की है।

और मेरे क्विकलुक प्लगइन लक्ष्य की बिल्ड सेटिंग्स में मैंने निम्नलिखित अन्य लिंकर ध्वज: -rpath @loader_path/../Frameworks/ जोड़ा।

इस मुद्दे को हल किया गया। अब ऐप और क्यूएल प्लगइन सही तरीके से काम करते हैं।

+0

समस्या यह है कि निष्पादन योग्य नाम जो कि आम तौर पर उपयोगकर्ताओं का वास्तव में प्रक्रिया के निष्पादन योग्य और आपके क्यूएल प्लगइन के लिए होता है जो कि quicklookd होगा - क्या आप दोनों मामलों में लोडर पथ नहीं कर सकते हैं? –

+1

हां, जब मैं अपना क्यूएल प्लगइन चल रहा हूं, तो मेरा ऐप चल रहा है जब निष्पादन योग्य के मुद्दे को अलग कर रहा है। लेकिन अकेले '@ loader_path' में बदलना इस मुद्दे को ठीक नहीं करता है। मुझे पूरा यकीन नहीं है कि क्यों, लेकिन मेरे पास एक सिद्धांत है। असल में: इन दोनों ढांचे के लिए प्लगइन लिंक न केवल, बल्कि इन ढांचे में से एक अन्य ढांचे से जुड़ा हुआ है, और जटिलताओं को और जटिल करता है। ऐसा लगता है कि '@ rpath' का उपयोग करके वे सभी एक दूसरे को ढूंढने की अनुमति देते हैं। –

+0

बहुत बढ़िया - यहां एक ही समस्या है, वही कदम हमारे लिए भी काम करते हैं !! – Jay

संबंधित मुद्दे