Xcode 5.1 - (केवल ONLY_ACTIVE_ARCH = YES, सक्रिय आर्क = x86_64, VALID_ARCHS = i386) के लिए संकलन करने के लिए कोई आर्किटेक्चर नहीं


168

Xcode 5.1 में अपडेट करने के बाद, मैं अब इस त्रुटि को प्राप्त करने के लिए 64-बिट सिम्युलेटर के लिए अपनी परियोजना का निर्माण नहीं कर सकता:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

ये मेरी लक्ष्य निर्माण सेटिंग्स हैं:

Xcode लक्ष्य निर्माण सेटिंग्स

मैंने "बिल्ड एक्टिव आर्किटेक्चर" को नो में बदलने की कोशिश की, साथ ही "आई 386" को "वैलिड आर्किटेक्चर" में जोड़ा, दुर्भाग्य से न तो काम किया। किसी भी सुझाव के लिए धन्यवाद!


4
मैंने नवीनतम iOS 7.1 अपडेट के मद्देनजर काफी कुछ समान प्रश्न देखे हैं और इसका समाधान arm64 को छोड़ना था। बेशक, यह आपकी विशिष्ट समस्या को हल नहीं करता है लेकिन विश्वास करने का कारण है कि Apple ने कुछ गड़बड़ कर दी है।
dandan78

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


Xcode 6.1 पर एक ही मुद्दा, नीचे दिए गए सभी समाधानों की कोशिश की है, वे काम नहीं कर रहे हैं। मेरे प्रोजेक्ट में मेरे पास कोकोपोड्स हैं। Xcode 6.1 पर इसे कैसे ठीक किया जाए, इस पर कोई समाधान
विनायका कारजिगी

जवाबों:


102

मेरे पास XCode 5.1 में अपग्रेड करने के बाद एक ही त्रुटि संदेश था। क्या आप कोकोआपोड्स का उपयोग कर रहे हैं? यदि ऐसा है, तो इस समस्या को ठीक करना चाहिए:

  1. Xcode के बाएँ फलक में कार्यक्षेत्र से "पॉड्स" प्रोजेक्ट को हटाएँ और Xcode को बंद करें।
  2. "पॉड्स" प्रोजेक्ट को दोबारा बनाने के लिए कमांड लाइन से "पॉड इंस्टॉल" चलाएं।
  3. Xcode को फिर से खोलें और सुनिश्चित करें कि "पॉड एक्टिव आर्किटेक्चर ओनली" दोनों "पॉड्स" प्रोजेक्ट और आपके अपने प्रोजेक्ट की बिल्ड सेटिंग्स में "नहीं" पर सेट है।
  4. साफ और निर्माण।

1
फली आर्किटेक्चर से arm64 को हटाकर फिक्स्ड।
ईबी

मेरे लिए एक कॉर्डोवा / फोनगैप परियोजना में भी यही समस्या है। धन्यवाद
रोक्को 3

182

आपको क्या करने की जरूरत है सिर्फ सेट किया गया है ONLY_ACTIVE_ARCHकरने के लिए NO(मेरे लिए कम से कम काम करता है)। नीचे इसके लिए एक स्क्रीनशॉट है:


संपादित करें:

जहां तक ​​मुझे पता है ( कृपया इसे इंगित करें कि क्या कुछ गलत है, धन्यवाद ), यदि आप सेट ONLY_ACTIVE_ARCHकरते हैं YES, तो इसका मतलब है कि एक्सकोड केवल सक्रिय आर्किटेक्चर के लिए निर्माण करेगा (जो उस डिवाइस को संदर्भित करता है जो वर्तमान में एक्सकोड में सक्रिय है)। लगता है Xcode की डिफ़ॉल्ट सेटिंग डीबग के लिए सेट है YES, इसलिए यह अन्य आर्किटेक्चर के लिए बायनेरिज़ का निर्माण नहीं करेगा जब आप केवल अपने मैक से जुड़े एक विशेष उपकरण के लिए निर्माण करना चाहते हैं।

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

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air,Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c,iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3,iPad Mini
  • ARMv6: iPhone, iPhone 3G,iPod 1G/2G

