เมื่อฉันพยายามเรียกใช้ Xcode Project ของฉันมันล้มเหลวด้วยข้อผิดพลาดที่ระบุว่าฉันมีสัญลักษณ์ซ้ำกัน ฉันดูออนไลน์ซึ่งพบรายการที่ซ้ำกันเหล่านี้ แต่ไม่มีโชค:
มีความคิดอย่างไรในการแก้ไขปัญหานี้
เมื่อฉันพยายามเรียกใช้ Xcode Project ของฉันมันล้มเหลวด้วยข้อผิดพลาดที่ระบุว่าฉันมีสัญลักษณ์ซ้ำกัน ฉันดูออนไลน์ซึ่งพบรายการที่ซ้ำกันเหล่านี้ แต่ไม่มีโชค:
มีความคิดอย่างไรในการแก้ไขปัญหานี้
คำตอบ:
จากข้อผิดพลาดดูเหมือนว่า FacebookSDK.framework มีคลาส Bolts.framework อยู่แล้ว ลองลบ Bolts.framework เพิ่มเติมออกจากโครงการ
สำหรับฉันมันช่วยในการเปลี่ยนการตั้งค่าคอมไพเลอร์ "No Common Blocks" เป็น NO: ดูเหมือนว่าจะสมเหตุสมผลมากการตั้งค่ามีคำอธิบายที่นี่: GCC_NO_COMMON_BLOCKS ใช้ทำอะไร
การใช้ Xcode 8 ตัวเลือก "อัปเดตโปรเจ็กต์เป็นการตั้งค่าที่แนะนำ" จะเปิด "ไม่มีบล็อกทั่วไป" สำหรับโปรเจ็กต์ของฉัน
การเปลี่ยนกลับเป็นปิดแก้ไขทุกอย่าง
ฉันทำพ็อดของฉันยุ่งในขณะที่ลดระดับพ็อดและฉันได้จัดการเพื่อแก้ไขปัญหาเกี่ยวกับสัญลักษณ์ที่ซ้ำกันสำหรับสถาปัตยกรรม arm64โดยการลบพ็อดและติดตั้งอีกครั้งด้วย:
pod deintegrate
pod install
สำหรับฉันมันคือการที่ฉันนำเข้าไฟล์เป็น. m ไม่ใช่. h โดยไม่ได้ตั้งใจ
อีกวิธีหนึ่งคือ:
เลือกProject -> Target -> Build phase -> Compile source -> ค้นหาไฟล์ที่กล่าวถึงในบรรทัดข้อผิดพลาดสุดท้ายที่ 3 (ในกรณีของคุณBFAppLinkReturnToRefererView.o )
จากนั้นคุณจะเห็นไฟล์ 1 หรือ 2 ไฟล์ในผลการค้นหา
ลบหนึ่งของพวกเขาและรวบรวมอีกครั้ง ควรคอมไพล์ใหม่ตอนนี้เพราะเหลือไฟล์เดียวและไม่มีข้อขัดแย้งในการสร้างอีกต่อไป
หากไม่ได้ผลไฟล์อาจมีข้อผิดพลาดและคุณควรลบทั้งหมดออกแล้วคอมไพล์ใหม่ มันควรจะทำงานอีกครั้ง
ในการอัปเกรดเป็น Xcode 8 ฉันได้รับข้อความให้อัปเกรดเป็นการตั้งค่าที่แนะนำ ฉันยอมรับและทุกอย่างได้รับการอัปเดตแล้ว ฉันเริ่มได้รับปัญหาเวลาคอมไพล์:
สัญลักษณ์ซ้ำสำหรับ XXXX สัญลักษณ์ซ้ำสำหรับ XXXX สัญลักษณ์ซ้ำสำหรับ XXXX
ข้อผิดพลาด 143 รายการ ไปที่ Target-> Build settings -> No Common Blocks -> ตั้งเป็น NO วิธีนี้ช่วยแก้ปัญหาได้ ปัญหาคือโครงการที่ผสานรวมมีบล็อกรหัสเหมือนกันและด้วยเหตุนี้จึงไม่สามารถรวบรวมได้ คำอธิบายสามารถพบได้ที่นี่
ข้อผิดพลาดนี้เกิดขึ้นเมื่อ Linker พยายามเชื่อมโยงไฟล์ obj สาเหตุบางประการที่ฉันสามารถนึกถึงข้อผิดพลาดนี้ ได้แก่ :
ฟังก์ชัน / คลาสที่ซ้ำกันถูกกำหนดไว้ที่ตำแหน่ง / ไฟล์ที่แตกต่างกันสองแห่งในโปรเจ็กต์และมีเพียงหนึ่งในนั้นเท่านั้นที่ควรคอมไพล์สำหรับรูปแบบคำสั่ง build ใด ๆ แต่อย่างใดทั้งสองไฟล์เหล่านั้นได้รวบรวมไว้ในโครงการของคุณ ดังนั้นคุณต้องตรวจสอบเงื่อนไข if-else หรือการอ้างอิงอื่น ๆ ซึ่งเพิ่มไฟล์ src ลงในรายการไฟล์ที่จำเป็นในการคอมไพล์และลบไฟล์ที่ไม่จำเป็นสำหรับคำสั่ง build ของคุณโดยเฉพาะ
ฟังก์ชัน / คลาสที่ซ้ำกันถูกกำหนดโดยบังเอิญที่ตำแหน่ง / ไฟล์ที่แตกต่างกันสองแห่งในโครงการ ลบคำจำกัดความที่ไม่ถูกต้อง
ทำความสะอาดไดเร็กทอรี OBJ ของคุณก่อนที่จะสร้างอีกครั้งอาจมีไฟล์ obj เก่า ๆ อยู่ในนั้นจากบิลด์ก่อนหน้าของคุณซึ่งอาจทำให้เกิดความขัดแย้งนี้
ป.ล. ฉันไม่ใช่ผู้เชี่ยวชาญ แต่นี่คือวิธีที่ฉันแก้ไขปัญหานี้เมื่อฉันเผชิญกับมัน :)
หากคุณกำลังจะย้ายไปที่ Xcode 7 หรือ 8 และกำลังเปิดโปรเจ็กต์เก่าจริงๆฉันพบปัญหานี้:
ใน SomeConstFile.h
NSString * const kAConstant;
ใน SomeConstFile.m
NSString *const kAConstant = @"a constant";
คอมไพลเลอร์เวอร์ชันก่อนหน้านี้สันนิษฐานว่านิยามในไฟล์ส่วนหัวเป็นภายนอกดังนั้นการรวม SomeConstFile.h ทั้งหมดก็ใช้ได้
ตอนนี้คุณต้องประกาศ const เหล่านี้อย่างชัดเจนว่าเป็นภายนอก:
ใน SomeConstFile.h
extern NSString * const kAConstant;
ด้านล่าง Patch ทำงานให้ฉัน .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
การตั้งค่ากลับเป็น NO ช่วยแก้ปัญหาได้!
บางครั้งเมื่อใช้ SDK เช่น FB หรือ Libraries เช่น Vuforia หรือ GoogleAnalytics การเพิ่มโปรเจ็กต์ตัวอย่างอาจทำให้เกิดปัญหาว่าพวกเขารวม Frameworks อยู่แล้วดังนั้นคุณต้องแน่ใจว่าจะไม่ทำซ้ำสัญลักษณ์ที่คุณเพิ่มด้วยตนเองในขณะที่มันอยู่แล้ว รวมอยู่ในตัวอย่าง
สำหรับฉันปัญหาคือรูปแบบของการสร้าง const ซึ่งใช้ได้ดีจนถึง iOS8 นี้ .. ฉันมีสองสามบรรทัดดังนี้:
int const kView_LayoutCount = 3;
ในไฟล์. h ของฉัน หกบรรทัดเช่นผลลัพธ์ในไฟล์ตัวเชื่อม 636 เมื่อบล็อกทั่วไปถูกตั้งค่าเป็น NO (14k + ถ้าใช่) ย้ายบรรทัดไปที่. m หลังจากขีดฆ่า. h ของการประกาศค่าและการคอมไพล์ก็ทำได้ดี
หวังว่านี่จะช่วยคนอื่น ๆ !
ในกรณีของฉันเหตุผลโง่เกินไป:
ฉันมีไฟล์ Constant.h ที่ฉันกำหนดมาโครไว้ ฉันคิดจะทำ NSString ที่นั่น และทำสิ่งนี้:
NSString const *kGreenColor = @"#00C34E";
สิ่งนี้ทำให้เกิดปัญหาของ Duplicate Symbols for Architecture arm64 และคำสั่ง Linker ล้มเหลวด้วยรหัสออก 1 การลบบรรทัด const NSString ใช้งานได้สำหรับฉัน
ตรวจสอบไฟล์รวมของคุณฉันพบปัญหานี้เพราะฉันบังเอิญ #imported "filename.m" แทนที่จะเป็น "filename.h" การแก้ไขอัตโนมัติ (แท็บ) ใส่ "m" ไม่ใช่ "h"
จากข้อผิดพลาดจะปรากฏว่าชั้นเรียนใด ๆ ปรากฏขึ้นหลายครั้งค้นหาและลบออกว่าชั้นเรียนจะใช้งานได้
กำลังสร้างไฟล์ AppDelegate.h และ. m สร้างหลายครั้ง ดังนั้นข้อผิดพลาดนี้จะเกิดขึ้นในที่สุดค้นหาและลบคลาสนั้นก็ใช้งานได้ดีสำหรับฉัน
ในการแก้ปัญหานี้ให้ไปที่ขั้นตอนการสร้างและค้นหาเกี่ยวกับไฟล์ที่ซ้ำกันเช่น (facebookSDK, unityads) และลบ (ไฟล์นามสกุล o) จากนั้นสร้างอีกครั้ง
สำหรับฉันฉันสร้างวิธีการที่เรียกsampleMethod
ใน ViewController_A และสร้างวิธีการเดียวกันใน ViewController_B secondSampleMethod
เกินไปมันจะทำให้เกิดข้อผิดพลาดนี้ฉันแล้วฉันเปลี่ยนชื่อวิธีการในการ มันแก้ไขข้อผิดพลาด
ดูเหมือนเป็นคุณลักษณะที่ดีในการลดรหัสและไม่ให้รหัสซ้ำกันในหลาย ๆ ที่
ฉันลองเปลี่ยนบล็อก No Common จากใช่เป็นไม่ใช่แล้วเปิดใช้งานการทดสอบจากใช่เป็นไม่ใช่มันไม่ได้ผล ฉันตรวจสอบไฟล์ที่ซ้ำกันแล้วในขั้นตอนการสร้าง แต่ไม่มีไฟล์ที่ซ้ำกัน
ฉันได้รับปัญหานี้เนื่องจากฉันขี้เกียจกำหนดตัวแปรใน. m ของฉันนอกเมธอดจากนั้นในไฟล์. m อื่นฉันกำลังกำหนดตัวแปรอื่นที่มีชื่อเดียวกันนอกเมธอด สิ่งนี้ทำให้เกิดปัญหาซ้ำชื่อตัวแปรส่วนกลาง
ปัญหาสำหรับฉันคือฉันได้รวมเฟรมเวิร์กด้วยตนเอง แต่ก็รวมเฟรมเวิร์กเดียวกันนั้นไว้ใน CocoaPods โดยไม่รู้ว่าฉันทำเช่นนั้น เมื่อฉันลบอย่างใดอย่างหนึ่งปัญหาก็หายไป
ฉันสามารถแก้ไขข้อผิดพลาดนี้ได้ซึ่งระบุว่า "158 สัญลักษณ์ที่ซ้ำกันสำหรับสถาปัตยกรรม armv7, 158 สัญลักษณ์ที่ซ้ำกันสำหรับสถาปัตยกรรม arm64" --- หากนี่คือสิ่งที่คุณได้รับเช่นกันแสดงว่าคุณกำลังพยายามรวบรวมไฟล์ที่กำลังนำเข้าหรือ สืบทอดเฟรมเวิร์กหรือไลบรารีแบบคงที่โดยมีการอ้างอิงถึงโค้ด C ++ หรือไฟล์ วิธีง่ายๆในการจัดการสิ่งนี้คือการเปลี่ยนนามสกุลของไฟล์. m เป็น. mm นี่คือวิธีจัดการหากคุณใช้ Objective C ไม่แน่ใจว่าใช้ Swift
นอกจากนี้ในการตั้งค่าบิลด์ของคุณคุณสามารถอัปเดต "แฟล็กตัวเชื่อมอื่น ๆ " เป็น -lc ++
หากมีคนทดลองการทำงานนี้กับ Flutter อย่าพยายามแยกตัวออกจากพ็อดเริ่มต้น
วิธีที่ฉันแก้ไขคือใช้ flutter clean, flutter run -d [อุปกรณ์ iOS]
หวังว่าจะช่วยใครสักคนได้
กรุณาเปลี่ยนการตั้งค่า
ขั้นตอนที่ 1: ไปที่ TARGETS -> Build Settings -> No Common Blocks -> No
ขั้นตอนที่ 2: ไปที่ TARGETS -> Build Settings -> enable testability -> No