Xcode 5.1 - Derlenecek mimari yok (ONLY_ACTIVE_ARCH = YES, aktif ark = x86_64, VALID_ARCHS = i386)


168

Xcode 5.1'e güncelledikten sonra, 64-bit simülatör için projemi artık oluşturamıyorum, bu hatayı alıyorum:

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

Bunlar benim hedef oluşturma ayarlarım:

Xcode hedef oluşturma ayarları

"Etkin Mimari Oluştur" u Hayır olarak değiştirmeyi ve "Geçerli Mimarilere" "i386" eklemeyi denedim, ne yazık ki hiçbiri işe yaramadı. Herhangi bir öneriniz için teşekkürler!


4
En son iOS 7.1 güncellemesinin ardından birkaç benzer soru gördüm ve çözüm arm64'ü dışarıda bırakmaktı. Kuşkusuz, bu sizin özel sorununuzu çözmez, ancak Apple'ın bir şeyleri berbat ettiğine inanmak için bir neden vardır.
dandan78

Teşekkürler, bu mantıklı, Apple bunun için bir güncelleme yayınlayana kadar 64 bit kullanmayacağım.
ebi


Xcode 6.1'deki aynı sorun, aşağıda verilen tüm çözümleri denedi, çalışmıyor. Projemde CocoaPod'lar var. Xcode 6.1'de nasıl düzeltileceğine dair herhangi bir çözüm
Vinayaka Karjigi

Yanıtlar:


102

XCode 5.1'e yükselttikten sonra aynı hata mesajını aldım. CocoaPods mu kullanıyorsunuz? Öyleyse, bu sorunu çözmelidir:

  1. Xcode'un sol bölmesindeki çalışma alanından "Pods" projesini silin ve Xcode'u kapatın.
  2. "Bölmeler" projesini yeniden oluşturmak için komut satırından "pod install" komutunu çalıştırın.
  3. Xcode'u tekrar açın ve hem "Podlar" projesinin hem de kendi projenizin oluşturma ayarlarında "Yalnızca Etkin Mimari Oluştur" un "Hayır" olarak ayarlandığından emin olun.
  4. Temizleyin ve inşa edin.

1
Pod64 mimarilerinden arm64 kaldırılarak düzeltildi.
ebi

Benim için de aynı sorunu bir Cordova / PhoneGap projesinde çözdüm. Teşekkürler
Rocco

182

Ne yapmanız gereken sadece ayarlanır ONLY_ACTIVE_ARCHiçin NO(benim için en azından işler). Aşağıda bunun için bir ekran görüntüsü var:


DÜZENLE:

Gibi bildiğim kadarıyla ( bir şey yanlış, teşekkürler varsa bunu işaret lütfen ayarladığınız takdirde,) ONLY_ACTIVE_ARCHiçin YES, bu Xcode sadece (şu anda Xcode etkin olan cihaza belirtir) aktif mimarisi inşa edecek demektir. Xcode'un varsayılan ayarında Hata Ayıkla olarak ayarlandığından YES, yalnızca Mac'inize bağlı özel bir cihaz için oluşturmak istediğinizde diğer mimariler için ikili dosyalar oluşturmaz.

Oluşturulmamasının nedeni, projenin bağladığınız cihazın mimarisini desteklememesi olabilir. Bu yüzden en iyi çözüm, cihazınız için doğru mimariyi eklemektir. Aşağıda mimarileri ve destekleyen cihazların bir listesi bulunmaktadır:

  • 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

Peki neden "set ONLY_ACTIVE_ARCHiçin NO" işler? Çünkü cihaz, eklediğiniz tüm mimariler için oluşturulan ikili dosyayı çalıştırabilir (derlemeyi geçebilir), ancak bazı performanslarını kaybedecektir. Bu sadece hızlı bir çözüm, ama en iyisi değil.


Not : Ne kadar çok mimari eklerseniz, ikili dosya o kadar büyük oluşturulur. Bu yüzden projeniz için doğru mimarileri seçmek iyidir. ;)


