Xcode 12, iOS सिम्युलेटर के लिए बिल्डिंग, लेकिन iOS के लिए निर्मित ऑब्जेक्ट फ़ाइल में लिंक करना, आर्किटेक्चर arm64 के लिए


308

IOS के लिए प्रस्तुत करने के लिए Xcode 12 (बीटा 5) में एक बड़ी (और Xcode 11!) प्रोजेक्ट बिल्डिंग पर काम करने की कोशिश कर रहा है। Codebase पहले Obj-C था, लेकिन अब इसमें Obj-C और Swift दोनों शामिल हैं, और पॉड्स का उपयोग करते हैं ओब्ज-सी और / या स्विफ्ट।

मैंने Xcode 12 समर्थन (वर्तमान में 1.10.0.beta 2) के साथ कोकोपोड्स के नए बीटा को खींच लिया है।

पॉड इंस्टॉल सफल है। जब मैं एक निर्माण करता हूं, तो मुझे पॉड फ्रेमवर्क पर निम्न त्रुटि मिलती है:

"आईओएस सिम्युलेटर के लिए निर्माण, लेकिन आर्किटेक्चर आर्म 64 के लिए आईओएस के लिए बनाई गई ऑब्जेक्ट फ़ाइल में लिंक करना"

जब मैं लाइपो -info रनिंग फ्रेमवर्क पर जाता हूं, तो इसमें: armv7s armv7 i386 x86_64 arm64 होता है।

पहले, इस परियोजना के लिए मान्य आर्किटेक्चर थे: armv7, armv7s और arm64।

Xcode 12 में, वह सेटिंग चली जाती है, Apple के प्रलेखन के अनुसार। आर्किटेक्चर $ (ARCHS_STANDARD) पर सेट है। बहिष्कृत आर्किटेक्चर में मेरे पास कुछ भी नहीं है।

किसी को भी इस बात का अंदाजा है कि यहां क्या हो सकता है? मैं अभी तक एक सरल परियोजना के साथ इसे पुन: पेश करने में सक्षम नहीं हूं।


3
यह मेरे लिए काम किया है: stackoverflow.com/questions/24924809/…
नरेंद्र सिंह सैनी


मेरे पास एक Apple सिलिकॉन एम 1 है, और मैं अभी भी इस आर्म 64 त्रुटि में चल रहा हूं। ऐसा क्यों होगा?
एस्पेन

जवाबों:


479

मूल रूप से आपको arm64सिम्युलेटर आर्किटेक्चर के लिए अपनी परियोजना और पॉड परियोजना दोनों से बाहर करना होगा,

  • ऐसा करने के लिए, अपनी परियोजना की सेटिंग बनाएँ और अंदर Any iOS Simulator SDKमूल्य के साथ जोड़ें ।arm64Excluded Architecture

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

या

  • यदि आप कस्टम XCConfigफ़ाइलों का उपयोग कर रहे हैं , तो आप सिम्युलेटर आर्किटेक्चर को छोड़कर इस लाइन को जोड़ सकते हैं।
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

फिर

आपको पॉड प्रोजेक्ट के लिए तब तक ही करना होगा जब तक कि सभी कोको पोड विक्रेताओं को उनके पॉडसेक में निम्नलिखित जोड़ दिया जाए

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

आप Excluded Architechureअपने पॉड प्रोजेक्ट की बिल्ड सेटिंग्स में मैन्युअल रूप से जोड़ सकते हैं , लेकिन जब आप उपयोग करेंगे तो यह ओवरराइट हो जाएगा pod install

इसके स्थान पर, आप इस स्निपेट को अपने में जोड़ सकते हैं Podfile। यह आपके द्वारा चलाए जाने पर हर बार नेक्स्टरी बिल्ड सेटिंग्स लिखेगाpod install

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

4
कोकोपॉड्स के बारे में अतिरिक्त विवरण यहाँ अच्छा है। ध्यान दें कि [sdk=iphonesimulator*]बाद के बिना EXCLUDED_ARCHS, XCode आपके पॉड्स को खोजने में विफल रहेगा जब वास्तविक डिवाइस के लिए निर्माण किया जाएगा क्योंकि कोई भी फली arm64 से नहीं बनाई जाएगी।
मवू

6
मेरे लिए काम किया! ध्यान दें कि post_install do |installer|फ्लिपर के कारण अधिकांश पॉडफाइल्स में पहले से ही एक अनुभाग है। पंक्ति के installer.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" endपीछे आंतरिक अनुभाग चिपकाएं flipper_post_install(installer)
रेमन वर्म्यूलेन

5
मैं हो रही है building for iOS Simulator, but linking in object file built for macOS, for architecture x86_64। इसे कैसे जोड़ेंगे?
सज्जाद हिसैन खान