तो क्यों "सेट ONLY_ACTIVE_ARCHकरने के लिए NO" काम करता है? क्योंकि डिवाइस अभी भी बाइनरी को चला सकता है जो आपके द्वारा जोड़े गए सभी आर्किटेक्चर (बिल्ड को पास) के लिए बनाया गया है, लेकिन कुछ प्रदर्शन खो देगा। यह सिर्फ एक त्वरित समाधान है, लेकिन सबसे अच्छा नहीं है।


नोट : आपके द्वारा जितने अधिक आर्किटेक्चर जोड़े गए हैं, उतना बड़ा बाइनरी उत्पन्न होगा। इसलिए अपनी परियोजना के लिए सही आर्किटेक्चर चुनना अच्छा है। ;)


@EmilMarashliev सिर्फ निर्माण लक्ष्य। जब आप अपनी रूट परियोजना (नीले आइकन के साथ) का चयन करेंगे तो आप इसे देखेंगे।
काजुल

@ यकीन नहीं हो रहा है, लगता है कि यह विकल्प Xcode 5.1 में बदल गया है।
काजुल

यह सही उत्तर है, आपने मुझे यहां जीवन भर बचाया, धन्यवाद :)
बिक्रमजीत सिंह

2
यह सबसे स्पष्ट और पूर्ण उत्तर है। निश्चित रूप से अनुमोदित होना चाहिए !!! धन्यवाद
एमईवी

1
यह बहुत मददगार था। उत्तर पूर्ण होगा, यदि आप जोड़ सकते हैं कि वास्तुकला को कैसे डाउनलोड किया जा सकता है।
कल्पेश पोपट

29

arm64लक्ष्य में जोड़ें valid architectures। ऐसा लगता है कि यह x86-64सिम्युलेटर को आर्किटेक्चर के साथ-साथ वैध आर्किटेक्चर में भी जोड़ता है ।


27

यदि आप CocoaPods का उपयोग कर रहे हैं, तो सबसे अधिक संभावना है क्योंकि आपके पॉड्स प्रोजेक्ट बिल्ड बिल्ड एक्टिव आर्किटेक्चर के लिए सेटिंग्स सेट करें केवल डीबग के लिए हां पर सेट है ।

समाधान सरल है। इसे बदलें नहीं

इसी तरह, अपने एप्लिकेशन प्रोजेक्ट के लिए No में बदलें ।


12

मेरा भी ऐसा ही मुद्दा था। प्रोजेक्ट के लिए सेटिंग में "आर्किटेक्चर" को " $ (ARCHS_STANDARD_32_BIT) " में बदलकर हल किया ।

अब, आपको मानक आर्किटेक्चर (armv7, arm64) - $ (ARCHS_STANDARD) का चयन करना होगा क्योंकि ऐप्पल 64-बिट आर्किटेक्चर पर एप्लिकेशन बनाने की सलाह देता है। क्लिक करें: Apple दस्तावेज़


@ जयप्रकाश दुबे, इससे क्या? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
हेमंग

क्या मुझे उपयोग करना चाहिए $(ARCHS_STANDARD_32_BIT)या $(ARCHS_STANDARD_INCLUDING_64_BIT)?
हेमंग

@ साहित्य: $ (ARCHS_STANDARD_INCLUDING_64_BIT) के साथ जाएं
जयप्रकाश दुबे

10

जोड़ें: आर्किटेक्चर: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

मान्य आर्किटेक्चर: arm64 armv7 armv7s


हम्म, क्या आपने सब कुछ रीसेट करने की कोशिश की, सिम्युलेटर सामग्री, सिम्युलेटर, स्वच्छ परियोजना, एक्सकोड और मैक को पुनरारंभ करें, क्योंकि मेरे पास xCode5.1 है और मेरा सिम्युलेटर अच्छी तरह से काम कर रहा है
एंटोनियोवेद

