ऐप एक्सटेंशन के साथ कोकोपोड्स का उपयोग करें


83

मैं Xcode 6 Beta-6 में एक फोटो ऐप एक्सटेंशन बनाने की कोशिश कर रहा हूं जो कोकोपोड्स लाइब्रेरी का उपयोग करता है। फोटो विस्तार के लिए Xcode बनाने वाला ब्रिजिंग हेडर कोकोपोड्स से कुछ भी नहीं देख सकता है।

उदाहरण के लिए: #import <GPUImage/GPUImage.h>त्रुटि के परिणाम "GPUImage/GPUImage.h" file not found

मैंने आयात के लिए हर अनुमान योग्य मार्ग (कोष्ठक और उद्धरण के साथ) की कोशिश की है और लगभग कोई सफलता नहीं मिली है। अपवाद यह है कि साधारण पॉड्स के लिए SVProgressHUD, निम्न बदसूरत भयानक हैक काम करता है #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h":।

लेकिन GPUImage के लिए, यह GPUImage.hहेडर में चलता है और यह तय करता है GPUImageContext.hकि कोई समस्या नहीं होने के बावजूद इसे अचानक नहीं देखा जा सकता है जब इसे सामान्य स्विफ्ट कोड के लिए ब्रिजिंग हेडर के साथ आयात किया जाता है जो ऐप एक्सटेंशन का हिस्सा नहीं है।

एप्लिकेशन एक्सटेंशन के संकलन के बारे में क्या अलग है जो ब्रिजिंग हेडर को पूरी तरह से व्यवहार करने से रोक रहा है?

नोट: मैंने इस ट्यूटोरियल के हर संभव क्रमांकन को पढ़ा है और यह तुरंत लागू नहीं है, बस अगर किसी को लगता है कि उन्हें वहां उत्तर मिल गया है।

साथ ही, इस SO प्रश्न में वर्णित समस्या संबंधित हो सकती है, लेकिन मैंने यह प्रश्न वैसे भी पूछा है जब मेरा मुद्दा ऐप एक्सटेंशन के लिए विशिष्ट है।


यह मेरे लिए सही समाधान है [कोकोपद भी विजेट के लिए (या लक्ष्य)] [1] [१]: stackoverflow.com/a/17850444/1415713
कुर्तानामो २५'१४

जवाबों:


65

ऐसा करने का उचित तरीका यह है कि अपने पॉडफाइल को सिर्फ 1 लाइन जोड़ने के लिए अपडेट करें:

link_with 'yourApp', 'yourAppExtension'

और एक फली अद्यतन समस्या को हल करना चाहिए।


3
सही बात! मुझे विश्वास नहीं हो रहा है कि मुझे यह नहीं मिला।
दानबलामोर

1
'YouAppExtension ’भाग क्या है?
नैट उनी

6
पॉड फ़ाइल में मुझे कहाँ से लाइनें जोड़नी चाहिए?
देकेल ममन

7
जैसा कि @Sti ने कहा, यह अब काम नहीं करता है और त्रुटि संदेश देता है "अमान्य Podfileफ़ाइल: [!] link_withपॉडफाइल का विनिर्देश अब असमर्थित है, कृपया इसके बजाय लक्ष्य ब्लॉकों का उपयोग करें .."
Ryan

2
link_withपोडफाइल के विनिर्देश अब असमर्थित हैं, कृपया इसके बजाय लक्ष्य ब्लॉकों का उपयोग करें। यह समाधान पदावनत है।
मेहुल

85

EDIT (2015/03/10)

नया स्वीकृत उत्तर देखें। मैंने इसे एक नए प्रोजेक्ट में आज़माया और इसने काम किया, हालाँकि मेरे टेस्ट पॉड्स में शेयर्डऐप्लिकेशंस का इस्तेमाल किया गया था जो कि एक्सटेंशन में अस्वीकृत है। तथ्य यह है कि उन्होंने उन त्रुटियों को दिखाया है इसका मतलब है कि यह ठीक से जुड़ा हुआ है। @LeChatNoir जाने का रास्ता!


सफलता।

समाधान इस प्रकार है: एक बार जब आप अपना ऐप एक्सटेंशन कर लेते हैं और यह कोकोपोड्स का उपयोग करके किसी प्रोजेक्ट में हेडर लगा रहा है और आप उन कोकोपॉड्स लाइब्रेरी में से किसी एक का उपयोग करना चाहते हैं, तो पॉड को शामिल करने की कोशिश करना जैसे #import <GPUImage/GPUImage.h>विफल हो जाएगा।file not found

सबसे पहले, सुनिश्चित करें कि आप एप्लिकेशन एक्सटेंशन (अपने प्रोजेक्ट फ़ाइल पर क्लिक करें, फिर एक्सटेंशन लक्ष्य पर) के खिलाफ लिंक करने के लिए कहें libPods.a, अपने ऐप लक्ष्य की तरह।

