ios - स्थैतिक पुस्तकालय में उद्देश्य-सी श्रेणियों को जोड़ना




xcode linker (2)

मैं एक iOS एप्लिकेशन के लिए एक प्लगइन विकसित कर रहा हूं। मैं इसे एक .a फ़ाइल में संकलित कर रहा हूं, जो तब मुख्य xcode प्रोजेक्ट द्वारा उपयोग की जाती है।

अब तक मैंने इस पुस्तकालय में यूडेविस श्रेणी की एक श्रेणी बनाई है। जब मैं इस लाइब्रेरी का उपयोग करते हुए मुख्य प्रोजेक्ट को चलाता हूं तो यह बिना किसी पहचाने हुए चयनकर्ता के कारण क्रैश हो जाता है

- [UIDevice प्लेटफॉर्म]: गैर-मान्यता प्राप्त चयनकर्ता को उदाहरण के लिए भेजा गया

प्लेटफ़ॉर्म श्रेणी के माध्यम से मेरे द्वारा जोड़े गए फ्यूल में से एक है।

तो मैंने सोचा कि यह उन कार्यों को बिल्कुल भी लिंक नहीं कर रहा है और एक ही फ़ंक्शन को यूआईडीवीस श्रेणी के रूप में उसी फ़ाइल में जोड़ा गया है, फिर इसे मेरे कोड से कॉल किया।

इस बार मुख्य परियोजना ठीक रही ... तो मैंने सोचा कि शायद यह कुछ और था और मैंने सी फ़ंक्शन को हटा दिया। लेकिन लो और निहारना यह फिर से अपरिचित चयनकर्ता के कारण दुर्घटनाग्रस्त हो गया।

मेरे प्रश्न: जब तक मैं उसी फ़ाइल में घोषित फ़ंक्शन को कॉल नहीं करता तब तक xcode श्रेणी की परिभाषा को अनदेखा क्यों करता है?

वहाँ एक xcode सेटिंग है मैं इसे बनाने के लिए इसे बदल सकता हूँ चाहे UIDevice श्रेणी से ये विधियाँ शामिल हों, चाहे मैं उस फ़ाइल से किसी फ़ंक्शन को कॉल करूं या नहीं?

चियर्स


मेरी भी यही समस्या थी। किसी उपप्रोजेक्ट में परिभाषित श्रेणी में परिभाषित एक विधि के परिणामस्वरूप एक अज्ञात चयनकर्ता अपवाद है। (वास्तव में, यह इंटरफ़ेस बिल्डर में एक UILabel उपवर्ग निर्दिष्ट करने में असमर्थता के रूप में प्रकट हुआ; XIB में आईबी (UILabel या UIView, जो कि मैंने वहां पर निर्भर करता है, उस पर निर्भर करता है) में दिखाए गए वर्ग के बजाय, और वह टाइप किया। एक अजीब XCode बग के रूप में देखा गया।)

मेरे लिए काम करने वाला समाधान -force_load का उपयोग करने के लिए किया गया है:

बाएं हाथ के पैनल में, अपना मुख्य प्रोजेक्ट (रूट आइटम) चुनें। दाईं ओर आपको PROJECT और TARGETS दिखाई देंगे। TARGETS चयन करें। "बिल्ड सेटिंग्स" (ऊपरी पट्टी में) पर जाएं - "लिंकिंग" - "अन्य लिंकर झंडे" और, आपके -force_load ${BUILT_PRODUCTS_DIR}/libXXXXX.a को XXXXX कहा जाता है, जोड़ें -force_load ${BUILT_PRODUCTS_DIR}/libXXXXX.a (आइटम में दो हैं उप-विषय, डिबग और रिलीज़, लेकिन आप इस यौगिक आइटम पर क्लिक करते हैं ताकि यदि डिबग और रिलीज़ दोनों को प्रभावित करता है)।

ध्यान दें कि -force_load एक एकल लाइब्रेरी के लिए काम करता है, और आपको प्रत्येक सबप्रोजेक्ट लाइब्रेरी के लिए एक अलग -force_load निर्दिष्ट करने की आवश्यकता हो सकती है।


मेरे पास यह मुद्दा था और इसे हल करने के लिए 1 घंटे के करीब बिताया। धन्यवाद भगवान! हो गया है। जिन विधियों को परिभाषित किया गया है वे स्थिर प्रकार के होने चाहिए!







categories