क्या आप iPhone 4-इंच 64-बिट का उपयोग करके अपना ऐप / सिम्युलेटर चला रहे हैं?
ईबी

5

बस मामले में, किसी के लिए भी उपरोक्त समस्या के बावजूद समस्या का सामना करना पड़ रहा है, जाँच करें कि आपके द्वारा चलाए जा रहे सिम्युलेटर भी समर्थित है। मेरे पास arm7 और arm7s तक निर्दिष्ट था, लेकिन 64 बिट सिम्युलेटर पर ऐप को चलाने की कोशिश कर रहा था।


+1 हाँ, यह एक है! जाँच और पुनः जाँच और ट्रिपल जाँच के बाद कि सब कुछ अभी भी ठीक है, यह समस्या थी!
जोम

1
वाह। मुझे वास्तव में उस डिवाइस में प्लग करना है जिसे मैं उचित लक्ष्य कोड संकलित करने के लिए बनाना चाहता हूं? मैंने थोड़ा सा मुँह में डाला। आपकी पोस्ट ने मेरे लिए इस मुद्दे को हल कर दिया, धन्यवाद।

5

हर बार चलने वाले डिबग के लिए only_active_arch रीसेट "पॉड इंस्टॉल" होने से बचने के लिए, आप अपनी पॉड फ़ाइल में निम्न जोड़ सकते हैं

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end

3

बस वैध वास्तुकला में arm64 जोड़ें। मुझे आशा है कि यह आपके लिए काम करेगा।


3

मेरी समस्या यह थी कि मेरे पॉडफाइल होने के बावजूद, पॉड्स प्रोजेक्ट OS X को लक्षित कर रहा था platform :ios। मैं कोकोपोड्स 0.35.0.rc2 का उपयोग कर रहा हूं।

इसे ठीक करने के लिए, प्रोजेक्ट नेविगेटर में पॉड्स प्रोजेक्ट का चयन करें, और जांचें कि पॉड्स प्रॉजेक्ट नोड (आपको नहीं, पॉड्स टारगेट को ध्यान में रखते हुए) iOS को लक्षित कर रहा है। यही है, आर्किटेक्चर बिल्ड सेटिंग्स होनी चाहिए:

  • आर्किटेक्चर: $(ARCHS_STANDARD)
  • बेस SDK: iOS 8.1
  • समर्थित प्लेटफ़ॉर्म: iOS
  • मान्य आर्किटेक्चर: $(ARCHS_STANDARD)

मैं सभी आर्किटेक्चर का निर्माण करना चाहता था, इसलिए मैंने निम्नलिखित को पॉडफाइल में जोड़ा:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end

3

मैं निम्नलिखित जोड़ने के लिए किया था i386और x86_64करने के लिए Valid Architectures। मैं Xcode 7.2 चला रहा हूं और iOS 8+ को लक्षित कर रहा हूं। मेरे पास पहले से ही था armv7, armv7sऔर arm64वहां और वह Xcode 6.4 में काम कर रहा था।


2

मैं एक ही समस्या का सामना करना पड़ा जब iPad पर xcode 5.1 का उपयोग करके अपना ऐप चला रहा था। यह 'मान्य आर्किटेक्चर' से armv7s को हटाकर और 'सक्रिय आर्किटेक्चर केवल निर्माण मूल्य' को 'नंबर' पर सेट करने से हल हो गया। ये दोनों फ़ील्ड आपके ऐप में पाए जा सकते हैं-> लक्ष्य-> बिल्ड सेटिंग्स-> आर्किटेक्चर।


2

मैं इस सवाल पर Xcode 7.2 में सिम्युलेटर के लिए कमांड लाइन के निर्माण के साथ एक समस्या के कारण आया था। यदि कोई और भी इसी मुद्दे के साथ यहां आता है, तो मुझे जो समाधान मिला है, उसे साझा करूंगा:

