2013-01-08 17 views
13

में प्रीप्रोसेसर परिभाषाओं का उपयोग करना मेरे पास एक आईओएस ऐप है जो फेसबुक के एसएसओ के साथ काम करने के लिए अपने ऐप को प्राप्त करने के हिस्से के रूप में फेसबुक के साथ एसएसओ का उपयोग करता है, आपको info.plist में फेसबुक ऐपआईडी और कॉलबैक यूआरएल निर्दिष्ट करना होगा। मेरे पास परीक्षण के लिए 2 अलग-अलग फेसबुक समूह हैं और एक उत्पादन के लिए है। मैं प्रीप्रोसेसर निर्देशों के आधार पर सेट ऊपर निर्दिष्ट दो कुंजियों के मान प्राप्त करने में सक्षम होना चाहता हूं।आईओएस ऐप info.plist

मेरी MessageBomb-Prefix.pch में मैं जो ठीक काम करता है निम्नलिखित है,:

#ifdef TEST 
    //Development environments 
    #define PARSE_APP_ID "dev parse app id" 
    #define PARSE_CLIENT_ID "dev parse client id" 
    #define FB_APP_ID "dev facebook id" 
#else 
    //Production environments 
    #define PARSE_APP_ID "prod parse app id" 
    #define PARSE_CLIENT_ID "prod parse client id" 
    #define FB_APP_ID "prod facebook id" 
#endif 

हालांकि मेरी Info.plist में मैं नीचे किया है, लेकिन यह काम करने के लिए प्रतीत नहीं होता:

<key>CFBundleURLTypes</key> 
    <array> 
     <dict> 
      <key>CFBundleTypeRole</key> 
      <string>Editor</string> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb${FB_APP_ID}</string> 
      </array> 
     </dict> 
    </array> 
    <key>FacebookAppID</key> 
    <string>${FB_APP_ID}</string> 

क्या ऐसा करना भी संभव है जो मैं करने की कोशिश कर रहा हूं। मैंने प्रोजेक्ट को info.plist preprocess करने के लिए सेट कर दिया है।

धन्यवाद पीटर

+1

आप इसे परियोजना सेटिंग में सक्षम है? –

+0

@AndrewTetlaw आपको इसे एक जवाब देना चाहिए। (और शायद प्रीप्रोसेसर को निर्दिष्ट करने के तरीके के बारे में कुछ विवरण शामिल हैं?) –

+0

ठीक है, मैं उन लोगों के लिए –

उत्तर

8

Info.plist पूर्वप्रक्रमक आप अपने Info.plist में सेटिंग्स का निर्माण नहीं #define का उपयोग करने देगा। तो आप अपने लक्ष्य में एक कस्टम उपयोगकर्ता निर्माण सेटिंग के रूप में FB_APP_ID परिभाषित कर सकते हैं (और इसे विभिन्न योजनाओं के लिए ओवरराइड देते हैं), और यह मान Info.plist पर उपलब्ध होगा। हालांकि, उपयोगकर्ता निर्माण सेटिंग्स आपके कोड से अवगत नहीं होती हैं। यही कारण है, जब तक आप अपने प्रीप्रोसेसर परिभाषाएँ साथ गंदगी की स्थापना का निर्माण और एक प्रवेश लग रहा है कि

तरह
[email protected]\"$(FB_APP_ID)\" 

तो आपकी ऐप्लिकेशन आईडी (बैकस्लैश अतीत खोल मंगलाचरण डबल उद्धरण प्राप्त करने के लिए आवश्यक हैं) को जोड़ने

FB_APP_ID="@\"$(FB_APP_ID)\"" 

अंत में, आप का निर्माण सेटिंग्स होगा कुछ इस तरह दिखता है कि:

स्पेस हो सकते हैं, तो आप उद्धरण को जोड़ने के लिए अतीत खोल मंगलाचरण प्राप्त करना होगा

Build settings

+0

करूँगा जो सोचते हैं कि प्लिस्ट फ़ाइल में उपयोगकर्ता द्वारा परिभाषित बिल्ड सेटिंग का उपयोग कैसे करें, इस तरह के मान को सेट करें, मान लें कि आपने बनाया है एक उपयोगकर्ता द्वारा परिभाषित बिल्डिंग सेटिंग IS_FILE_SHARING_ENABLED: $ {IS_FILE_SHARING_ENABLED}

14

आप सेटिंग्स बिल्ड में जाने यदि आप YES को Preprocess Info.plist File सेट और फिर एक .h फ़ाइल आप #define निर्देशों का अपनी परियोजना में रखा है तो Info.plist Preprocessor Prefix File सेट कर सकते हैं।

तो उदाहरण के लिए यदि मैं Info.plist फ़ाइल: testKey पर TEST_VALUE के साथ एक कुंजी जोड़ता हूं तो उदाहरण के लिए। तब मैं के साथ मेरी परियोजना में test.h जगह:

#define TEST_VALUE hello_world 

और फिर मैं test.h

कि कुंजी के मूल्य के YES और Info.plist Preprocessor Prefix File को Preprocess Info.plist File निर्धारित करते हैं, जब लिया गया अब "hello_world" है। यदि आप मैक्रो के मूल्य को बहुत बदलते हैं तो आपको लगता है कि परिवर्तनों को देखने के लिए आपको उत्पाद/साफ करने की आवश्यकता है क्योंकि एक्सकोड संकलित मूल्य को कैश करने लगता है।

+1

मुझे अब Xcode 4.6 में "प्रीप्रोसेस इन्फो.प्लिस्ट फ़ाइल" सेटिंग नहीं मिल रही है। कोई भी इसे संशोधित करने के बारे में जानता है? – Jeremy

+1

कोई बात नहीं, मेरे पास "बेसिक" स्तर चुना गया था, न कि "सभी"। – Jeremy

+0

मैं उत्पाद को साफ करता हूं और व्युत्पन्न डेटा भी हटा देता हूं और यह अभी भी मेरे पुराने फेसबुक ऐप आईडी मान का उपयोग करता है। नए बदलावों के लिए मुझे कैश को फिर से बनाना और फिर से साफ करना और कैश करना है। – Bot

6

plist में पहुंचने के लिए:

बनाएं एक नया वेरिएबल
enter image description here


परिभाषित करें यह
enter image description here


आपकी जानकारी plist में इसका इस्तेमाल की स्थापना preprocess Info.plist हाँ करने के लिए फ़ाइल द्वारा
enter image description here

+0

कोड में आप इसे कैसे एक्सेस करते हैं? –

+0

क्षमा करें, सीधे कोड में उपयोगकर्ता परिभाषित करने में सक्षम नहीं है। आपको "प्रीप्रोसेसर मैक्रोज़" में जोड़ना होगा। आप एक प्रीप्रोसेसर मैक्रो लिख सकते हैं जो उपयोगकर्ता के मूल्य को "FOO = $ {FOO}" परिभाषित करता है। फिर आप कोड में फूड्स का उपयोग कर सकते हैं। – hfossli

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