Ketika saya mencoba menjalankan Proyek Xcode saya, gagal dengan kesalahan yang menyatakan bahwa saya memiliki simbol duplikat. Saya mencari online di mana menemukan duplikat ini tetapi tidak berhasil:
Ada ide bagaimana cara memperbaikinya?
Ketika saya mencoba menjalankan Proyek Xcode saya, gagal dengan kesalahan yang menyatakan bahwa saya memiliki simbol duplikat. Saya mencari online di mana menemukan duplikat ini tetapi tidak berhasil:
Ada ide bagaimana cara memperbaikinya?
Jawaban:
Dari error tersebut, terlihat bahwa FacebookSDK.framework sudah menyertakan class Bolts.framework. Coba hapus Bolts.framework tambahan dari proyek.
Bagi saya itu membantu untuk mengalihkan pengaturan compiler "No Common Blocks" ke NO: Sepertinya masuk akal, pengaturan dijelaskan di sini: Untuk apa GCC_NO_COMMON_BLOCKS digunakan?
Menggunakan Xcode 8, opsi "Perbarui proyek ke setelan yang disarankan" mengaktifkan 'Tidak Ada Pemblokiran Umum' untuk proyek saya.
Mematikannya kembali ke OFF memperbaiki semuanya.
Saya telah mengacaukan pod saya saat mendowngrade sebuah pod dan saya telah berhasil menyelesaikan masalah dengan simbol duplikat untuk arm64 arsitektur dengan menghapus pod dan menginstalnya lagi dengan:
pod deintegrate
pod install
Solusi lain adalah:
Pilih Project -> Target -> Build phase -> Compile source -> cari file yang disebutkan di baris error terakhir ke-3 (Dalam kasus Anda BFAppLinkReturnToRefererView.o ).
Kemudian Anda akan melihat 1 atau 2 file di hasil pencarian.
Hapus salah satunya dan kompilasi lagi . Ini harus dikompilasi ulang sekarang karena hanya ada satu file yang tersisa dan tidak ada lagi konflik untuk pembuatan.
Jika itu tidak berhasil, file mungkin memiliki kesalahan di dalamnya dan Anda harus menghapus semuanya dan kemudian mengkompilasi ulang. Ini harus bekerja lagi.
Saat meningkatkan ke Xcode 8, saya mendapat pesan untuk meningkatkan ke pengaturan yang disarankan. Saya menerima dan semuanya diperbarui. Saya mulai mendapatkan masalah waktu kompilasi:
Simbol duplikat untuk XXXX Simbol duplikat untuk XXXX Simbol duplikat untuk XXXX
Sebanyak 143 kesalahan. Pergi ke Target-> Build settings -> No Common Blocks -> Set to NO. Ini menyelesaikan masalah. Masalahnya adalah bahwa proyek terintegrasi memiliki blok kode yang sama dan karenanya tidak dapat mengkompilasinya. Penjelasan dapat ditemukan di sini .
Kesalahan ini terjadi saat Linker mencoba menautkan file obj. Beberapa alasan yang dapat saya pikirkan untuk kesalahan ini adalah:
Fungsi / Kelas duplikat didefinisikan di dua tempat / file berbeda dalam proyek dan hanya satu dari mereka yang seharusnya dikompilasi untuk setiap variasi perintah build. Tetapi entah bagaimana kedua file itu dikompilasi dalam proyek Anda. Jadi, Anda perlu memeriksa kondisi if-else atau dependensi lain yang menambahkan file src ke daftar file yang perlu dikompilasi dan menghapus file yang tidak diperlukan untuk perintah build khusus Anda.
Fungsi / Kelas duplikat didefinisikan secara tidak sengaja di dua tempat / file yang berbeda dalam proyek. Hapus definisi yang salah.
Bersihkan direktori OBJ Anda sebelum Anda membangun lagi, mungkin ada beberapa file obj lama di sana dari build Anda sebelumnya yang mungkin menyebabkan konflik ini.
PS saya bukan ahli, tetapi ini adalah cara saya memecahkan masalah ini ketika saya menghadapinya. :)
Jika Anda pindah ke Xcode 7 atau 8 dan membuka proyek yang sangat lama, saya mengalami masalah ini:
di SomeConstFile.h
NSString * const kAConstant;
di SomeConstFile.m
NSString *const kAConstant = @"a constant";
Versi sebelumnya dari kompilator mengasumsikan bahwa definisi di file header adalah eksternal dan termasuk SomeConstFile.h di semua tempat itu baik-baik saja.
Sekarang Anda perlu secara eksplisit mendeklarasikan consts ini sebagai extern:
di SomeConstFile.h
extern NSString * const kAConstant;
Di bawah Patch bekerja untuk saya .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Menyetelnya kembali ke TIDAK memecahkan masalah!
Nah, beberapa kali ketika menggunakan SDK seperti FB atau Perpustakaan seperti Vuforia atau GoogleAnalytics, menambahkan proyek sampel dapat menyebabkan masalah bahwa mereka sudah termasuk Kerangka dan sejenisnya, jadi Anda harus memastikan tidak mengulangi simbol yang Anda tambahkan secara manual saat sudah termasuk dalam sampel
Bagi saya, masalahnya adalah gaya pembuatan const, yang berfungsi dengan baik hingga iOS8 ini .. Saya memiliki beberapa baris sebagai:
int const kView_LayoutCount = 3;
di file .h saya. Enam baris seperti menghasilkan 636 file linker setelah blok umum disetel ke NO. (14k + jika YA). Memindahkan baris ke .m setelah menghapus .h dari deklarasi nilai dan kompilasi sudah selesai.
Semoga ini bisa membantu orang lain!
Dalam kasus saya, alasannya terlalu bodoh:
Saya memiliki file Constant.h di mana makro saya telah ditentukan. Saya berpikir untuk melakukan NSString di sana. dan melakukan ini:
NSString const *kGreenColor = @"#00C34E";
ini menyebabkan masalah Simbol Duplikat untuk Arsitektur arm64 dan perintah Linker gagal dengan kode keluar 1. Menghapus baris const NSString berhasil untuk saya.
periksa file yang Anda sertakan, saya mengalami masalah ini karena saya tidak sengaja # mengimpor "namafile.m" alih-alih "namafile.h", koreksi otomatis (tab) meletakkan "m" bukan "h".
Dari error tersebut, akan muncul Classes yang muncul berkali-kali, temukan dan hapus Classes yang akan berfungsi.
Saya membuat file AppDelegate.h dan .m membuat banyak waktu. Jadi kesalahan ini akan terjadi Akhirnya temukan dan hapus kelas yang berfungsi dengan baik untuk saya.
untuk mengatasi masalah ini masuk ke fase Build dan cari tentang file duplikat seperti (facebookSDK, unityads) dan hapus (ekstensi file.o) lalu buat lagi.
Bagi saya, saya membuat metode yang disebut sampleMethod
di ViewController_A dan membuat metode yang sama di ViewController_B juga, Itu menyebabkan saya kesalahan ini, kemudian saya mengubah nama metode di ViewController_B menjadi secondSampleMethod
. Itu memperbaiki kesalahan.
Sepertinya fitur yang bagus untuk mengurangi kode dan tidak menduplikasi kode yang sama di banyak tempat.
Saya mencoba mengubah blok Tidak Umum dari Ya ke Tidak kemudian mengaktifkan kemampuan pengujian dari Ya ke Tidak. Itu tidak berhasil. Saya telah memeriksa file duplikat juga dalam fase pembuatan, tetapi tidak ada file duplikat.
Saya mendapat masalah ini karena saya malas mendefinisikan variabel di .m saya di luar metode, lalu di file .m lain saya mendefinisikan variabel lain dengan nama yang sama di luar metode. Ini menyebabkan masalah duplikat nama variabel global.
Saya dapat mengatasi kesalahan ini yang mengatakan "158 simbol duplikat untuk arsitektur armv7, 158 simbol duplikat untuk arsitektur arm64" --- Jika ini juga yang Anda dapatkan, berarti Anda mencoba mengompilasi file yang sedang mengimpor atau mewarisi framework atau library statis yang memiliki referensi ke kode atau file C ++. Cara mudah untuk menangani ini adalah dengan mengubah ekstensi file .m Anda menjadi .mm. Beginilah cara penanganannya jika Anda menggunakan Objective C, meskipun tidak yakin pada Swift.
Juga di setelan build Anda - Anda bisa mengupdate "flag linker lain" ke -lc ++
Tlg Ubah pengaturan.
Langkah 1: Pergi ke TARGET -> Build Settings -> No Common Blocks -> No
Langkah 2: Buka TARGET -> Build Settings -> aktifkan testability -> No