2015-10-14 14 views
5

मेरे पास निम्न प्रोटोटाइप के रूप में मेरे ऐप की होम स्क्रीन है: enter image description here इस होम स्क्रीन को ध्यान में रखते हुए, मुझे ऐप को इस तरह विकसित करना होगा कि इन चारों में से प्रत्येक सुविधा को बिल्ड समय पर प्लग करने योग्य होना चाहिए। उदाहरण के लिए,बिल्ड समय पर आईओएस ऐप मॉड्यूलरेशन

अगर मैं की तरह

#define FEATURE_1 0 

तो एक मैक्रो सेट, होम स्क्रीन शेष तीन सुविधाओं के लिए केवल 3 टाइल होगा। साथ ही, फीचर -1 से संबंधित फाइलें परिणामी .ipa में संकलित नहीं होनी चाहिए।

जब मैं इन चार मॉड्यूल विकसित कर रहा था, मैंने सभी वर्गों को एक-दूसरे से स्वतंत्र रखा है। लेकिन समस्या यह है कि मेरे पास एक सिंगल स्टोरीबोर्ड है जिसमें पूरा यूआई है। अब, मुझे यूआई और संसाधनों को इस तरह से अलग करना होगा कि अगर किसी भी सुविधा को बंद कर दिया गया है, तो उस सुविधा से संबंधित कोई भी फाइल संकलित नहीं होनी चाहिए।

क्या मैं की कोशिश की है: मैंने कहीं पढ़ा है कि प्रत्येक सुविधा बनाने के रूप में एक स्थिर पुस्तकालय मेरा काम करवा जाएगा, फिर भी, मैं समझ नहीं सकता मैं/कैसे शामिल होगा निर्माण समय में एक स्थिर पुस्तकालय शामिल नहीं है। साथ ही, यह स्टोरीबोर्ड में विचारों को अलग करने की मेरी समस्या का समाधान नहीं करता है।

विशेष रूप से, सवाल मैं कर रहे हैं:

1) कैसे मैं अपने प्रोजेक्ट के लिए विशिष्ट फ़ाइलों की प्रतिलिपि और मैक्रो के आधार पर ऊपर बताया गया है के रूप में बाहर छोड़ विशिष्ट फ़ाइलों कर सकते हैं? यदि यह संभव है, तो कृपया मुझे ऐसा करने के एक अच्छे तरीके की ओर निर्देशित करें।

2) मैं स्टोरीबोर्ड पर विचार कैसे अलग कर सकता हूं? कई स्टोरीबोर्ड परिभाषित कर सकते हैं और आवश्यक समय को बिल्ड समय पर शामिल कर सकते हैं? कृपया गाइड करें।

+0

बस स्टोरीबोर्ड का उपयोग न करें। एनआईबी के –

+0

के साथ काम करने का कोई बड़ा सौदा नहीं है यदि आपका विचार उतना आसान है जितना आप इसे आकर्षित करते हैं -> आप इसे प्रोग्रामेटिक रूप से कर सकते हैं – ColdSteel

+0

आप ऐसा क्यों कर रहे हैं? –

उत्तर

1

क्या मैं कर रहा समाप्त हो गया: 1 और 2:

पर विचार करें मैं दो विशेषताएं हैं।

तो मेरी आवश्यकताओं बनाता है की तीन प्रकार बनाने होगा:

  1. केवल सुविधा के साथ ही सुविधा 1.
  2. एक निर्माण के साथ एक निर्माण 2.
  3. एक निर्माण जो दोनों सुविधाओं की है 1 & 2.

तो, मैं के रूप में Xcode समूहों में परियोजना फ़ाइलों विभाजित:

  1. CommonModule - इस समूह में दोनों सुविधाओं द्वारा आवश्यक फ़ाइलों को शामिल किया गया है।
  2. ModuleOne: इस समूह में ऐसी फ़ाइलें शामिल हैं जिन्हें सुविधा एक द्वारा आवश्यक है।
  3. ModuleTwo: इस समूह में ऐसी फाइलें हैं जो फ़ीचर दो की आवश्यकता होती है।

फ़ोल्डर संरचना मैं प्रत्येक मॉड्यूल के लिए पीछा किया है:

my folder structure

ऐसा नहीं है कि इस परियोजना के समूह की संरचना के समान डिस्क पर परियोजना के फ़ोल्डर संरचना रखने के लिए बेहतर है। यह भ्रम को कम करता है और किसी विशेष फ़ोल्डर में किसी विशेष फ़ोल्डर में सभी फ़ाइलों को जोड़ना संभव हो जाता है

