日々精進

新しく学んだことを書き留めていきます

iOSアプリのBuild Settingsのいくつかの項目について調べてみた

項目が多いので調べるの結構しんどい。。


・Debug Information Format
 dSYMを生成するかどうか。本番リリースのみYESにすることでビルド時間を短く出来る。
 詳細:Spotify: iOSのビルド作業時間を短縮する - ワザノバ | wazanova


・generate profiling code
 Profile用コードを生成する。
 SubmitするアプリはNOにすること。
 詳細:https://developer.apple.com/library/mac/documentation/performance/conceptual/CodeFootprint/Articles/ImprovingLocality.html


・Validate Built Product
 AppStoreにSubmitするときにアプリを検証するかどうかの設定。
 SubmitするアプリはYESにすること。
 詳細:More on Validate Built Product - Use Your Loaf


・Strip Debug Symbols During Copy
 アプリインストール時にDebug Symbolファイルを一緒にインストールするかどうか。
 Debug Symbolファイルを一緒にインストールすると、クラッシュレポートの中の
 スタックトレースがDesymbolizeできる(つまり、スタックトレースがアドレスの羅列になっているのをメソッド名に変換できる)
 詳細:clang - Xcode: Should I Strip Debug Symbols During Copy? - Stack Overflow


・other linker flags
 -ObjC -all_loadを設定すると、静的ライブラリに含まれるすべてのオブジェクトファイルをロードする。
 静的ライブラリを追加してビルドした時にエラーが出た場合に設定する。
 詳細:A-Liaison BLOG: -ObjC とか -all_load って何をやってるのか調べてみた


・Always Search User Paths
 YESにするとヘッダが見つからないビルドエラーが直ることがある
 詳細:Tonny Xu: include "header.h" と include <header.h> とXcodeの落とし穴


・Generate Position-Dependent Code
 YESになっているとセキュリティ的に問題があり、Appleの審査に落ちるので基本的にNOで。
 詳細:新審査基準、PIE Binary とは


・Optimization Level
 最適化レベルが高いとデバッグ時に変数の中身が見られなくなるので、
 AppStore申請用以外はNoneにすること。


・Other C Flags
 -DNS_BLOCK_ASSERTIONS=1を設定すると、
 NSAssertやNSLogが無効になる。
 AppStore申請用やパフォーマンス測定用アプリに設定する。
 詳細:NSAssertやNSLogを無効にする:-DNS_BLOCK_ASSERTIONS=1とNS_BLOCK_ASSERTIONS - satoko's blog - s21g


・Enable Modules (C and Objective-C)
 @importが使えるようになる。
 これは常にYESにする。
 詳細:Introduction to Objective-C Modules | Stone of ARC


・Enable Foundation Assertions
 NOにすると、NSAssertが無効になる。
 AppStore申請用アプリはNOにする。
 詳細:iphone - NS_BLOCK_ASSERTIONS in Objective-C - Stack Overflow