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

168

Nach dem Update auf Xcode 5.1 kann ich mein Projekt für den 64-Bit-Simulator nicht mehr erstellen und erhalte folgende Fehlermeldung:

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

Dies sind meine Ziel-Build-Einstellungen:

Xcode-Zielerstellungseinstellungen

Ich habe versucht, "Build Active Architecture" in "No" zu ändern und "i386" zu "Valid Architectures" hinzuzufügen. Leider hat beides nicht funktioniert. Vielen Dank für alle Vorschläge!

ebi
quelle
4
Ich habe nach dem neuesten iOS 7.1-Update einige ähnliche Fragen gesehen, und die Lösung bestand darin, arm64 wegzulassen. Zugegeben, das löst Ihr spezifisches Problem nicht, aber es gibt Grund zu der Annahme, dass Apple etwas durcheinander gebracht hat.
Dandan78
Vielen Dank, das macht Sinn. Ich denke, ich werde 64-Bit erst verwenden, wenn Apple ein Update dafür veröffentlicht.
ebi
1
Mögliches Duplikat von EXC_BAD_ACCESS, Code 1, iOS 7.0.x 64-Bit-Geräten
ignotusverum
Gleiches Problem auf Xcode 6.1, habe alle unten angegebenen Lösungen ausprobiert, sie funktionieren nicht. Ich habe CocoaPods in meinem Projekt. Jede Lösung, wie man es auf Xcode 6.1
Vinayaka Karjigi

Antworten:

102

Ich hatte die gleiche Fehlermeldung nach dem Upgrade auf XCode 5.1. Verwenden Sie CocoaPods? Wenn ja, 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 Build-Einstellungen des "Pods" -Projekts und Ihres eigenen Projekts auf "Nein" gesetzt ist.
  4. Reinigen und bauen.
Mike Onorato
quelle
1
Behoben durch Entfernen von arm64 aus Pods-Architekturen.
ebi
Das gleiche Problem wurde auch in einem Cordova / PhoneGap-Projekt für mich gelöst. Vielen Dank
Rocco
182

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


BEARBEITEN:

Soweit ich weiß ( bitte darauf hinweisen, wenn es etwas falsch ist, Dank ), wenn Sie setzen ONLY_ACTIVE_ARCHauf YES, bedeutet dies , das Xcode wird nur für die aktive Architektur bauen (was auf das Gerät bezieht , die in Xcode gerade aktiv ist). Die Standardeinstellung von Xcode scheint Debug zu sein YES, sodass keine Binärdateien für andere Architekturen erstellt werden, wenn Sie nur für ein spezielles Gerät erstellen möchten, das mit Ihrem Mac verbunden ist.

Der Grund für die fehlgeschlagene Erstellung könnte sein, dass das Projekt die Architektur des von Ihnen verbundenen Geräts nicht unterstützt. Die beste Lösung besteht also darin, die richtige Architektur für Ihr Gerät hinzuzufügen. Unten finden Sie eine Liste der Architekturen und der 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 funktioniert "set the ONLY_ACTIVE_ARCHto NO" ? Da das Gerät weiterhin die Binärdatei ausführen kann, die für alle von Ihnen hinzugefügten Architekturen erstellt wurde (übergeben Sie den Build), jedoch an Leistung verliert. Dies ist nur eine schnelle Lösung, aber nicht die beste.


Hinweis : Je mehr Architekturen Sie hinzugefügt haben, desto größer wird die Binärdatei. Es ist also gut, die richtigen Architekturen für Ihr Projekt auszuwählen. ;)

Kjuly
quelle
@EmilMarashliev nur das Build-Ziel. Sie sehen es, wenn Sie Ihr Stammprojekt auswählen (mit blauem Symbol).
Juli
@Praveen nicht sicher, scheint diese Option in Xcode 5.1 geändert zu werden.
Kjuly
Dies ist die richtige Antwort, Sie haben mir hier ein Leben lang gerettet, danke :)
Bikramjit Singh
2
Dies ist die klarste und vollständigste Antwort. Sollte auf jeden Fall der Genehmigte sein !!! Vielen Dank
MeV
1
das war sehr hilfreich. Die Antwort wäre vollständig, wenn Sie hinzufügen könnten, wie die benötigte Architektur heruntergeladen werden soll.
Kalpesh Popat
29

In arm64an das Ziel ist valid architectures. Sieht so aus, als würde es auch x86-64simulatorgültigen Architekturen Architektur hinzufügen .

xardas
quelle
27

Wenn Sie CocoaPods verwenden, besteht das wahrscheinlichste Problem darin, dass in Ihrem Pods-Projekt Build-Einstellungen nur für Build Active Architecture für Debug auf Ja festgelegt ist .

Die Lösung ist einfach. Ändern Sie es in Nein .

Wechseln Sie in ähnlicher Weise für Ihr Anwendungsprojekt zu Nein .

Samwize
quelle
12

Ich hatte ein ähnliches Problem. Wurde gelöst, indem "Architektur " in den Build-Einstellungen für das Projekt in " $ (ARCHS_STANDARD_32_BIT) " geändert wurde .

Jetzt müssen Sie Standardarchitekturen (armv7, arm64) - $ (ARCHS_STANDARD) auswählen, da Apple Apps empfiehlt, die auf einer 64-Bit-Architektur basieren . Klicken Sie auf: Apple-Dokument

Jayprakash Dubey
quelle
@ JayprakashDubey, was ist damit? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
Soll ich verwenden $(ARCHS_STANDARD_32_BIT)oder $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
@ Hagile: Gehen Sie mit $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey
10

Hinzufügen: Architekturen: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Gültige Architekturen: arm64 armv7 armv7s

