Xcode 5.1 - Tidak ada arsitektur untuk dikompilasi untuk (ONLY_ACTIVE_ARCH = YA, lengkungan aktif = x86_64, VALID_ARCHS = i386)

168

Setelah memperbarui ke Xcode 5.1, saya tidak lagi dapat membangun proyek saya untuk simulator 64-bit, menerima kesalahan ini:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Ini adalah pengaturan build target saya:

Pengaturan pembuatan target xcode

Saya mencoba mengubah "Membangun Arsitektur Aktif" menjadi Tidak, serta menambahkan "i386" ke "Arsitektur Valid", sayangnya tidak berhasil. Terima kasih atas sarannya!

ebi
sumber
4
Saya telah melihat beberapa pertanyaan serupa setelah pembaruan iOS 7.1 terbaru dan solusinya adalah meninggalkan arm64. Memang, itu tidak menyelesaikan masalah spesifik Anda tetapi ada alasan untuk percaya Apple mengacaukan sesuatu.
dandan78
Terima kasih, itu masuk akal, saya kira saya tidak akan menggunakan 64-bit sampai Apple merilis pembaruan untuk ini.
ebi
1
kemungkinan duplikat perangkat EXC_BAD_ACCESS, kode 1, iOS 7.0.x 64bit
ignotusverum
Masalah yang sama pada Xcode 6.1, telah mencoba semua solusi yang diberikan di bawah ini, mereka tidak berfungsi. Saya memiliki CocoaPods di proyek saya. Solusi apa pun tentang cara memperbaikinya pada Xcode 6.1
Vinayaka Karjigi

Jawaban:

102

Saya memiliki pesan kesalahan yang sama setelah memutakhirkan ke XCode 5.1. Apakah Anda menggunakan CocoaPods? Jika demikian, ini akan memperbaiki masalah:

  1. Hapus proyek "Pods" dari ruang kerja di panel kiri Xcode dan tutup Xcode.
  2. Jalankan "pod install" dari baris perintah untuk membuat ulang proyek "Pods".
  3. Buka kembali Xcode dan pastikan "Build Active Architecture Only" diatur ke "Tidak" di pengaturan build dari kedua proyek "Pods" dan proyek Anda sendiri.
  4. Bersihkan dan bangun.
Mike Onorato
sumber
1
Diperbaiki dengan menghapus arm64 dari arsitektur Pods.
ebi
Memecahkan masalah yang sama dalam proyek Cordova / PhoneGap untuk saya juga. Terima kasih
Rocco
182

Yang perlu Anda lakukan hanyalah mengatur ONLY_ACTIVE_ARCHuntuk NO(setidaknya bekerja untuk saya). Di bawah ini adalah tangkapan layar untuk itu:


EDIT:

Sejauh yang saya tahu ( tolong tunjukkan jika ada sesuatu yang salah, terima kasih ), jika Anda menyetel ONLY_ACTIVE_ARCHke YES, itu berarti Xcode hanya akan membangun untuk arsitektur aktif (yang merujuk ke perangkat yang aktif di Xcode saat ini). Tampaknya pengaturan default Xcode diatur ke Debug YES, sehingga tidak akan membuat biner untuk arsitektur lain ketika Anda hanya ingin membangun untuk perangkat khusus yang terhubung ke Mac Anda.

Alasan gagal membangun mungkin karena proyek tidak mendukung arsitektur perangkat yang Anda hubungkan. Jadi solusi terbaik adalah menambahkan arsitektur yang tepat untuk perangkat Anda. Di bawah ini adalah daftar untuk arsitektur & perangkat yang mendukung:

  • 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

Jadi mengapa "atur ONLY_ACTIVE_ARCHke NO" berfungsi? Karena perangkat masih dapat menjalankan biner yang dibangun untuk semua arsitektur yang Anda tambahkan (lulus build), tetapi akan kehilangan beberapa kinerja. Ini hanya solusi cepat, tetapi bukan yang terbaik.


Catatan : Semakin banyak arsitektur yang Anda tambahkan, semakin besar biner yang akan dihasilkan. Jadi ada baiknya memilih arsitektur yang tepat untuk proyek Anda. ;)