जाहिरा तौर पर Xcode 7.2 में एक बग है जो xcodebuildसिम्युलेटर के निर्माण की कोशिश करते समय विफल हो जाता है। समाधान "-destination" विकल्प को निर्दिष्ट करना है, उदाहरण के लिए:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

अपडेट करें

उपरोक्त उदाहरण कमांड केवल iPhone 6 के लिए ग्राफिक्स सहित एक बाइनरी का निर्माण करेगा। यदि बाइनरी को अन्य सिमुलेटरों पर चलाया जाता है, तो iPhone 6 ग्राफिक्स को प्लेटफ़ॉर्म पर पहुंचा दिया जाता है। एक बेहतर समाधान जिसमें सभी प्लेटफार्मों के लिए सभी ग्राफिक्स हैं PLATFORM_NAME=iphonesimulator, उदाहरण के लिए, पैरामीटर निर्दिष्ट करना है :

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build

0

पिछले सभी आर्किटेक्चर को हटाने का प्रयास करें (यानी ARCHS_STANDARD सेटिंग को हटा दें) उसी समय जब आप आर्किटेक्चर में i386 जोड़ते हैं। यह सक्रिय वास्तुकला को i386 में बदलना चाहिए। मुझे इसी तरह के मुद्दे का सामना करना पड़ा जब मैंने डिफ़ॉल्ट रूप से armv7 के लिए निर्माण करने की कोशिश की, लेकिन यह arm64 के लिए बनाने की कोशिश करता रहा। मैंने ARCHS_STANDARD को ARCHS_STANDARD_32_BIT में बदल दिया, और इसने सक्रिय वास्तुकला को बदल दिया।


0

Acrhiecture में - कभी-कभी 6.0 और 7.0 का समर्थन करने के लिए, हम arm64 को छोड़ देते हैं

आर्किटेक्चर में -> एक्रेक्टेक्चर - मानक आर्किटेक्चर arm64 armv7 armv7s का चयन करें। मान्य एक्र्राक्टेक्चर के ठीक नीचे उपयोगकर्ता arm64 armv7 armv7s शामिल है। इसने मेरे लिए काम किया।


0

मैंने @ काजुल के उत्तर और विशिष्ट लाइन का उपयोग करके इस समस्या को हल किया:

"निर्माण करने में विफल कारण यह हो सकता है कि, परियोजना आपके द्वारा जुड़े डिवाइस के आर्किटेक्चर का समर्थन नहीं करती है।"

Xcode लोड होने के साथ यह स्वतः ही मेरे iPad ऐप को iPad Air में सेट कर देता है

यहां छवि विवरण दर्ज करें

यह निर्भरता विश्लेषण त्रुटि का कारण बना।

डिवाइस प्रकार बदलने से समस्या तुरंत हल हो गई:

यहां छवि विवरण दर्ज करें

मुझे नहीं पता कि यह क्यों काम करता है, लेकिन यह एक बहुत ही त्वरित उत्तर है, जिसने मुझे पृष्ठभूमि में बहुत सी चक्कर लगाने से बचाया और तुरंत परीक्षण के लिए काम करने वाला ऐप मिल गया। मैंने कभी नहीं सोचा होगा कि यह एक चीज हो सकती है और इतना सरल कुछ इसे ठीक कर देगा लेकिन इस मामले में ऐसा किया।


0

मैंने पाया कि वास्तुकला के नामों को हाथ से दर्ज करना आवश्यक था:

यहां छवि विवरण दर्ज करें

मुझे नहीं पता कि यह क्यों आवश्यक था, अर्थात ये मान Xcode से ही विरासत में क्यों नहीं मिले। लेकिन जैसे ही मैंने ऐसा किया, समस्या दूर हो गई।


0

मान्य आर्किटेक्चर में: प्रत्येक प्रविष्टि (रिलीज़, डिबग) का चयन करें और निर्माण करें और बैकस्पेस दबाएं। यह काम करना चाहिए

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