ProjectName-Prefix.pch Xcode 6 में स्वचालित रूप से क्यों नहीं बनाया गया है?


264

ProjectName-Prefix.pchमें स्वचालित रूप से क्यों नहीं बनाया गया है Xcode 6?

क्या Precompile हैडर की अब आवश्यकता नहीं है?

मुझे वह कोड कहां लिखना चाहिए जो ProjectName-Prefix.pchपहले था ?

जवाबों:


136

मुझे मॉड्यूल के कारण संदेह है, जो की आवश्यकता को दूर करते हैं #import <Cocoa/Cocoa.h>

जहां आप एक उपसर्ग हैडर में रखा जाएगा, जहां कोड डाल करने के लिए के रूप में, वहाँ कोई कोड आप उपसर्ग हैडर में रखा जाना चाहिए है। अपने आयात को उन फ़ाइलों में डालें जिनकी उन्हें आवश्यकता है। अपनी परिभाषाओं को उनकी अपनी फाइलों में डालें। अपना मैक्रोज़ डालो ... कहीं नहीं। जब तक कोई दूसरा तरीका न हो (जैसे जब आपको ज़रूरत हो __FILE__) मैक्रोज़ लिखना बंद कर दें । यदि आपको मैक्रोज़ की आवश्यकता है, तो उन्हें हेडर में रखें और इसे शामिल करें।

उपसर्ग हेडर उन चीजों के लिए आवश्यक था जो विशाल हैं और पूरे सिस्टम में लगभग हर चीज द्वारा उपयोग की जाती हैं (जैसे Foundation.h)। यदि आपके पास कुछ ऐसा है जो विशाल और सर्वव्यापी है, तो आपको अपनी वास्तुकला पर पुनर्विचार करना चाहिए। उपसर्ग हेडर कोड का पुन: उपयोग कठिन बनाते हैं, और सूचीबद्ध फ़ाइलों में से किसी को भी बदल सकते हैं, तो सूक्ष्म बिल्ड समस्याओं का परिचय देते हैं। जब तक आपके पास एक गंभीर बिल्ड टाइम समस्या नहीं है, तब तक उससे बचें। आप उपसर्ग हेडर के साथ नाटकीय रूप से सुधार कर सकते हैं।

उस मामले में आप एक बना सकते हैं और इसे क्लैंग में पास कर सकते हैं, लेकिन यह अविश्वसनीय रूप से दुर्लभ है कि यह एक अच्छा विचार है।


संपादित करें: एक HUD के बारे में अपने विशिष्ट प्रश्न के लिए जिसे आप अपने सभी दृश्य नियंत्रकों में उपयोग करते हैं, हाँ, आपको इसे हर उस दृश्य नियंत्रक में बिल्कुल आयात करना चाहिए जो वास्तव में इसका उपयोग करता है। यह निर्भरता को स्पष्ट करता है। जब आप किसी नए प्रोजेक्ट में अपने व्यू कंट्रोलर का पुनः उपयोग करते हैं (जो कि यदि आप अपने कंट्रोलर्स को अच्छी तरह से बनाते हैं) तो आपको तुरंत पता चल जाएगा कि उसे क्या चाहिए। यह श्रेणियों के लिए विशेष रूप से महत्वपूर्ण है, जो कोड का पुन: उपयोग करने के लिए बहुत कठिन बना सकते हैं यदि वे निहित हैं।

पीसीएच फ़ाइल लिस्टिंग निर्भरता से छुटकारा पाने के लिए नहीं है। आपको अभी भी आयात करना चाहिए UIKit.hया Foundation.hआवश्यकतानुसार, जैसा कि Xcode टेम्प्लेट करते हैं। PCH का कारण बिल्ड समय में सुधार करना है जब वास्तव में बड़े पैमाने पर हेडर (जैसे UIKit) से निपटना हो।


102
@ आपका उत्तर व्यक्तिपरक शेख़ी है। मैं इस बात से सहमत नहीं हूं कि इसे इस प्रश्न के उत्तर के रूप में स्वीकार किया जाना चाहिए। आप बिना pch के इस github.com/seancook/TWReverseAuthExample/blob/… जैसा कुछ कैसे लागू करेंगे ? प्रत्येक और हर फ़ाइल में लॉग आयात करें? यह आपके कोड में अनावश्यक ब्लोट का एक पूरा ढेर बनाता है।
मैक्सिम वीक्स्लर

