Build Error - arsitektur yang diperlukan i386 tidak ada dalam file

105

Saya mendapatkan kesalahan ini saat membangun aplikasi iPhone saya:

ld: peringatan: di /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, i386 arsitektur yang diperlukan tidak ada dalam file

Ini berlaku sama untuk semua kerangka kerja di aplikasi saya. Sangat aneh karena ini tidak terjadi sebelumnya.

Gabe Shahbazian
sumber
Apakah ini terjadi setelah Anda menginstal Snow Leopard dan iPhone SDK baru (Xcode 3.2)?
avocade
8
Jawaban saya memperbaiki masalah. Silakan periksa.
Yordania
9
Satu kemungkinan lain yang tidak dibahas dalam jawaban adalah bahwa Anda akan mendapatkan kesalahan ini jika Anda telah menambahkan referensi ke kerangka kerja non-universal (yaitu Anda menambahkan kerangka kerja armv6 / armv7 dan kemudian mencoba melakukan pembuatan simulator). Ini terutama menjadi perhatian jika Anda telah membangun kerangka kerja khusus Anda sendiri.
aroth
@aroth juga benar, silakan periksa pertanyaan
ArkReversed

Jawaban:

131

Ini terjadi ketika Anda menambahkan kerangka kerja ke proyek Anda dan secara tidak sengaja menyalin kerangka kerja ke direktori proyek Anda.

Cara mengatasinya adalah memeriksa direktori proyek Anda (tempat Anda menyimpan proyek pada disk) untuk file iphone SDK * .Framework dan menghapusnya.

Proyek akan terbangun dengan baik setelahnya.

Yordania
sumber
4
Selain itu, uji di Perangkat iOS, bukan Simulator.
Raptor
Jika Anda memiliki kerangka kerja lain, maka memodifikasi file proyek tampaknya menghapus referensi itu juga, ini berhasil, dan lebih mudah, terima kasih Jordan
texian
Tidak bekerja untuk saya. Tidak ada file .framework di direktori proyek saya. Fwiw, saya melakukan pembersihan dan kemudian membangun dan masalah ini dimulai. Yang bersih entah bagaimana pasti telah merusak barang-barang.
Alyoshak
85

Saya memiliki masalah yang sama, dan solusinya ternyata adalah perbaikan yang mudah. Buat cadangan kemudian buka project.pbxproj (terletak di dalam bundel file proyek Anda) di TextMate atau TextEdit dan cari bagian berjudul "/ * Begin XCBuildConfiguration section * /". Cari kunci bernama FRAMEWORK_SEARCH_PATHS dan hapus dan isinya (sekali per konfigurasi build, jadi saya menghapusnya di dua tempat). Ini contoh yang saya hapus:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Proyek saya sekarang dibuat untuk perangkat iPhone dan iPhoneSimulator.

Sean Roehnelt
sumber
2
Saya dapat memverifikasi bahwa ini berfungsi seperti yang dijelaskan. Tampaknya Xcode dapat dengan mudah lepas dari metadatanya saat memindahkan projs Xcode antara komputer yang berbeda; dalam hal ini dengan yang satu memiliki 3.0 dan Leopard, dan yang lainnya 3.1 dan Snow Leopard diinstal. FRAMEWORK_SEARCH_PATHS metadata ditampilkan sebagai kosong di Build Settings sedangkan project.pbxproj yang sebenarnya memiliki sesuatu di dalamnya.
avocade
1
FRAMEWORK_SEARCH_PATHS yang disetujui juga ditampilkan sebagai kosong dalam pengaturan build untuk saya juga. Namun, mengedit file project.pbxproj secara manual seperti yang dijelaskan telah memperbaiki masalah.
Alasdair Allan
11
Ini tidak berhasil untuk saya. NAMUN, Anda membawa saya ke tempat yang tepat untuk melihat. .Pbxproj saya tidak memiliki kunci FRAMEWORK_SEARCH_PATHS, tetapi sebuah kunci bernama LIBRARY_SEARCH_PATHS.
pemberontakan
Saya kedua @rebellion. Mungkin versi XCode yang lebih baru telah mengubah nama kunci.
Moshe
Terima kasih, saya juga memiliki kunci LIBRARY_SEARCH_PATHS yang tersesat di file pbxproj saya. Kunci muncul dalam huruf tebal di Pengaturan Proyek di Xcode 3, tetapi tanpa nilai. Ini membuat saya percaya ada sesuatu yang salah. Saya membuka proyek di Xcode 4 Preview 5 sekali, setelah itu terjadi.
mvexel
43

Apa yang terjadi di sini adalah bahwa Xcode secara misterius menambahkan entri "Framework Search Paths" yang mengarah ke SDK perangkat iPhone tertentu. Misalnya, milik saya baru-baru ini disetel ke:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Ini mengarahkan kompiler untuk menemukan kerangka kerja dari arsitektur yang salah. Menghapus nilai apa pun di bawah kunci "Framework Search Paths" di setelan build target Anda akan menyelesaikan masalah.

