Compilare, compilare o archiviare problemi con Xcode 4 (e dipendenze)


96

Questa domanda si è evoluta nelle ultime settimane per coprire questioni più generali (e l'aggiornamento dei progetti da più vecchio S).

Tuttavia molti dei problemi possono essere risolti seguendo la stessa serie di istruzioni.

Se riscontri uno dei seguenti problemi, prova i metodi nella risposta accettata:

  • Xcode 4 non riesce ad archiviare un'app
  • Xcode 4 crea un archivio inutilizzabile
  • Xcode 4 non crea un .ipa
  • Xcode 4 non riesce a compilare a causa di errori del preprocessore
  • Xcode 4 non riesce a trovare le intestazioni
  • Il codice completo di Xcode 4 non funziona
  • Le dipendenze del progetto non verranno compilate
  • L'aggiunta di una dipendenza causa uno dei problemi di cui sopra

Domanda originale

Titolo: "file problema lessicale o preprocessore non trovato" in Xcode 4

Ho un progetto in Xcode 4 che verrà costruito correttamente e verrà eseguito sul dispositivo e sul simulatore, ma quando si tenta di archiviarlo si verifica un errore durante la ricerca di file di intestazione associati a una libreria statica:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode restituisce l'errore

lexical or preprocessor issue file not found 

Molto Googling ha mostrano molte persone stanno avendo questo problema ma nessuna soluzione. Qualcuno ha una soluzione o anche un indizio.

Aggiornamento: I user headerpercorsi di ricerca sono impostati ${BUILT_PRODUCTS_DIR}in tutte le configurazioni. Si costruisce bene usando qualsiasi configurazione tranne durante l'archiviazione.

Aggiornamento 2: Merchant.h è una classe Core Data che viene generata automaticamente e quindi all'interno del .xcdatamodeldpacchetto, tuttavia le intestazioni vengono tutte copiate nella directory delle intestazioni pubbliche quando la libreria viene compilata.

Risposte:


119

NB: I passaggi seguenti risolveranno il 90% dei problemi dell'archivio Xcode, tuttavia, dai commenti si suggerisce di provare a uscire prima da Xcode . Ciò potrebbe farti risparmiare ore di modifica delle impostazioni.

  1. Verifica che i "percorsi dell'intestazione utente" siano corretti (Aggiungi "" ai percorsi per gli spazi, sia nel tuo progetto che nelle dipendenze)
  2. Imposta "Cerca sempre percorsi utente" su SÌ
  3. Crea una chiamata di gruppo "Indicizzazione intestazioni" nel tuo progetto e trascina le intestazioni in questo gruppo, NON aggiungerle a nessuna destinazione quando richiesto. Ciò include qualsiasi intestazione all'interno del tuo .xcdatamodeld , dovrai fare clic con il pulsante destro del mouse e visualizzare il contenuto del pacchetto per trovarli.
  4. Per tutte le dipendenze, imposta la build "Skip Install" su "Yes"
  5. Spostamento di eventuali intestazioni "pubbliche" nelle fasi di creazione in "Progetto"
  6. Imposta la configurazione build "directory di installazione" sulla destinazione su$(LOCAL_APPS_DIR)
  7. Modificare l'impostazione della build di destinazione "analizza tutti i file di origine per include" su YES. ( collegamento )
  8. Con le versioni più recenti di Xcode (> 4.2) potresti voler leggere questa domanda relativa agli spazi di lavoro.
  9. Elimina manualmente i file project.xcworkspace da tutti i progetti referenziati

28
L'ultimo suggerimento è tutto ciò di cui avevo bisogno per risolvere questo problema. Chiudi e riapri Xcode.
Chris Miles

1
Sì, la stessa cosa per me, dovevo solo riavviare Xcode. È successo dopo che ho rinominato e spostato i file nel progetto.
Maurizio

Anch'io. Niente di più frustrante di un bug che non dovrebbe esistere. È fantastico averlo risolto così facilmente.
maxedison

3
Nota per gli utenti di Three20 che migrano vecchi progetti da xcode3 a xcode4: (potrebbe) essere necessario modificare la preferenza xcode / locations / advanced / -> Locations specificate dal target. Vedi stackoverflow.com/questions/5261447/… per ulteriori informazioni
Ben G,

1
Santo cielo sul numero 1. Le citazioni! L'ambiente $ (SRC_ROOT) ovviamente "può" risolversi con un percorso con spazi. Non riuscivo a capire perché zippare il mio progetto ed estrarlo altrove ha provocato un errore di compilazione!
Erik Kerber

13

Ho avuto lo stesso problema in XCode 4: "Problema lessicale o preprocessore MyFile.h non trovato". Tuttavia, MyFile.m non era una libreria statica, solo una classe standard. E MyFile.m e MyFile.h sono stati inclusi correttamente e indicizzati nel progetto.

Quindi ... ho chiuso XCode e il simulatore, li ho riavviati e il problema è scomparso.


Ho avuto una situazione simile, ma l'errore indesiderato visualizzato a causa del riferimento errato a una proprietà non correlata che era nella stessa classe (in pratica ho dimenticato di usare self.) - Strano.
JARC

11

Ho scoperto che il problema è andato via quando ho cambiato l'impostazione di build di destinazione "scansiona tutti i file di origine per include" da no a sì.


6

Sono stato in grado di risolvere questo problema senza alcuna modifica alle impostazioni di build semplicemente copiando i file .h nella directory del progetto nel Finder. NON li ho aggiunti affatto al progetto. Il solo fatto di averli nella directory del filesystem del progetto sembrava essere sufficiente per consentire al collegamento implicito di Xcode di funzionare correttamente. Maggiori dettagli qui .


+1 Ho aggiunto un link alla domanda e ho accettato la risposta, grazie per le informazioni!
Richard Stelling

4

Ho avuto uno strano problema come questo. La modifica di "Scansiona tutti i file di risorse ..." su Sì non ha aiutato. Ho dato un'occhiata ai percorsi di ricerca del framework e ho notato che avevo

  • $ (ereditato)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / mio / corretto / percorso"

Sembrava giusto ma continuava a fallire. Ho quindi provato a riorganizzare l'ordine di 2 e 3 e all'improvviso ha funzionato bene. Quindi non sono sicuro del motivo per cui è stato il problema, ma volevo aggiungerlo all'elenco delle cose da provare nel caso in cui aiutasse qualcun altro.


4

La mia soluzione era cambiare il mio

#import "HeaderFile.h"

per

#import <FrameworkName/HeaderFile.h>

e tutto ha ripreso a funzionare. Quello che era insolito era che aveva smesso di funzionare improvvisamente dopo aver costruito alcune volte.


Ho provato tutto il resto con il mio sottoprogetto e questa era l'unica cosa che avrebbe funzionato. Grazie.
dirkoneill

È comunque necessario utilizzare le virgolette doppie per le librerie statiche. Le parentesi angolari cercano i percorsi dell'intestazione del sistema e non cercheranno i percorsi dell'intestazione dell'utente a meno che non si abiliti anche l' opzione Cerca sempre percorsi utente , cosa che non dovresti fare se non è necessario.
devios1

2

Il problema si è risolto da solo quando ho impostato

Impostazioni build-> Progetto-> Percorsi di ricerca su Sì


2

Avevo lo stesso - 2 obiettivi nel mio progetto ( Project e ProjectTest di GHUnit). Quando il mio schema è stato impostato su Project , l'importazione di <GHUnitIOS/GHUnit.h>era un problema di "file di problema lessicale o preprocessore non trovato" . Ma quando ho impostato come schema ProjectTest , tutto era OK. Quindi, ho aggiunto anche GHUnitIOS.frameworkin Project .


Ho avuto il problema opposto. Vedere la mia risposta: stackoverflow.com/a/16783389/629014
slcott

1

Sembra che i percorsi di ricerca dell'intestazione non siano corretti e non siano configurati correttamente nelle impostazioni di compilazione per lo schema attivo. Verificali e aggiorna la tua domanda con l'impostazione corrente.


1

Sto riscontrando problemi simili sul simulatore ma non sul dispositivo e i campi del percorso di ricerca dell'intestazione sono vuoti (sembra essere l'impostazione predefinita). Ma il cambiamento degli spazi di lavoro sembra aver risolto il problema. Forse potresti provare a creare un nuovo spazio di lavoro, aggiungere il tuo progetto e vedere se questo aiuta. Ora sto indagando sul perché.


