2016-08-28 16 views
2

Xcodeを使用してiOSアプリケーションを開発するときに、NSLog呼び出しを使用してデバッグ用の情報をコンソールに書き込むことができます。 Xamarin.iOSでは、Console.WriteLineでも同じことができます。Xamarin.iOSリリースビルドのConsole.WriteLine呼び出しはどうなりますか?

デバッガが接続されていないアプリのリリースビルドを実行している場合、これらの呼び出しは意味がありません。だから私はプリプロセッサディレクティブでそれらを除外することを考えました:

#if DEBUG 
Console.WriteLine("foo"); 
#endif 

リリースビルドにも呼び出しが存在しないようにします。私はこれがマイクロ最適化かもしれないことを感謝します - しかし、私はXamairnが既にこれをして、これを不要にしているのか不思議です。

+0

時々Console.WriteLineを "Xamarin.iOSでは、同じことはConsole.WriteLineをして行うことができます" NSLogを呼び出します。時には(あなたがデバッガの下で実行しているときのように)Console.WriteLineは何か他のことをします。 NSLogとConsole.WriteLineが同じであると考えると、最終的には痛みを引き起こします。 –

答えて

4

Console出力はiOSリリースビルドでは削除されません。

FYI:XcodeはObj-C/Swiftの「リリース」コードからNSLogまたはprintを自動的に削除しません。あなたは、あなたの質問に表示されて

  • DEBUGプリプロセッサ:(あなたは一般的にそれらのすべてを削除するために単一のグローバルプリプロセッサマクロを定義し、必要であれば...)

    あなたのオプションは含めて...多くのです。

  • 使用System.Diagnostic.Debug.WriteLine:。

デバッグへの呼び出しは、*により、[条件( "DEBUG")]属性が適用されることにコンパイラによって削除されます。/NOP/WriteLine

をリダイレクト

  • それ

  • 使用Fodystdout作家のラッパーと[Conditional("DEBUG")]として独自の「ロガー」クラスを作成し、削除するアセンブリを再織り

    • これを実行すると、内部ログと、クラッシュまたはユーザーのstatリクエストでコールをリダイレクトし、このログをクラッシュレポートサーバーに転送します。
  • など、.....

参考:XamarinのNSLogWriterヘルパークラス

関連する問題