Avviso Xcode: "Comandi multipli per il file di output"


494

Ricevo un errore come questo:

[WARN] Avviso: comandi di build multipli per il file di output /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN] Avviso: comandi di build multipli per il file di output /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARN] Avviso: comandi di build multipli per il file di output /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

Ma ho controllato Xcode e non vedo alcun duplicato di tali file. Come dice questo post negli elenchi postali di Apple, non ci sono duplicati.

Risposte:


809

Nel Navigatore progetto, selezionare il file del progetto Xcode. Questo ti mostrerà le impostazioni del progetto così come gli obiettivi nel progetto. Guarda nella fase di costruzione "Copia risorse bundle". Dovresti trovare i file offensivi in ​​quell'elenco due volte. Elimina il riferimento duplicato.

Xcode si lamenta che stai tentando di raggruppare lo stesso file con la tua applicazione due volte.


1
Mi succede quando ho eliminato alcune risorse dalla cartella build (usando il Finder). Le risorse sostituite con quelle aggiornate con gli stessi nomi e trascinandole all'interno di XCode contrassegnando le opzioni "aggiungi alla destinazione". Sembra che XCode non sia sincronizzato duplicando quelle voci in Copia risorse del bundle
brainondev,

1
Volevo aggiungere una cosa a questo. Se in qualche modo finisci con un sacco di riferimenti duplicati (come ho fatto io), puoi semplicemente fare clic su "Convalida impostazioni" e cancellerà automaticamente i riferimenti duplicati. Molto più facile che cercarli manualmente
Jon Mattingly,

1
Ho avuto un problema simile. Questa risposta è stata la più vicina. Il file <projName> .xcodeproj / project.pbxproj aveva voci duplicate anche se il progetto mostrava i file solo una volta. Questo è stato un problema di fusione. il montaggio con vi ha funzionato :) Grazie per avermi indicato nella giusta direzione :)
javatarz,

11
Vale la pena notare che se hai una grande quantità di file duplicati nella fase Copia risorse bundle, puoi fare clic su "Convalida impostazioni" nella parte inferiore di questa pagina e XCode ti chiederà i duplicati e li rimuoverà tutti se fai clic su " Esegui modifiche ". Inferno molto più veloce della caccia per loro individualmente.
Yeti42,

1
Ho avuto un problema simile con i modelli SpriteBuilder quando ho aggiunto nuovamente "Published-iOS" al progetto. Si scopre che vuole che sia un "riferimento alla cartella" e non un gruppo, e ha aggiunto l'intera cartella in "Copia risorse del pacchetto". Quindi, anche se la singola risorsa non appare in quell'elenco, assicurati che non venga aggiunta da una cartella.
Samkass,

127

Ciò è facilmente causato dall'aggiunta di sottoprogetti basati su git. Xcode non è abbastanza intelligente da ignorare la sottocartella .git anche se non puoi vederlo dal finder, quindi sarà molto confuso che ci siano più file chiamati "master" o "exclude", (file standard di repository git). Con Xcode4, vai al progetto (radice dell'albero a sinistra), quindi fai clic sul target della tua app ed espandi "Copia risorse bundle", quindi rimuovi tutti i riferimenti a .git, non dovresti comunque averli inseriti nella tua app.


43
Ho cercato per un secondo, quindi questo può aiutare qualcuno: target app -> fasi di costruzione -> copia le risorse del bundle
jaime

2
Ho avuto più file con lo stesso nome (ma in directory diverse) nel mio progetto Xcode. Per caso, uno dei miei aveva entrambi nel passaggio Copia risorse bundle, il che avrebbe comportato la sovrascrittura di uno di essi nel pacchetto app risultante. Basta rimuoverne uno.
BastiBen,

112

In realtà, la risposta a questa è abbastanza semplice.

Nel tuo progetto Xcode cerca i file che generano l'avvertimento ed eliminane uno.

Xcode mostrerà solo un riferimento di quel file nei risultati della ricerca, ma non fermarti qui, vai avanti ed eliminalo. (è meglio fare un backup del file del progetto prima di eliminarlo)

Ora ricostruisci il progetto. L'avvertimento dovrebbe scomparire ora. (questa risposta è per una versione precedente di xcode)


Ma i file non compaiono più nei gruppi di XCode e nel riquadro dei file. Qual è il problema con questo?
Tejaswi Yerukalapudi,

1
Se continui a riscontrare problemi, rimuovi tutti i file da Xcode (non eliminarli sul disco). Quindi trascinali nuovamente dentro. Se hai ancora problemi, allora hai effettivamente alcune risorse con lo stesso nome (forse in cartelle diverse) - trova e rinomina / elimina. L'output di Xcode va in una cartella piatta, quindi la struttura della directory viene ignorata.
n13,