John Cromartie
sumber
ini adalah masalah dalam kasus saya. itu telah menambahkan banyak direktori pencarian setiap kali saya menambahkan perpustakaan baru. bahkan jika saya menghapus referensi, entri direktori pencarian dulu ada di sana yang menyebabkan masalah.
darshansonde
"Framework Search Paths" dalam kasus saya sudah kosong. Kesalahan sebenarnya yang saya dapatkan adalah ld: membangun untuk iOS Simulator, tetapi menautkan ke dylib yang dibuat untuk file MacOSX '/usr/lib/libSystem.B.dylib' untuk arsitektur i386 clang: error: perintah linker gagal dengan kode keluar 1 ( gunakan -v untuk melihat pemanggilan) Saya menggunakan SDK 7.0 di Mavericks.
Ans
Saya mengalami kesalahan yang sama, saya menghapus nilai dari jalur pencarian kerangka kerja di bawah pengaturan Build dan sekarang berhasil dikompilasi.
Nirav
10

Saya hanya ingin menyebutkan bahwa di XCode jika Anda pergi ke "Edit Pengaturan Proyek" dan menemukan "Jalur Pencarian" Ada bidang untuk "Jalur Pencarian Kerangka Kerja". Memperbarui ini seharusnya memperbaiki masalah, tanpa harus meretas file proyek!

Bersulang!

Jesse


sumber
Saya memiliki masalah yang sama yang membuat saya benar-benar gila. Sepertinya kalian tahu solusinya tetapi saya tidak dapat menemukan file "project.pbxproj" dan Tidak dapat menemukan di mana "Edit Pengaturan Proyek" berada.
saman01
2
Di XCode 4.2.1 saya menemukan ini sebagai berikut: klik nama proyek di Project Navigator. Di layar properti yang muncul, pilih tab 'Build Settings'. Jalur Pencarian terletak di layar ini. Menghapusnya berhasil untuk saya.
dsteele
8

Pastikan Anda tidak menyalin kerangka kerja ke dalam proyek Anda saat Anda menambahkannya. Jika Anda menyalinnya, itu tidak dapat menemukan jalur asli. Untuk memperbaiki masalah ini. Hapus kerangka kerja AVFoundation dari folder kerangka kerja Anda di proyek Anda, lalu tambahkan lagi, tapi kali ini, pastikan Anda tidak memiliki tanda centang salinan.

Ini memperbaikinya untuk saya!

Jrman52
sumber
8

Saya memperbaikinya dengan cara yang berbeda. Alasan mengapa saya mendapatkan kesalahan ini adalah karena saya menambahkan security.framework dua kali dalam proyek saya. Saya tidak dapat melihat kerangka keamanan di xcode, saya membuka proyek di finder dan menemukan kerangka kerja ini yang saya menghapus dan masalah terpecahkan.

Suraj K Thomas
sumber
7

Jika aplikasi Anda dimaksudkan untuk berjalan di perangkat, pastikan Anda tidak mencoba menjalankannya di simulator. Mungkin terdengar jelas, tapi tetap periksa.

Eric Brotto
sumber
5

Meskipun ada kemungkinan ada sesuatu yang terhapus, menurut pengalaman saya ada sesuatu yang kacau dalam file proyek. Saya belum menjelaskan apa itu "sesuatu". Saya mengalami masalah serupa saat penginstalan SDK baik-baik saja. Ada beberapa opsi.

Pertama, tambahkan semua file Anda ke proyek baru. Ini sepertinya biasanya berhasil. Agak menyebalkan.

Kedua, Anda dapat mengklik kanan proyek di XCode / Get Info / Build / Library Search Paths. Tambahkan jalur baru yang mirip dengan /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Tambahkan versi yang sesuai dari string itu untuk setiap versi (2.2.1, dll) dan platform (simulator atau iPhoneOS). Lakukan tindakan serupa untuk Framework Search Paths jika framework adalah masalah Anda.

Ketiga, yang lebih berhasil tetapi lebih dapat diandalkan, adalah membuka project.pbxproj dari dalam MyProject.xcodeproj (Textmate bagus untuk ini). Cari "/ * Mulai bagian XCBuildConfiguration * /", lalu "LIBRARY_SEARCH_PATHS" dan "FRAMEWORK_SEARCH_PATHS". Tambahkan atau ubah jalur yang sesuai, dan simpan file.

Bagaimanapun, sakit di pantat, dan saya yakin ingin menunjukkan penyebabnya karena saya sudah mengalami ini beberapa kali. Proyek dibangun dengan baik, kemudian baru selesai dan menolak untuk melakukannya dengan alasan yang tampaknya kecil.

