Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

tokoromのその他の日記

2009-12-03NSLogとNSAssertをリリース時に無効化する

NSLogとNSAssertをリリース時に無効化する

02:27 | はてなブックマーク -  NSLogとNSAssertをリリース時に無効化する - iPhoneアプリ開発まっしぐら★

デバッグ時に有用なNSLogNSAssertですが、リリース時には自動で無効化して綺麗にしておきたいものです。

これらが残っているだけで無駄にモジュールサイズが増えますし(文字列定数分のサイズは馬鹿にならない)。

ただ、だからといってNSLogにDebugLogなどの別名を付けて、それをプリプロセッサで無効化するというのもいまいちな気がします。できれば、NSLogはNSLogとして使いたいところです。


NSAssertをリリース用ビルド時に無効化

NSAssertはNS_BLOCK_ASSERTIONSが定義されていると無効化されます。そのため、リリース用のプロジェクト(ターゲット)の情報のbuildのところでOTHER_CFLAGSというキーで「-DNS_BLOCK_ASSERTIONS=1」を加えてやれば、リリース用ビルド時にNSAssertが抹消されてからコンパイルされるようになります。

f:id:tokorom:20091203185059p:image

※情報元:http://romly.com/archives/2009/07/block_nsassert.html


NSLogをNSLogとして記述し、かつリリース用ビルド時に無効化

ここでは、簡易的に上記のNSAssertのときに使ったNS_BLOCK_ASSERTIONSの定義をそのまま使ってしまいます。 NS_BLOCK_ASSERTIONS が定義されているときをリリース用ビルド時とみなし、全ソースから参照するヘッダー(プリコンパイル済みヘッダー等)で以下のようなコードを記述してNSLogを切り替えるようにします。

#if !defined(NS_BLOCK_ASSERTIONS)

#if !defined(NSLog)
#define NSLog( m, args... ) NSLog( m, ##args )
#endif

#else

#if !defined(NSLog)
#define NSLog( m, args... )
#endif

#endif

これにより、リリース用ビルド時にNSLogの記述が無効化された状態でコンパイルされます。

※2010/4/21 追記

Snow Leopard にバージョンアップしたら↑のコードがWarningになるケースがあったので、Snow Leopard対応版についてコチラに追記させていただきました。

EllenEllen2011/05/15 00:33What a joy to find someone else who tihkns this way.

wmqbwpwmqbwp2011/05/15 12:27u7M14C <a href="http://xnyjfnjlzqol.com/">xnyjfnjlzqol</a>

vetwfcxcrvetwfcxcr2011/05/24 22:15tMLm73 <a href="http://zpjjwmcdkfez.com/">zpjjwmcdkfez</a>

tlkvncppvfctlkvncppvfc2011/05/30 01:13NQUP1l , [url=http://tuuvsxffpdkd.com/]tuuvsxffpdkd[/url], [link=http://cxsrehaereug.com/]cxsrehaereug[/link], http://gflsbabibsmc.com/