Xcode 5.1 - ไม่มีสถาปัตยกรรมที่จะคอมไพล์สำหรับ (ONLY_ACTIVE_ARCH = YES, arch ที่ใช้งาน = 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

ฉันพยายามเปลี่ยน "Build Active Architecture" เป็นไม่รวมถึงการเพิ่ม "i386" เป็น "สถาปัตยกรรมที่ถูกต้อง" น่าเสียดายที่ไม่ได้ทำงาน ขอบคุณสำหรับคำแนะนำใด ๆ !


4
ฉันได้เห็นคำถามที่คล้ายกันสองสามข้อหลังจากการอัปเดต iOS 7.1 ล่าสุดและวิธีแก้ไขก็คือไม่ต้องวางแขน 64 เป็นที่ยอมรับว่าไม่ได้แก้ปัญหาเฉพาะของคุณ แต่มีเหตุผลที่เชื่อได้ว่าแอปเปิ้ลทำอะไรผิดพลาด
dandan78

ขอบคุณที่เหมาะสมฉันคิดว่าฉันจะไม่ใช้ 64- บิตจนกว่า Apple จะเผยแพร่การอัปเดตสำหรับสิ่งนี้
ebi


ปัญหาเดียวกันบน Xcode 6.1 ได้ลองวิธีแก้ไขปัญหาทั้งหมดที่ระบุด้านล่างพวกเขาไม่ทำงาน ฉันมี CocoaPods ในโครงการของฉัน วิธีแก้ปัญหาใด ๆ ในการแก้ไขบน Xcode 6.1
Vinayaka Karjigi

คำตอบ:


102

ฉันมีข้อความแสดงข้อผิดพลาดเดียวกันหลังจากอัปเกรดเป็น XCode 5.1 คุณใช้ CocoaPods หรือไม่? หากเป็นเช่นนี้ควรแก้ไขปัญหา:

  1. ลบโครงการ "พ็อด" ออกจากพื้นที่ทำงานในบานหน้าต่างด้านซ้ายของ Xcode และปิด Xcode
  2. เรียกใช้ "พ็อดติดตั้ง" จากบรรทัดคำสั่งเพื่อสร้างโครงการ "พ็อด" ใหม่
  3. เปิด Xcode อีกครั้งและตรวจสอบให้แน่ใจว่า "Build Active Architecture Only" ถูกตั้งค่าเป็น "ไม่" ในการตั้งค่าการสร้างของทั้งโครงการ "พ็อด" และโครงการของคุณเอง
  4. ทำความสะอาดและสร้าง

1
แก้ไขโดยการลบ arm64 ออกจากสถาปัตยกรรมของ Pod
ebi

แก้ไขปัญหาเดียวกันในโครงการ Cordova / PhoneGap ให้ฉันด้วย ขอบคุณ
Rocco

182

สิ่งที่คุณต้องทำคือการตั้งเพียงONLY_ACTIVE_ARCHเพื่อNO(ที่งานน้อยสำหรับฉัน) ด้านล่างเป็นภาพหน้าจอสำหรับมัน:


แก้ไข:

เท่าที่ผมรู้ว่า ( โปรดชี้ว่ามีบางอย่างผิดปกติขอบคุณ ) ถ้าคุณตั้งONLY_ACTIVE_ARCHไปYESก็หมายความว่า Xcode จะสร้างสถาปัตยกรรมที่ใช้งาน (ซึ่งหมายถึงอุปกรณ์ที่ใช้งานอยู่ใน Xcode ปัจจุบัน) ดูเหมือนว่าการตั้งค่าเริ่มต้นของ Xcode นั้นจะตั้งค่า Debug เป็นYESดังนั้นมันจะไม่สร้างไบนารีสำหรับสถาปัตยกรรมอื่น ๆ เมื่อคุณต้องการสร้างสำหรับอุปกรณ์พิเศษที่เชื่อมต่อกับ Mac ของคุณเท่านั้น

เหตุผลที่ล้มเหลวในการสร้างอาจเป็นเพราะโครงการไม่สนับสนุนสถาปัตยกรรมของอุปกรณ์ที่คุณเชื่อมต่อ ดังนั้นทางออกที่ดีที่สุดคือการเพิ่มสถาปัตยกรรมที่เหมาะสมสำหรับอุปกรณ์ของคุณ ด้านล่างเป็นรายการสำหรับสถาปัตยกรรมและอุปกรณ์ที่รองรับ:

  • 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 เป็นเพียงเป้าหมายการสร้าง คุณจะเห็นมันเมื่อคุณเลือกโครงการรูทของคุณ (พร้อมไอคอนสีน้ำเงิน)
Kjuly

@Praveen ไม่แน่ใจว่าตัวเลือกนี้มีการเปลี่ยนแปลงใน Xcode 5.1
Kjuly

นี่คือคำตอบที่ถูกต้องคุณบันทึกฉันอายุการใช้งานที่นี่ขอบคุณ :)
บิครามจิตซิงห์