@EmilMarashliev sadece inşa hedefi. Kök projenizi seçtiğinizde göreceksiniz (mavi simgeli).
Kjuly

@Praveen emin değilim, bu seçenek Xcode 5.1'de değişmiş gibi görünüyor.
Kjuly

Bu doğru cevap, beni burada bir ömür boyu kurtardın, teşekkürler :)
Bikramjit Singh

2
Bu en açık ve eksiksiz cevaptır. Kesinlikle onaylanmış bir olmalı !!! Teşekkür ederim
MeV

1
Bu çok yardımcı oldu. gerekli mimariyi nasıl indireceğinizi ekleyebiliyorsanız cevap tamamlanmış olacaktır.
Kalpesh Popat

29

arm64Hedeflere ekleyin valid architectures. Görünüşe göre x86-64simülatör geçerli mimarilere mimari ekliyor .


27

CocoaPods kullanıyorsanız, en olası sorun, Pods projenizin Yalnızca Build Active Architecture için Oluşturma Ayarları'nın Hata Ayıklama için Evet olarak ayarlanmış olmasıdır .

Çözüm basit. Hayır olarak değiştirin .

Benzer şekilde, uygulama projeniz için Hayır olarak değiştirin .


12

Benzer bir sorunum vardı. Proje için Build Settings'de "Mimari" yi " $ (ARCHS_STANDARD_32_BIT) " olarak değiştirerek çözdüm .

Şimdi, seçmek zorunda $ (ARCHS_STANDARD) - Standart mimarileri (ARMv7, arm64) elma 64 bit mimarisine yapı olması uygulamalar önerir beri. Tıklayın: Apple belgesi


@JayprakashDubey, buna ne dersin? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

Kullanmalı mıyım $(ARCHS_STANDARD_32_BIT)yoksa $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang

@hagile: $ (ARCHS_STANDARD_INCLUDING_64_BIT) ile git
Jayprakash Dubey

10

Ekle: Mimariler: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Geçerli mimariler: arm64 armv7 armv7s


Hmm, her şeyi sıfırlamak için trie yaptınız mı, simülatör içeriği, simülatör, temiz proje, xCode ve Mac'i yeniden başlatın, çünkü xCode5.1'e sahibim ve simülatörüm iyi çalışıyor
AntonijoDev

Uygulamanızı / simülatörünüzü iPhone 4 inç 64 bit kullanarak mı çalıştırıyorsunuz?
ebi

5

Her halükarda, yukarıdakilere rağmen sorunla hala karşılaşan herkes için, çalıştırdığınız simülatörün de desteklenen olduğunu kontrol edin. Benim arm7 ve arm7s için belirtilmişti ama uygulamayı 64 bit simülatörde çalıştırmaya çalışıyordum.


+1 Evet, bu! Kontrol ve yeniden kontrol ve üçlü kontrol sonra her şey hala Tamam, bu sorun oldu!
JOM

1
Vay. Aslında doğru hedef kod derlenmiş almak için oluşturmak istediğiniz cihazı takmak zorunda? Ağzımda biraz sıkıldım. Yayınınız bu sorunu benim için çözdü, teşekkürler.

5

Her çalıştırıldığında "pod install" komutunun reset_c_ch_rch sıfırlanmasını önlemek için, pod dosyanıza aşağıdakileri ekleyebilirsiniz

# 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


3

Benim sorunum, Pods projem, Podfile sahip olmasına rağmen OS X'i hedeflemesiydi platform :ios. 0.35.0.rc2 kokoapodları kullanıyorum.

Düzeltmek için proje gezgininde Pods projesini seçin ve Pods PROJECT düğümünün (Pods hedefini değil, dikkat edin) iOS'u hedeflediğini kontrol edin. Yani, mimarlık yapı ayarları şöyle olmalıdır:

  • Mimarileri: $(ARCHS_STANDARD)
  • Temel SDK: iOS 8.1
  • Desteklenen Platformlar: iOS
  • Geçerli mimariler: $(ARCHS_STANDARD)

