iPhoneアプリで長い間作業した後、コードがかなり汚れていて、呼び出されない、またはまったく役に立たない#importメソッドとメソッドがいくつか含まれていることに気付きました。
これらの役に立たないコード行を検出するコンパイラ指令または方法があるかどうかを知りたいです。Xcodeにはこれを検出するためのツールがありますか?
iPhoneアプリで長い間作業した後、コードがかなり汚れていて、呼び出されない、またはまったく役に立たない#importメソッドとメソッドがいくつか含まれていることに気付きました。
これらの役に立たないコード行を検出するコンパイラ指令または方法があるかどうかを知りたいです。Xcodeにはこれを検出するためのツールがありますか?
Xcode では、未使用のコードのいくつかのタイプを警告する特定のコンパイラ警告の設定を (チェック解除) することができます。(ソース リストでプロジェクトを選択し、[ファイル] > [情報を見る] を選択し、[ビルド] タブを選択します。) 以下に、興味深いと思われる (Clang と GCC 4.2 で表示される) いくつかを示します。
未使用のインポートを検出するためのオプションはありませんが、それは少し簡単です。ローテクなアプローチは、コンパイル エラー/警告が表示されるまで import ステートメントをコメント アウトすることです。
メッセージは動的にディスパッチされるため、使用されていない Objective-C メソッドは、使用されていない C 関数よりもはるかに検出が困難です。警告またはエラーは潜在的な問題があることを示しますが、警告またはエラーがないからといって実行時エラーが発生しないという保証はありません。
編集: (潜在的に) 未使用のメソッドを検出する別の良い方法は、実際の実行からコード カバレッジを調べることです。これは通常、自動化された単体テストと並行して行われますが、そうである必要はありません。
このブログ投稿は、Xcode を使用した単体テストとコード カバレッジの適切な紹介です。(ちなみに、GCC によって生成されたコードでのみ機能します)のセクションでgcov
は、実行頻度を記録できるインストルメント化されたコードを Xcode でビルドする方法について説明します。インストルメント化されたアプリのビルドをシミュレーターで試してから gcov を実行すると、 CoverStory (かなり単純な GUI) やlcov
(HTML レポートを作成する Perl スクリプト) などのツールを使用して、どのコードが実行されたかを確認できます。.
CHDataStructures.frameworkgcov
にandlcov
を使用し、各 SVN コミット後にカバレッジ レポートを自動生成します。繰り返しになりますが、実行されたカバレッジを、どのコードが "デッド" であるかの決定的な尺度として扱うのは賢明ではありませんが、さらに調査できるメソッドを特定するのに役立つことは確かです。
最後に、デッド コードを削除しようとしているので、この SO の質問も興味深いと思うと思います。
Appcodeには、未使用のインポートとコードを見つけるコード検査機能があります。
いくつかの自家製 Ruby コードを使用しており、現在は fui と呼ばれる gem に抽出されています: https://github.com/dblock/fui
私は最近、未使用の (または重複した)#import
ステートメントを見つけるスクリプトを書きました: https://gist.github.com/Orangenhain/7691314
#import
スクリプトは ObjC .m ファイルを取得し、各行を順番にコメントアウトして、プロジェクトがまだコンパイルされるかどうかを確認します。BUILD_DIR と BUILD_CMD を変更する必要があります。
コマンドを使用してスクリプトを複数のファイルで実行する場合は、それらすべてのファイルを実際に使用find
する BUILD_CMD を使用してください (そうしないと、未使用の import ステートメントが多数含まれるファイルが表示されます)。
AppCode に同様の機能があることを知らずにこれを書きましたが、AppCode をテストしたところ、このスクリプトほど完全ではありませんでした (ただし、[プロジェクト全体で] はるかに高速でした)。
Xcode Analyzer を使用して、その問題やその他の問題を見つけることができます。
http://help.apple.com/xcode/mac/8.0/#/devb7babe820
また、プロジェクトとターゲットのビルドに移動して、ビルド設定の下に変更警告設定を追加することもできます。このガイドを参照してください。
http://oleb.net/blog/2013/04/compiler-warnings-for-objective-c-developers/
最近、大きなプロジェクトを Carbon から Cocoa に変更しました。最終的には、使用されなくなった孤立したファイルがかなりありました。基本的にこれを行うスクリプトを作成しました。
ソースがすべて subversion にチェックインされていることを確認します (つまり、クリーンです)。現在、エラーなしでビルドされていることを確認します (つまり、xcodebuild は 0 ステータスを返します)。ソースとヘッダー ファイルが含まれていない場合は、ビルドを試みます。失敗した場合はファイルを元に戻します。それ以外の場合は空のままにします。
これを実行した後、空のファイルをすべて元に戻して削除し、コンパイルしてから、エラーのあるすべての #imports を削除します。
また、.xib または .sdef ファイルから参照されているファイルを避ける必要があること、および他の動的リンクのケースが存在する可能性があることも追加する必要がありますが、削除できるものについてはまだ良いリードを与えることができます.
同じ手法を使用して、削除できる #import を確認できます。ファイルを切り詰める代わりに、ファイル内の各 #import を順番に削除し、ビルドが失敗するかどうかを確認します。