AntonijoDev
quelle
Hmm, haben Sie versucht, alles zurückzusetzen, Simulatorinhalt, Simulator, Projekt zu bereinigen, xCode und Mac neu zu starten, weil ich xCode5.1 habe und mein Simulator gut funktioniert
AntonijoDev
Führen Sie Ihre App / Ihren Simulator mit dem iPhone 4-Zoll 64-Bit aus?
ebi
5

Nur für den Fall, dass für alle, die trotz der oben genannten Schritte immer noch auf das Problem stoßen, überprüfen Sie, ob der von Ihnen ausgeführte Simulator auch der unterstützte ist. Ich hatte meine für arm7 und arm7s angegeben, versuchte aber, die App auf einem 64-Bit-Simulator auszuführen.

irs8925
quelle
+1 Ja, das ist derjenige! Nach der Überprüfung und erneuten Überprüfung und dreifachen Überprüfung, ob alles noch in Ordnung ist, war dies das Problem!
JOM
1
Beeindruckend. Ich muss das Gerät, für das ich bauen möchte, tatsächlich anschließen, um den richtigen Zielcode zu kompilieren. Ich habe nur ein bisschen in meinen Mund gekotzt. Ihr Beitrag hat dieses Problem für mich gelöst, danke.
5

Um zu vermeiden, dass "pod install" bei jeder Ausführung nur_active_arch zum Debuggen zurücksetzt, können Sie Ihrer Pod-Datei Folgendes hinzufügen

# 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
quelle
3

Fügen Sie einfach arm64 in eine gültige Architektur ein. Ich hoffe, es wird für Sie funktionieren.

Shauket Sheikh
quelle
3

Mein Problem war, dass das Pods-Projekt trotz meiner Podfile auf OS X abzielte platform :ios. Ich benutze Cocoapods 0.35.0.rc2.

Um dies zu beheben, wählen Sie das Pods-Projekt im Projektnavigator aus und überprüfen Sie, ob der Pods PROJECT-Knoten (wohlgemerkt nicht das Pods-Ziel) auf iOS abzielt. Das heißt, die Einstellungen für die Architekturerstellung sollten wie folgt sein:

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

Ich wollte auch alle Architekturen erstellen und habe 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
Jano
quelle
3

Ich musste folgendes hinzufügen i386und x86_64dazu Valid Architectures. Ich verwende Xcode 7.2 und ziele auf iOS 8+ ab. Hatte ich schon armv7, armv7sund arm64da drin und die in Xcode 6.4 arbeitete.

Timgcarlson
quelle
2

Ich hatte das gleiche Problem, als ich meine App mit xcode 5.1 auf dem iPad ausführte. Es wurde behoben, indem armv7s aus 'gültigen Architekturen' entfernt und der Wert 'Nur aktive Architekturen erstellen' auf Nein gesetzt wurde. Beide Felder finden Sie in Ihrer App-> Ziele-> Build-Einstellungen-> Architekturen.

Anubha
quelle
2

Ich bin zu dieser Frage aufgrund eines Problems mit der Befehlszeilenerstellung für den Simulator in Xcode 7.2 gekommen. Falls jemand mit demselben Problem hierher kommt, werde ich die gefundene Lösung teilen:

Anscheinend gibt es einen Fehler in Xcode 7.2 , xcodebuildder beim Versuch, einen Simulator zu erstellen , zum Scheitern führt. Die Lösung besteht darin, die Option "-destination" anzugeben, z.

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

Aktualisieren

Mit dem obigen Beispielbefehl wird eine Binärdatei erstellt, die nur die Grafiken für das iPhone 6 enthält. 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, besteht darin, den Parameter anzugeben PLATFORM_NAME=iphonesimulator, zum Beispiel:

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

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 habe ein ähnliches Problem festgestellt, als ich versucht habe, standardmäßig für armv7 zu erstellen, aber es wurde weiterhin versucht, für arm64 zu erstellen. Ich habe ARCHS_STANDARD in ARCHS_STANDARD_32_BIT geändert, und dies hat die ausgewählte aktive Architektur geändert.

Halifix
quelle
0

In der Akrhiektur - manchmal zur Unterstützung von 6.0 und 7.0 - schließen wir arm64 aus

Wählen Sie unter Architekturen -> Architektur - Standardarchitektur arm64 armv7 armv7s aus. Gleich unten in Valid acrchitecture make user arm64 armv7 armv7s ist enthalten. Das hat bei mir funktioniert.

Ankish Jain
quelle
0

Ich habe dieses Problem mit der Antwort von @ Kjuly und der spezifischen Zeile gelöst:

"Der Grund für die fehlgeschlagene Erstellung könnte sein, dass das Projekt die Architektur des von Ihnen angeschlossenen Geräts nicht unterstützt."

Wenn Xcode geladen ist, wird meine iPad-App automatisch auf iPad Air eingestellt

Geben Sie hier die Bildbeschreibung ein

Dies verursachte den Fehler bei der Abhängigkeitsanalyse.

Durch Ändern des Gerätetyps wurde das Problem sofort behoben:

Geben Sie hier die Bildbeschreibung ein

Ich weiß nicht, warum das funktioniert, aber dies ist eine sehr schnelle Antwort, die mir viel Fummeln im Hintergrund erspart hat und die App sofort zum Testen gebracht hat. Ich hätte nie gedacht, dass dies eine Sache sein könnte und etwas so Einfaches würde es beheben, aber in diesem Fall tat es.

simon_smiley
quelle
0

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

Geben Sie hier die Bildbeschreibung ein

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

matt
quelle
0

In Gültige Architekturen: Wählen Sie jeden Eintrag aus (Release, Debug) und erstellen und drücken Sie die Rücktaste. Es sollte funktionieren

Khaled Annajar
quelle