2011-06-10 5 views
40

I miei test di unità funzionavano bene in xcode4 fino a quando non dovevo creare un nuovo schema per compilare un pacchetto da eseguire sul mio dispositivo per il test.xcode 4 non riesce ad avviare test unitari (con errore linker) dopo aver creato un nuovo schema

Tutto quello che ho fatto è stato creazione di una nuova destinazione e un nuovo schema, ora cerco di eseguire i test di unità e di ottenere il seguente errore:

Il bundle test a [...] Tests.octest non poteva essere caricato perché si è verificato un errore di collegamento. È probabile che dyld non sia in grado di individuare una struttura o una libreria di framework a cui è stato collegato il bundle di test, probabilmente perché il framework o la libreria aveva un percorso di installazione non corretto al momento del collegamento.

Cosa ho rotto?

+0

Possibilmente correlato e possibilmente utile: [uno] (http://stackoverflow.com/questions/2867251/ocunit-testing-an-embedded-framework) [two] (http://stackoverflow.com/questions/6268259/xcode-4-unit-testing-linker-error) – PengOne

risposta

28

Ho anche incontrato problemi con Xcode 4 dopo aver aggiunto un obiettivo a un progetto esistente. Alla fine ho capito che Xcode DerivedData per il progetto era danneggiato. Eliminando quei dati, ho causato a Xcode la ricostruzione dei dati e il progetto è tornato alla normalità. Ho trovato i dati nella mia cartella Libreria principale (~/Libreria/Sviluppatore/Xcode/DerivedData /).

+13

Questo non ha risolto direttamente l'installazione di test, ma la pulizia della cartella DerivedDatas mi ha dato degli indizi significativi per riportare finalmente il framework di test al lavoro. Il motivo per cui si è rotto è perché ho cambiato il nome del prodotto e il target del test stava ancora esaminando il vecchio binario compilato. – Haoest

+4

Ho rotto il mio cambiando anche il nome del prodotto. La cosa fastidiosa è che dice "Nessun problema". –

+2

Per eliminare i dati derivati, è anche possibile accedere all'organizzatore, selezionare il progetto e premere Elimina accanto ai dati derivati. –

47

Come @Haoest e @Peter DeWeese i commenti sopra alla risposta 1 - Ho avuto esattamente lo stesso problema quando ho cambiato il nome del prodotto.

Per risolvere questo problema per il caso in cui è stato rinominato il prodotto, è necessario andare alla scheda Impostazioni di costruzione del target di prova e modificare la sezione Collegamento - le impostazioni del caricatore di pacchetti Debug e Release. Se è stato rinominato il prodotto, la directory e il nome dell'applicazione potrebbero essere entrambi errati.

Grazie a entrambi per averlo indicato, ma ho pensato che questa soluzione alternativa per questa situazione meritasse un profilo più alto di un commento.

+0

Assicurati inoltre di pulire e ricostruire il progetto dopo aver apportato queste modifiche. –

+0

Puoi confermare il mio sospetto che devi cambiare il caricatore di pacchetti a mano perché la dipendenza target della destinazione del test non si aggiorna correttamente quando si modifica il nome del prodotto (ad es. Cosa viene visualizzato tra parentesi)? – edelaney05

+0

Ho dovuto resettare il mio simulatore (iOS Simulator -> Reset Content and Settings ...) prima che questa soluzione funzionasse correttamente. Altrimenti Simulator ha impiegato diversi minuti per avviare il test, quindi i test non sarebbero stati eseguiti. –

6

Ho provato di tutto (comprese le altre risposte e quelli noti qui http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/), ma finalmente trovato una soluzione diversa:

Set Distribuzione Postprocessing (nella sezione Distribuzione di impostazioni di generazione) su NO per la destinazione di debug.

Prima ho fatto questo, l'eseguibile veniva spogliato, e il legame fallirebbe con

Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_SomeClassUnderTest", referenced from: 
     objc-class-ref in SomeTest.o 

Non importa che Striscia prodotto Linked e simboli Striscia di debug durante la copia sono stati impostati su NO, non faceva alcuna differenza - solo la modifica dell'impostazione Postelaborazione distribuzione ha infine assicurato che i simboli non venissero eliminati.

+0

+1 Questo ha funzionato per me; provato tutti gli altri. Grazie! – seeker12

2

Stesso messaggio di errore, nel mio caso non stavo collegando una delle classi che erano necessarie durante i test.

2

Ho scoperto che il mio problema era che l'ottimizzazione del tempo di collegamento è stata abilitata sul mio build di debug. Impostarlo su no ha risolto il problema.

Problemi correlati