2017-01-15 11 views
13

को बाहर निकालने के लिए स्क्रिप्ट का उपयोग किये बिना गतिशील ढांचे को कैसे बनाएं I गतिशील रूपरेखा बनाना और इसे वितरित करना चाहते हैं। सिम्युलेटर, एक आईफोन डिवाइस पर चलते समय इसे काम करने की ज़रूरत है, और ऐप स्टोर में जमा करने में सक्षम होना चाहिए।सिम्युलेटर स्लाइस

मुझे lipo के बारे में पता है guide के लिए धन्यवाद। यह दिखाता है कि हम सिम्युलेटर आर्किटेक्चर को आईफोन आर्किटेक्चर के साथ एक गतिशील ढांचे में कैसे जोड़ सकते हैं जिसे स्रोत कोड वितरित किए बिना वितरित किया जा सकता है। यह मुझे सिम्युलेटर और आईफोन डिवाइस दोनों के लिए ढांचे का उपयोग करने की अनुमति देता है। हालांकि, जब मैं इसे App Store because of the simulator build पर भेजने की कोशिश करता हूं तो यह विफल हो जाता है।

कार्थेज एक दिलचस्प समाधान प्रदान करता है। यह एक ढांचा बनाता है जो सिम्युलेटर और आईफोन दोनों के लिए काम करता है। लेकिन जब इसे ऐप स्टोर में भेजने का समय होता है तो हमें सिम्युलेटर स्लाइस को बाहर निकालने के लिए एक स्क्रिप्ट चलाने की आवश्यकता होती है।

हालांकि, प्रकाशकों के लिए डबलक्लिक के रचनाकारों (DFP) एक तरह से एक रूपरेखा है कि दोनों सिम्युलेटर और डिवाइस पर काम करता बनाने के लिए मिल गया है, ऐप स्टोर सबमिशन पास करता है; और सिम्युलेटर स्लाइस (AFAIK) को बाहर निकालने के लिए किसी भी स्क्रिप्ट की आवश्यकता नहीं है। मुझे बस इतना करना है कि GoogleMobileAds.framework फ़ाइल Linked Frameworks and Libraries में खींचें। यह एक आश्चर्य की बात है कि मुझे इसे Embedded Binaries में सबसे गतिशील ढांचे की तरह जोड़ने की आवश्यकता नहीं है)

मैंने एक नमूना प्रोजेक्ट बनाया जो डीएफपी का उपयोग करता है जो इसे प्रदर्शित करता है।

// clone repository 
git clone --recursive https://github.com/wh1pch81n/DoubleClickGoogleExample.git 

// Move to correct branch 
git submodule foreach 'git checkout master' 
git submodule foreach 'git pull origin master' 

अब आप Simulation_mate योजना चुन सकते हैं और ऐप चला सकते हैं। ऐप वास्तव में यह दिखाने के लिए नीचे एक विज्ञापन बैनर दिखाएगा कि विज्ञापन वास्तव में काम कर रहा है।

निर्भरता ग्राफ इस तरह दिखता है।

Simulation_mate.app 
    -> Mate.framework 
     -> DFP.framework 
     -> GoogleMobileAds.framework 

फिर से, मैं सिमुलेटर, आईफोन पर सिमुलेशन_मैट चला सकता हूं, और इसे ऐप स्टोर में सबमिट कर सकता हूं।

मेरा सवाल यह है कि उन्होंने दुनिया में कैसे GoogleMobileAds.framework को बनाया है? इस तरह के ढांचे को बनाने के लिए किन कदमों का पालन किया जाना चाहिए?

+0

एक स्थिर पुस्तकालय ढांचे की तरह बदबू आ रही है। क्या आप परीक्षण के लिए ढांचे के अंदर बाइनरी फ़ाइल 'फाइल' कर सकते हैं? अफैक, Google केवल आईओएस 7 का समर्थन करने के लिए स्थिर ढांचे का निर्माण करता है। –

+0