1

Ho ricevuto questo errore "file non trovato" per un particolare file .h nel mio progetto. Ho risolto il problema rimuovendo il file .h dal progetto (selezionando "Rimuovi riferimenti") e aggiungendolo di nuovo.


1

Aggiunta di più varianti: ho avuto due istanze di foo.min Compile Sourcefase di costruzione, che in qualche modo hanno causato "Intestazione non trovata" per foo.h.


1

Un'altra possibilità:

Nel progetto dell'area di lavoro: guarda nella sezione Obiettivo per la costruzione delle fasi. Come molti manuali dicono che è necessario disporre di una fase di creazione di copia dei file per copiare tutte le intestazioni in un altro posto, poiché iOS Framework non può contenere file di intestazione da condividere (questo è il mio caso).

Scegli per l'opzione Copia file come destinazione "Directory prodotti". O un'altra directory del tuo simile in cui risiederanno le intestazioni.

Ha funzionato per me. Probabilmente la directory build per Archive (o Release) è molto diversa da quella prevista nella build per Debug.

Controlla anche nelle impostazioni del tuo spazio di lavoro la tua directory di build.

XD


0

Per me, questo problema si è verificato dopo aver aggiunto nuovi file al progetto; un .m vuoto e un .h derivati ​​da NSObject. Ecco come l'ho risolto:

  1. XCode chiuso e riavviato
  2. Eliminati i due nuovi file tramite XCode
  3. Ricompilato con successo

Poi li ho aggiunti di nuovo in seguito e ha anche funzionato.

Sicuramente un bug in xCode ...

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.