Kjuly
sumber
@ EmilMarashliev hanya membangun target. Anda akan melihatnya ketika Anda memilih proyek root Anda (dengan ikon biru).
Kjuly
@Praveen tidak yakin, sepertinya opsi ini bisa diubah di Xcode 5.1.
Kjuly
Ini jawaban yang benar, Anda menyelamatkan saya seumur hidup di sini, terima kasih :)
Bikramjit Singh
2
Ini adalah jawaban yang paling jelas dan lengkap. Seharusnya yang disetujui !!! Terima kasih
MeV
1
ini sangat membantu. jawabannya akan lengkap, jika Anda dapat menambahkan cara mengunduh arsitektur yang diperlukan.
Kalpesh Popat
29

Menambahkan arm64 ke target valid architectures. Sepertinya itu menambahkan x86-64arsitektur ke simulator arsitektur yang valid juga.

xardas
sumber
27

Jika Anda menggunakan CocoaPods, masalah yang paling mungkin adalah karena Pengaturan Pods proyek Anda untuk Membangun Arsitektur Aktif Saja diatur ke Ya untuk Debug.

Solusinya sederhana. Ubah ke Tidak .

Demikian pula, ubah ke Tidak untuk proyek aplikasi Anda.

samwize
sumber
12

Saya memiliki masalah serupa. Selesaikan dengan mengubah "Arsitektur" menjadi " $ (ARCHS_STANDARD_32_BIT) " di Bangun Pengaturan untuk Proyek.

Sekarang, Anda harus memilih Arsitektur standar (armv7, arm64) - $ (ARCHS_STANDARD) karena apple merekomendasikan aplikasi untuk dibangun di arsitektur 64-bit. Klik: Dokumen Apple

Jayprakash Dubey
sumber
@ JayprakashDubey, bagaimana dengan ini? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
Haruskah saya menggunakan $(ARCHS_STANDARD_32_BIT)atau $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
@hagile: Gunakan $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey
10

Tambahkan: Arsitektur: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Arsitektur yang valid: arm64 armv7 armv7s

AntonijoDev
sumber
Hmm, apakah Anda mengatur ulang semuanya, konten simulator, simulator, proyek bersih, restart xCode dan Mac, karena saya punya xCode5.1 dan simulator saya berfungsi dengan baik
AntonijoDev
Apakah Anda menjalankan aplikasi / simulator menggunakan iPhone 4-inch 64-bit?
ebi
5

Untuk jaga-jaga, bagi siapa pun yang masih menghadapi masalah meskipun mengikuti hal di atas, periksa apakah simulator yang Anda jalankan juga merupakan yang didukung. Saya telah menentukan milik saya untuk arm7 dan arm7s tetapi mencoba menjalankan aplikasi pada simulator 64 bit.

irs8925
sumber
+1 Ya, ini dia! Setelah memeriksa dan memeriksa ulang dan memeriksa ulang bahwa semuanya masih baik-baik saja, ini masalahnya!
JOM
1
Wow. Saya harus benar-benar menyambungkan perangkat yang ingin saya bangun untuk mendapatkan kode target yang tepat dikompilasi? Aku hanya sedikit muntah di mulutku. Pos Anda memecahkan masalah ini untuk saya, terima kasih.
5

Untuk menghindari "pod install" reset only_active_arch untuk debug setiap kali dijalankan, Anda dapat menambahkan yang berikut ke file pod Anda

# 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
Jake Hall
sumber
3

Cukup tambahkan arm64 dalam arsitektur yang valid. Saya harap ini akan bekerja untuk Anda.

Syaikh Syaikh
sumber
3

Masalah saya adalah bahwa proyek Pods menargetkan OS X, meskipun Podfile saya miliki platform :ios. Saya menggunakan cocoapods 0.35.0.rc2.

Untuk memperbaikinya, pilih proyek Pods di navigator proyek, dan periksa apakah simpul Pods PROJECT (ingatlah Anda, bukan target Pods) yang menargetkan iOS. Artinya, pengaturan arsitektur bangunan harus:

  • Ilmu bangunan: $(ARCHS_STANDARD)
  • SDK dasar: iOS 8.1
  • Platform yang didukung: iOS
  • Arsitektur yang valid: $(ARCHS_STANDARD)