3
यह समाधान उत्कृष्ट है और मैं यह जोड़ूंगा कि यदि आप अपनी पॉड का निर्माण कर रहे हैं, तो विशेष रूप से उन 2 पंक्तियों पर ध्यान दें, जिन्हें लेखक "बाद में ..." बताता है, जब तक कि सभी पॉडकैप पॉड विक्रेताओं को उनके पॉडसेप में शामिल नहीं किया जाता है "इनके अभाव में जब मैंने इसे अपने निजी रेपो में धकेलने का प्रयास किया तो मेरे अपने ढांचे के पॉडसेक में लाइनिंग फेलियर था। धन्यवाद!
डैनी

1
समाधान में एक दोष है जो परेशानी का कारण बनता है क्योंकि पॉड स्पेक लेखकों ने इस समाधान को पाया और लगाया है। समस्याग्रस्त भाग का उपयोग है user_target_xcconfig। कई फली चश्मा मूल्यों भिन्न परिभाषित के बाद के लिए EXCLUDED_ARCHSवे इस तरह संघर्ष और CocoaPods का उत्सर्जन करता है चेतावनी में हैं [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.podspec वाक्य रचना संदर्भ का कहना है यह विशेषता है "की सलाह नहीं" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig
leberwurstsaft

115

टी एल; डॉ;

अपने लाइब्रेरियों / ऐप्स के लिए "बिल्ड एक्टिव आर्किटेक्चर ओनली ( ONLY_ACTIVE_ARCH)" को हां में सेट करें , यहां तक ​​कि रिलीज मोड के लिए भी ।


समस्या के मूल कारण की पहचान करने की कोशिश करते हुए मुझे Xcode 12 के बारे में कुछ मजेदार तथ्य पता चले।

  1. Xcode 12 वास्तव में Apple सिलिकोन के लिए कदम रखने वाला पत्थर है जो दुर्भाग्य से अभी तक उपलब्ध नहीं है। लेकिन उस मंच के साथ हम arm64 आधारित macOS प्राप्त करने जा रहे हैं जहां सिमुलेटर वर्तमान इंटेल आधारित x86-64 आर्किटेक्चर के विपरीत arm64 आर्किटेक्चर पर भी चलेंगे।

  2. Xcode आमतौर पर अपने पुस्तकालयों / ऐप्स के निर्माण के लिए "रन डेस्टिनेशन" पर निर्भर करता है। इसलिए जब एक सिम्युलेटर को "रन डेस्टिनेशन" के रूप में चुना जाता है, तो यह उपलब्ध सिम्युलेटर आर्किटेक्चर के लिए ऐप बनाता है और जब एक डिवाइस को "रन डेस्टिनेशन" के रूप में चुना जाता है, तो यह उस आर्किटेक्चर के लिए बनाता है जो डिवाइस का समर्थन करता है ( arm*)।

  3. xcodebuild, Xcode में 12+ बिल्ड सिस्टम arm64सिम्युलेटर के लिए एक वैध वास्तुकला के रूप में मानता है । इसलिए जब एक सिम्युलेटर को रन डेस्टिनेशन के रूप में चुना जाता है, तो यह संभावित arm64रूप से आधारित सिमुलेटरों के खिलाफ आपके लिबास / ऐप्स को संकलित / लिंक करने का प्रयास कर सकता है (अभी तक उपलब्ध नहीं)। इसलिए यह clang(++)कुछ arm64-apple-ios13.0-simulatorआर्किटेक्चर फ्लैग भेजता है जैसे <आर्किटेक्चर> - <os> - <sdk> - <प्लेटफॉर्म> फॉर्मेट और क्लैंग आर्म 64 आधारित सिम्युलेटर के खिलाफ निर्माण / लिंक करने की कोशिश करता है जो अंततः इंटेल आधारित मैक पर विफल हो जाता है।

  4. लेकिन xcodebuildयह केवल रिलीज बिल्ड के लिए कोशिश करता है। क्यों? क्योंकि, "बिल्ड एक्टिव आर्किटेक्चर ओनली ( ONLY_ACTIVE_ARCH)" बिल्ड सेटिंग्स केवल "रिलीज" कॉन्फ़िगरेशन के लिए आमतौर पर "नहीं" पर सेट होती है। और इसका मतलब है कि xcodebuildरिलीज बिल्ड के लिए चयनित रन डेस्टिनेशन के लिए आपके लिबास / एप्स के सभी आर्किटेक्चर वेरिएंट बनाने की कोशिश की जाएगी। और सिम्युलेटर रन डेस्टिनेशन के लिए, इसमें दोनों x86_64और arm64अब शामिल होंगे, क्योंकि arm64Xcode 12+ भी Apple सिलिकॉन का समर्थन करने के लिए सिमुलेटर के लिए एक समर्थित आर्किटेक्चर है

सीधे शब्दों में कहें, तो Xcode आपके ऐप को कभी भी बनाने में विफल होगा, क्योंकि यह कमांड लाइन की कोशिश करता है xcodebuild, (जो बिल्ड रिलीज़ करने में चूक करता है, आपकी परियोजना की सेटिंग का सामान्य टैब देखें) या अन्यथा रन गंतव्य द्वारा समर्थित सभी वास्तुशिल्प वेरिएंट बनाने की कोशिश करता है । तो इस मुद्दे पर एक सरल समाधान यह है कि अपने पुस्तकालयों / ऐप्स में "बिल्ड एक्टिव आर्किटेक्चर ओनली ( ONLY_ACTIVE_ARCH)" को हां , यहां तक ​​कि रिलीज मोड पर भी सेट करें।

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

यदि पुस्तकालयों को पॉड्स के रूप में शामिल किया जाता है और आपके पास पहुंच है, .podspecतो आप बस सेट कर सकते हैं:

spec.pod_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'YES'}

