2011-01-12 7 views
13

मैं कोड के दो सेट बनाए रखना नहीं चाहता हूं। मुझे बस लाइट संस्करण में कुछ विशेषताओं को सीमित करने और उस पर कुछ विज्ञापन जोड़ने की आवश्यकता है।एक एक्सकोड परियोजना के आधार पर आईफोन ऐप के लाइट और पूर्ण संस्करण दोनों को कैसे बनाया जाए?

यह कैसे करें?

उत्तर

25

एकाधिक लक्ष्य बनाएं।

आप लक्ष्य पर राइट-क्लिक करके और जानकारी प्राप्त करने के द्वारा कॉन्फ़िगरेशन बना सकते हैं। वहां से, आप परिवर्तन की तरह चीजें कर सकते हैं जो Info.plist फ़ाइल को देख रहे हैं (नाम पर "लाइट" जोड़ने और आइकन/लोड छवियों को बदलने जैसी चीजों को करने के लिए) और कंपाइलर झंडे सेट करें ताकि आप स्थानों पर #ifdef कर सकें।

यदि ऐसी कई फ़ाइलें हैं जो केवल पूर्ण संस्करण में लागू होती हैं, तो आप उन पर राइट-क्लिक कर सकते हैं और उन्हें छोटे ऐप बनाने के लिए लाइट लक्ष्य से हटा सकते हैं।

मैंने कई विकल्पों के साथ प्रयोग किया है, जैसे एकाधिक कॉन्फ़िगरेशन, और मैं कई लक्ष्यों पर वापस आ रहा हूं। मेरे पास आमतौर पर कम से कम तीन परिभाषित होते हैं - विकास, विज्ञापन और ऐप स्टोर, प्रत्येक अपनी विशेष सेटिंग्स के साथ।

+0

जिम - जब आप एक नया लक्ष्य बनाते हैं, तो क्या आपको सभी फाइलों या केवल उन फ़ाइलों को कॉपी करना होगा जो आम नहीं हैं? उदाहरण के लिए, मेरे पास थोड़ा अलग स्क्रीन फ़ाइल (.xib) है ... मैं मूल रूप से एक बटन अक्षम करना चाहता हूं और लेबल में अतिरिक्त टेक्स्ट जोड़ना चाहता हूं। तो जब मैं एक नया लक्ष्य तैयार करता हूं तो क्या मुझे मूल (.xib) पर प्रतिलिपि बनाना चाहिए और नए लक्ष्य में परिवर्तन करना चाहिए? – milesmeow

+0

यदि परिवर्तन नाबालिग हैं, तो मैं प्रत्येक लक्ष्य के लिए बिल्ड सेटिंग्स में प्रीप्रोसेसर मैक्रो प्रदान करता हूं, फिर कोड में परिवर्तन करने के लिए '# ifdef' का उपयोग करता हूं। – Jim

+0

यदि अधिक व्यापक मतभेद हैं, तो मैं प्रत्येक लक्ष्य के लिए एक निर्देशिका तैयार करता हूं, और प्रत्येक फ़ोल्डर में निब की एक प्रति डालता हूं, प्रत्येक को अपने लक्ष्य के लिए सक्षम बनाता है। जब एप्लिकेशन बंडल बनाया जाता है, तो एक्सकोड मूल फ़ोल्डर संरचना (डिफ़ॉल्ट रूप से) को अनदेखा करता है और उस लक्ष्य के लिए फ़ाइलों को एक फ्लैट निर्देशिका संरचना में कॉपी करता है। चूंकि यह केवल दो फाइलों में से एक की प्रतिलिपि बनाएगा, आप सही निब के साथ समाप्त हो जाएंगे। – Jim

15

मौजूदा एक्सप्लोर करके डुप्लिकेट करके अपने एक्सकोड प्रोजेक्ट में अतिरिक्त लक्ष्य जोड़ें। नए लक्ष्य में किसी मैक्रो (के तहत "पूर्वप्रक्रमक मैक्रो" का निर्माण सेटिंग्स में) "macroIsFreeVersion"

अब की तरह कुछ को परिभाषित करें, तो आप ऐसा कर सकते हैं:

#ifdef macroIsFreeVersion 
    // code that will only execute in the free version here 
#endif 

और इस:

#ifndef macroIsFreeVersion 
    // code for only the paid version goes here 
#endif 

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

+0

हाय विलियम: मैं एक्सकोड 4 में हूं (कृपया मुझे बीसी के साथ सहन करें यह पहली बार है कि मैं इस multitarget config को करने और संकलक झंडे के साथ काम करने की कोशिश कर रहा हूं)। मेरे पास "ऐप्पल एलएलवीएम कंपाइलर 2.0 - प्रीप्रोकैसिंग" -> "प्रीप्रोसेसर मैक्रोज़" है। इसके तहत मेरे पास डीबग, रिलीज, माइप्रोजेक्ट है। तो अपने उदाहरण का पालन करने के लिए मैं इन तीन क्षेत्रों में बस "macroIsFreeVersion" डालूँगा? – milesmeow

+0

हां, हालांकि मैंने हाल ही में सीखा है कि आप इसे जानकारी शब्दकोश के माध्यम से भी कर सकते हैं - विधि [[NSBundle mainBundle] infoDictionary] है। आपके सेटअप के आधार पर, यह एक बेहतर समाधान हो सकता है या नहीं भी हो सकता है। –

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