2012-04-24 7 views
11

Abbiamo un'app costruita con un Lib statico che stiamo costruendo anche per la distribuzione. L'App e Lib funzionano bene nel debugger Xcode o quando vengono caricati sul dispositivo dalla sessione di debug di Xcode. L'App si ferma SEMPRE non appena avremo creato un build Ad Hoc Archive sul dispositivo. Le istruzioni del registro della console indicano che si blocca nel codice Lib, ma il rapporto di arresto anomalo non simboleggia il codice Lib.App iOS con Static Lib ALWAYS si arresta in modo anomalo all'avvio di Ad Hoc Archive Build. Non posso riprodurre in Xcode Debugger

  • Impossibile riprodurre in Xcode Simulator.
  • Guard malloc, Guard Bordes non mostrano nulla (ma funzionano solo in simulatore).
  • Nessuna perdita
  • Uso Xcode 4.3.2
  • App rivolge 4.3 o successiva.
  • Lib target 3.0 o successivo.
  • Altre Bandiere Linker = -ObjC
  • Lib impostato come "opzionali" in Target "collegamento binari con le librerie"
  • Thumb supporto off (utilizzando LLVM)

Vedendo 2 eccezioni su console che potrebbe essere di utilizzo, ma finora non girare nulla fino sulla rete che aiuta molto con questo:

Application 'x' exited abnormally with signal 12: Bad system call: 12 (mostly) 
Application 'x' exited abnormally with signal 12: Bad system call: 11 (rarely) 

Abbiamo visto il commento altrove che librerie statiche con ricorsione hanno problemi. Ma non abbiamo avuto alcuna ricorsione nella nostra Lib.

Perplesso, serve più idee.

+0

Che dire di test non AdHoc ma di debug sul dispositivo reale? È riproducibile allora? Chiedo solo di escludere la possibilità di creare differenze negli obiettivi. –

+0

Non l'ho provato, ma tutte le istruzioni di registrazione indicavano un blocco di codice di serializzazione che pensavamo potesse avere un sovraccarico del buffer. No. È molto, molto, molto. Dispari. –

risposta

14

Capito !! dopo 4 giorni di colpi di testa sulla scrivania. Non sappiamo esattamente perché funzioni, ma lo fa. Nel caso in cui sia utile per gli altri, ecco le impostazioni che lo hanno risolto per noi. Impostare questi nella sezione "Distribuzione" di Parametri di compilazione del Progetto Biblioteche statico:

SET "STRIP LINKED PRODUCT" (STRIP_INSTALLED_PRODUCT) = NO 
SET "STRIP STYLE" = DEBUGGING SYMBOLS. 

Abbiamo trovato questo per tentativi ed errori, ma ora notare che alcune discussioni in linea re la creazione di un progetto di Xcode per la costruzione di librerie statiche iOS utilizzare questa impostazione. Nessuna discussione sul perché, ma è così.

Se qualcuno ha qualche idea sul perché queste impostazioni lib lo risolvono, si potrebbe desiderare di commentarlo qui.

+0

NOTA: sono entrato nel forum degli sviluppatori Apple e in particolare chiedo PERCHÉ FUNZIONA QUESTO LAVORO e PERCHE 'DEVO FARE QUESTO. Nessuna risposta fino ad ora. Non un peep! Sto scommettendo c'è un bug lì da qualche parte. Se il compilatore ha bisogno di Simboli per un Lib, dovrebbe lanciare qualche avvertimento o eccezione in fase di compilazione e non solo crash! –

+0

Al WWDC ho chiesto un linker GURU a riguardo. Ha detto che questo è un modo per farlo. Ma ha suggerito un altro approccio per costruire la libreria in cui i simboli possono essere spogliati. Pubblicheremo un'altra nota quando lo risolveremo completamente. –

+0

Aveva un problema simile - libdispatch si bloccava quando si richiamava uno dei miei blocchi. Il blocco era in uno pseudo-quadro collegato staticamente. Cambiare i flag del linker come accennato in precedenza sembra aver risolto questo problema (in effetti l'unica bandiera che ho cambiato era la STRIP STYLE - l'altra era già impostata su NO). –

0

La possibilità è molto alta che le impostazioni di compilazione siano diverse tra AdHoc (Rilascio) e Debug. Hai ricontrollato tutti i valori delle impostazioni di costruzione? Osservare in particolare le impostazioni ARC (conteggio automatico dei riferimenti).

+0

Non utilizziamo ARC. Ma grazie per pensarci. –

+1

Nel mio caso, l'arresto anomalo si è verificato durante l'esecuzione di una build di rilascio installata tramite la distribuzione Ad-Hoc, ma non durante l'esecuzione di una build di rilascio installata e avviata tramite Xcode. Si noti che entrambi erano versioni di rilascio. La build ad-hoc è stata creata come parte del processo di archiviazione, quindi non era tecnicamente lo stesso file binario della versione di rilascio, ma era costruita con le stesse impostazioni di destinazione e codice identico, il che sembra implicare che si tratti di qualcosa andando avanti nel processo di archiviazione/ri-firma/ad-hoc-installazione che sta facendo la differenza. –

+0

Sam, no. Questo problema è legato al modo in cui funziona il linker, vedere la risposta accettata. –

0

Eseguire il debug, caricando con il debugger Xcode, la build di produzione (probabilmente impostata su Release Build con impostazioni di ottimizzazione e codice gen molto diverse rispetto alla build di Debug con cui si sta effettuando il test).

+0

Provato. Correre in quel modo si è schiantato nello stesso posto e non ci ha detto nulla. –

1

Ho avuto un problema simile e ho provato a modificare le impostazioni di costruzione del progetto, ma non ha funzionato per me. Alla fine ho risolto il problema modificando l'impostazione del livello di ottimizzazione del compilatore per il rilascio:

In Impostazioni di compilazione, vai al compilatore LLVM 4.2 - Sezione Generazione codice, cerca l'opzione Livello di ottimizzazione e modifica l'impostazione di Rilascio da Più veloce, Più piccolo [ -Os] su Nessuno [-0].

Spero che questo aiuti!

Problemi correlati