spec.user_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'YES'} # अनुशंसित नहीं

मुझे व्यक्तिगत रूप से दूसरी पंक्ति पसंद नहीं है क्योंकि पॉड्स को लक्ष्य परियोजना को प्रदूषित नहीं करना चाहिए और इसे लक्ष्य सेटिंग्स में ही ओवरराइड किया जा सकता है। तो यह उपभोक्ता परियोजना की जिम्मेदारी होनी चाहिए कि वह कुछ तरीकों से सेटिंग को ओवरराइड करे। हालांकि, यह पॉडस्पेक के सफल अस्तर के लिए आवश्यक हो सकता है।

हालाँकि, यदि आपके पास पहुँच नहीं है, तो आप .podspecफली की स्थापना के दौरान हमेशा सेटिंग्स को अपडेट कर सकते हैं:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

एक बात मैं इस बारे में चिंतित था कि इसका क्या प्रभाव होगा जब हम वास्तव में लिबास / एप्स को संग्रहित करेंगे। संग्रह के दौरान, आमतौर पर "रिलीज़" कॉन्फ़िगरेशन लेते हैं और चूंकि यह वर्तमान रन डेस्टिनेशन के केवल सक्रिय आर्किटेक्चर पर विचार करते हुए एक रिलीज़ बिल्ड का निर्माण करेगा, इस दृष्टिकोण के साथ, हम लक्ष्य निर्माण से armv7, armv7s, आदि के लिए स्लाइस खो सकते हैं। हालाँकि, मैंने देखा कि प्रलेखन कहता है (संलग्न चित्र में हाइलाइट किया गया) कि जब हम "जेनरिक आईओएस डिवाइस / एनी डिवाइस" को रन डेस्टिनेशन के रूप में चुनते हैं तो यह सेटिंग नजरअंदाज कर दी जाएगी, क्योंकि यह किसी विशिष्ट आर्किटेक्चर को परिभाषित नहीं करता है। इसलिए मुझे लगता है कि हमें अच्छा होना चाहिए अगर हम अपने ऐप को एक रन डेस्टिनेशन के रूप में चुनते हैं।


1
यह वास्तव में Apple से एक आश्चर्यजनक परिवर्तन है और मुझे यह पता लगाने के लिए आधे दिन की लागत है कि मुझे लगता है कि Apple को क्षतिपूर्ति करनी चाहिए :)। यह एक प्रलेखित अद्यतन नहीं है (कम से कम जैसा कि मुझे पता है) और निश्चित रूप से सभी को Xcode 12 में अपग्रेड करने के लिए प्रभावित करने जा रहा है। मुझे उम्मीद है कि मूल बातें जानने के बाद हर कोई इसे पाने के लिए अपना रास्ता ढूंढ लेगा।
अयन सेनगुप्ता

