2012-04-07 27 views
10

कुछ सावधान डिबगिंग के बाद, मैं अपने आवेदन में एक बग है कि एक गाड़ी एप्पल बंडल लोड हो रहा है प्रणाली चौखटे में निहित है की खोज की है और मुझे संदेह है कि कई ऐप्स हैं। असल में मैंने एक्सकोड का अध्ययन करके सीखा कि बंडल को एक्सकोड की मेमोरी स्पेस में लोड नहीं किया जा सकता क्योंकि बंडल कचरा संग्रह संगत नहीं है।क्या मैक ओएस एक्स एप्लिकेशन लाइब्रेरी लोड करने से डलोपेन को रोक सकता है? ,</p> <pre class="lang-none prettyprint-override"><code>/System/Library/CoreServices/MLTEFile.bundle </code></pre> <p>मुझे विश्वास है कि मैं इस बंडल की सेवाओं से लाभ नहीं कर रहा हूँ हूँ:

तो आदर्श रूप में, मैं इस बंडल को भी अपने ऐप में लोड होने से रोकना चाहता हूं। ऐसा करने का एक तरीका मेरे स्वयं के ऐप में जीसी की आवश्यकता होगी, लेकिन मैं ऐसा करने वाला नहीं हूं। क्या कोई इस पुस्तकालय पर dlopen() पर कॉल करने के लिए सिस्टम ढांचे द्वारा प्रयासों को रोकने के तरीके के बारे में सोच सकता है?

+0

मुझे लगता है कि ऐप्पल इंजीनियरों को यह जानना है कि आप इसके साथ क्या समस्याएं कर रहे हैं। लगता है * सुपर * -वार्ड। जब आपको बग फाइल करने का मौका मिलता है तो (ओपन) रडार के लिए एक लिंक पोस्ट करें! – cbowns

उत्तर

6

ट्विटर पर कई उपयोगी उत्तरों के लिए धन्यवाद, मैं यहां एक संभावित समाधान के रूप में डाइल्ड की "इंटरैप" सुविधा प्रदान करने में सक्षम हूं। "आश्रित पुस्तकालय में interposing कार्य" के लिए खोज:

https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html#//apple_ref/doc/uid/TP40002182-SW10

लघु यहाँ उदाहरण:

http://toves.freeshell.org/interpose/

और यहाँ interposes घोषित करने के लिए एक सरल मैक्रो:

http://www.opensource.apple.com/source/dyld/dyld-97.1/include/mach-o/dyld-interposing.h

मैं विभिन्न दृष्टिकोण से थोड़ा उलझन में हूँ यहाँ प्रदर्शित किया गया है। ऐसा लगता है कि DYLD नाम तालिका में अंतर्निहित इच्छा का विज्ञापन करने के लिए एक तंत्र है, और पूरी तरह से (?) विभिन्न तंत्र जो मूल रूप से श्रृंखला के लिए dlsym (RTLD_NEXT, ...) का उपयोग करने पर निर्भर करता है। ऐप्पल के डाउनलोड करने योग्य उदाहरण (पहले दस्तावेज लिंक से) में, वे dlsym तकनीक का उपयोग करते हैं, लेकिन यह स्पष्ट नहीं है कि यह अंतर्निहित रूप से होने वाली घटना का कारण बनता है।