Xcodeプロジェクトにあるコードの行数を調べる方法は?


149

Xcodeプロジェクトに含まれるコードの行数を確認する方法はありますか?私は、このような情報を管理上の測定や従業員のベンチマークの目的で使用しないことを約束します。;)


行が必要な場合は、この回答を使用できます:stackoverflow.com/questions/5901758/…しかし、スペースが含まれています
GeneCode

回答:


126

CLOCをチェックしてください

clocは、多くのプログラミング言語のソースコードの空白行、コメント行、および物理行をカウントします。

レガシービルドはSourceForgeにアーカイブされています。)


11
CLOCはHomebrewから入手できます。コマンドラインでの使いやすさがすっきりしました。
avelis 2013

1
CLOCを確認することで、自分の生産性を知ることができます。
bobobobo 2013年

上記のリンクを使用して、 '。/ cloc-1.56.pl' permバージョンのclocツールをダウンロードします。'chmod u + x cloc-1.56.pl'コマンドを使用して、cloc-1.56.plファイルの実行権限を必ず有効にしてください。ソースコードがディレクトリ「project_code」にある場合は、次のコマンドを実行するだけです。
JZ。

233

私はこれが浮いているのを見て、自分で使います:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

2
必要な名前にスペースが含まれるサブディレクトリを処理するには:find。"(" -name " .m" -or -name " .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
Matt__C

2
このブログの記事は助けることがあります。allara.blogspot.co.uk/2010/12/...
エリックBrotto

12
私たちはSOに回答を投稿します。同じ回答を提供するブログエントリへのリンクではありません。
ジョシュアノッツィ

6
.mと.mmのテストに*が欠落しているように見えます(編集:SOは、先行するスラッシュなしでそれらをレンダリングしていないようです)。"(" -name "* .m" -or -name "* .mm" -or -name "* .cpp" ")" -print0 | xargs -0 wc -l
bladnman 2013

2
Swiftユーザーへの注意-別の「or」をファイル拡張子.swiftで置き換えるか追加してください
Byron Coetsee

79

私はCLOC前述のようにNathan Kinsinger使用しており、かなり使いやすいです。これは、プロジェクトディレクトリから追加して実行できるPERLスクリプトです。

PERLはすでにMac OSの一部であり、この方法でスクリプトを呼び出して、記述した行数を確認できます。

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

これは私がそのようなコマンドから得た出力の例です:

   176 text files.
   176 unique files.                                          
     4 files ignored.

http://cloc.sourceforge.net v 1.56  T=2.0 s (86.0 files/s, 10838.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     80           3848           1876          11844
C/C++ Header                    92            980           1716           1412
-------------------------------------------------------------------------------
SUM:                           172           4828           3592          13256
-------------------------------------------------------------------------------

4
いいね!私は自分の答えよりもこれが好きです。:-)
Joshua Nozzi 2015年

1
最初にスクリプトをダウンロードする必要がある場合があります。次に、そのスクリプトがあるディレクトリに移動し、ダウンロードしたファイル名を使用してコマンドを実行します。
15年

cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAreでなければなりません。上記のようにではなく、最初からperlをインストールする場合は、必ず現在のperlバージョンを入力してください(私のバージョンは5.30.1でした。基本的にはcloc perl-5.30.1.plです。)
ゴランシェイ

1
最後に一つ、私はそのいずれかのチェックアウトのようにも第一の時間のためにそれを実行しているときに登場し、エラーごとにスパン武を実行する必要がありました
ゴランシェイ

50

Terminal.appを開き、プロジェクトのルートディレクトリに移動して、次のコマンドを実行します。

Swiftの場合のみ:

find . \( -iname \*.swift \) -exec wc -l '{}' \+

Obj-Cの場合のみ:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+

Obj-C + Swiftの場合:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+

Obj-C + Swift + C + C ++の場合:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+

ターミナルの簡単なヒント:
LS:リストディレクトリの内容
CD:ディレクトリ変更
自動補完するために押してタブ
のスペースの前に「\」バックスラッシュを置くことを忘れないでください
あなたはフレームワークからのコード数を取り除くので、私はメインのプロジェクトから一つ下のフォルダに行くことをお勧め


