2015-07-04 8 views
35

Quando creo un nuovo progetto OS X "gioco" con Kit Sprite, e impostare un punto di interruzione ovunque posso vedere i valori delle variabili più che bene:debugger Swift non mostra i valori delle variabili durante l'importazione objC quadro

enter image description here

Poi modificare il codice per importare il mio quadro (TilemapKit), che è un framework puro Objective-C:

import SpriteKit 
import TilemapKit 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     print("dang!") 
    } 
} 

Nessun altre modifiche apportate. Non sto nemmeno usando alcun codice TilemapKit (ancora). Quando i trigger punto di interruzione, vedo questo:

enter image description here

L'intero progetto smette di essere debuggable quanto osservando i valori delle variabili va. Questo comportamento è perfettamente coerente. Senza l'importazione di framework posso eseguire di nuovo il debug.

Dato che sono in anteprima Xcode 7 beta (7A121l) e OS X 10.11 per sviluppatori, so che questo potrebbe essere semplicemente un bug (temporaneo).

Riga di comando Le tile sono impostate per utilizzare la versione Xcode 7.0 btw. Ho provato a abilitare i moduli nell'obiettivo quadro, assicurandomi che il target di distribuzione fosse lo stesso (10.11), disabilitato lo stripping dei simboli. Ho aggiunto un Bridging Header e # importato il framework TilemapKit in esso (rimuovendo l'importazione Swift in quel caso mi darebbe comunque l'app non debugabile, quindi non sembra importare come o dove importare il framework).

Qualcuno ha un suggerimento su cosa potrebbe causare questo comportamento e su come potrei risolverlo - o almeno come potrei provare a restringere il problema?

Il colpevole è più probabile che sia collegato al progetto rispetto alle impostazioni di costruzione del framework? Devo abilitare qualcosa nel progetto dell'app per renderlo compatibile con i framework ObjC? (Ho già avuto -ObjC negli Altri bandiere linker)


UPDATE:

ho corse po self nella console di debug e trovato questo avviso:

<built-in>:3:6: error: module 'TilemapKit' was built in directory '/TilemapKit.framework' but now resides in directory './TilemapKit.framework' 
#define __clang_major__ 7 
    ^
missing required module 'TilemapKit' 
Debug info from this module will be unavailable in the debugger. 

Come mai il quadro la directory di costruzione è cambiata? E perché dovrebbe importare e come risolvere questo problema?

PS: lo stesso framework in una nuova app ObjC può essere debugato bene.

+1

Anche io sto affrontando lo stesso problema con una nuova serie di quadri forniti da Twitter. Impossibile eseguire il debug di qualsiasi cosa. Mostra solo i nomi delle variabili e nient'altro che quello. Per me mostra questo errore. 'errore: il modulo 'Fabric' è stato creato nella directory '/Fabric.framework', ma ora risiede nella directory './Fabric.framework'' – Srikanth

+0

Buono a sapersi, suona come un problema generale. – LearnCocos2D

+1

Lo stesso problema in XCode7beta3 –

risposta

21

ho ricevuto un messaggio da uno sviluppatore di Apple affermando che hanno osservato questo problema, e che potrebbe essere risolto spostando il .framework ad un sottocartella del progetto.

Apparentemente l'errore module .. was built in directory viene visualizzato solo se il file .framework si trova nella stessa cartella del .xcodeproj alias $(PROJECT_DIR).

Tuttavia spostare il framework in una sottocartella non ha risolto il problema nel mio caso, ma vale comunque la pena provare finché non viene risolto in una versione più recente di Xcode 7 beta (si verifica ancora nella versione beta 3).

+4

ho appena confermato questo funziona. è inoltre necessario aggiornare i percorsi di ricerca del framework nelle impostazioni di build – calql8edkos

+1

Questa soluzione ha risolto metà del problema nel mio caso. I framework per Facebook e Parse sono stati installati a livello di progetto e spostati in una sottocartella funzionanti. Ma altri framework come Alamofire e SwiftyJSON, installati con Carthage e poi impostati come "Embedded Binaries" stavano ancora attivando il problema. Aggiungendo un "/" alla fine del percorso di ricerca del framework per Carthage, il problema è stato risolto completamente. "$ (PROJECT_DIR)/Carthage/Build/iOS /" – MathieuLescure

+0

Impossibile aggiornare questo abbastanza. Debugger è tornato in attività. – Fantattitude

-3

Vai a Modifica schema nell'angolo in alto a sinistra.

e modificare le configurazioni di debug, se si tratta di rilasciare here

+1

Come ho già detto, il problema scompare non appena commento la linea di importazione. Ovviamente è una build di debug. – LearnCocos2D

+0

OP ha mostrato di essere in grado di vedere le variabili, il che è possibile solo in Debug. Il cambiamento che ha fatto è stato includere un'importazione. – n8yn8

0

Posso confermare che questo sta accadendo in Xcode versione 7.0 beta 4 (7A165t). Ho dovuto rimuovere il mio framework ObjC per ottenere il debug dei valori da restituire. Se la rimozione del framework non è un'opzione, il metodo di stampa è il debug della vecchia scuola, ma funziona comunque.

14

Nel mio caso ciò è accaduto a causa delle dichiarazioni ridondanti import nel mio progetto.

Il mio progetto unisce file swift e objc, quindi ho istruzioni import nel file bridging_header.h.

Nel mio bridging_header.h ho avuto #import blah.h

In uno dei file veloci, mi è stato l'importazione di un colpo di testa ridondante da un quadro @import blah // From blah.framework

ho rimosso l'importazione ridondanti dal file veloce, che sembra avere aggiustato.

+0

grazie funziona come un fascino! – Lilo

+0

funziona per il mio caso (progetto misto objc + swift) –

+0

Per me è stato necessario rimuovere le intestazioni di importazione da un'intestazione di bridging e aggiungere importazioni di framework ai file swift. –

0

Ho avuto questo problema qualche tempo fa. Nel mio caso il Prefix.pch era incluso in Bridging-Header.h. Questo non è un problema, ma all'interno del mio Prefix.pch c'erano molti C include che fanno in modo che lldb non riesca a importare il Bridging-Header. Così ho rimosso "#import Prefix.pch" dal Bridging-Header e copiato solo "#include" nei file obj-c che ho bisogno di usare in swift.