Ayrıca tüm mimarileri inşa etmek istedim, bu yüzden Podfile'a şunları ekledim:

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

3

Aşağıdaki eklemek zorunda i386ve x86_64için Valid Architectures. Xcode 7.2 kullanıyorum ve iOS 8+'yi hedefliyorum. Zaten vardı armv7, armv7sve arm64orada ve Xcode 6.4 içinde çalıştıklarını da.


2

Xcode 5.1 kullanarak uygulamamı iPad'de çalıştırırken de aynı sorunla karşılaştım. Armv7'leri 'geçerli mimarilerden' kaldırarak ve 'yalnızca aktif mimarileri oluştur' değerini Hayır olarak ayarlayarak çözüldü. Her iki alan da uygulama-> hedefler-> yapı ayarları-> mimarilerinde bulunabilir.


2

Xcode 7.2'de simülatör için komut satırı derlemesi ile ilgili bir sorun nedeniyle bu soruya ulaştım. Başka birinin aynı sorunla buraya gelmesi durumunda bulduğum çözümü paylaşacağım:

Görünüşe göre Xcode 7.2'dexcodebuild simülatör için derlemeye çalışırken başarısızlığa neden olan bir hata var . Çözüm, "-hedef" seçeneğini belirtmektir, örneğin:

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

Güncelleme

Yukarıdaki örnek komut, yalnızca iPhone 6 için grafikler içeren bir ikili dosya oluşturacaktır. İkili diğer simülatörlerde çalıştırılırsa, iPhone 6 grafikleri platforma ölçeklenir. Bir daha geçici çözüm tüm platformlar için tüm grafik içeren parametre belirtmektir PLATFORM_NAME=iphonesimulatorörneğin:

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

0

Mimarilere i386 eklerken, önceki tüm mimarileri kaldırmayı deneyin (örn. ARCHS_STANDARD ayarını kaldırın). Bu, aktif mimariyi i386 olarak değiştirmelidir. Armv7 için varsayılan olarak oluşturmaya çalıştığımda benzer bir sorunla karşılaştım, ancak arm64 için inşa etmeye devam etti. ARCHS_STANDARD'ı ARCHS_STANDARD_32_BIT olarak değiştirdim ve bu seçilen etkin mimariyi değiştirdi.


0

Akreditasyonda - bazen 6.0 ve 7.0'ı desteklemek için arm64'ü hariç tutuyoruz

Mimarilerde -> mimari - standart mimari arm64 armv7 armv7s seçin. Geçerli akrchitecture hemen altında kullanıcı arm64 armv7 armv7s dahil edilir. Bu benim için çalıştı.


0

@ Kjuly'nin cevabını ve belirli bir satırı kullanarak bu sorunu çözdüm:

"İnşa edilememesinin nedeni, projenin bağladığınız cihazın mimarisini desteklememesi olabilir."

Xcode yüklendiğinde iPad uygulamamı iPad Air'e otomatik olarak ayarlar

resim açıklamasını buraya girin

Bu bağımlılık analizi hatasına neden oldu.

Cihaz türünü değiştirmek sorunu hemen çözdü:

resim açıklamasını buraya girin

Bunun neden işe yaradığını bilmiyorum ama bu çok hızlı bir cevap. Bunun bir şey olabileceğini ve bu kadar basit bir şeyin düzeltebileceğini asla düşünemezdim ama bu durumda işe yaradı.


0

Mimari isimleri elle girmenin gerekli olduğunu gördüm:

resim açıklamasını buraya girin

Bunun neden gerekli olduğunu bilmiyorum, yani bu değerler neden Xcode'un kendisinden miras alınmadı. Ama bunu yapar yapmaz sorun ortadan kalktı.


0

Geçerli mimarilerde: Her girişi seçin (serbest bırakma, hata ayıklama) ve geri silme tuşuna basın. İşe yaramalı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.