คำเตือน“ การแม็ปสถาปัตยกรรม arm64 ถึง x86_64” หมายความว่าอย่างไร


95

หลังจากย้ายกรอบงานของฉันไปยัง Xcode 10 beta (10L176w) ฉันเริ่มได้รับคำเตือนเช่น:

การแม็ปสถาปัตยกรรม arm64 ถึง x86_64 ตรวจสอบให้แน่ใจว่าการตั้งค่าการสร้างสถาปัตยกรรมและสถาปัตยกรรมที่ถูกต้องของเป้าหมายนี้กำหนดค่าอย่างถูกต้องสำหรับแพลตฟอร์ม iOS Simulator

... และ:

การแม็ปสถาปัตยกรรม armv7 กับ i386 ตรวจสอบให้แน่ใจว่าการตั้งค่าการสร้างสถาปัตยกรรมและสถาปัตยกรรมที่ถูกต้องของเป้าหมายนี้กำหนดค่าอย่างถูกต้องสำหรับแพลตฟอร์ม iOS Simulator

แม้จะมีคำเตือนเหล่านี้การสร้างและหน่วยทดสอบทั้งหมดผ่านตกลง ฉันใช้ Swift 4.2

ถึงกระนั้นคำเตือนเหล่านี้เกี่ยวกับอะไร?


ฉันเห็นสิ่งนี้เมื่อตั้งค่าเมื่อพยายามสร้าง 64 บิตโดยใช้เท่านั้นARCHS = $(ARCHS_STANDARD_64_BIT)และVALID_ARCHS = $(inherited) x86_64 i386
Kdawgwilk

คำตอบ:


101

ไปที่Build Settingsและทำตามที่แสดงด้านล่าง

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


5
ฉันยืนยันว่าสิ่งนี้ใช้ได้ผลสำหรับฉัน - ฉันไม่รู้ว่าทำไม แต่การตั้งค่าเหล่านั้นถูกเน้นเป็นตัวหนาทั้งในโครงการและการตั้งค่าการสร้างเป้าหมาย จากนั้นฉันก็ลบตามที่กล่าวไว้ข้างต้น (ทั้งสองที่!) และนี่เพิ่งลบไฮไลต์ตัวหนา (เปลี่ยนกลับเป็นค่าเริ่มต้นอย่างเห็นได้ชัด) และคำเตือนก็หายไป
Nick Entin

23
แค่ชี้แจงก็ต้องทำทั้งโครงการและเป้าหมาย
palmi

2
คำตอบที่ดีฉันเสนอให้นี่เป็นทางออก
Heider Sati

8
เมื่อฉันลบมันไม่มีอะไรปรากฏใน Resolved และฉันได้รับThere are no valid architectures to compile for because the VALID_ARCHS build setting is an empty list
Crystal

2
ดูเหมือนจะไม่ทำงานอีกต่อไป ฉันได้รับปัญหาเดียวกันที่ Crystal รายงานด้วย Xcode 11 beta 6 @ คำตอบของ John ใช้ได้ผลกับฉันแทน
Fabian Streitel

70

ฉันสามารถปิดปากคำเตือนเหล่านี้ได้โดยเปลี่ยนการตั้งค่าสถาปัตยกรรมที่ถูกต้อง$(ARCHS_STANDARD)ซึ่งตรงกับสถาปัตยกรรมของฉันการตั้งค่าด้วย

ผิดปกติสิ่งนี้แสดงเป็นarmv7 arm64(เปรียบเทียบกับการตั้งค่าเริ่มต้นของarmv7 armv7s arm64) แต่การตั้งค่าเป็นค่านั้นด้วยตนเองยังคงทำให้เกิดคำเตือน ไม่แน่ใจว่าความสำคัญของสิ่งนั้นคืออะไร แต่ฉันยังไม่สังเกตเห็นปัญหาใด ๆ ในการทดสอบของฉัน


2
การตั้งค่านี้ใช้ได้ผลสำหรับฉันสำหรับเฟรมเวิร์ก "สากล" ที่กำหนดเป้าหมายทั้ง iOS และ macOS
John

1
นั่นคือทางออกของฉัน ฉันตั้งค่าสถาปัตยกรรมที่ถูกต้อง: $ (ARCHS_STANDARD) ในโครงการและในเป้าหมาย ขอบคุณ.
CGN

2
@CGN คุณตั้งค่าอย่างไรใน Project? ฉันตั้งเป้าหมายสำเร็จแล้ว
Erum

@Erum: ดู 2 ภาพหน้าจอด้านล่าง
CGN

27

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


2
ฉันยังเห็นข้อผิดพลาดนี้ VALID_ARCHSฉันไม่ได้แทนที่การตั้งค่า มีarm64ทั้งสำหรับ debug และ release
funkenstrahlen

10
สิ่งนี้ดูเหมือนจะเป็นข้อผิดพลาดใน Xcode 10 ยังคงเกิดขึ้นกับการตั้งค่าเริ่มต้น
Kdawgwilk

5
สิ่งนี้ แต่ดูเหมือนว่าจะปรากฏขึ้นพร้อมกับ Xcode 10 เวอร์ชันวางจำหน่ายใครมีการอัปเดตเกี่ยวกับเรื่องนี้บ้าง?
plivesey

1
me2 ฉันแค่ googling เกี่ยวกับเรื่องนี้ แต่ก็ไม่มีประโยชน์
MegaManX