2
นี่คือคำตอบที่ชัดเจนและสมบูรณ์ที่สุด ควรเป็นผู้ที่ได้รับการอนุมัติอย่างแน่นอน !!! ขอบคุณ
MeV

1
สิ่งนี้มีประโยชน์มาก คำตอบจะสมบูรณ์ถ้าคุณสามารถเพิ่มวิธีการดาวน์โหลดสถาปัตยกรรมที่จำเป็น
Kalpesh Popat

29

เพิ่มไปยังเป้าหมายarm64 valid architecturesดูเหมือนว่าจะเพิ่มx86-64สถาปัตยกรรมเพื่อจำลองสถาปัตยกรรมที่ถูกต้องเช่นกัน


27

หากคุณกำลังใช้ CocoaPods ปัญหาที่น่าเป็นไปได้มากที่สุดก็คือเนื่องจากการตั้งค่า Build ของโครงการ Pod สำหรับBuild Active Architecture เท่านั้นที่ได้รับการตั้งค่าเป็นYesสำหรับ Debug

การแก้ปัญหานั้นง่าย เปลี่ยนเป็นไม่มี

ในทำนองเดียวกันเปลี่ยนเป็นไม่ใช่สำหรับโครงการแอปพลิเคชันของคุณ


12

ฉันมีปัญหาที่คล้ายกัน รับการแก้ไขโดยการเปลี่ยน"สถาปัตยกรรม"เป็น " $ (ARCHS_STANDARD_32_BIT) " ในการตั้งค่าการสร้างสำหรับโครงการ

ตอนนี้คุณต้องเลือกสถาปัตยกรรมมาตรฐาน (armv7, arm64) - $ (ARCHS_STANDARD)เนื่องจากแอปเปิ้ลแนะนำให้แอพสร้างบนสถาปัตยกรรม 64 บิต คลิก: เอกสาร Apple


@JayprakashDubey แล้วมีเรื่องอะไรล่ะ? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