1
कई फली चश्मा का उपयोग करते हैं user_target_xcconfigऔर मान बिल्कुल मेल नहीं खाते, CocoaPods चेतावनी इस तरह उत्सर्जित करेगा [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.podspec वाक्य रचना संदर्भ का कहना है यह विशेषता है "की सलाह नहीं" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig । तो user_target_xcconfigकई डेवलपर्स को परेशानी से बचाने के लिए कृपया इसका उपयोग न करें ।
leberwurstsaft

2
सही! और मुझे लगता है कि मैंने पहले ही अपने उत्तर में इसका उल्लेख कर दिया है।
अयन सेनगुप्ता

1
मुझे लगता है कि यह सबसे अच्छा समाधान है क्योंकि यह Xcode 11 के साथ इमारत नहीं तोड़ता है। मैंने इस सेटिंग को पूरे प्रोजेक्ट के लिए लागू किया है, फिर मुझे इसे पॉड्स या लक्ष्य के लिए अलग से सेट नहीं करना पड़ा। और फिर यह दोनों Xcode 11.7 और Xcode 12 पर काम करता है। आर्क को छोड़कर arm64Xcode 11.7 में मैप किया गया है, x86_64इसलिए यह सिम्युलेटर के लिए मुख्य वास्तुकला को बाहर करता है।
वोज्शिएक कुलिक

2
मैं इसे 'EXCLUDED_ARCHS [sdk = iphonesimulator *]' => 'arm64' के साथ अंत में काम करने में कामयाब रहा, लेकिन केवल pod_target_xcconfig में, और केवल समस्या फली पर (जिसमें एक पूर्वनिर्मित लाइब्रेरी शामिल थी) और एकल पॉड जो इस पर निर्भर थी। समस्या फली। बाकी सब साफ रह गया था। मैंने तय किया कि मैं सक्रिय आर्क समाधान के लिए प्राथमिकता देता हूं।
एयरसोर्स लिमिटेड

72

एक समाधान मिला! https://developer.apple.com/forums/thread/657913

यदि आप सिम्युलेटर के लिए बहिष्कृत आर्किटेक्चर को arm64 में सेट करते हैं तो यह संकलन करेगा।

सिम्युलेटर के लिए आर्किटेक्चर को छोड़कर


काफी हद तक, मैं जो समस्या थी वह मैन्युअल रूप से लिंक किए गए पुस्तकालय के साथ थी, लेकिन यह हमारे पॉड्स के साथ एक समस्या का कारण नहीं था जो हम या तो उपयोग कर रहे हैं।
SlashDevSlashGnoll

5
मैं रिलीज़ मोड पर परीक्षण कर रहा था, इसलिए मुझे इसे रिलीज़ करने के लिए भी जोड़ना पड़ा
मुजतबाफ़र

मुझे लगता है कि हम इस पोस्ट के बाद व्यापार में वापस आ गए हैं। धन्यवाद, इसने मदद की।
JBarros35

@btxios मैं एक संग्रह बनाते समय "ARCHS [@]: अनबाउंड वैरिएबल" समस्या में चल रहा हूं। क्या आप इस समस्या को हल करने में सक्षम थे?
अरडेनदेव

49

मान्य आर्किटेक्चर बिल्ड सेटिंग Xcode 12 में हटा दी गई है। यदि आपके पास इस बिल्ड सेटिंग में मान थे, तो वे एक समस्या पैदा कर रहे हैं और इसे हटाने की आवश्यकता है।

मैं VALID_ARCHS सेटिंग को "क्लियर आउट" करने में सक्षम था, इसे एक यूज़र-डिफ़ाइंड बिल्ड सेटिंग (नो मानों के साथ) के रूप में जोड़कर, प्रोजेक्ट को रन करना (जो विफल रहा), और फिर वैलिडी_एआरएचएस बिल्ड सेटिंग को हटाना। उसके बाद, मैं सिम्युलेटर पर चलने में सक्षम था।

मेरे आर्किटेक्चर का निर्माण मानक आर्किटेक्चर है।

आप बिल्ड सेटिंग्स में प्लस बटन से उपयोगकर्ता-परिभाषित सेटिंग जोड़ सकते हैं:

उपयोगकर्ता-निर्धारित सेटिंग


9
यह स्वीकृत उत्तर होना चाहिए। सुनिश्चित करें कि एप्लिकेशन प्रोजेक्ट लक्ष्य नहीं चुना गया है। अन्यथा, आप बिल्ड सेटिंग्स से VALID_ARCHS को हटाने में सक्षम नहीं होंगे। :)
Bionicle

2
@trishcode ऐसा करने के बाद भी मुझे एक ही त्रुटि हो रही है (xcode12 beta4), कोई भी काम
आस

3
@ शिवकृष्णपर्ला यदि आप Xcode 11 में प्रोजेक्ट खोल सकते हैं, तो आप वास्तव में देख सकते हैं कि Valid Architectures का कौन सा लक्ष्य है। आप Xcode 11 में सेटिंग को भी साफ़ कर सकते हैं, और फिर Xcode 12 में प्रोजेक्ट को फिर से आज़मा सकते हैं। अगर आपको अभी भी वर्कअराउंड की आवश्यकता है और आपको एम्बेडेड फ्रेमवर्क पर त्रुटि मिल रही है, तो SlashDevSlashGnoll का उत्तर काम करना चाहिए। यदि आपको वर्कअराउंड की आवश्यकता है और आपको कोकोपोड पर त्रुटि मिल रही है, तो पोडफाइल पोस्ट इंस्टॉल में आर्म 64 आर्किटेक्चर को बाहर करें।
trishcode 12

1
@trishcode धन्यवाद, बाहर की वास्तुकला में arm64 की स्थापना और VALID_ARCHS को हटाने का काम किया।
शिवकृष्ण पेरला

1
अगर मैं VALID_ARCHS निकालता हूं और बहिष्कृत आर्किटेक्चर में arm64 जोड़ता हूं, तो मुझे यह त्रुटि मिलती है - निर्भरता की जाँच करें (ARCHS = arm64 x86_64, VALID_ARCHS =, EXCLEDED_ARCHS = (arm64) के लिए संकलन करने के लिए कोई आर्किटेक्चर नहीं)।
nobb iOS

14

Xcode 12.3

मैंने इस समस्या को हल करने के लिए Validate Workspace को Yes पर सेट किया

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


मेरा मुद्दा हल किया, धन्यवाद!
डेक्कन लैंड

1
मेरे मुद्दे को हल नहीं किया
एस्पेन

मेरा मुद्दा हल किया। सबसे आसान तय! मुझे खुशी है कि यह हल हो गया है, लेकिन क्या कोई यह समझा सकता है कि यह समस्या कैसे ठीक करता है?
njdeveloper

