IOS 5 के साथ armv6 और armv7 आर्किटेक्चर के लिए निर्माण कैसे करें


96

में iOS5 एप्पल चला जाता है ARMv6 से वास्तुकला ARCHS_STANDARD_32_BIT

आदेश के लिए समर्थन रखने के लिए iPhone3G मैं अभी भी में संकलित करने के लिए चाहते हैं ARMv6 iOS5 में भी।

क्या किसी ने इसके लिए कोई समाधान खोजा?

जवाबों:


96

मैंने आज सिर्फ iOS 4.0 के तैनाती लक्ष्य को निर्दिष्ट करते हुए कुछ बनाया है। आर्किटेक्चर में निर्दिष्ट केवल armv7 के साथ, Xcode ने मुझे चेतावनी दी कि iOS4.2 के नीचे कुछ भी समर्थन करने के लिए मुझे आर्किटेक्चर में armv6 को शामिल करना था। बस उस फ़ील्ड को संपादित करें, डायलॉग पॉप अप होने पर "+" बटन पर क्लिक करें और शाब्दिक "आर्मव 6" दर्ज करें।

मेरे मामले में, हम चाहते हैं कि हमारा ऐप iOS4 और iOS5 के तहत काम करे। हमें कुछ संशोधन करने थे इसलिए यह iOS5 के तहत सही ढंग से काम करेगा, लेकिन उन सभी परिवर्तनों को iOS4 के अनुकूल कोड परिवर्तनों के साथ किया गया था।

हमने कुछ iOS5-विशिष्ट क्षमताओं को इस तरह से जोड़ा है जिससे ऐप iOS4 के तहत दुर्घटनाग्रस्त हुए बिना चल सकता है। विशेष रूप से, हमने उन्हें उपयोग करने का प्रयास करने से पहले iOS5 क्षमताओं के लिए परीक्षण किया, और वैकल्पिक रूप में iOS5-केवल पुस्तकालयों को जोड़ा।

इसलिए, एक iOS5 दुनिया में iPhone3G का समर्थन आसानी से किया जा सकता है "हम चाहते हैं कि हमारा ऐप iOS4 और इसके बाद के संस्करण (किसी भी iOS5 फ़ीचर उपयोग की परवाह किए बिना)" के बजाय "हम सुनिश्चित करें कि हमारा ऐप iOS5 चलाने वाले पुराने डिवाइस पर चलता है। "। यहाँ एक अंतर है; इसके बारे में सोचो। :-)

फिर भी, armv6 समर्थन को वापस जोड़ना बहुत आसान है। और मुझे लगता है कि यह बिंदु है: किसी बिंदु पर, जब कोई और अधिक armv6 डिवाइस नहीं हैं, तो इसके बारे में चिंता करने के लिए (जो भी कारण हो) आपको इसके लिए निर्माण नहीं करना होगा। Apple का विचार है कि सभी को जल्द से जल्द नवीनतम हार्डवेयर में अपग्रेड करना चाहिए। तो उस दुनिया में, कुछ भी डिफ़ॉल्ट करने के लिए उपकरणों की आवश्यकता नहीं है, लेकिन नवीनतम और सबसे बड़ी भी। :-) सौभाग्य से (या नहीं), हम डेवलपर्स वास्तविक दुनिया में रहते हैं और समझते हैं कि आपको कुछ समय के लिए पुराने सामान का समर्थन करना होगा। और मुझे लगता है कि Xcode देव टीम यह भी जानता है, यही कारण है कि आप काफी आसानी से armv6 समर्थन वापस जोड़ सकते हैं।


3
आपके सटीक उत्तर के लिए धन्यवाद :-) वास्तव में मैं आईओएस 4.2.1 या निम्न (4.0 तक सीमित) के साथ आईफोन 3 जी पर अपना ऐप चलाने में सक्षम होना चाहता हूं और वर्तमान उपकरणों के लिए कुछ आईओएस 5 विशिष्ट विशेषताएं हैं। मैंने आर्किटेक्चर में केवल "armv6" जोड़ने की कोशिश नहीं की थी, मैं ARCHS_STANDARD_32_BIT जैसे पर्यावरण चर की तलाश कर रहा था और मुझे अभी ARCHS_UNIVERSAL_IPHONE_OS मिला है लेकिन यह काम नहीं करता है।
इग्रान्डव

3
जोड़ना चाहते थे कि वहाँ से बाहर बहुत सारे समाधान बताते हैं कि इसे "आर्मव 6 आर्मव 7" कहना चाहिए - यह मेरे लिए काम नहीं करता था। वर्तमान में केवल "$ (ARCHS_STANDARD_32_BIT) ARMv6" मेरे लिए काम करता है, जिसका अर्थ है कि क्या वहाँ से छुटकारा पाने के मत करो, बस आर्किटेक्चर के लिए सेटिंग "ARMv6" जोड़
Brack

1
मैंने यह सब किया था और मेरा निर्माण अभी भी विफल हो रहा था - कारण यह था कि आईओएस 5.0 के परिनियोजन लक्ष्य के लिए एक (अप्रयुक्त) रिलीज़ बिल्ड था, जबकि डीबग और डिस्ट्रीब्यूशन 3.0 पर सेट था और यह armv6 के लिए xcode बिल्डिंग को रोकने के लिए लगता है। सभी बिल्ड के लिए 3.0 परिनियोजन लक्ष्य सेट करके समस्या को हल किया गया।
साइमन ईस्ट

