2017-04-12 20 views
1

私が使用しているサードパーティ製のバイナリライブラリの1つに、実行時に(個人情報が漏れる)不都合なNSLogというステートメントがあります。フレームワークの開発者はこの行を変更したくないので、私は選択肢がありません(バイナリパッチはオプションでも、プロバイダの切り替えもありません)。iOSフレームワークのシンボルを無効にする

私自身のNSLogシンボルを定義して、不要なロギングをフィルタリングし、他のロギングコールを元のNSLogに委譲することはできますか? Appleがコアフレームワークのシンボルを無効にするアプリケーションを拒否しますか?

+1

はい、システム1と同じ定義を使用できます。 NSLogは可変引数関数であるため、オーバーライドする実装でNSLogvのようなものが必要になるでしょう。フレームワークはあなたのアプリのバイナリにリンクされたdylibかスタティックライブラリですか? NSLogのオーバーライドは後者の場合にのみ有効です。最後の手段として、NSLogを完全に沈黙させることができますhttp://stackoverflow.com/a/12611692/5329717 –

+0

@ Kamil.Sなぜコメントしますか?もう少し情報を追加してください。コードサンプルが望ましいです。これはすばらしい答えのようです。 – Losiowaty

答えて

2

はいです。このコードを任意の.mファイルに入れることができますが、私はAppDelegateを推奨します。

// Objective-C code 
void NSLog(NSString *format, ...) { 

    //You'll probably want some logic here to determine the issuer of NSLog 
    //and silence it(aka return) if necessary 

    va_list args; 
    va_start(args, format); 
    NSLogv(format, args); 
    va_end(args); 
} 

NSLogのオーバーライドは、フレームワークがdylibでない場合にのみ有効です。最後の手段として、stderrをリダイレクトすることによってNSLogを完全に沈黙させることができます。stackoverflow.com/a/12611692/5329717

関連する問題