11

यदि आपको सिमुलेटर के साथ Xcode 12 में परेशानी है, तो असली डिवाइस नहीं, हां आपको VALID_ARCHS सेटिंग्स को हटाना होगा क्योंकि यह अब समर्थित नहीं है। "सेटिंग बनाता है" पर जाएं, " VALID_ARCHS " खोजें और उपयोगकर्ता द्वारा परिभाषित गुणों को हटा दें । में ऐसा हर लक्ष्य आप की है।

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

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

VALID_ARCHSमेरे प्रोजेक्ट से हटाने से ठीक काम हुआ। मैंने पॉडफाइल और न ही पॉड्स प्रोजेक्ट के लिए कुछ भी नहीं बदला।
एंजेल Tellez

8

Xcode 12 में अपग्रेड करने के बाद भी मैं एक वास्तविक डिवाइस के लिए निर्माण करने में सक्षम था, लेकिन सिम्युलेटर नहीं। पॉडफाइल बिल्ड केवल वास्तविक डिवाइस के लिए काम कर रहा था।

मैंने बिल्ड सेटिंग्स> उपयोगकर्ता-परिभाषित के तहत VALID_ARCHS को हटा दिया और यह काम कर गया! यह पता लगाने से पहले कुछ समय के लिए मेरे सिर को कोसना।


8

मेरे लिए निम्नलिखित सेटिंग ने काम किया:

बिल्ड सेटिंग्स >> आर्किटेक्चर को छोड़कर

"किसी भी iOS सिम्युलेटर SDK" विकल्प के लिए रिलीज़ और डीबग मोड में "arm64" जोड़ा गया।

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


6

मुझे विश्वास है कि मुझे जवाब मिल गया। Xcode 12 बीटा 6 रिलीज नोट प्रति:

" बिल्ड सेटिंग्स संपादक में अब मान्य आर्किटेक्चर बिल्ड सेटिंग (VALID_ARCHS) शामिल नहीं है, और इसका उपयोग हतोत्साहित करता है। इसके बजाय, एक नया बहिष्कृत आर्किटेक्चर बिल्ड सेटिंग (EXCLUDED_ARCHS) है। यदि किसी प्रोजेक्ट में VALID_ARCHS शामिल है, तो सेटिंग उपयोगकर्ता में प्रदर्शित होती है। बिल्ड सेटिंग्स संपादक के -Defined अनुभाग। (15145028) "

मैं प्रोजेक्ट फ़ाइल को मैन्युअल रूप से संपादित करके इस समस्या को हल करने में सक्षम था (मैं यह पता नहीं लगा सका कि Xcode का उपयोग करके प्रोजेक्ट फ़ाइल से आइटम को कैसे निकालना है) और VALID_ARCHS का संदर्भ देने वाली सभी लाइनों को हटा दें। उसके बाद, मैं सिम्युलेटर ठीक करने के लिए निर्माण करने में सक्षम हूं।