52

Questo non è un bug Xcode, sebbene il messaggio di avviso non sia abbastanza utile per descrivere la vera causa.

Questo messaggio di errore si verifica quando nel progetto sono presenti più file con lo stesso nome. Devi solo eliminare o rinominare i file con nomi duplicati e il problema è risolto.


1
Sì, questa è la risposta corretta. E la situazione può facilmente arrivare quando hai file di risorse, ad esempio pngs con lo stesso nome ma in directory separate sul tuo file system - durante il processo di compilazione vengono tutti copiati in 1 directory, vale a dire il pacchetto dell'app.
Brynjar,

@Brynjar c'è un modo per consentire alle immagini con lo stesso nome? o per impedire che le immagini vengano raggruppate insieme?
Andy,

In realtà ho capito che è possibile creare riferimenti a cartelle per evitare il raggruppamento.
Andy,

Ecco un modo per trovare file con nome duplicato, indipendentemente dalla directory find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort, tuttavia questo non ha risolto il mio problema
William Entriken,

26

Questo succede se hai 2 file con lo stesso nome nel progetto. Anche se i file sono in gruppi in XCode quando il progetto viene compilato, tutti i file finiscono nella stessa directory. In altre parole se hai /group1/image.jpg e /group2/image.jpg il progetto compilato avrà solo uno dei due file image.jpg.


17

Come accennato in precedenza, questo problema può essere visualizzato se si hanno più file con lo stesso nome, ma in gruppi diversi (cartelle gialle) nel navigatore del progetto. Nel mio caso, questo era intenzionale poiché avevo più sottodirectory ognuna con un "preview.jpg" che volevo copiare nel bundle dell'app:

riferimenti di gruppo

In questa situazione, è necessario assicurarsi che Xcode riconosca il riferimento alla directory (icona della cartella blu), non solo i gruppi.

Rimuovi i file offensivi e scegli "Rimuovi riferimento" (quindi non li eliminiamo del tutto):

rimuovere i riferimenti di gruppo


Ri-aggiungerli al progetto trascinandoli nuovamente nel navigatore del progetto. Nella finestra di dialogo visualizzata, seleziona "Crea riferimenti a cartelle per eventuali cartelle aggiunte":

aggiungi come riferimenti alle cartelle


Si noti che i file ora hanno un'icona di cartella blu nel navigatore del progetto:

riferimenti alle cartelle


Se ora guardi sotto la sezione "Copia risorse bundle" delle fasi di compilazione del target, noterai che esiste una singola voce per l'intera cartella, anziché voci per ogni elemento contenuto nella directory. Il compilatore non si lamenterà di più comandi di generazione per tali file.


15

Questo non è un bug. Gli assist di Xcode possono aiutarti. Seleziona la destinazione, a sinistra nel Navigatore del progetto. Fai clic su "Convalida impostazioni" nella parte inferiore delle impostazioni. Xcode verificherà le impostazioni e rimuoverà i duplicati, se possibile.


14

un'altra versione di questa situazione può verificarsi quando sono presenti duplicati nella fase di creazione delle intestazioni .

per risolvere questo ...

  1. vai al target del tuo progetto
  2. scegliere Build Phases
  3. scegli la Headersfase di costruzione
  4. inserisci il nome mostrato nell'avvertimento
  5. notare i due (o più) elementi
  6. trova le +|-caselle nell'angolo in basso a sinistra
  7. seleziona uno degli elementi e fai clic sul -pulsante

7

Nel mio caso il problema è stato causato dallo stesso nome di destinazione e cartella all'interno di un gruppo.

Rinomina semplicemente il file o la cartella in conflitto per risolvere il problema.


6

Ho trovato una soluzione abbastanza semplice per questo:

  1. Seleziona il file che causa il problema dal navigatore del progetto
  2. Deseleziona l'appartenenza di destinazione dalla finestra di ispezione dei file
  3. Costruisci il progetto
  4. Ricontrolla di nuovo l'appartenenza di destinazione per il file

L'avvertimento è sparito! Controlla questa immagine come riferimento.

inserisci qui la descrizione dell'immagine


5

Sono abbastanza sicuro che questo possa essere causato da un bug di XCode 4, almeno nei casi in cui l'ho riscontrato.

Succede se aggiungi più file dipendenti dalla lingua contemporaneamente al progetto. L'ho scoperto guardando attraverso le differenze git. Non ho fatto nulla nel commit ma ho aggiunto alcuni nuovi file di pennini localizzati. Ma guardando indietro alla differenza del file project.pbxproj ha mostrato una serie di nuovi riferimenti duplicati aggiunti per i file che erano già nel progetto prima. I file che ha fatto anche questo mi sono sembrati casuali.