6
यह मेरे लिए काम नहीं किया ('armv6' जोड़ने के बाद भी)। ऐप मेरे iPod टच पर भी दिखाई नहीं दिया। लेकिन तब मुझे पता चला कि 'आवश्यक डिवाइस क्षमताएं' (सूचना टैब के तहत) में आर्मव 7 था। मैंने बस इसे हटा दिया और यह पूरी तरह से चलने लगा
Erpheus

1
मैं आमतौर पर $ (VALID_ARCHS) का उपयोग करता हूं, जो मेरे लिए काम करता है। मैंने अभी-अभी पाया है कि नए प्रोजेक्ट्स में 'arm7' की क्षमता की आवश्यकता होती है। मैंने बस इसे हटा दिया है और सभी ठीक काम कर रहे हैं।
गॉर्डन डोव

51

इसका सरल उत्तर यह है कि आपको वर्तमान सेटिंग्स को "मानक (armv7) - $ (ARCHS_STANDARD_32_BIT)" से केवल "armv6" और "armv7" होना है। निचे इमेज देखे। आपको काम करने के लिए पिछली सेटिंग्स के साथ लाइन को हटाना होगा।

Armv6 और armv7 के लिए सही सेटिंग्स


3
एक छवि के साथ यह समझाने के लिए धन्यवाद - यह वास्तव में स्पष्ट कर दिया।
त्रैमासिक

11

यह भी सुनिश्चित करें कि आपने इसे प्रोजेक्ट और लक्ष्य में सेट किया है ... मुझे यह जानने के लिए एक घंटे का समय देना होगा। एक के लिए निर्धारित किया था, लेकिन दूसरे के लिए नहीं। उम्मीद है की यह मदद करेगा। GLTA


इसके अलावा, यदि आपके पास कोई पुस्तकालय है, तो आपको इसे परियोजना और लक्ष्यों में निर्धारित करना होगा।
विलियम जोकस

9

मुझे लगता है कि वहाँ एक कारण है कि Apple मानक सेटिंग से armv6 गिरा दिया।

मैंने iOS5 SDK के साथ armv7 / armv6 संकलित किया है, हालाँकि, armv6 संकलक ने रिलीज़ मोड में गलत कोड का उत्पादन किया। वर्कअराउंड ढूंढने के घंटों के बाद (विभिन्न अनुकूलन स्तरों के साथ llvm या gcc आज़माकर) मैं हार मान लेता हूं।

इसलिए, जब तक मैं पुराने armv6 उपकरणों का समर्थन करता हूं, मैं iOS SDK 4.x पर वापस जा रहा हूं।

कोड का उदाहरण:

// myView center=(160, 100)
CGPoint p=myView.center;  
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100) 
p.y+=100;
// now p =(200,200) (what the heck?)

हो सकता है कि मेरे पास कुछ मेमोरी करप्शन हो, हालाँकि, armv7 कंपाइलर और iOSSDK <5.0 पर यह अपेक्षित रूप से व्यवहार करता है।

सादर


मुझे पुराने उपकरणों पर armv6 में अजीब तरह के कीड़े दिखाई दे रहे हैं। क्या आपने यह पता लगाया, या वास्तव में पहले के XCode में वापस चले गए? इसके अलावा, मैं ध्यान देता हूं कि वे आपको पुराने एसडीके को और अधिक डाउनलोड करने की अनुमति नहीं देते हैं!
क्रेग मैकमोहन

19
यह Xcode 4.2 में CGVM कंपाइलर 3.0 और CGPoint / CGSize स्ट्रक्चर के साथ एक ज्ञात समस्या है: devforums.apple.com/thread/122059?tstart=15 । आर्मव 6 पर अंगूठे के लिए इमारत को अक्षम करना इस प्रकार की त्रुटियों को रोकता है।
ब्रैड लार्सन

वाह! मैं आपके उत्तर के लिए बहुत खुश हूं, मेरे साथ भी ऐसा हो रहा है।
क्लाफौ

7

यह निश्चित नहीं है कि यह वास्तव में अभी तक एक समाधान है, लेकिन मुझे पता चला है कि "आर्किटेक्चर" में परिभाषित स्ट्रिंग की जगह, जो कि $ (ARCHS_STANDARD_32_BIT) थी, "armv6 armv7" ने मुझे एक आधार के रूप में iOS5 और एक आधार के रूप में iOS4 के साथ रचना करने की अनुमति दी। लक्ष्य, और सत्यापन पास करें।

मैं किसी IOS5- अनन्य पुस्तकालयों या कॉल का उपयोग नहीं कर रहा हूं, लेकिन मेरी अगली रिलीज में इरादा है।


1

एप्लिकेशन को संकलन करने और ऐप स्टोर पर अपलोड करने के लिए मुझे केवल armv7 के साथ $ (ARCHS_STANDARD_32_BIT) को बदलने की आवश्यकता नहीं थी।

जैसा कि MarkGranoff द्वारा सुझाव दिया गया है, मैंने बस armv6 को सादे पाठ के रूप में जोड़ा है, साथ ही साथ प्लस लाइन पर टाइप करके और इसे टाइप करके।

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