1
Xcode का उपयोग करते हुए, VALID_ARCHS चुनिंदा प्रोजेक्ट में है (टारगेट नहीं) तो `बिल्ड सेटिंग -> यूजर-डिफाइंड '' 'इसे चुनें और इसे डिलीट करें।
अक्षय

इस समाधान ने मेरे लिए काम किया। कुछ अन्य लोगों द्वारा सुझाए गए समाधान ने 'arm64' मान को जोड़ने का काम नहीं किया, क्योंकि '। निकालें आर्किटेक्चर' क्षेत्र ने उत्पन्न .app फ़ाइल के लिए कुछ 'फ़ाइल अनुमति' त्रुटि देनी शुरू की।
14

6

मैं प्रॉजेक्ट टारगेट और पॉड टारगेट, दोनों के लिए "बहिष्कृत आर्किटेक्चर" में "arm64" जोड़कर समस्या हल करता हूं।

Xcode -> लक्ष्य परियोजना -> निर्माण सेटिंग -> बहिष्कृत आर्किटेक्चर> "arm64"

Xcode -> पॉड टारगेट -> बिल्ड सेटिंग -> एक्सक्लूसिव आर्किटेक्चर> "arm64"


6

Xcode 12

मेरे लिए उपयोगकर्ता-निर्धारित समूह कार्य के तहत बिल्ड सेटिंग्सVALID_ARCH से निकालना ।

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


5

आप में xxx.framework पॉडसीप फ़ाइल जोड़ें फॉलो कॉन्फिग से बचें पॉड पैकेज में arm64 सिमुलेटर आर्क होते हैं

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

इसने काम कर दिया! हालांकि इसका मतलब है कि Apple सिलिकॉन आधारित Macs में Pod का उपयोग नहीं किया जा सकता है?
तंबाकू सेप

क्या इसकी पुष्टि @ तम्बाकू है?
फर्नांडो रेनोसो

2
@FernandoReynoso मुझे अभी एक डेवलपर संक्रमण किट मिली है, (ARM MacMini) आज बाद में परीक्षण करेगी और रिपोर्ट
देगी

@ तम्बाकू क्या आप इसका परीक्षण कर पाए हैं?
होउमैन

यदि कई पॉड चश्मा उपयोग करते हैं user_target_xcconfigऔर मान बिल्कुल मेल नहीं खाते हैं, तो कोकोआपोड्स इस तरह की चेतावनियों का उत्सर्जन करेगा [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.। पॉडसेक सिंटैक्स संदर्भ कहता है कि यह विशेषता "अनुशंसित नहीं है" मार्गदर्शिकाकोकोपोड्स . org/syntax/podspot.html # user_target_xcconfig । तो user_target_xcconfigकई डेवलपर्स को परेशानी से बचाने के लिए कृपया इसका उपयोग न करें ।
leberwurstsaft

4

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

EXCLUDED_ARCHS=arm64सीएलआई से सिमुलेटर के लिए रूपरेखा तैयार करते समय मुझे ध्वज की आवश्यकता थी ।

xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=arm64

1
मुझे भी। इस परिदृश्य में कुंजी "समस्या" वास्तव में एक सामान्य गंतव्य के लिए निर्माण कर रही है -destination "generic/platform=iOS Simulator"। यह सभी उपलब्ध आर्किटेक्चर के लिए निर्माण की ओर जाता है, जिसमें Xcode 12 के बाद arm64 शामिल है
Sascha

4

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

मैं एक सार्वभौमिक ढांचे का निर्माण कर रहा हूं जिसका उपयोग एक स्विफ्ट ऐप में किया जाता है। मैं आर्किटेक्चर त्रुटियों के बिना सिम्युलेटर के निर्माण में असमर्थ था।

मेरे फ्रेमवर्क प्रोजेक्ट में मेरे बिल्ड चरणों में एक यूनिवर्सल फ्रेमवर्क कार्य है, यदि यह आपके लिए है

  • xcodebuildबिल्ड चरण के अंदर अपने कार्य में निम्नलिखित जोड़ें : EXCLUDED_ARCHS="arm64"

आगे आपको निम्नलिखित प्रोजेक्ट बदलना होगा Build Settings:

  • VALID_ARCHSउपयोगकर्ता परिभाषित सेटिंग हटाएं
  • सेट ONLY_ACTIVE_ARCHकरने के लिए YES***

*** यदि आप एक रूपरेखा विकसित कर रहे हैं और साथ ही एक डेमो ऐप भी है, तो इस सेटिंग को दोनों परियोजनाओं में चालू करना होगा।


4

अपडेट: अक्टूबर 2020

आप arm64केवल Debug > Simulator - iOS 14.O SDKबहिष्कृत आर्किटेक्चर के तहत केवल सेट कर सकते हैं ।

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


3

पॉड डेवलपर्स के लिए अपने पॉडसेप में जोड़ें:

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

फिर अपने नमूना परियोजना में नमूना परियोजना फ़ाइलें सेटिंग्स

इसे इस परियोजना में काम करते हुए देखें


कई फली चश्मा का उपयोग करते हैं user_target_xcconfigऔर मान बिल्कुल मेल नहीं खाते, CocoaPods चेतावनी इस तरह उत्सर्जित करेगा [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.podspec वाक्य रचना संदर्भ का कहना है यह विशेषता है "की सलाह नहीं" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig । तो user_target_xcconfigकई डेवलपर्स को परेशानी से बचाने के लिए कृपया इसका उपयोग न करें ।
leberwurstsaft

2

मैं विशिष्ट पुस्तकालय के साथ भी यही समस्या अनुभव कर रहा था जिसे कार्टहाज के माध्यम से स्थापित किया गया था। जो लोग कार्थेज का उपयोग कर रहे हैं, उनके लिए कार्टाज एक्सबॉक्स 12 के साथ बॉक्स से बाहर काम नहीं करता है, यह दस्तावेज़ एक वर्कअराउंड के माध्यम से मार्गदर्शन करेगा जो अधिकांश मामलों के लिए काम करता है। खैर, शीघ्र ही, कार्थेज ने वसा ढांचे का निर्माण किया, जिसका अर्थ है कि ढांचे में सभी समर्थित आर्किटेक्चर के लिए बायनेरी शामिल हैं। जब तक Apple Sillicon पेश किया गया था तब तक यह सब ठीक काम करता था, लेकिन अब एक विरोधाभास है क्योंकि डुप्लिकेट आर्किटेक्चर हैं (उपकरणों के लिए arm64 और सिम्युलेटर के लिए arm64)। इसका मतलब यह है कि कार्थेज आर्किटेक्चर विशिष्ट फ्रेमवर्क को एकल वसा ढांचे से नहीं जोड़ सकता है।

आप यहां दिए गए निर्देशों का पालन कर सकते हैं। कार्थेज XCODE 12

इसके बाद आप कार्टेज को कॉन्फ़िगर करें। निर्माण सेटिंग्स पर "बहिष्कृत आर्किटेक्चर" में arm64 रखो। यहाँ छवि विवरण दर्ज करें

सिम्युलेटर का उपयोग करके अपने प्रोजेक्ट को चलाने का प्रयास करें। सिम्युलेटर को बिना किसी त्रुटि के चलना चाहिए।


1

यहाँ समस्या Xcode 11 में मान्य आर्किटेक्चर हैं, Xcode 11 में प्रोजेक्ट खोलें और अपने प्रोजेक्ट, टारगेट और पॉड्स दोनों के लिए Valid आर्किटेक्चर वैल्यू को $ (ARCHS_STANDARD) में बदलें, Xcode 12 में प्रोजेक्ट को फिर से खोलें और बनाएँ


1

"Build Active Architecture Only"(ONLY_ACTIVE_ARCH)बिल्ड सेटिंग को हां पर सेट करें , xcodeसिलिकॉन मैक आर्किटेक्चर के कारण arm64 के लिए पूछ रहा है जो arm64 है।

arm64 को सिलिकॉन मैक का समर्थन करने के लिए Xcode12 में सिम्युलेटर आर्क के रूप में जोड़ा गया है।

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json


यदि यह सिलिकॉन मैक पर नहीं चल रहा है, तो निश्चित रूप से यह पता होना चाहिए कि arm64 का उपयोग नहीं करना चाहिए?
जोनाथन।

@Jonathan। हां, ऐसा होना चाहिए था, लेकिन वर्तमान में ऐसा नहीं है।
अरविंद

1

मेरे मामले में: Xcode 12

मैं रिक्त मान सेट करता हूं EXCLUDED_ARCHSऔर ONLY_ACTIVE_ARCHडीबग = YESरिलीज़ = प्रोजेक्ट की बिल्ड सेटिंग सेट करता हूंNO

और मैंने इसे अपने पॉडफाइल में शामिल किया:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
        end
    end
end

यह मेरे सिम्युलेटर iPhone 8 (iOS 12) और iPhone 11 प्रो मैक्स (iOS 14) और मेरे डिवाइस iPhone 7 Plus (iOS 13.4) पर चलता है


1

पर Build Settingsखोज VALID_ARCHतो प्रेस delete। यह मेरे लिए Xcode 12.0.1 के साथ काम करना चाहिए

बिल्ड सेटिंग्स पर VALID_ARCH


2
मुझे नहीं मिला VALID_ARCH, यह क्या है?
होउमन

1

केवल मेरे Any iOS Simulator SDK -> x86_64लिए Project's Build Settings -> VALID_ARCHSकाम करता है।

Xcode संस्करण: 12.1 (12A7403)

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

यदि आपके प्रोजेक्ट में कुछ चौखटे शामिल हैं जो x86_64 का समर्थन नहीं करती हैं।

  • आप इन रूपरेखा नामों ( xxx.framework) को जोड़ सकते हैं Target -> Build Settings -> Excluded Source File Names -> Debug -> Any iOS Simulator SDK
  • और फिर Framework Search Pathsइन चौखटों के पथ को हटाने के लिए संशोधित करें Debug -> Any iOS Simulator SDK

ये दो सेटिंग्स सिम्युलेटर मोड पर इन रूपरेखाओं को बनाने और लिंक करने के लिए Xcode से बच सकती हैं।

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

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


1

मैं arm64 और Xcode 12 के साथ समस्या को समझता हूं और मैं iPhone सिम्युलेटर के लिए arm64 आर्किटेक्चर को छोड़कर या रिलीज़ स्कीम के लिए ONLY_ACTIVE_ARCH सेट करके समस्याएँ हल करने में सक्षम था। हालाँकि मुझे अभी भी पॉड रेपो पुश का उपयोग करके अपने ढांचे को आगे बढ़ाने में समस्या है।

मुझे पता चला कि मेरे पॉडसेप में s.pod_target_xcconfig सेटिंग उसी पॉडस्पेक में परिभाषित निर्भरता के लिए इस सेटिंग को लागू नहीं करता है। मैं इसे डमी ऐप प्रोजेक्ट में देख सकता हूं कि कोकोपोड्स सत्यापन के दौरान उत्पन्न हो रहा है। Cocoapods सत्यापन सिम्युलेटर के लिए रिलीज़ स्कीम चला रहा है और यह तब विफल हो रहा है जब एक या अधिक निर्भरताएं arm64 को बाहर नहीं करती हैं या केवल सक्रिय आर्किटेक्चर बनाने के लिए सेट नहीं है।

एक समाधान यह हो सकता है कि परियोजना को सत्यापित करते समय पोस्ट इंस्टॉल स्क्रिप्ट को जोड़ने के लिए कोकोपोड्स को बाध्य करने या इसे डीबग योजना बनाने दें, क्योंकि डीबग योजना केवल सक्रिय वास्तुकला का निर्माण कर रही है।

मैंने सत्यापन को पारित करने के लिए अपनी पॉड जारी करने के लिए एक्सकोड 11 का उपयोग किया। आप developer.apple.com से Xcode 11 डाउनलोड कर सकते हैं, इसे Xcode11.app के रूप में एप्लिकेशन फ़ोल्डर में कॉपी कर सकते हैं और उपयोग कर सकते हैं sudo xcode-select --switch /Applications/Xcode11.app/Contents/Developer। जब किया वापस स्विच करने के लिए मत भूलना।


1

विभिन्न समाधानों की कोशिश करने और खोजने के बाद, मुझे लगता है कि सबसे सुरक्षित तरीका पॉडफाइल के अंत में निम्नलिखित कोड जोड़ रहा है

post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

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


किसी को कम से कम इस मुद्दे को समझना और आईओएस सिम्युलेटर के लिए ऐप्पल सिलिकॉन समर्थन को हटाने का सुझाव नहीं देना बहुत अच्छा है।
कैंषफ़्ट

0

मेरे मामले में:

मेरे पास 4 कॉन्फ़िगरेशन थे (+ डिबग्यूका और रिलीजक्यूए) कोकोपोड्स का उपयोग एक निर्भरता प्रबंधक के रूप में किया जाता है

डीबग के लिए, मैं डिवाइस पर और सिम्युलेटर में और केवल डिवाइस पर क्यूए पर इकट्ठा हुआ।

यह PodsProject में Yes के लिए BuildActiveArchitecture को सेट करने में मदद करता है


0

मेरे मामले में मैं रिले मोड में एक watchOS 7 सिम्युलेटर पर चलने की कोशिश कर रहा था, लेकिन iOS 14 सिम्युलेटर डीबग मोड में था।

तो बस डिबग / रिलीज़ मोड में दोनों सिम डालकर मेरे लिए समस्या हल कर दी!


0

डिबग कॉन्फ़िगरेशन को वापस डिबग मोड पर स्विच करें या बिल्ड एक्टिव आर्किटेक्चर चालू करें केवल डीबग और रिलीज़ मोड दोनों के लिए। कारण यह है कि आपकी लाइब्रेरी / रूपरेखा नए सिम्युलेटर आर्किटेक्चर ARM64 का समर्थन नहीं करती है (मैक पर एप्पल सिलिकॉन प्रोसेसर के साथ चलाएं)


0

पथ में "आर्म 64" (बिना उद्धरण के) जोड़ें: Xcode -> प्रोजेक्ट -> सेटिंग बनाएँ -> आर्किटेक्चर -> अपवर्जित आर्किटेक्चर इसके अलावा, पॉड्स के लिए भी ऐसा ही करें। डिबग और रिलीज़ फ़ील्ड दोनों के लिए दोनों मामलों में।

या विस्तार से ...

एक्सकोड 12 का उपयोग करते हुए सिम्युलेटर में तैनात होने के दौरान त्रुटियों का उल्लेख यहां भी किया गया है जो मुझे प्रभावित करते हैं। मेरे हर प्रोजेक्ट पर राइट-क्लिक करें और फाइंडर में देखें। एटम में .xcodeproj खोलें, फिर .pbxproj से गुजरें और सभी VALIDARCHS सेटिंग्स को हटा दें। यह वही है जो मेरे लिए काम कर रहा है। कुछ अन्य सुझावों की कोशिश की (arm64 को छोड़कर, केवल सक्रिय आर्किटेक्चर का निर्माण करें) जो कि मेरा निर्माण आगे प्राप्त करने के लिए लग रहा था लेकिन अंततः मुझे एक और त्रुटि पर छोड़ देता है। VALIDARCH सेटिंग के आस-पास पड़ी होने के कारण, पहले जांच करना सबसे अच्छी बात है।


0

मेरे लिए काम किया समाधान साझा करना, जो किसी की मदद कर सकता है

सिम्युलेटर के लिए संकलन करते समय समस्या:

iOS सिम्युलेटर के लिए निर्माण, लेकिन iOS के लिए निर्मित ऑब्जेक्ट फ़ाइल में लिंक करना, आर्किटेक्चर arm64 के लिए

XCODE 12.1, POD 1.9.1

मेरी परियोजना संरचना

  • मुख्य लक्ष्य
  • शेयर एक्सटेंशन
  • सूचना सेवा विस्तार
  • सबमॉड्यूल, कस्टम फ्रेमवर्क
  • Podfile
  1. सभी लक्ष्यों में arm64बिल्ड सेटिंग्स -> Exclude Architectureमें जोड़ें ।

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

  1. निकाला गया arm64से VALID_ARCHSऔर कहा कि x86_64सभी लक्ष्यों में।

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

  1. में निम्नलिखित कोड जोड़ें podfile

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  2. किया pod update, हटाया podfile.lock, और कियाpod install

  3. साफ निर्माण करें।


0

बहुत सारे बेकार जवाबों को ऑनलाइन आज़माने के बाद। यह मेरे लिए काम करता है।

सबसे पहले, फली परियोजनाओं के लिए x86_64 उत्पन्न करता है !!!!

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ARCHS'] = "arm64 x86_64"
        end
    end
end

दूसरा, VALID_ARCHS के लिए "x86_64" जोड़ें

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

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