iOSアプリケーション開発で必ず使うと行っても過言ではない関数のひとつにNSLog関数があります。(printf関数のように)変数の値や実行されているメソッド名、ファイル名をコンソールに出力してデバッグに利用します。
Xamarin.iOSでログを出力させてみましょう。ここでは、Xcode上でUIButtonを2つ配置しました。それぞれ、buttonLog、buttonDebugに接続しています。
上のボタンをタップするとoutputLog1メソッドが実行されて、下のボタンをタップするとoutputLog2メソッドが実行されます。
|cs| public override void ViewDidLoad () { base.ViewDidLoad ();
buttonLog.TouchUpInside += (object sender, EventArgs e) => outputLog1();
buttonDebug.TouchUpInside += (object sender, EventArgs e) => outputLog2();
} ||<
**Console.WriteLineメソッドを使ってログを出力する
変数をコンソールへ出力します。英数字のみの文字列、日本語の文字列、int型の数字、float型の数字を順番に出力します。コンソールへ出力するにはConsoleクラスを使用します。
|cs| private void outputLog1() { Console.WriteLine("called outputLog1.");
var strValue1 = "I'm ch3cooh";
Console.WriteLine(strValue1);
var strValue2 = "酢酸だよー ";
Console.WriteLine(strValue2);
var intValue = 393;
Console.WriteLine(intValue);
var floatValue = 393.339;
Console.WriteLine(floatValue);
} ||<
現在(Xamarin Studio 4.0.2)、Mac版のXamarin Studioでは日本語入力が出来ませんが、別のエディタで文字を打ってコピペした日本語を出力したところ、コンソールには下図のようにきちんと日本語も出力されました。
**Debug.WriteLineメソッドを使ってログを出力する
ログを出力する用途は、開発者がデバッグ目的で使用するケースが主だと思います。
Consoleクラスで出力すると、通常のWindowsアプリケーションと同じようにReleaseビルドでもログが出力されてしまいます。ログを沢山出力しすぎると、アプリケーションのパフォーマンスに影響が出てしまいますので、Debugビルドのみでログを出力させるクラスとして、System.Diagnostics名前空間にDebugクラスが用意されています。ここではDebugクラスを利用してログを出力してみましょう。
前述したConsole.WriteLineメソッドを使った場合との違いは、クラス名が「Console」であるか「Debug」であるかの違いです。要件によって適切に使い分けて頂ければと思います。
|cs| private void outputLog2() { Console.WriteLine("called outputLog2.");
var strValue1 = "I'm ch3cooh";
Debug.WriteLine(strValue1);
var strValue2 = "酢酸だよー ";
Debug.WriteLine(strValue2);
var intValue = 393;
Debug.WriteLine(intValue);
var floatValue = 393.339;
Debug.WriteLine(floatValue);
} ||<
Debugビルドの場合は、下図のように出力されます。outputLog1とoutputLog2のログが両方とも出力されているのがわかります。
Releaseビルドの場合は、下図のように出力されます。こちらは、outputLog1のログのみが出力されているのがわかります。
Releaseビルド時も出力させたいログにはConsoleクラスを使うと良いでしょう。
**サンプルプロジェクト
サンプルプロジェクトをGitHubで公開しています。
- 関連記事
Xamarin.iOSを使ってアプリ開発する際に逆引きとしてお使いください。