44

ターミナルで、プロジェクトディレクトリに移動して実行します。

find . -type f -print0 | xargs -0 cat | wc -l

特定のファイルタイプのみが必要な場合は、次のようなことを試してください

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l

いいですが、コメントと空白行が含まれているため、要求されたとおりではありません。LOCメジャーは、コードの書式設定スタイルからできるだけ独立している必要があります。したがって、ファイル内の論理パーツ間の空白行やコメントの束は、合計にカウントされません。
Basim 14

34

Xcode Statisticianをチェックしてください。それはまさにあなたが望んでいることです。また、他の興味深い統計情報も提供されるので、時々楽しむ価値があります。

グループでは検索されますが、実際のフォルダ内では検索されないことに注意してください。おそらく、実際のフォルダーを使用していないので、うまく機能します。フォルダを使用している場合は、各フォルダでカウントを行い、それらを一緒に追加する必要があります。

注: 2012年6月の時点で、これはXcodeの最新バージョンでは正しく動作しないようです。


Objective-CとC / C ++を混在させる人に向けて:* .cまたは* .cppファイルはカウントされません。
Emile Cormier

3
この時点では、Xcode Statisicianはプロジェクトのサブディレクトリを処理しないことに注意してください。
Matt__C

@Matt__Cああ、それゆえ「それは実際のフォルダの内部を見ないことに注意してください」。残念ながら、かなり手作業です(そして、再帰的なフォルダー検索はコーディングが簡単です)が、実行可能です。
マシューフレデリック

1
LionのX-Code 4.2プロジェクトではまったく機能しないようです(少なくとも、私のプロジェクトの統計情報はありません)
BadPirate '31年

ああ、残念、今は時代遅れかもしれません。
マシューフレデリック

31
  1. オープンターミナル
  2. プロジェクトに移動する
  3. プロジェクト内で次のコマンドを実行します。

    find . -path ./Pods -prune -o -name "*.swift" -print0 ! -name "/Pods" | xargs -0 wc -l

    または:

    find . -path ./Pods -prune -o -name "*[hm]" -print0 ! -name "/Pods" | xargs -0 wc -l

(*合計数からポッドファイル数を除く)


16

ターミナルでプロジェクトのディレクトリに移動して、次のように入力します。

find . "(" -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.hpp" -or -name "*.cpp"  -or  -name "*.c" -or -name "*.cc" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

これにより、プロジェクトの詳細と、各ファイルおよびプロジェクト全体の合計行数がわかります。


Swiftはすべてを削除して.swiftを追加しましたfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne

@WCByrneまたは、元のコマンドに.swiftを追加することもできます
RileyE

確かに。ほとんどのライブラリと借用コードはまだ.h&.mにあるので、カウントを私が書いたものだけに減らすのに役立ちました。
WCByrne、2015年

1
もちろんです。誰もが独自のソリューションを持っています。また、独自の接頭辞(例: "RE")がある場合は、それを行うこともできますfind . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE

9

Nozziのバージョンは私には機能しませんが、これは次のバージョンです。

find . -type f -print0 | xargs -0 cat | wc -l

1
短く簡潔ですが、ソースコード以外のファイルの行もカウントされます。したがって、実際にはファイル名拡張子のフィルタリングがここでは重要です。OPは「ソースコード行」をカウントしたいと考えていました。テキスト行はありません。
Motti Shneor

7

すばやく簡単な方法:

正規表現検索を使用します(ナビゲーターを検索、検索>正規表現を選択)。

。\ n

Xcodeの検索範囲で便利に機能し、カウントしたい種類の行に簡単にカスタマイズできます;)


いいですね!最速ではありませんが、開発環境を離れることはありません。私はそれが好きです。おそらく、より良い正規表現は、空白行やそのようなものを数えることを避けることができます。
Motti Shneor

単純にする。私はそれが好きです。
devios1

6

SLOCCountはMacPortsからインストールできます。または、より大まかに、wc -lを使用できます。


CLOCはSCLOCountに基づいているので、CLOCを使用する方がより良いアプローチだと思います
tiguero

