How to find out how many lines of code there are in an Xcode project?

XcodeCode Metrics

Xcode Problem Overview


Is there a way to determine how many lines of code an Xcode project contains? I promise not to use such information for managerial measurement or employee benchmarking purposes. ;)

Xcode Solutions


Solution 1 - Xcode

I see this floating around and use it myself:

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

Solution 2 - Xcode

Check out CLOC.

> cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.

(Legacy builds are archived on SourceForge.)

Solution 3 - Xcode

I have been using CLOC as mentioned by Nathan Kinsinger and it is fairly easy to use. It is a PERL script that you can add and run from your project directory.

PERL is already part of Mac OS and you can invoke the script this way to find out your number of lines you have written:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

This is an example of output i got from such command:

   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
-------------------------------------------------------------------------------

Solution 4 - Xcode

Open up Terminal.app, go into your project's root directory, and run this command:

For Swift only:

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

For Obj-C only:

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

For Obj-C + Swift:

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

For 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 '{}' \+

> Terminal quick tips:
> ls: list directory contents
> cd: change directory
> Press tab to autocomplete
> Remember to put "" backslash before spaces
> I suggest going one folder down from the main project so you get rid of code count from the frameworks

Solution 5 - Xcode

In terminal, change into the project directory and run:

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

If you want only certain file types, try something like

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

Solution 6 - Xcode

Check out Xcode Statistician, it does exactly what you want. It also provides other interesting statistics so is worth a run for fun now and then.

Note that it will not look inside real folders, though it will look in groups. Odds are you aren't using real folders so it'll work great. If you are using folders then you just have to do the count in each folder and add them together.

Note: As of June, 2012, it seems this does not work properly with the latest versions of Xcode.

Solution 7 - Xcode

  1. open terminal

  2. navigate to your project

  3. execute following command inside your project:

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

    Or:

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

(*Excluding pod files count from total count)

Solution 8 - Xcode

If you go to your project's directory in terminal and enter:

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

That will give you a project breakdown, as well as the line total for each file and the project as a whole.

Solution 9 - Xcode

Steps to implement CLOC library in Mac as below:

  1. Open Terminal.
  2. Install Homebrew by copying and pasting the below command in the Terminal (including double quotes).

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Enter system password if asked.

You will see the terminal screen as below.

Installing Homebrew

System will popup so many permissions, allow all the permissions

If everything goes fine, you will see terminal screen as below,

Homebrew installation successful

  1. Now its time to install CLOC using below command.

brew install cloc

  1. Navigate to the project directory and run either of the following commands.

cloc . --exclude-dir=Pods (to exclude pod files)

cloc . (including pod files)

If everything goes fine, it will display the number of lines of code as below,

CLOC Result

Solution 10 - Xcode

Nozzi's version doesn't work for me, but this one:

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

Solution 11 - Xcode

A quick & easy way:

Use a regex search (Find Navigator, choose Find > Regular Expression).

> .\n

Works conveniently with Xcode search scopes and you can easily customize it to whatever type of line you'd like to count ;).

Solution 12 - Xcode

You can install SLOCCount through MacPorts. Or, more crudely, you can use wc -l.

Solution 13 - Xcode

I am not familiar with xcode, but if all you need is to count the number of lines from all those specific files within a directory tree, you may use the following command:

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

Following Joshua Nozzi's answer, in GNU find the regular expression for such files would be like:

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

or even

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

this uses a regular expression to match all files ending in either .m, .mm, .cpp or .swift. You can see more information about those expressions in How to use regex in file find.

If you are working with Mac OS find, then you need a slightly different approach, as explained by Motti Shneor in comments:

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

Both will provide an output on the form of:

234 ./file1
456 ./file2
690 total

So you can either keep it like this or just pipe to tail -1 (that is, find ... | tail -1) so that you just get the last line being the total.

Solution 14 - Xcode

line-counter is a good alternative. It's lighter than CLOC and much more powerful and easier to use than other commands.

A quick overview

This is how you get the tool

$ pip install line-counter

Use line command to get the file count and line count under current directory (recursively)

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

If you want more detail, just use 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

And the best part of this tool is, you can add .gitignore like configure file to it. You can set up rules to select or ignore what kind of files to count just like what you do in '.gitignore'. Yes, this tool is just invented to make knowing how many lines I have easier.

More description and usage is here: https://github.com/MorganZhang100/line-counter

I'm the author of this simple tool. Hope it can help somebody.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaveView Question on Stackoverflow
Solution 1 - XcodeJoshua NozziView Answer on Stackoverflow
Solution 2 - XcodeNathan KinsingerView Answer on Stackoverflow
Solution 3 - XcodetigueroView Answer on Stackoverflow
Solution 4 - XcodeEsqarrouthView Answer on Stackoverflow
Solution 5 - XcodeAndrew McGregorView Answer on Stackoverflow
Solution 6 - XcodeMatthew FrederickView Answer on Stackoverflow
Solution 7 - XcodeShan ShafiqView Answer on Stackoverflow
Solution 8 - XcodeRileyEView Answer on Stackoverflow
Solution 9 - XcodeArshad ShaikView Answer on Stackoverflow
Solution 10 - XcodePascaliusView Answer on Stackoverflow
Solution 11 - XcodePatrick PijnappelView Answer on Stackoverflow
Solution 12 - XcodeanthonyView Answer on Stackoverflow
Solution 13 - XcodefedorquiView Answer on Stackoverflow
Solution 14 - XcodeMorgan ZhangView Answer on Stackoverflow