mikestew.dll
sumber
Saya akan memulai proyek baru. Oh, baiklah.
Gabe Shahbazian
Anda dapat memperbaiki pengaturan build "Frameworks Search Paths" dari panel info target.
John Cromartie
Saya mendapat kesalahan tetapi tidak memiliki masalah kerangka kerja yang dijelaskan di atas. Anehnya, di satu komputer, proyek dapat diperiksa dari SVN dan dibuat dengan baik, sementara di dua komputer lainnya, tiba-tiba menghasilkan kesalahan ini pada setiap pembuatan. Satu-satunya perbaikan (dan agak sederhana) - setelah mencoba segala macam solusi lain - adalah membuat proyek kosong baru dan memindahkan semua file ke dalamnya.
mmattke
Metode ini berhasil untuk saya. Saya memiliki satu set proyek kerja yang tiba-tiba berhenti membangun tepat satu konfigurasi suatu hari. Tak ada alasan. Menggunakan teknik textmate di atas dan menemukan bahwa "$ (SDKROOT) / Developer / Library / Frameworks" hilang dari konfigurasi itu. Tidak tahu mengapa, dan saya tidak dapat melihat ini menggunakan Xcode.
Rob
4

"Edit Pengaturan Proyek" dan temukan "Jalur Pencarian" Ada bidang untuk "Jalur Pencarian Kerangka Kerja". Hapus semua!!

Litebeam
sumber
4

Itu terjadi di sini pada saya juga. Terima kasih kepada mitra yang hebat, kami menemukan jawabannya. Xcode Anda mungkin mengarah ke simulator .. ubah ke perangkat IOS sebagai gantinya ..dibangun dengan mulus setelah ....

j2emanue
sumber
1

Jalankan perintah file pada kerangka kerja dari Terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Anda harus mendapatkan kembali pesan yang memberi tahu Anda arsitektur mana yang kompatibel dengan biner UIKit. Jika Anda tidak melihat "i386" terdaftar, maka Anda entah bagaimana berhasil menghapus versi i386 dari UIKit, yang berarti Anda tidak dapat membuat simulator. Untuk memperbaikinya, Anda harus menginstal ulang SDK.

Jika Anda mendapatkan kesalahan lain, semoga ini akan membantu Anda mengetahui apa masalah sebenarnya.

Mark Bessey
sumber
Menginstal ulang sdk dan saya masih mendapatkan error build yang sama persis.
Gabe Shahbazian
saya mengalami masalah ini. sudah memeriksa kerangka kerja dan jalur perpustakaan dan mereka bersih. file perintah /Developer/Platforms.../UIKit.framework/UIKit hanya mengatakan "lengan perpustakaan bersama yang ditautkan secara dinamis Mach-O". apakah benar-benar perlu menginstal seluruh SDK ?, atau dapatkah saya menyalin versi lengkap framework?
Alexander Fradiani
Bagus untuk dipelajari! untuk kasus saya, armv7 dan i386 ada di sana, tetapi tidak ada armv6!
Nianliang
1

Saya hanya ingin memberi tahu Anda bahwa Dalam kasus saya, saya mengalami masalah yang sama, saya menyadari bahwa saya memiliki folder Xcode yang lebih lama bernama Xcode3.1.3 Saya hanya mengganti namanya karena itu adalah versi yang lebih lama dan itu melakukan keajaiban untuk saya.

Raya2
sumber
1

Periksa jalur pencarian perpustakaan Anda di pengaturan target Anda. Terkadang pustaka konyol masuk ke sana dan ini akan memberi Anda kesalahan serupa.

Anda dapat menghapus semua entri di bagian ini.

Atma
sumber
0

Saya baru saja mengalami sesuatu yang sedikit berbeda, karena saya bekerja di perpustakaan saya sendiri (WM_GSRecognizerLib), tetapi kesalahannya sama.

Apa yang akan terjadi: karena beberapa pembaruan, jalur yang menargetkan lib untuk menyertakan (.a) berasal dari folder "Debug-iphoneos" (tempat dibuat). Kompilasi untuk Perangkat iOS Generik berfungsi dengan baik, tetapi tidak untuk simulator, mengeluh karena arsitektur i386 hilang.

Apa yang saya lakukan untuk masalah ini, adalah juga menyertakan binari dari folder "Debug-iphonesimulator".

Ini dapat membantu untuk topik ini, karena penjelasannya ada di sini: perangkat memerlukan biner untuk arm64 / armv7 / armv7s, sedangkan simulator memang membutuhkan i386.

tontonCD
sumber
0

Solusi saya adalah menyetel simulator target debug YES, lihat saja status git untuk melihat baris baru ditambahkan sebagai arsitektur hanya pada .project. jika Anda tidak menyetelnya, build akan dijalankan ke semua arsitektur dan akan menampilkan beberapa arsitektur yang hilang seperti i386 atau lainnya. CATATAN BAHWA jelas masalah utama adalah menggunakan beberapa kerangka kerja yang mengimplementasikan beberapa jenis arsitektur tertentu.

Guilherme Pedriconi
sumber
-1

Saya juga mendapat kesalahan yang sama saya menggunakan xcode versi 4.0.2 jadi yang saya lakukan adalah memilih file proyek xcode dan dari mereka saya memilih opsi Target mereka saya bisa melihat aplikasi proyek saya jadi saya mengkliknya dan pergi ke build opsi pengaturan.

Mereka di opsi pencarian saya mengetik jalur pencarian Kerangka , dan menghapus semua pengaturan dan kemudian mengklik tombol build dan itu berfungsi untuk saya dengan baik,

Terima kasih dan Salam

Akar
sumber