ฉันควรใช้$(ARCHS_STANDARD_32_BIT)หรือ$(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

@hagile: ไปกับ $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey

10

เพิ่ม: สถาปัตยกรรม: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

สถาปัตยกรรมที่ถูกต้อง: arm64 armv7 armv7s


อืมคุณได้ทำการรีเซ็ตทุกอย่างเนื้อหาเครื่องจำลองการจำลองโครงการใหม่รีสตาร์ท xCode และ Mac เพราะฉันมี xCode5.1 และเครื่องมือจำลองของฉันทำงานได้ดี
AntonijoDev

คุณใช้แอพ / เครื่องมือจำลองโดยใช้ iPhone 4 นิ้ว 64 บิตหรือไม่
ebi

5

ในกรณีที่สำหรับทุกคนที่ยังคงประสบปัญหาแม้จะทำตามข้างต้นให้ตรวจสอบว่าอุปกรณ์จำลองที่คุณใช้นั้นเป็นอุปกรณ์ที่รองรับ ฉันมีการระบุของฉันสำหรับ arm7 และ arm7s แต่พยายามเรียกใช้แอปด้วยโปรแกรมจำลอง 64 บิต


+1 ใช่นี่คือสิ่งนี้! หลังจากตรวจสอบและตรวจสอบอีกครั้งและตรวจสอบสามครั้งว่าทุกอย่างยังคงโอเคนี่เป็นปัญหา!
JOM

1
ว้าว. ฉันต้องเสียบอุปกรณ์ที่ฉันต้องการสร้างเพื่อรับรหัสเป้าหมายที่เหมาะสม ฉันแค่ตบปากของฉัน โพสต์ของคุณแก้ไขปัญหานี้ให้ฉันขอบคุณ

5

เพื่อหลีกเลี่ยงการรีเซ็ต "พ็อดติดตั้ง" เท่านั้น only_arch_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 แม้จะ Podfile platform :iosของฉันมี ฉันใช้ cocoapods 0.35.0.rc2

หากต้องการแก้ไขให้เลือกโครงการ Pod ในเนวิเกเตอร์โครงการและตรวจสอบว่าโหนด Pods PROJECT (คำนึงถึงคุณไม่ใช่เป้าหมายของ Pods) กำหนดเป้าหมายเป็น iOS นั่นคือสถาปัตยกรรมสร้างการตั้งค่าควรเป็น:

  • สถาปัตยกรรม: $(ARCHS_STANDARD)
  • SDK ฐาน: iOS 8.1
  • แพลตฟอร์มที่รองรับ: iOS
  • สถาปัตยกรรมที่ถูกต้อง: $(ARCHS_STANDARD)

ฉันต้องการสร้างสถาปัตยกรรมทั้งหมดดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้ใน Podfile:

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

ในสถาปัตยกรรม -> acr Architecture - เลือกสถาปัตยกรรมมาตรฐาน arm64 armv7 armv7s ด้านล่างในสถาปัตยกรรม ac ที่ถูกต้องทำให้ผู้ใช้ arm64 armv7 armv7 รวมอยู่ด้วย สิ่งนี้ใช้ได้สำหรับฉัน


0

ฉันแก้ไขปัญหานี้โดยใช้คำตอบของ @ Kjuly และบรรทัดเฉพาะ:

"สาเหตุที่ล้มเหลวในการสร้างอาจเป็นเพราะโครงการไม่สนับสนุนสถาปัตยกรรมของอุปกรณ์ที่คุณเชื่อมต่อ"

เมื่อโหลด Xcode มันจะตั้งค่าแอพ iPad เป็น iPad Air โดยอัตโนมัติ

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้ทำให้เกิดข้อผิดพลาดในการวิเคราะห์การพึ่งพา

การเปลี่ยนประเภทอุปกรณ์แก้ไขปัญหาได้ทันที:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่รู้ว่าทำไมงานนี้ แต่เป็นคำตอบที่รวดเร็วมากซึ่งช่วยให้ฉันเล่นซอในพื้นหลังและทำให้แอปทำงานได้ทดสอบทันที ฉันไม่เคยคิดเลยว่ามันจะเป็นอะไรและอะไรที่เรียบง่ายแบบนี้จะแก้ไขได้ แต่ในกรณีนี้มันทำ


0

ฉันพบว่าจำเป็นต้องป้อนชื่อสถาปัตยกรรมด้วยมือ:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่รู้ว่าทำไมมันถึงมีความจำเป็นเช่นทำไมค่าเหล่านี้ไม่ได้รับมาจาก Xcode แต่ทันทีที่ฉันทำสิ่งนี้ปัญหาก็หายไป


0

ในสถาปัตยกรรมที่ถูกต้อง: เลือกแต่ละรายการ (release, debug) และสร้างและกด backspace มันควรจะทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.