Xcode 5.1 - Nessuna architettura da compilare per (ONLY_ACTIVE_ARCH = YES, arco attivo = x86_64, VALID_ARCHS = i386)


168

Dopo l'aggiornamento a Xcode 5.1, non riesco più a costruire il mio progetto per il simulatore a 64 bit, ricevendo questo errore:

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

Queste sono le mie impostazioni di build di destinazione:

Impostazioni di build del target Xcode

Ho provato a cambiare "Build Active Architecture" su No, oltre ad aggiungere "i386" a "Valid Architectures", purtroppo non ha funzionato. Grazie per eventuali suggerimenti!


4
Ho visto alcune domande simili sulla scia dell'ultimo aggiornamento di iOS 7.1 e la soluzione era di lasciare fuori arm64. Certo, ciò non risolve il tuo problema specifico, ma c'è motivo di credere che Apple abbia incasinato qualcosa.
dandan78,

Grazie, questo ha senso, immagino che non userò 64-bit fino a quando Apple non rilascia un aggiornamento per questo.
ebi,


Stesso problema su Xcode 6.1, ho provato tutte le soluzioni fornite di seguito, non funzionano. Ho CocoaPods nel mio progetto. Qualsiasi soluzione su come risolverlo su Xcode 6.1
Vinayaka Karjigi

Risposte:


102

Ho ricevuto lo stesso messaggio di errore dopo l'aggiornamento a XCode 5.1. Stai usando CocoaPods? In tal caso, questo dovrebbe risolvere il problema:

  1. Elimina il progetto "Pods" dallo spazio di lavoro nel riquadro sinistro di Xcode e chiudi Xcode.
  2. Esegui "installazione pod" dalla riga di comando per ricreare il progetto "Pod".
  3. Riapri Xcode e assicurati che "Costruisci solo architettura attiva" sia impostato su "No" nelle impostazioni di compilazione del progetto "Pods" e del tuo progetto.
  4. Pulisci e costruisci.

1
Risolto rimuovendo arm64 dalle architetture di Pods.
ebi

Risolto lo stesso problema in un progetto Cordova / PhoneGap anche per me. Grazie
Rocco,

182

Quello che dovete fare è semplicemente impostare l' ONLY_ACTIVE_ARCHad NO(almeno per me) opere. Di seguito è riportato uno screenshot per esso:


MODIFICARE:

Per quanto ne so (per favore, fai notare se c'è qualcosa che non va, grazie ), se hai impostato ONLY_ACTIVE_ARCHsu YES, significa che Xcode verrà creato solo per l'architettura attiva (che si riferisce al dispositivo che è attualmente attivo in Xcode). Sembra che l'impostazione predefinita di Xcode sia Debug YES, quindi non costruirà binari per altre architetture quando vuoi costruire solo per un dispositivo speciale collegato al tuo Mac.

Il motivo della mancata creazione potrebbe essere che il progetto non supporta l'architettura del dispositivo collegato. Quindi la soluzione migliore è aggiungere l'architettura giusta per il tuo dispositivo. Di seguito è riportato un elenco di architetture e dispositivi che supportano:

  • 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

Allora perché "imposta il ONLY_ACTIVE_ARCHto NO" funziona? Perché il dispositivo può ancora eseguire il binario creato per tutte le architetture aggiunte (passare la build), ma perderà alcune prestazioni. Questa è solo una soluzione rapida, ma non la migliore.


Nota : maggiore è il numero di architetture aggiunte, maggiore sarà la generazione del file binario. Quindi è bene scegliere le architetture giuste per il tuo progetto. ;)


@EmilMarashliev solo l'obiettivo di compilazione. Lo vedrai quando selezioni il tuo progetto di root (con l'icona blu).
Kjuly

@Praveen non è sicuro, questa opzione sembra essere cambiata in Xcode 5.1.
Kjuly,

Questa è la risposta corretta, mi hai salvato una vita qui, grazie :)
Bikramjit Singh

2
Questa è la risposta più chiara e completa. Dovrebbe essere sicuramente quello approvato !!! Grazie
MeV

1
questo è stato molto utile. la risposta sarebbe completa, se è possibile aggiungere come scaricare l'architettura necessaria.
Kalpesh Popat,

29

Aggiungi arm64a quello del bersaglio valid architectures. Sembra che aggiunge x86-64architettura anche alle architetture valide del simulatore.


27

Se stai usando CocoaPods, il problema più probabile è perché il tuo progetto Pods Build Settings for Build Active Architecture è impostato su per Debug.

La soluzione è semplice Cambiarlo in No .

Allo stesso modo, passare a No per il progetto dell'applicazione.


12

Ho avuto un problema simile. È stato risolto modificando "Architecture" in " $ (ARCHS_STANDARD_32_BIT) " in Build Settings for Project.

Ora, devi selezionare Architetture standard (armv7, arm64) - $ (ARCHS_STANDARD) poiché apple consiglia di creare app su architettura a 64 bit. Fai clic su: documento Apple


@JayprakashDubey, che dire di questo? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang,

Dovrei usare $(ARCHS_STANDARD_32_BIT)o $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang,

@hagile: vai con $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey

10

Aggiungi: Architetture: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Architetture valide: arm64 armv7 armv7s


