Swift(iOSアプリ)でprintと debugPrintとNSLog
iOSアプリを作っているときログ出力をするならprint|debugPrint|NSLogいずれかを使うけど、Releaseビルドではどれが出力されるのか確認したことが無かったので確認をした。
Objective-CでiOSアプリを作っているときNSLogの出力はReleaseビルドでもログ出力されることは確認していたのでよくあるifdefマクロで LOG(...)
のようにしていた。
実装
実装はXcodeでFile > New > Project... > AppでSwiftを使ったアプリ作成
ViewController.swiftの viewDidLoad()
に下記を追記
print(">>> this is test message from print")
print(">>> this is test message from debugPrint")
NSLog(">>> this is test message from NSLog")
ipaファイルの作成
あとは Archiveをして > Ad-Hoc ipaファイルを作成
インストール・検証
Apple Configurator.appを使って実機インストール
XcodeでDevice and Simulatorsウインドウを表示(コマンド+シフト+2)のサイドバーから端末を選択して Open Console
コンソールを開いたら該当の端末が選択されているのでウインドウ右上の「開始」ボタンでログ監視を開始してからiPhoneでアプリを起動、起動が完了したらログ監視を停止する。
ログは大量に流れてくるので不要なログが少なくなるようにした方がいい。
停止してからメッセージで検索をかけると、表示されたのはNSLogのものだけだった。
結論
NSLogの出力はReleaseビルドでも出力されるがprintとdebugPrintはログ出力されなかった。
XcodeのReleaseビルドでも出力される といった情報もあったが自分では確認できなかった。Qiitaの記事で参照とされていたMediumの記事を確認したところ、意訳すると「printやdebugPrintはReleaseビルドでもコンパイルで除外されないからprintのために変数を生成するのは非効率だよ(ログ出力については言及無し)」といった内容だと理解しています。