क्या आप इसके बजाय पॉड बनाने पर विचार करते हैं? आप पॉड और कोकोपोड्स को उचित आर्किटेक्चर के लिए ढांचे को संकलित करने के लिए कॉन्फ़िगरेशन का प्रबंधन कर सकते हैं, सिम्युलेटर और डिवाइस के लिए काम करते हैं और जब आप ऐप स्टोर में सबमिट करते हैं तो कोई समस्या नहीं होती है। – juanjo

+0

मैं कोको पॉड्स या कार्थेज या किसी तीसरे पक्ष निर्भरता प्रबंधन उपकरण का उपयोग नहीं कर सकता – DerrickHo328

उत्तर

6

संदिग्ध होने के कारण, GoogleMobileAds.framework गतिशील ढांचे की बजाय एक स्थिर ढांचा है।

> file GoogleMobileAds 
GoogleMobileAds: Mach-O universal binary with 5 architectures: [arm_v7: current ar archive] [arm_v7s] [i386] [x86_64] [arm64] 
GoogleMobileAds (for architecture armv7): current ar archive 
GoogleMobileAds (for architecture armv7s): current ar archive 
GoogleMobileAds (for architecture i386): current ar archive random library 
GoogleMobileAds (for architecture x86_64): current ar archive random library 
GoogleMobileAds (for architecture arm64): current ar archive 

जबकि, एक गतिशील ढांचे पर file चल रहा है, आप एक अलग परिणाम प्राप्त:

> file AppKit 
AppKit: Mach-O universal binary with 2 architectures: [i386: Mach-O dynamically linked shared library i386] [x86_64] 
AppKit (for architecture i386): Mach-O dynamically linked shared library i386 
AppKit (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 

दुर्भाग्य से, समस्या आप का वर्णन App स्टोर वितरण प्रणाली के एक ज्ञात सीमा है। सिद्धांत रूप में, अपने गतिशील ढांचे को वितरित करने का सही तरीका सभी आर्किटेक्चर के साथ पूर्ण वसा बाइनरी को वितरित करना चाहिए, और इमारत निर्माण करते समय निर्माण प्रणाली अनियंत्रित आर्किटेक्चर को फेंक देना चाहिए, या ऐप स्टोर वितरण प्रणाली को तब करने के दौरान करना चाहिए विशिष्ट उपकरणों के लिए ऐप ("slicing")। अगर मुझे लगता है कि ऐप स्टोर वितरण आईओएस 8 और नीचे के समर्थन के कारण ऐसे ढांचे के साथ विफल रहता है, क्योंकि वे सिस्टम ऐप स्टोर से स्लाइसिंग का समर्थन नहीं करते हैं।

Google आईओएस 7 का समर्थन करने के लिए स्थिर पुस्तकालय बनाता है। इस दिन और उम्र में एक मूर्ख कारण ने डेवलपर्स के लिए कई मुद्दे बनाए हैं, क्योंकि Google कोकोपोड्स का उपयोग करने पर भी जोर देता है।स्टेटिक फ्रेमवर्क, जबकि सतही रूप से पहले चांदी की बुलेट की तरह लगते हैं ("lipo आर्क के बाहर कोई स्क्रिप्ट नहीं, कोई एम्बेडिंग नहीं है"), वास्तव में महान नहीं हैं। उदाहरण के लिए, यदि आप गैर संकलित संसाधनों को शामिल करना चाहते हैं, तो एक स्थिर ढांचा चाल नहीं करेगा (गतिशील ढांचे बंडल हैं, जबकि स्थिर ढांचे नहीं हैं)।

+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद। मुझे संदेह नहीं था कि GoogleMobileAds.framework गुप्त रूप से एक स्थिर पुस्तकालय था, क्योंकि मैंने सोचा था कि स्थिर पुस्तकालयों में ".a" एक्सटेंशन था। – DerrickHo328

+0

कृपया इस लिंक का संदर्भ लें https://www.raywenderlich.com/65964/create-a-framework-for-ios –

+0

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

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