2015-06-13 4 views
5

Ho appena utilizzato lo strumento di migrazione di Xcode 7 per migrare un progetto da Swift 1.2 a 2. Dopo aver risolto gli errori persi e così, tutto va bene tranne che per un errore che mi impedisce di anche edificio: comando non riuscito a causa di segnale: istruzione illegale 4.Comando Xcode 7 non riuscito a causa del segnale: istruzione illegale 4

Ho provato l'aiuto in questi articoli (Xcode 7 and Swift 2.0 : Command failed due to signal: Abort trap: 6 e Command failed due to signal: Abort trap: 6) che non sono problemi identici ai miei, ma tuttavia non sono stati in grado di risolvere il problema.

Ho pulito la compilazione e rimosso la cartella dei dati derivati. Ho aggiornato l'installazione di CocoaPods, gli strumenti Xcode sono a 7.0 e l'ottimizzazione della compilazione di Swift è impostata su Nessuno. C'è qualcos'altro che mi manca?

Grazie!

+1

Ho avuto lo stesso problema, nel mio caso avevo due classi e un protocollo: 'classe A: B, P' ma' classe B' aveva una proprietà imposta dal 'protocollo P'. Per qualche ragione, non includendo il protocollo nella classe che realmente aveva la proprietà stava causando questo errore. Ho appena fatto in modo che 'class B' includa il protocollo e l'errore sia andato via! – dcestari

+0

Grazie a @dcestari, è stato visualizzato un errore di compilazione che ti ha aiutato a trovare questo? O era solo casuale? –

+0

Sì @ bj-miller ma non erano chiari, ho appena visto cose simili a "ref myAttribute" (assumendo che "myAttribute" fosse il nome della proprietà) e "ref B". – dcestari

risposta

4

Quindi è stata trovata una risposta grazie all'aiuto di un collaboratore. Abbiamo trovato il file incriminato nell'errore di compilazione, ma non è stata fornita alcuna linea. Attraverso il processo di eliminazione, abbiamo scoperto che si trattava di una riga che dichiarava una nuova costante al risultato di ottenere un dizionario JSON ([String: AnyObject], typealiased to JSONDictionary), all'interno di un dizionario opzionale. Ecco la linea:

let objectsDictionary = maybeJSON?[key] as? JSONDictionary

Modificato questo per due affermazioni di guardia:

guard let goodJSON = maybeJSON as? JSONDictionary else { return ... } 
guard let objectsDictionary = goodJSON[key] as? JSONDictionary else { return ... } 

Questa linea ha lavorato in Xcode 6.3.2 in quanto sarebbe solo fornire un valore opzionale, ma per qualche ragione, qualche cambiamento in Xcode 7 non mi è piaciuto. Spero che questo possa aiutare chiunque stia attraversando questo.

1

'Istruzione non valida' indica semplicemente che il file binario contiene istruzioni non valide per il tipo di architettura con cui si tenta di eseguire il codice. Inizia a guardare la versione minima nelle impostazioni di costruzione del tuo progetto.

+0

La versione minima è stata impostata su 7.0, anche se la modifica a 8.0 o 9.0 risulta ancora nello stesso errore. –

+0

Hai riscontrato l'errore durante la creazione del simulatore o del dispositivo? – Laurent

+0

Entrambi. Simulatore iOS 8.1 e 9.0, nonché dispositivo (iPhone 5s su iOS 9 beta). La fase di compilazione fallisce, non riesco nemmeno a eseguirla. –