ios - Xcode 5.1-Keine zu kompilierenden Architekturen(ONLY_ACTIVE_ARCH=YES, aktiver arch=x86_64, VALID_ARCHS=i386)




xcode5.1 (12)

Fügen Sie arm64 zu den valid architectures des Ziels hinzu. Sieht so aus, als ob es x86-64 Architekturen zu Simulator-gültigen Architekturen hinzufügt.

Nach der Aktualisierung auf Xcode 5.1 kann ich mein Projekt für den 64-Bit-Simulator nicht mehr erstellen und erhalte diesen Fehler:

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

Dies sind meine Zielerstellungseinstellungen:

Ich habe versucht, "Build Active Architecture" auf "No" zu setzen und "i386" zu den "Valid Architectures" hinzuzufügen, leider hat beides nicht funktioniert. Danke für Anregungen!


Fügen Sie einfach arm64 in einer gültigen Architektur hinzu. Ich hoffe, es wird für Sie funktionieren.


Ich bin bei dieser Frage aufgrund eines Problems mit dem Befehlszeilen-Build für den Simulator in Xcode 7.2 angekommen. Für den Fall, dass jemand mit dem gleichen Problem kommt, teile ich die Lösung, die ich gefunden habe:

Offensichtlich gibt es einen Fehler in Xcode 7.2 , der dazu xcodebuild , dass xcodebuild beim Versuch, für den Simulator zu bauen, fehlschlägt. Die Lösung besteht darin, die Option "Ziel" anzugeben, zB:

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

Aktualisieren

Der obige Beispielbefehl erstellt eine Binärdatei mit den Grafiken nur für iPhone 6. Wenn die Binärdatei auf anderen Simulatoren ausgeführt wird, wird die iPhone 6-Grafik auf die Plattform skaliert. Eine bessere Problemumgehung, die alle Grafiken für alle Plattformen enthält, ist die Angabe des Parameters PLATFORM_NAME=iphonesimulator , zum Beispiel:

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

Ich fand, dass es notwendig war, die Architekturnamen von Hand einzugeben:

Ich weiß nicht, warum das notwendig war, dh warum diese Werte nicht von Xcode selbst übernommen wurden. Aber sobald ich das tat, ging das Problem weg.


Ich hatte das gleiche Problem, wenn ich meine App auf dem iPad mit xcode 5.1 ausführte. Es wurde gelöst, indem armv7s von "gültigen Architekturen" entfernt wurden und der Wert "Nur aktive Architekturen erstellen" auf "Nein" gesetzt wurde. Beide Felder befinden sich in Ihrer App -> Ziele -> Build-Einstellungen -> Architekturen.


Ich hatte die gleiche Fehlermeldung nach dem Upgrade auf XCode 5.1. Verwenden Sie CocoaPods? Wenn dies der Fall ist, sollte dies das Problem beheben:

  1. Löschen Sie das Projekt "Pods" aus dem Arbeitsbereich im linken Bereich von Xcode und schließen Sie Xcode.
  2. Führen Sie "pod install" über die Befehlszeile aus, um das Projekt "Pods" neu zu erstellen.
  3. Öffnen Sie Xcode erneut und stellen Sie sicher, dass "Nur aktive Architektur erstellen" in den Erstellungseinstellungen des Projekts "Pods" und Ihres eigenen Projekts auf "Nein" gesetzt ist.
  4. Sauber und bauen.

Ich musste die folgenden i386 und x86_64 zu Valid Architectures hinzufügen. Ich führe Xcode 7.2 und Targeting iOS 8+. Ich hatte bereits armv7 , armv7s und arm64 und das funktionierte in Xcode 6.4.


In der Praxis - manchmal 6.0 und 7.0 zu unterstützen, wir arm64 ausschließen

In Architekturen -> Architektur - wählen Sie die Standardarchitektur arm64 armv7 armv7s. Nur unten in Gültige Architektur ist Benutzer arm64 armv7 armv7s enthalten. Das hat für mich funktioniert.


Mein Problem war, dass das Pods-Projekt auf OS X abzielte, obwohl mein Podfile platform :ios . Ich benutze Cocoapoden 0.35.0.rc2.

Um das Problem zu beheben, wählen Sie das Pods-Projekt im Projektnavigator aus und überprüfen Sie, ob der PROJECT-Knoten Pods (nicht das Pods-Ziel) auf iOS ausgerichtet ist. Das heißt, die Buildeinstellungen für die Architektur sollten wie folgt aussehen:

  • Architekturen: $(ARCHS_STANDARD)
  • Basis-SDK: iOS 8.1
  • Unterstützte Plattformen: iOS
  • Gültige Architekturen: $(ARCHS_STANDARD)

Ich wollte auch alle Architekturen erstellen, also habe ich dem Podfile folgendes hinzugefügt:

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

Nur für den Fall, dass jemand trotz der oben beschriebenen Probleme weiterhin auf das Problem stößt, überprüfen Sie, ob der von Ihnen ausgeführte Simulator auch der unterstützte ist. Ich hatte arm7 und arm7s angegeben, versuchte aber, die App auf einem 64-Bit-Simulator laufen zu lassen.


Versuchen Sie, alle vorherigen Architekturen zu entfernen (dh die Einstellung ARCHS_STANDARD zu entfernen), während Sie i386 zu den Architekturen hinzufügen. Dies sollte die aktive Architektur in i386 ändern. Ich stieß auf ein ähnliches Problem, als ich versuchte, für armv7 standardmäßig zu bauen, aber es versuchte, für arm64 zu bauen. Ich habe ARCHS_STANDARD in ARCHS_STANDARD_32_BIT geändert und dadurch die aktive Architektur geändert.


Was Sie tun müssen, ist nur den ONLY_ACTIVE_ARCH auf NO ONLY_ACTIVE_ARCH (funktioniert zumindest für mich). Unten ist ein Screenshot dafür:

BEARBEITEN:

Soweit ich weiß ( bitte zeigen Sie, wenn etwas falsch ist, danke ), wenn Sie ONLY_ACTIVE_ARCH auf YES , bedeutet dies, dass der Xcode nur für die aktive Architektur erstellt (was auf das Gerät verweist, das momentan in Xcode aktiv ist). Scheint, dass die Standardeinstellung von Xcode Debug auf YES , damit es keine Binärdateien für andere Architekturen erstellt, wenn Sie nur für ein spezielles Gerät erstellen möchten, das mit Ihrem Mac verbunden ist.

Der Grund, warum die Erstellung fehlgeschlagen ist, liegt möglicherweise darin, dass das Projekt die Architektur des verbundenen Geräts nicht unterstützt. Die beste Lösung ist also, die richtige Architektur für Ihr Gerät hinzuzufügen. Im Folgenden finden Sie eine Liste für Architekturen und die Geräte, die Folgendes unterstützen:

  • 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

Warum ONLY_ACTIVE_ARCH " ONLY_ACTIVE_ARCH auf NO " ? Da das Gerät weiterhin die Binärdatei ausführen kann, die für alle von Ihnen hinzugefügten Architekturen erstellt wurde (Build übergeben), wird jedoch die Leistung beeinträchtigt. Dies ist nur eine schnelle Lösung, aber nicht die beste.

Hinweis : Je mehr Architekturen Sie hinzufügen, desto größer wird die Binärdatei. Es ist also gut, die richtigen Architekturen für Ihr Projekt zu wählen. ;)





xcode5.1