Saya juga ingin membangun semua arsitektur, jadi saya menambahkan yang berikut ke Podfile:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end
Jano
sumber
3

Saya harus menambahkan yang berikut i386dan x86_64ke Valid Architectures. Saya menjalankan Xcode 7.2 dan menargetkan iOS 8+. Saya sudah punya armv7, armv7sdan arm64di sana dan itu bekerja di Xcode 6.4.

timgcarlson
sumber
2

Saya menghadapi masalah yang sama ketika menjalankan aplikasi saya di iPad menggunakan xcode 5.1. Itu diselesaikan dengan menghapus armv7s dari 'arsitektur yang valid' dan menetapkan nilai 'bangun arsitektur yang aktif' menjadi Tidak. Kedua bidang ini dapat ditemukan di arsitektur app-> target-> build setting-> Anda.

Anubha
sumber
2

Saya tiba di pertanyaan ini karena masalah dengan membangun baris perintah untuk simulator di Xcode 7.2. Jika ada orang lain yang datang ke sini dengan masalah yang sama, saya akan membagikan solusi yang saya temukan:

Rupanya ada bug di Xcode 7.2 yang menyebabkan xcodebuildgagal ketika mencoba membangun untuk simulator. Solusinya adalah dengan menentukan opsi "-destinasi", misalnya:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Memperbarui

Perintah contoh di atas akan membangun biner termasuk grafik untuk iPhone 6 saja. Jika biner dijalankan pada simulator lain, grafik iPhone 6 diskalakan ke platform. Sebuah solusi yang lebih baik yang berisi semua grafis untuk semua platform adalah untuk menentukan parameter PLATFORM_NAME=iphonesimulator, misalnya:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build
JRV
sumber
0

Coba hapus semua arsitektur sebelumnya (mis. Hapus pengaturan ARCHS_STANDARD) secara bersamaan saat Anda menambahkan i386 ke Arsitektur. Ini harus mengubah arsitektur aktif ke i386. Saya mengalami masalah serupa ketika saya mencoba membangun untuk armv7 secara default, tetapi terus mencoba membangun untuk arm64. Saya mengubah ARCHS_STANDARD menjadi ARCHS_STANDARD_32_BIT, dan ini mengubah arsitektur aktif yang dipilih.

halifix
sumber
0

Dalam acrhiecture - terkadang untuk mendukung 6.0 dan 7.0, kami mengecualikan arm64

Dalam arsitektur -> acrchitecture - pilih standar arsitektur arm64 armv7 armv7s. Tepat di bawah dalam Arsitektur valid membuat arm64 pengguna armv7 disertakan. Ini berhasil untuk saya.

Ankish Jain
sumber
0

Saya memecahkan masalah ini menggunakan jawaban @ Kjuly dan baris tertentu:

"Alasan gagal membangun mungkin karena proyek tidak mendukung arsitektur perangkat yang Anda sambungkan."

Dengan Xcode dimuat secara otomatis mengatur aplikasi iPad saya ke iPad Air

masukkan deskripsi gambar di sini

Ini menyebabkan kesalahan analisis ketergantungan.

Mengubah jenis perangkat segera menyelesaikan masalah:

masukkan deskripsi gambar di sini

Saya tidak tahu mengapa ini bekerja tetapi ini adalah jawaban yang sangat cepat yang menyelamatkan saya banyak bermain-main di latar belakang dan langsung membuat aplikasi bekerja untuk menguji. Saya tidak akan pernah berpikir bahwa ini bisa menjadi suatu hal dan sesuatu yang sangat sederhana akan memperbaikinya tetapi dalam kasus ini memang demikian.

simon_smiley
sumber
0

Saya menemukan bahwa perlu memasukkan nama arsitektur dengan tangan:

masukkan deskripsi gambar di sini

Saya tidak tahu mengapa ini perlu, yaitu mengapa nilai-nilai ini tidak diwarisi dari Xcode itu sendiri. Tapi begitu saya melakukan ini, masalahnya hilang.

matt
sumber
0

Di Arsitektur yang valid: Pilih setiap entri (lepaskan, debug) dan bangun dan tekan backspace. Itu harus bekerja

Khaled Annajar
sumber