2
ฉันต้องไปที่โปรเจ็กต์ย่อยและเป้าหมายทั้งหมดของฉันและลบVALID_ARCHSเพื่อตั้งเป็นค่าเริ่มต้นจากนั้นล้างและปิด / เปิด Xcode อีกครั้งเพื่อให้มันทำงานได้เต็มที่สำหรับฉัน
manman

16

สำหรับเป้าหมายที่รายงานคำเตือนให้เปลี่ยนการตั้งค่า "สถาปัตยกรรมที่ถูกต้อง" เป็น:

$(VALID_ARCHS)
x86_64

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


ตอบดีที่สุดแน่นอน!
Supertecnoboff

8

คล้ายกับคำตอบอื่น ๆ ผมก็สามารถที่จะนำคำเตือนโดยการเปลี่ยน$(VALID_ARCHS)(สถาปัตยกรรมที่ถูกต้อง) $(ARCHS_STANDARD)ไป จากนั้นฉันล้างข้อมูลที่ได้รับทั้งหมดและรีสตาร์ท Xcode 10.0 สิ่งนี้ทำให้คำเตือนหายไปอย่างสมบูรณ์ การลบทุกอย่างออกจาก Valid Architectures ทำให้คำเตือนอื่นปรากฏขึ้น ("ไม่พบสถาปัตยกรรมที่ถูกต้อง")


1

วิธีแก้ปัญหานั้นง่ายกว่า: ใน Valid Architectures เพียงแค่แทนที่ arm64 ด้วย x86_64x86_64

มีปัญหาที่คล้ายกันและคำเตือนสามประการต่อไปนี้ในโครงการของฉัน: มีปัญหาที่คล้ายกันและคำเตือนต่อไปนี้ในโครงการของฉัน

Archtectures ที่ถูกต้องของฉันเดิมคือ ** Archtectures ที่ถูกต้อง ** ของฉันเดิมคือ

การเปลี่ยน:

  • armv7 กับ i386
  • armv7s กับ i386
  • และ arm64 พร้อม x86_64

(ตามที่กล่าวไว้ในคำเตือน) เป็นทางออกของฉัน ผลลัพธ์ในการตั้งค่าสถาปัตยกรรมที่ถูกต้องคือ:

การเปลี่ยน armv7 ด้วย i386, armv7s ด้วย i386 และ arm64 ด้วย x86_64 ตามที่กล่าวไว้ในคำเตือนเป็นวิธีแก้ปัญหาของฉัน

หลังจากการเปลี่ยนคำเตือนสามข้อข้างต้นของฉันหายไป

สามารถดูข้อมูลเพิ่มเติมเกี่ยวกับสถาปัตยกรรมได้ที่นี่: https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/

ฉันคิดว่าการกำหนดคำเตือนนี้ใน Xcode ค่อนข้างสับสน


1

หากคุณกำลังประสบปัญหาใน Flutter:

  1. ลบ Podfile, Podfile.lock, โฟลเดอร์ Pods, Runner.xcworkspace, Flutter.framework

  2. flutter cleanวิ่ง

  3. flutter build iosวิ่ง

0

ฉันเห็นคำเตือนนี้เมื่อพยายามรวบรวมโค้ดสำหรับทั้ง iOS และ Mac OS ฉันสามารถหลีกเลี่ยงมันได้ด้วยการทำสิ่งที่ Hassan Taleb แนะนำในคำตอบของเขาก่อน: ล้างสถาปัตยกรรมเพื่อให้มีเพียงสถาปัตยกรรม iPhone ที่ถูกต้องเท่านั้นที่อยู่ในนั้น และสุดท้ายเพื่อรักษาความสามารถในการสร้างสำหรับ Mac OS ให้เลื่อนเมาส์ไปที่ Valid Architectures เพื่อให้ปุ่มบวกปรากฏขึ้น คลิกจากนั้นคุณสามารถเพิ่มการตั้งค่าแยกต่างหากสำหรับแพลตฟอร์มต่างๆได้ตามต้องการรวมถึงสถาปัตยกรรม CPU ที่แตกต่างกัน สำหรับ macOS SDK ฉันสามารถตั้งค่าสถาปัตยกรรมที่ถูกต้องเป็น x86_64 ได้หากต้องการสำหรับ macOS SDK ฉันสามารถตั้งค่าสถาปัตยกรรมที่ถูกต้องเป็น x86_64 ได้หากต้องการ


ใน Xcode ปัจจุบันจะไม่มีตัวเลือกนี้อีกต่อไป
JBarros35

@lambdapool คุณไม่เห็นตัวเลือกใด "สถาปัตยกรรมที่ถูกต้อง" / "VALID_ARCHS" หรือไม่
joelliusp

0

ฉันพบวิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือเปิดโปรเจ็กต์ในโปรแกรมแก้ไขข้อความจากนั้นค้นหาและลบVALID_ARCHSบรรทัดทั้งหมด


0

ฉันกำลังเผชิญกับปัญหาเดียวกัน เพื่อความละเอียดฉันเพิ่งเปลี่ยนระบบการสร้างจาก Standard เป็น Legacy และนั่นช่วยแก้ปัญหาได้


0

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

Real devices-> arm64 
Simulator devices ->x86-64

-2

หาก [build Settings] ของคุณคือ armv7 armv7s arm64 โปรดลบ armv7s คำเตือนจะถูกยกเลิก


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