26
प्रत्येक फ़ाइल जो वास्तव में उस मैक्रो का उपयोग करती है, हां (मेरे अनुभव में यह आमतौर पर सिस्टम की प्रत्येक फ़ाइल से कम है)। यह मेरी बात का बहुत अच्छा उदाहरण है। इसे आयात करने से यह तथ्य सामने आता है कि आपके पास इस लॉगिंग मैक्रो पर निर्भरता है। जब आप कॉपी करने की कोशिश करते हैं TWAPIManager.m, उदाहरण के लिए, किसी अन्य प्रोजेक्ट के लिए, आपको ऐसी त्रुटियां मिलेंगी जो TWALog()परिभाषित नहीं हैं, जहां कोई संकेत नहीं है कि इसे कहां खोजना है। मैंने कोड को साझा करने की कोशिश कर रही कई बड़ी परियोजनाओं पर बिल्कुल समस्या का सामना किया है। TWAPILog.hइसे बनाना और आयात करना तुच्छ देव लागत के साथ इसे हल करता है।
रोब नेपियर

5
मैं लगभग हर वर्ग में ReactiveCocoa का उपयोग करता हूं, यह मेरे लिए एक pch फ़ाइल का उपयोग न करने के लिए पागल होगा ...
स्टेफानो

2
न केवल मॉड्यूल, लेकिन स्विफ्ट समर्थन शायद एक बड़ा टुकड़ा है।
uchuugaka

12
कुंजी यह है कि पीसीएच एक पूर्व-संकलित हेडर है । पूर्व-संकलन बिल्ड प्रदर्शन के लिए है, न कि स्वचालित उपलब्धता। पूर्व-संकलन आपके निर्माण को गड़बड़ाने के कई तरीके पेश करता है, और उन बड़ी चीजों के लिए आरक्षित होना चाहिए जो गैर-स्वच्छ बिल्ड (जैसे फाउंडेशन) के बीच कभी नहीं बदलती हैं।
रोब नेपियर

425

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

  1. प्रोजेक्ट में नई PCH फ़ाइल जोड़ें: नई फ़ाइल> अन्य> PCH फ़ाइल

  2. लक्ष्य की बिल्ड सेटिंग विकल्प में, अपने PCH फ़ाइल नाम के लिए Prefix Header का मान सेट करें, परियोजना का नाम उपसर्ग के रूप में (यानी नाम प्रोजेक्ट TestProjectऔर PCH फ़ाइल नाम के लिए, plist MyPrefixHeaderFileमें मान जोड़ें TestProject/MyPrefixHeaderFile.pch)।

    सुझाव: आप जैसी चीजों का उपयोग कर सकते $(SRCROOT)या $(PROJECT_DIR)की जहां डाल पथ को पाने के लिए .pchइस परियोजना में।

  3. लक्ष्य निर्माण बिल्ड विकल्प पर, Precompile Prefix Header का मान सेट करें YES


32
PCH फ़ाइलों पर मेरी राय के बावजूद, +1। यह अभी भी लोगों के लिए उपयोगी है कि वे उपकरण का उपयोग कैसे करें।
रोब नेपियर

20
@ येदिया, मैं सिर्फ इस बात का त्वरित धन्यवाद कहना चाहता था कि आपने इस बारे में जो भी निर्णय लिया है, उसके बावजूद सवाल का जवाब देने के लिए समय निकालें। मैं सराहना करता हूं कि जब लोग प्रश्न को हल करने के बजाय केवल सौहार्दपूर्ण ढंग से प्रश्नों के उत्तर देने में समय लगाते हैं, तो वह कितना बीमार होता है।
कैम्पो

3
धन्यवाद। जब मैं अपने कुछ उद्देश्य-सी को एक स्विफ्ट परियोजना में शामिल करता हूं, तो मुझे यह उपयोगी लगता है, इसलिए मुझे वापस जाने की आवश्यकता नहीं है और उन प्रत्येक .m फ़ाइलों में फ़ाइलों को शामिल करना चाहिए।
क्रिस प्रिंस

