JavaScriptプログラマがSwift iOSアプリを2週間で作って公開してみた〜その23 Xcode Debug〜


JavaScriptプログラマー(JSer)がSwiftデビューして、ただ作りたいアプリを作ってみたシリーズ第22回目です。

前回はMacのデフォルトでインストールされているプレビューアプリを使用して画像を編集する方法についてでした、今回もツールの紹介でxcodeでのデバッグについて少しだけTips(?)の紹介です。

iOSデベロッパーにとっては当然の機能だと思いますが、今回初めてxcodeで開発をしてみて初心者がデバッグ時に使った機能として「lldb」と「NSData型のバイナリをStringに変換してconsoleに表示」する方法です。

lldbコマンド

javascriptで言うブラウザのデバッガのconsoleでプログラムのブレークポイントで止めた時点のスコープで式を実行できる機能です。

以下のサイトに紹介されているように、いろいろ機能はあるようですが今回は基本的な使い方を紹介します。

Xcode5でLLDBデバッガコマンドを使ってみる
http://d.hatena.ne.jp/tanaponchikidun/20120923/1348388081

例えば、以下のようにブレークポイントを設定して、その時にxcodeの下の部分の右側にある(lldb)というところで、そのときのスコープで何かプログラムを実行することができます。

スクリーンショット 2015-03-22 21.42.43

以下のように実行結果が表示されます。

スクリーンショット 2015-03-22 21.44.23

上記はprintしているだけのつまらない例ですが、ブレークポイントで止めているときの環境で実際にインスタンスの変数に値を代入して実行することもできます。通常起きない値を途中でセットして動作を確認するときなんかに非常にお手軽にできますね。

NSData型のバイナリをStringに変換してconsoleに表示

TwitterのAPIなどを叩いた際にresponseがバイナリでNSDataの型で返ってくるなんてことがあります。
例えば、以下のコードがAPIを叩いた結果をハンドリングしているところです。

スクリーンショット 2015-03-22 21.40.16

ここで、変数を確認してみても、ただバイト数が表示されるだけで中身がよくわかりません。

スクリーンショット 2015-03-22 21.40.03

jsonに変換したらしたで、中身をそれぞれ追っていくのが結構面倒です。そこでレスポンスがJSONであることはわかっているので、print時にstringに変換してみましょう。(上記の画像のコードに既に出ていますが)

println(NSString(data: data, encoding: NSUTF8StringEncoding))

上記のようにdata型からstringに変換しているだけですが…。きちんと文字列でJSONが表示されました。

スクリーンショット 2015-03-22 21.40.51

もちろんlldb使っても出力できます。stringに変換して見るという当たり前のことですが、初めてswiftでjsonデータを扱ってデバッグするときに戸惑ったことがあったので紹介しました。

以上、今回はxcodeのデバッグ機能についてほんの少しだけ紹介しました。次回はついにSubmissionについてです!