回答:
Xcodeを使用すると、特定の種類の未使用コードを警告する特定のコンパイラ警告の設定を(チェック解除)することができます。(ソースリストでプロジェクトを選択し、[ファイル]> [情報を見る]を選択してから、[ビルド]タブを選択します。)以下は、興味のあるものです(ClangおよびGCC 4.2の場合に表示されます)。
未使用のインポートを検出するためのオプションはありませんが、それは少し簡単です。ローテクなアプローチは、コンパイルエラー/警告が表示されるまでインポートステートメントをコメント化することです。
未使用のObjective-Cメソッドは、メッセージが動的にディスパッチされるため、未使用のC関数よりも検出がはるかに困難です。警告またはエラーは、潜在的な問題があることを示している可能性がありますが、それがなくてもランタイムエラーが発生しないことは保証されません。
編集:(潜在的に)未使用のメソッドを検出する別の良い方法は、実際の実行からコードカバレッジを調べることです。これは通常、自動化された単体テストと並行して行われますが、そうである必要はありません。
このブログ投稿は、Xcodeを使用した単体テストとコードカバレッジの適切な紹介です。gcov
(ちなみに、GCCによって生成されたコードでのみ機能する)セクションでは、Xcodeで、実行頻度を記録できるインストルメント済みコードを作成する方法について説明しています。アプリのインストルメント済みビルドをシミュレータでスピンしてからgcovを実行すると、CoverStory(かなり単純なGUI)またはlcov
(PerlスクリプトでHTMLレポートを作成)などのツールを使用して、どのコードが実行されたかを確認できます。
私が使用gcov
してlcov
のためにCHDataStructures.frameworkと自動生成カバレッジ・レポートの各SVNのコミット後。繰り返しになりますが、実行されたカバレッジをどのコードが「デッド」であるかの決定的な尺度として扱うことは賢明ではないことを覚えておいてください。
最後に、デッドコードを削除しようとしているので、このSOの質問も興味深いと思います。
Appcodeには、未使用のインポートとコードを検出するコード検査機能があります。
私たちはいくつかの自家製のRubyコードを使用してきましたが、今はfuiというgemに抽出されています:https : //github.com/dblock/fui
最近、未使用(または重複)の#import
ステートメントを見つけるスクリプトを作成しました。https://gist.github.com/Orangenhain/7691314
スクリプトはObjC .mファイルを受け取り、#import
各行を順番にコメント化し始め、プロジェクトがまだコンパイルされるかどうかを確認します。BUILD_DIRとBUILD_CMDを変更する必要があります。
あなたが使用している場合はfind
、複数のファイルの上にスクリプトの実行を許可するコマンドを、実際にそのBUILD_CMDを使用してください使用して、すべてのこれらのファイルを(または未使用のimport文のたくさんのファイルが表示されます)。
AppCodeに同様の機能があることを知らずに私はこれを書きましたが、AppCodeをテストしたときは、このスクリプトほど完全ではありませんでした(ただし[プロジェクト全体]の場合)。
以下のようpaddydubは言った、AppCodeは非常によくこれを行います。私は試しました、そしてそれは私にわずか10分かかりました:
に移動Code > Optimize Imports...
、または^ + ⌥ + O
これを行う方法を説明するビデオは次のとおりです。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ステータスを返します)。ソースとヘッダーファイル、ビルドを試み、失敗した場合はファイルを元に戻し、それ以外の場合は空のままにします。
これを実行した後、すべての空のファイルを元に戻して削除し、コンパイルして、エラーのあるすべての#importを削除します。
追加する必要があります。.xibまたは.sdefファイルから参照されるファイルは避ける必要があります。また、他の動的リンクのケースもあるかもしれませんが、それでも削除できるものについて十分なリードを与えることができます。
同じ手法を使用して、削除できる#importを確認できます。ファイルを切り捨てるのではなく、ファイル内の各#importを順番に削除して、ビルドが失敗するかどうかを確認します。
id
か、実行時に呼び出すセレクターを作成する場合、静的アナライザーは保証できませんコードが本当に使用されていないこと。それでも必要なコードが削除されると、そこにランタイムエラーが発生します。何か不足していますか?