ओबीजीसी से स्विफ्ट में संक्रमण करते समय बहुत आसान है - मेरे पास ओब्जेक्ट में लिखे पुस्तकालयों का एक ढेर है और आखिरी चीज जो मैं करना चाहता हूं, वह है सही सिस्टम हेडर को शामिल करने के लिए उन सभी को संपादित करना।
इचेलन

1
यह मेरे लिए काम नहीं आया क्योंकि मैंने लक्ष्य की निर्माण सेटिंग का उपयोग किया था। हालाँकि, जब मैंने इस अनुदेशक का अनुसरण किया तो प्रोजेक्ट बिल्ड सेटिंग्स को संशोधित करने के बजाय सब कुछ काम किया।
पॉल

128

आपको स्वयं PCH फ़ाइल
ऐड बनाने की आवश्यकता हैNew file -> Other-> PCH file

फिर अपने निर्माण के लिए इस PCH फ़ाइल का पथ जोड़ें setting->prefix header->path

($ (SRCROOT) /filename.pch)

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


3
खैर, काम कर रहे डायर के आधार पर, चर भिन्न हो सकते हैं। मैं उपयोग कर रहा हूँ$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
अलेजांद्रो इवान

यदि आप .pch फ़ाइल को किसी विशेष फ़ोल्डर में रखते हैं, तो स्थिति उत्पन्न हुई।
प्रकाश राज

51

मैं तुम्हें एक तस्वीर के साथ दिखाता हूँ!

  1. एक नई फ़ाइल जोड़ें एक नई फ़ाइल जोड़ें

  2. पर जाएं परियोजना / स्थापना बिल्ड / Appl LLVM 6.0-भाषा एक नई फ़ाइल जोड़ें


24

.Pch फ़ाइल जोड़ने के लिए-

1) अपने प्रोजेक्ट में नई .pch फ़ाइल जोड़ें-> नई फ़ाइल-> अन्य-> PCH फ़ाइल

2) अपने प्रोजेक्ट की बिल्ड सेटिंग पर जाएं।

3) "प्रीफ़िक्स हेडर" खोजें। आप Apple LLVM के तहत पा सकते हैं।

४) इसे खेत में पेस्ट करें $(SRCROOT)/yourPrefixHeaderFileName.pch

5) प्रोजेक्ट को स्वच्छ और निर्माण करें। बस!!!

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


12

यदि आप मैन्युअल रूप से .pch फ़ाइल जोड़ने का निर्णय लेते हैं और आप x-कोड 6 से पहले की तरह ही Objective-C का उपयोग करना चाहते हैं, तो आपको .pch फ़ाइल में UIKit और Foundation फ्रेमवर्क आयात करना होगा। अन्यथा आपको प्रत्येक हेडर फ़ाइल में इन रूपरेखाओं को मैन्युअल रूप से आयात करना होगा। आप वैसे भी निम्न कोड जोड़ सकते हैं क्योंकि यह प्रयुक्त भाषा के लिए परीक्षण करता है:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

2
वह सब कुछ जिसमें ओब्जेसी कोड शामिल है, उसे ऊपर #ifdef _ OBJC _ के अंदर लपेटा जाना चाहिए , अन्यथा आपको C स्रोतों से त्रुटियां मिलेंगी (यदि आपके पास ऐसे स्रोत हैं) जो आप कभी नहीं समझ पाएंगे
ishahak


7

नई PCH फ़ाइल जोड़ने के लिए bellow चरणों का पालन करें:

(1) नया fiew जोड़ें - आईओएस का चयन करें - अन्य और पीसीएच फ़ाइल

(2) इस PCH फ़ाइल का पथ अपने प्रोजेक्ट में जोड़ें - BuildSetting - Apple LLVM 6.0 भाषा

सेट उपसर्ग हैडर पथ YourApplicationName (रूट-पथ) /filename.pch जोड़ें


कृपया अंतिम को स्पष्ट करें। उपसर्ग हेडर पथ जोड़ें।
नवेद अब्बास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.