Ho riprodotto lo stesso comportamento esatto più volte.

L'eliminazione di questi file dal progetto non risolve il problema perché elimina solo il riferimento originale e lascia i duplicati. L'unico modo per risolverlo è tornare indietro a un commit e ricominciare o modificare manualmente il file di progetto, il che è davvero un buon modo per rovinarlo ancora di più poiché è difficile dire quali duplicati rimuovere e devi farlo in moltissimi posti diversi.

Xcode 4 è solo una grande delusione per me.


Sembra che questo sia risolto in XCode 4.2. Nelle versioni precedenti puoi evitare questo errore posizionando prima il file per il quale stai per aggiungere le localizzazioni nel suo "Gruppo" (cartella virtuale nel progetto). Una volta terminata l'aggiunta di localizzazioni, è possibile rimetterla dove si trovava ed eliminare il gruppo temporaneo creato.
Steve,

Questo non è un bug. È dovuto al fatto che hai più di un file con lo stesso nome nel tuo progetto.
Todd Hopkinson,

1
Quando localizzi un file dovresti avere lo stesso nome di file per ogni localizzazione, tranne che in directory diverse. Questo era davvero un bug.
Steve,

4

Questo accade perché i tuoi "no.png" "d.png" e "n.png" sono duplicati nelle risorse. Cerca solo i file eliminati pubblicati ed elimina.


3

L'errore sembra apparire quando hai più di un riferimento allo stesso file. Avevo 2 file con lo stesso nome e ho ricevuto questo errore. Quando ne elimino uno, l'errore scompare ..


2

Ancora un'altra variazione su questo tema. Ho ricevuto lo stesso messaggio e nessuna delle soluzioni suggerite in precedenza ha risolto il problema (ad esempio, avevo solo una copia del file offensivo).

La mia soluzione era quella di modificare il file project.pbxproj in un editor di testo (dopo aver chiuso XCode e aver eseguito il backup del file ovviamente) e rimuovere tutti i riferimenti al file offensivo. Quindi, dopo aver riavviato XCode, ho aggiunto manualmente il file al progetto e tutto era ok.

(Il mio sospetto è che questo problema mi sia successo a causa di un manuale, ovvero: non XCode, unione del file di progetto.)


1

Aprire la cartella Frameworks nel progetto e assicurarsi che all'interno siano presenti solo framework. Ho aggiunto per errore l'intera cartella Developer!


1

Ho avuto lo stesso problema pochi minuti fa. Ho accennato alla modifica del "target di distribuzione" risolto il mio problema.


1

Per me Target> Impostazioni build> Imballaggio> Nome prodotto è stato impostato sulla stessa cosa di un altro valore a cui si fa riferimento in un file .plist personalizzato per la mia app. Alla fine, a causa del nostro processo di creazione, vengono creati file duplicati.


1
Questo è stato il problema per me, grazie!
Leon,

0

Swift 3 : (ma anche le versioni precedenti) succede quando ho risorse con duplicati. Rinomina i file con questo problema e tutto va bene.

Potrebbe accadere anche quando hai creato un Assets.xcassetse hai rinominato i duplicati con nuovi nomi, quindi dopo averlo dimenticato e rimosso per aggiungere i riferimenti alla cartella, ma questo torna al problema dei file duplicati.


0

Uno dei modi semplici è,

  • Vai al target dell'app
  • Vai a Costruire fasi
  • File di output
  • Elimina il percorso dei file put messi, quindi crea il progetto. Funzionerà correttamente.

0

La chiave era fare pod deintegratee rm *.workspacearchiviare! Che spreco di tempo !


0

Utenti React-Native. vai al file -> impostazioni dell'area di lavoro -> sistema di compilazione -> modificalo in un sistema di generazione legacy. e dovrebbe costruire bene ora. React-Native non è ancora compatibile con il nuovo file system.


0

Commentando use_frameworks! in PodFile ha funzionato per me.

#use_frameworks!

Nota: fatto su XCode 10.1, versione pod 1.8.4


-1

Anche se sono sicuro che esiste un modo migliore, il nuking mi ha richiesto solo meno di 60 secondi ed è stata l'unica cosa che ho trovato che ha funzionato.

  1. Trascina il repository nel cestino.
  2. clonare nuovamente il repository.
  3. configura il tuo repository con il monitoraggio remoto corretto. git remote add <url.git>, ogit remote set-url <url.git>
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.