Hmm, hai cercato di ripristinare tutto, contenuto del simulatore, simulatore, progetto pulito, riavvio xCode e Mac, perché ho xCode5.1 e il mio simulatore funziona bene
AntonijoDev

Stai eseguendo la tua app / simulatore usando iPhone da 4 pollici a 64 bit?
ebi

5

Per ogni evenienza, per chiunque continui a riscontrare il problema nonostante segua quanto sopra, controlla che anche il simulatore in esecuzione sia supportato. Avevo specificato il mio arm7 e arm7s ma stavo cercando di eseguire l'app su un simulatore a 64 bit.


+1 Sì, questo è quello! Dopo aver verificato e ricontrollato e triplicato che tutto fosse ancora a posto, questo era il problema!
JOM,

1
Wow. Devo effettivamente collegare il dispositivo che voglio costruire per compilare il codice target corretto? Mi sono appena vomitato un po 'in bocca. Il tuo post ha risolto questo problema per me, grazie.

5

Per evitare che "pod install" reimposti only_active_arch per il debug ogni volta che viene eseguito, puoi aggiungere quanto segue al tuo file pod

# 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

Il mio problema era che il progetto Pods stava prendendo di mira OS X, nonostante il mio Podfile avesse platform :ios. Sto usando cocoapods 0.35.0.rc2.

Per risolverlo, seleziona il progetto Pods nel navigatore del progetto e controlla che il nodo PROGETTO Pods (attenzione, non il target Pods) sia indirizzato a iOS. Cioè, le impostazioni di costruzione delle architetture dovrebbero essere:

  • architetture: $(ARCHS_STANDARD)
  • SDK di base: iOS 8.1
  • Piattaforme supportate: iOS
  • Architetture valide: $(ARCHS_STANDARD)

Volevo anche costruire tutte le architetture, quindi ho aggiunto quanto segue al Podfile:

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

3

Ho dovuto aggiungere quanto segue i386e x86_64a Valid Architectures. Sto eseguendo Xcode 7.2 e ho come target iOS 8+. L'avevo già fatto armv7, armv7se arm64lì dentro e funzionava in Xcode 6.4.


2

Ho riscontrato lo stesso problema quando eseguivo la mia app su iPad usando xcode 5.1. È stato risolto rimuovendo armv7s da "architetture valide" e impostando il valore "costruisci solo architetture attive" su No. Entrambi questi campi si trovano nelle app-> destinazioni-> costruisci impostazioni-> architetture.


2

Sono arrivato a questa domanda a causa di un problema con la compilazione della riga di comando per il simulatore in Xcode 7.2. Nel caso in cui qualcun altro arrivi qui con lo stesso problema, condividerò la soluzione che ho trovato:

Apparentemente c'è un bug in Xcode 7.2 che causa errori nelxcodebuild tentativo di compilare per il simulatore. La soluzione è specificare l'opzione "-destinazione", ad esempio:

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

Aggiornare

Il comando di esempio sopra crea un file binario che include solo la grafica per iPhone 6. Se il binario viene eseguito su altri simulatori, la grafica di iPhone 6 viene ridimensionata sulla piattaforma. Una soluzione alternativa che contiene tutta la grafica per tutte le piattaforme consiste nello specificare il parametro PLATFORM_NAME=iphonesimulator, ad esempio:

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

0

Prova a rimuovere tutte le architetture precedenti (ovvero rimuovi l'impostazione ARCHS_STANDARD) contemporaneamente all'aggiunta di i386 alle architetture. Questo dovrebbe cambiare l'architettura attiva in i386. Ho riscontrato un problema simile quando ho provato a compilare per armv7 per impostazione predefinita, ma ha continuato a provare a compilare per arm64. Ho cambiato ARCHS_STANDARD in ARCHS_STANDARD_32_BIT e questo ha cambiato l'architettura attiva scelta.


0

In acrhiecture - a volte per supportare 6.0 e 7.0, escludiamo arm64

Nelle architetture -> acrchitecture - seleziona l'architettura standard arm64 armv7 armv7s. Di seguito, nell'acchitettura valida, è incluso l'utente arm64 armv7 armv7s. Questo ha funzionato per me.


0

Ho risolto questo problema utilizzando la risposta di @ Kjuly e la riga specifica:

"La ragione per cui la creazione non è riuscita potrebbe essere che il progetto non supporta l'architettura del dispositivo collegato."

Con Xcode caricato, imposta automaticamente la mia app per iPad su iPad Air

inserisci qui la descrizione dell'immagine

Ciò ha causato l'errore di analisi della dipendenza.

La modifica del tipo di dispositivo ha risolto immediatamente il problema:

inserisci qui la descrizione dell'immagine

Non so perché funzioni, ma questa è una risposta molto rapida che mi ha risparmiato un sacco di armeggiare in background e ha immediatamente fatto funzionare l'app per testare. Non avrei mai pensato che questo potesse essere una cosa e qualcosa di così semplice lo avrebbe risolto, ma in questo caso è successo.


0

Ho scoperto che era necessario inserire manualmente i nomi dell'architettura:

inserisci qui la descrizione dell'immagine

Non so perché questo fosse necessario, cioè perché questi valori non fossero ereditati dallo stesso Xcode. Ma non appena l'ho fatto, il problema è scomparso.


0

In architetture valide: selezionare ciascuna voce (release, debug) e compilare e premere backspace. Dovrebbe funzionare

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.