2017-06-14 5 views
2

私はDEBUGを展開していスウィフト3.0.1XcodeからインストールされたSwiftビルドをデバッグすることは可能ですか?

とXCodeの8.2.1を使用していますがfastlaneを使用して、私のローカルマシンからファブリック/ Crashlyticsに構築しますので、私はXCodeの主催者に適切な.xcarchive年代を持っています。

私は今の問題は全体スウィフトものはデバッグに私のために利用できないことであるPIDまたは名前

で処理するアタッチ>はXCode>デバッグを使用して、iPhone上で自分のアプリケーションのプロセスにアタッチすることができますよ。シンボリックなブレークポイントも、poもSwiftのために働いていません。さらに、lldbはObjective-C構文を想定していますので、po [[UIApplication sharedApplication] delegate]などのようなものを行うことができます。

今、私はプロトコル拡張から計算可能なプロパティにアクセスしようとしています。そこで質問です:

考える:私は必要な

protocol Some { 
    var some: String { get } 
} 

extension Some { 
    var some: String { 
     get { 
      return "Hello" 
     } 
    } 
} 

class AppDelegate: UIResponder, Some { 
} 

を持って想像:任意

error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized selector. The process has been returned to the state before expression evaluation.

:エラーでlldb

po [[[UIApplication sharedApplication] delegate] some]結果からのアクセスAppDelegatesomeプロパティスウィフトシンタックスや他の提案を使うチャンス?ありがとう!

答えて

1

ローカルに構築されていないSwift/ObjC混合コードをデバッグすることはできません。

+0

Thanks Jim! 私は同じマシンでビルドを行ったので、私はアーカイブを持っていると言いました。これで十分ではなく、Xcodeからビルドを直接実行する必要がありますか?説明の参照はありますか? –

+0

迅速なデバッグ形式は、コンパイラの内部状態のシリアル化です。したがって、コードを作成したコンパイラが、デバッガにリンクされているバージョンと一致する必要があります。 ObjC-Swiftバインディングを使用している場合、デバッガは迅速なコンパイラへのバインドを示すclangモジュールも再構築する必要があります。これは一般に、デバッグ時にアプリケーションをコンパイルするために使用されるSDKが存在し、使用されているObjCヘッダーが存在する必要があることを意味します。また、多くのパスがプロセスに直接記録されるため、これらのビットはすべて元の位置になければなりません。 –

+0

これらの2つの要件が満たされている場合、アーカイブされたコードをデバッグできるはずです。これは、昨年のWWDC(2016年)のlldbセッションで議論されました。しかし、私はちょうど言った以上のことを言っていない。 –

関連する問題