अब मैंने ऊपर सूचीबद्ध तीन प्रकार के निर्माण से संबंधित तीन लक्ष्यों को परिभाषित किया है।

  1. TargetOne: CommonModule और ModuleOne समूहों में फ़ाइलें इस लक्ष्य के हैं।
  2. TargetTwo: CommonModule और ModuleTwo में फ़ाइलें इस लक्ष्य से संबंधित हैं।
  3. TargetAll: CommonModule, ModuleOne और ModuleTwo समूहों में फ़ाइलें इस लक्ष्य से संबंधित हैं।

    #define IncludeModuleOne 1 
    #define IncludeModuleTwo 1 
    

    इसलिए जब निर्माण, उचित लक्ष्य का चयन करें और उचित रूप से ऊपर स्विच टॉगल सही निर्माण पाने के लिए:

अब CommonModule में, मैं जो की तरह मैक्रो है एक BuildConfig.h फ़ाइल है।

अब InitialViewController.m में, मैंने स्विच मानों की जांच की, और मानों के आधार पर, मैंने उस विशेष सुविधा के लिए मेनू विकल्पों को प्रदर्शित/छुपाया।

इस तरह, योग करने के लिए, मैं एक साथ

मैं जल्द ही GitHub पर मेरी नमूना परियोजना के लिए एक लिंक साझा करेंगे कई लक्ष्यों + विन्यास मैक्रो के उपयोग के साथ निर्माण में केवल फ़ाइलों की आवश्यकता शामिल हैं। मुझे उम्मीद है कि यह किसी ऐसे व्यक्ति की मदद करेगा जिसकी समान आवश्यकताएं हों। धन्यवाद!

1

2 के लिए उत्तर। या तो UICollectionView, या फिर अपनी XIB में 4 दृश्यों का उपयोग और इस विधि

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self){ 
//  NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"--name of xibs--" owner:nil options:nil]; 
//  self = [nibArray objectAtIndex:0]; 
    } 
    return self; 
} 
nibArray में

उपयोग करते हैं, विचारों 1 के लिए संग्रहीत किया जाएगा

4

उत्तर: आप केवल मैक्रो का उपयोग कर नहीं कर सकते।

अपनी अलग-अलग कॉन्फ़िगरेशन के लिए कई लक्ष्य बनाएं, आपको प्रत्येक लक्ष्य पर आवश्यक मैक्रोज़ को परिभाषित करता है और फ़ाइल को टॉगल करने के लिए चेकबॉक्स में केवल बिल्डिंग के दौरान आवश्यक फ़ाइलों को शामिल करने के लिए चेकबॉक्स शामिल होता है।

+0

क्या मैं उन फ़ाइलों को टॉगल करने के लिए एक स्क्रिप्ट लिख सकता हूं जिन्हें निर्माण के दौरान शामिल/बहिष्कृत किया जाना है ...? यदि हां, तो क्या आप मुझे एक उदाहरण की ओर निर्देशित कर सकते हैं? –

+0

ईमानदारी से, मुझे नहीं पता। मुझे लगता है हाँ ... लेकिन यह काफी जटिल है। यहां एक्सकोड बिल्ड सिस्टम दस्तावेज़ का एक लिंक दिया गया है: https://developer.apple.com/legacy/library/documentation/DeveloperTools/Conceptual/XcodeBuildSystem/Xcode_Build_System.pdf – Moose

+0

क्या आप सुनिश्चित हैं कि आपके पास सही दृष्टिकोण है। बस सोच रहा है ... यदि आपको किसी प्रकार की प्लग-इन प्रणाली की आवश्यकता है, तो आप मैक्रोज़ और जटिल सशर्त निर्माण चरणों से निपटने के बजाय, बिल्ड समय पर प्लग-इन पुस्तकालय क्यों नहीं बनाते हैं? – Moose

2

यद्यपि आप निर्माण प्रणाली इस्तेमाल कर सकते हैं, आपके मामले में यह आप के लिए आसान लगता है विचारों छुपा आप की पंक्ति में कोड इस्तेमाल कर सकते हैं के लिए

#if FEATURE_1 
... 
#endif 

में प्रभावित कोड लपेट

#if !FEATURE_1 
    feature1View.hidden = YES; 
#endif 

यह निर्भर करता है कि आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं।

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