4
「開発にかかる推定総コスト= $ 1,934,715」。これは私の日を作りました!
Valeriy Van 2014

4

私はxcodeに精通していませんが、ディレクトリツリー内の特定のファイルすべてから行数をカウントする必要がある場合は、次のコマンドを使用できます。

find .... match of all those files ... -exec wc -l {} +

Joshua Nozziの回答に従って、GNUでそのようなファイルの正規表現は次のようになります。

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -exec wc -l {} +

あるいは

find -regex ".*\.\(m\|mm\|cpp\|swift\)$" -exec wc -l {} +

これは、いずれかで終わるすべてのファイルにマッチする正規表現を使用して.m.mm.cppまたは.swift。これらの式の詳細については、ファイル検索で正規表現を使用する方法を参照してください。

Mac OSのfindを使用している場合は、Motti Shneorのコメントで説明されているように、少し異なるアプローチが必要です。

find -E . -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l {} +

どちらも次の形式で出力を提供します。

234 ./file1
456 ./file2
690 total

したがって、このように維持するか、パイプtail -1(つまりfind ... | tail -1)にパイプするだけで、最後の行が合計になります。


まあ--- find -regex "。* \。etcはMacOSでは動作しません-違法なオプションだと主張しています--rどんな種類のfindを使っていますか?
Motti Shneor '29

@MottiShneorあなたはおそらく、MacOS で彼らが話している他の人たちについてこの質問をチェックしたいと思うでしょう\|--regexGNU find(私が使用するもの)とMacOSの両方で有効です。
fedorqui「SO害をやめる」

うーん、ダメ。MacOSで、拡張正規表現には-Eを見つけなければならないことがわかりました。上記の推奨コマンドを入手可能なOS-Xにコピーして、自分の目で確かめてください。MacOS-Xでman findを実行すると、そのためには-Eを実行する必要があることがわかります。
Motti Shneor

最後に、OSXで検索するパスも指定する必要があります。したがって、機能するバリエーションは次のようになります。find -E。-regex "。* \。([hmc] | mm | cp + | swift | pch)$" -exec wc -l {} +
Motti Shneor 2018年

@MottiShneor MacOSでアプローチを提供してくれてありがとう。その答えを更新しました。
fedorqui 'SO stop harming'

2

繰り返し申し訳ありません。それが私見の最も簡単な方法です。

  1. 端子タイプ

find /users/<#username#>/documents/folderWithProject/ -type f -exec cp {} /users/<#username#>/documents/folderWithProject/newFolder/ \;

これにより、すべてのファイルがプロジェクトフォルダからにコピーされますnewFolder

  1. Xcode Statisticianをダウンロードして使用するnewFolder ここに画像の説明を入力してください

このツールはすべてを見つけるのではなく、実際には現在のフォルダー(サブフォルダーでさえも)のみを探すように見えます
Daniel

最初のステップは、プロジェクトフォルダーから1つのフォルダーにすべてのファイルをコピーすることです。
Nik Kov 2016年

たまたまその「XcodeStatistican」はオープンソースですか?私はそれをすぐにあらゆるプロジェクト構造で機能させるでしょう...ディレクトリとファイルのイテレータはそれほど難しくありません。また、ここからのダウンロードは、特定の開発者によって署名されていないため、マルウェアである可能性があります:/
Motti Shneor '29

1

line-counter良い選択肢です。CLOCよりも軽量で、他のコマンドよりもはるかに強力で使いやすくなっています。

簡単な概要

これがツールの入手方法です

$ pip install line-counter

lineコマンドを使用して、現在のディレクトリの下のファイル数と行数を取得します(再帰的に)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

詳細が必要な場合は、を使用してくださいline -d

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

このツールの最も優れた点は、構成ファイルのような.gitignoreを追加できることです。「.gitignore」で行うように、カウントするファイルの種類を選択または無視するルールを設定できます。はい、このツールは、自分の行数を簡単に把握できるように考案されたものです。

詳細と使用法はこちら:https : //github.com/MorganZhang100/line-counter

私はこのシンプルなツールの作者です。それが誰かを助けることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.