2014-06-17 4 views
43

मैं आईओएस 8 विकास के लिए स्विफ्ट प्रोग्रामिंग भाषा के साथ एक उद्देश्य सी ढांचे का उपयोग करने की कोशिश कर रहा हूं। यह आयात का एक विशिष्ट मामला है लेकिन सामान्य समस्या यह है:आईओएस 8 ऐप स्विफ्ट करने के लिए उद्देश्य सी फ्रेमवर्क कनेक्ट करें (पार्स फ्रेमवर्क)

आप एक उद्देश्य सी ढांचे को तेजी से कैसे आयात करते हैं और आयात को मान्यता प्राप्त करते हैं?

मैं आईओएस 8 और एक्सकोड 6 बीटा का उपयोग करके एक त्वरित एप्लिकेशन में पार्स फ्रेमवर्क को एकीकृत करने की कोशिश कर रहा हूं।

यहाँ उद्देश्य सी में पार्स ढांचे एकीकरण करने की तकनीक है:

https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing

मैं एक संपीड़ित संग्रह के रूप में पार्स ढांचे डाउनलोड किया है, यह निकाला, और Xcode 6 में किसी भी समस्याओं के बिना इसे आयात किया। मेरे आवेदन के भीतर यह Parse.framework नाम के तहत एक उचित रूप से स्वरूपित ढांचे के रूप में दिखाई देता है।

मेरी वर्तमान विचार प्रक्रिया AppDelegate.swift फ़ाइल को मेरी प्रोजेक्ट की मूल निर्देशिका में संशोधित करना है।

https://gist.github.com/fconcklin/e8ef7d8b056105a04161

मैं लाइन import UIKit नीचे लाइन import Parse जोड़कर पार्स आयात करने के लिए कोशिश की है: यहाँ संशोधनों के बिना वर्तमान फ़ाइल (स्वचालित रूप से तेजी से परियोजना निर्माण पर Xcode द्वारा उत्पन्न) है। हालांकि, एक्सकोड एक चेतावनी जारी करता है कि ऐसा कोई मॉड्यूल नहीं मिला है और निर्माण विफल हो जाता है।

मैंने ${PROJ_NAME_HERE}-Bridging-Header.h फ़ाइल बनाने का भी प्रयास किया जिसमें import <Parse/Parse.h> का उपयोग करके पार्स का उद्देश्य सी आयात शामिल है। यह रेखा एक त्रुटि नहीं फेंकता है लेकिन अंत में कोई फर्क नहीं पड़ता है।

अग्रिम धन्यवाद। मुझे बताएं कि आपको और जानकारी चाहिए या नहीं।

+1

हैडर परियोजना गुण में सेट को पूरा करने के लिए पथ है पर बताया गया है? प्रोजेक्ट गुणों को लाएं और "स्विफ्ट कंपाइलर - कोड जनरेशन" अनुभाग के तहत "उद्देश्य-सी ब्रिजिंग हैडर" देखें। बस एक ब्रिजिंग हेडर फ़ाइल होने के लिए पर्याप्त नहीं है - आपको परियोजना में पथ स्थापित करना होगा। –

उत्तर

42

ए 'मूर्ख सबूत "एक ब्रिजिंग हेडर को जोड़े के रास्ते इस प्रकार है:

आप एक स्विफ्ट परियोजना है, तो अपनी परियोजना के लिए एक नया ऑब्जेक्टिव-सी फ़ाइल जोड़ सकते हैं और Xcode यदि संकेत देगा एक ब्रिजिंग हेडर के साथ अपनी परियोजना को कॉन्फ़िगर करना चाहते हैं। हाँ दबाएं

आप एक ऑब्जेक्टिव-सी परियोजना है, तो यह करने के लिए एक नया स्विफ्ट फ़ाइल जोड़ सकते हैं और आप एक ही शीघ्र मिल जाएगा। हाँ दबाएं

ब्रिजिंग हेडर प्राप्त करने के बाद, यदि आप चाहें तो फ़ाइल को हटा सकते हैं।

+0

संक्षिप्त और सही। –

+2

मेरे पास एक त्वरित परियोजना है, लेकिन जब मैं ओबीजेसी हेडर फ़ाइल (xcode 6 b4) जोड़ता हूं तो मुझे दिखाने के लिए एड ब्रिजिंग हेडर संदेश नहीं मिल सकता है। कोई विचार? – ZuluDeltaNiner

+0

@ZuluDeltaNiner मुझे तब तक एक ही समस्या थी जब तक मुझे एहसास हुआ कि मैंने एक और ढांचा आयात किया है जो पहले से ही ब्रिजिंग क्लास बना चुका है। क्या यह हो सकता है कि आपने पहले ही ब्रिजिंग हेडर क्लास बनाया है? – Maxwell

61

आगे के शोध के बाद मुझे समाधान मिला और मुझे एहसास हुआ कि मैं उलझन में था।

