L'unità applicativa esegue il test di build e test durante l'esecuzione nel simulatore, ma non riesce con un errore del linker durante la creazione e il test sul dispositivo.Test unità Xcode - Errore di collegamento durante la creazione del solo dispositivo
Il mio obiettivo applicazione ho impostato le seguenti impostazioni di generazione:
DEPLOYMENT_POSTPROCESSING = NO
GCC_SYMBOLS_PRIVATE_EXTERN = NO
Sul mio test di unità ho impostato le seguenti impostazioni: costruire
BUNDLE_LOADER = $(BUILT_PRODUCTS_DIR)/<app name>.app/<app>
TEST_HOST = $(BUNDLE_LOADER)
L'errore di linker è:
Undefined symbols for architecture armv7s:
"_<An NSString * const>", referenced from:
-[UnitTestClassA setUp] in UnitTestClassA.o
"_<Another NSString * const>", referenced from:
-[UnitTestClassB helperMethod:] in UnitTestClassB.o
-[UnitTestClassB anotherHelperMethod:] in UnitTestClassB.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
... Ho "continua dopo aver commesso errori" attivato nelle preferenze di Xcode, ma non ricev un sacco di errori di linker che si lamentano di NSString * const. Se sto facendo qualcosa di sbagliato, mi aspetterei più errori di collegamento rispetto a quello che sto ottenendo poiché utilizzo costanti di stringa nel mio codice di produzione.
Sto creando le mie costanti stringa in questo modo:
file h ...
extern NSString * const ReallyGoodString;
di file .m ...
NSString * const ReallyGoodString = @"This string is great!";
... il .m il file è un codice di produzione e parte del mio obiettivo di applicazione e quindi non devo collegarlo al bundle di test delle unità.
Quindi, cosa sta succedendo qui? Perché funziona correttamente nel simulatore e non sul dispositivo?
Ho pubblicato un sample project to Github che illustra il problema. Nel progetto di esempio è possibile vedere che questo problema è incoerente: alcuni simboli collegano semplicemente gli altri no.
Lo hai mai capito? Sto avendo lo stesso problema. Anche straniero, prima funzionava bene, e il linker si lamenta solo di una costante di stringa in un file di intestazione da cui altri simboli vengono trovati bene. –
@JonGrall non l'abbiamo ancora capito – edelaney05