अगला, अपनी वास्तविक परियोजना में (अपनी परियोजना फ़ाइल पर क्लिक करें, फिर प्रोजेक्ट फ़ाइल पर फिर से "प्रोजेक्ट" इनर साइडबार के अनुभाग में) जानकारी टैब के तहत, डिबग, रिलीज़ और इनहाउस का उपयोग करने के लिए एक्सटेंशन का कॉन्फ़िगरेशन सेट करें ड्रॉपडाउन से "पॉड्स" कॉन्फ़िगरेशन। पॉड इंस्टॉल आपके लिए ऐसा नहीं करेगा, इसलिए आपको इसे स्वयं करने की आवश्यकता होगी।

अंत में, सुनिश्चित करें कि पॉड्स प्रोजेक्ट के लक्ष्य और आपके प्रोजेक्ट के लक्ष्य दोनों में वे सभी आर्किटेक्चर हैं जिनकी आपको वैलिड आर्किटेक्चर चर में निर्माण करने की आवश्यकता है या आपको कभी-कभी अपरिभाषित प्रतीकों की त्रुटि मिलेगी।

यह काम करना चाहिए और आपको अपनी पसंद के पॉड्स को सामान्य की तरह आयात करने की अनुमति देता है।


EDIT (2014/10/14): एक तरफ, चूंकि आप स्विफ्ट एक्सटेंशन में अपने स्वयं के प्रोजेक्ट कोड से ऑब्जेक्टिव-सी फाइलें भी शामिल कर सकते हैं, इसलिए आपको यह सुनिश्चित करना चाहिए कि .mआपके द्वारा ब्रिजिंग हेडर में रखी गई कोई भी फाइल संकलित हो। विस्तार लक्ष्य द्वारा। आप या तो लक्ष्य के लिए संकलन स्रोतों मेनू से या .mXcode में दाईं साइडबार के "लक्ष्य सदस्यता" अनुभाग का उपयोग करके फ़ाइल में कर सकते हैं।


मेरे पास सभी चरणों के ऊपर लागू है .. लेकिन समस्या हो रही है .. वास्तुकला armv7 के लिए अपरिभाषित प्रतीक: "_OBJC_CLASS _ $ _ स्थान", से संदर्भित: objc-class-ref में TodayViewController.o कृपया मेरी मदद करें। इसे कैसे हल करें
उर्मि

मेरे पास "Location.h" फ़ाइल आयात है और आज के विस्तार में + वर्ग विधि का उपयोग करें ... तो मैं इस मुद्दे से ऊपर उठूंगा।
उर्मि

1
क्या आपने यह सुनिश्चित किया है कि फ़ाइल एक्सटेंशन लक्ष्य का भी सदस्य है? यह भी जांचें कि आप सही वास्तुकला के लिए निर्माण कर रहे हैं।
DanBlakemore

मैंने जाँच की है कि वास्तुकला सही है। लेकिन फाइल अगर एक्सटेंशन टारगेट का सदस्य नहीं है। लेकिन क्या मैं उन फ़ाइलों का उपयोग नहीं कर सकता जो पहले से ही ऐप में हैं?
उर्मी

3
मुझे एक्सटेंशन बिल्ड सेटिंग्स में OTHER_LD_FLAGS के लिए $ (विरासत में मिली) भी डालनी थी।
ट्वायली

71

उपरोक्त उत्तर काम करेंगे, लेकिन मैं केवल अपने विस्तार में एक जोड़े की फली चाहता था, इसलिए मैंने अपने पॉडफाइल के लिए निम्न कार्य किया:

target '[Main App Target Name]' do
        pod ...
        pod ...
        pod ...
end

target '[Extension Target Name]' do
        pod ...
end

और फिर एक pod installकरेंगे!


2
सबसे बढ़िया उत्तर। इस तरह मैं अपने iOS एक्सटेंशन को अनावश्यक फली
Marcelosalloum

बहुत बढ़िया! धन्यवाद!
user3427013

1
यह एक सही जवाब है। link_withएक्सकोड त्रुटि के कारण: पोडफाइल के विनिर्देश अब असमर्थित हैं, कृपया इसके बजाय लक्ष्य ब्लॉकों का उपयोग करें ..
मेहुल

4

यहां छवि विवरण दर्ज करें

link_with, अब आप इसका उपयोग नहीं करेंगे।

अमान्य Podfileफ़ाइल: [!] link_withपोडफाइल का विनिर्देश अब असमर्थित है, कृपया इसके बजाय लक्ष्य ब्लॉक का उपयोग करें ..

नीचे सही answe है, परीक्षण भी किया गया।

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘9.0’
use_frameworks!
inhibit_all_warnings!

target 'DemoTodayWidget' do
    pod 'Reachability',                         '~> 3.2'
end

target 'My Widget' do
    pod 'Reachability',                         '~> 3.2'
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.