सही दृष्टिकोण इस प्रकार है:

  • खींचने और एक Xcode 6 स्विफ्ट परियोजना में ढांचे छोड़ने के द्वारा अपने उद्देश्य सी ढांचे आयात करें।

  • अपनी प्रोजेक्ट में एक नई उद्देश्य सी फ़ाइल बनाएं (फ़ाइल-> नई-> फ़ाइल [आईओएस के लिए उद्देश्य सी])।

  • उद्देश्य सी और स्विफ्ट के बीच ब्रिजिंग हेडर फ़ाइल बनाने के लिए प्रॉम्प्ट (सहमत) स्वीकार करें।

  • अपने नव निर्मित उद्देश्य सी फ़ाइल हटाएँ लेकिन ब्रिजिंग हेडर फाइल ${YOURPROJ}-Bridging-Header.h बरकरार रहती है।

  • ब्रिजिंग हेडर फाइल में, मानक उद्देश्य सी आयात वाक्य रचना (जैसे #import <Parse/Parse.h>) का उपयोग कर अपने ढांचे आयात करते हैं।

  • यह आपके AppDelegate.swift फ़ाइल में एक import Parse बयान प्रदर्शन करने की जरूरत है त्याग देता है। अब आप कोड लिख सकते हैं जो ब्रिजिंग हेडर का उपयोग करके आयात किए जाने तक जो भी ढांचा तैयार करता है। यह आपके प्रोजेक्ट की स्विफ्ट फाइलों में उपलब्ध है।

अब, अगर आप अपनी परियोजना में पार्स एकीकरण परीक्षण करना चाहते हैं, तो आप Parse. टाइप करें और ढांचे ब्राउज़ करें और देखते हैं कि कोड पूरा होने के एक सफल आयात का संकेत है करने के लिए कोड पूर्णता का उपयोग कर सकते हैं।

हालांकि, यहां एक और चेतावनी है जिसे ब्रिजिंग हैडर फ़ाइल का उपयोग करते समय संबोधित करने की आवश्यकता है। ढांचे की सभी निर्भरताओं को ब्रिजिंग हैडर फ़ाइल में भी निर्दिष्ट करने की आवश्यकता है। एक स्विफ्ट आवेदन में पार्स ढांचे को एकीकृत करने के मामले में अपने ब्रिजिंग हैडर फ़ाइल इस तरह दिखेगा:

#import <Foundation/Foundation.h> 

// Parse Dependencies 
#import <AudioToolbox/AudioToolbox.h> 
#import <CFNetwork/CFNetwork.h> 
#import <CoreGraphics/CoreGraphics.h> 
#import <CoreLocation/CoreLocation.h> 
#import <MobileCoreServices/MobileCoreServices.h> 
#import <QuartzCore/QuartzCore.h> 
#import <Security/Security.h> 
#import <StoreKit/StoreKit.h> 
#import <SystemConfiguration/SystemConfiguration.h> 

// Import parse framework 
#import <Parse/Parse.h> 

आशा इस मदद करता है।

+0

पूर्णता के लिए धन्यवाद! मैं जल्द ही यह कोशिश करूँगा। – LostInTheTrees

+0

इस उत्तर के लिए धन्यवाद यह वास्तव में काम करता है, बात यह है कि यह महसूस करना बहुत मुश्किल है कि आपको अपनी तेज़ फाइलों में पार्स आयात नहीं करना पड़ेगा! –

+0

जब मैं ऐसा करता हूं और दूसरी स्विफ्ट फ़ाइल पर जाता हूं, तो मुझे "SourceKitService क्रैश हो जाता है। संपादक फ़ंक्शन अस्थायी रूप से सीमित" होता है जब तक कि मैं हेडर को हटा नहीं देता। – milesper

0

मेरी समस्या का उत्तर अलग था। मेरे पास मेरे प्रोजेक्ट की बिल्ड सेटिंग्स पर फ्रेमवर्क खोज पथ रिकर्सिव पर सेट किए गए थे जब उन्हें गैर-रिकर्सिव होना चाहिए था।

मेरे मामले में, मेरा लक्ष्य अपनी फ्रेमवर्क खोजें पथ $ करने के लिए सेट है (विरासत में मिला है), अपने प्रोजेक्ट से सेटिंग इनहेरिट करने जिसका मतलब है।

मेरे परियोजना की रूपरेखा खोजें पथ केवल था एक पथ, $ PROJECT_DIR /../ बाहरी/** (दो सितारे "रिकर्सिवली खोज इस फ़ोल्डर" अर्थ के साथ। मेरे Parse.framework फ़ाइल में स्थित था ।। बाहरी फ़ोल्डर के आधार स्तर

मेरे लिए पुनरावर्तीको गैर पुनरावर्ती तय चीजों से पथ बहुत अजीब बदलने ...

8

स्विफ्ट परियोजना के लिए पार्स ढांचे को जोड़ने के लिए: इस जोड़े lib स्विफ्ट परियोजना के लिए मेष।

enter image description here

अपनी परियोजना के लिए ParseSDK से इस चौखटे पेस्ट करें:

enter image description here

एक ProjectName-ब्रिजिंग-Header.h (https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html) (https://stackoverflow.com/a/24272431/1847511) इस तरह की सामग्री के साथ फ़ाइल जोड़ें।

enter image description here

ब्रिजिंग हैडर टाई करने के लिए पथ जोड़ें:

enter image description here

TestCode जोड़ें:

enter image description here

भागो एप्लिकेशन।

1

नया पार्स फ्रेमवर्क संस्करण कुछ अपडेट की आवश्यकता है।

जैसे आप #import और #import

-1

'ऑब्जेक्टिव-सी हैडर ब्रिजिंग' चाल करना होगा साथ लाइब्रेरी बाइनरी के साथ पुस्तकालय और अद्यतन हेडर फाइल में libsqlite3.0.dylib डालूँ।

खैर link ("स्विफ्ट और Xcode 6 साथ पार्स का उपयोग करना")

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