リリースの iOS バイナリをビルドするときにコードラインで発生する NSAssert 呼び出しを無効にしたいのですが、それらが無効になっていることを確認したいと思います。それらが無効になっていることを確認するにはどうすればよいですか?
リリース ビルドで NSAssert 呼び出しを無効にするために、xcodebuild で実行しているコマンドライン リリース ビルドに NS_BLOCK_ASSERTIONS=1 (ここから) 定数を追加して、すべてのビルドを含むアプリケーションのビルド全体で NSAssert がブロックされるようにしました使用する静的ライブラリの。多数の静的ライブラリがあるため、各ライブラリのプロジェクト ファイルでこのフラグが設定されていることを確認するにはメンテナンスが多すぎるため、このグローバルなアプローチが推奨されます。次のようになります。
xcodebuild -target MyApp -configuration MyReleaseConfig -DNS_BLOCK_ASSERTIONS=1 build
次に、NSAssert への呼び出しが実際にブロックされていることを確認するために、ここで私が試みていることとアドバイスを求めています。結果のバイナリからシンボル テーブルをダンプし、NSAssert マクロが呼び出す実際のメソッドを grep しています。このような:
# Use 'nm' tool to dump symboltable into txt file
/Applications/Xcode.app/Contents/Developer/usr/bin/nm MyApp.app/MyApp > MyApp.symbols.txt
# Search symbols for NSAssertionHandler:
grep "NSAssertionHandler" ./MyApp.symbols.txt
# Output results:
RESULT=$?
if [ $RESULT -eq 0 ]
then
echo -e "** ASSERTION CHECKER FAILED: FOUND 1 OR MORE NSASSERT CALLS IN RELEASE BINARY **"
else
echo -e "** ASSERTION CHECKER SUCCEEDED: NO NSASSERT CALLS IN RELEASE BINARY **"
fi
問題は、シンボルに NSAssertionHandler が表示されていることです。
U _OBJC_CLASS_$_NSAssertionHandler
私はnm
間違って使用していると思われます。または、NSAsserts を使用するサードパーティ ライブラリとリンクしているためにこの記号が表示されるか、iOS API 自体が NSAsserts を使用しているため、検証手順が混乱する可能性があります。リリース ビルドでコードの NSAssert への呼び出しをすべてブロックしたいのですが、そうであることを確認するにはどうすればよいですか? 任意の提案をいただければ幸いです!