Xcode 프로젝트에 몇 줄의 코드가 있는지 알아내는 방법?


149

Xcode 프로젝트에 몇 줄의 코드가 포함되어 있는지 확인할 수있는 방법이 있습니까? 나는 그러한 정보를 경영 측정 또는 직원 벤치마킹 목적으로 사용하지 않겠다고 약속합니다. ;)


줄을 원한다면 stackoverflow.com/questions/5901758 / ... 대답을 사용할 수 있지만 공백이 포함되어 있습니다.
GeneCode

답변:


126

CLOC을 확인하십시오 .

cloc는 많은 프로그래밍 언어에서 빈 줄, 주석 줄 및 소스 코드의 실제 줄을 계산합니다.

( 레거시 소스 포지 (SourceForge)에 보관 된 빌드 .)


11
CLOC는 Homebrew를 통해 제공됩니다. 명령 줄에서 사용하기 쉬워졌습니다.
avelis

1
나는 그 이름의 말장난을 좋아합니다. 그렇습니다. CLOC를 확인하여 얼마나 생산적 이었는지 말할 수 있습니다.
bobobobo

위 링크를 사용하여 './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"또는 -name " .mm"또는 -name "* .cpp" ")"-print0 | xargs -0 wc -l
Matt__C

2
이 블로그 게시물은 도움이 될 수 있습니다 : allara.blogspot.co.uk/2010/12/…
Eric Brotto

12
우리는 동일한 답변을 제공하는 블로그 항목에 대한 링크가 아니라 SO에 답변을 게시합니다.
Joshua Nozzi

6
그것은 .m 및 .mm 테스트에 *가 누락 된 것으로 보입니다 (편집 : SO가 선행 슬래시가없는 것을 렌더링하지 않는 것 같습니다) 위와 같이 추가 할 때까지 위의 작업은 작동하지 않았습니다 : find. "("-name "* .m"또는 -name "* .mm"또는 -name "* .cpp" ")"-print0 | xargs -0 wc -l
bladnman

2
Swift 사용자를위한 참고 사항 – 파일 확장자가 .swift 인 다른 'or'를 바꾸거나 추가하십시오
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

1
먼저 스크립트를 다운로드해야 할 수도 있습니다. 그런 다음 해당 스크립트가있는 디렉토리로 이동하여 다운로드 한 파일 이름으로 해당 명령을 실행하십시오.
prolfe

위와 같이 cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre이어야합니다. 처음부터 perl을 설치하는 경우 현재 perl 버전을 입력하십시오 (광산은 5.30.1이므로 기본적으로 cloc perl-5.30.1.pl ./)
골란 셰이

1
마지막으로 한가지, 그 하나 체크 아웃 그래서뿐만 아니라 1 시간 동안 그것을 실행시 나타나는 오류에 따라 스팬 무을 실행했다
골란 셰이

50

Terminal.app를 열고 프로젝트의 루트 디렉토리로 이동하여 다음 명령을 실행하십시오.

스위프트에만 해당 :

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 : 디렉토리 변경
자동 완성
을 위해 Tab 키를 누르십시오. 공백 앞에 "\"백 슬래시를 두어야합니다
. 메인 프로젝트에서 한 폴더 아래로 내려가 프레임 워크에서 코드 수를 제거하는 것이 좋습니다.


44

터미널에서 프로젝트 디렉토리로 변경하고 다음을 실행하십시오.

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

특정 파일 형식 만 원하면 다음과 같이 시도하십시오.

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

좋았지 만 주석과 빈 줄이 포함되어 있으므로 정확히 요구되는 것은 아닙니다. LOC 측정 값은 가능한 한 코드 서식 스타일과 무관해야하므로 파일의 논리 부분 사이에 빈 줄이나 주석이 합으로 계산되지 않아야합니다.
bassim

34

Xcode Statistician을 확인하십시오. 원하는 바를 정확하게 수행합니다. 또한 다른 흥미로운 통계를 제공하므로 재미있게 실행할 가치가 있습니다.

그룹으로 보이지만 실제 폴더 내부에는 보이지 않습니다. 실제 폴더를 사용하지 않아서 효과가 있습니다. 폴더를 사용하는 경우 각 폴더에서 카운트를 수행하고 함께 추가하면됩니다.

노트 : 2012 년 6 월 현재 최신 버전의 Xcode에서는 제대로 작동하지 않는 것 같습니다.


Objective-C와 C / C ++를 함께 사용하는 사람들을위한 것입니다. * .c 또는 * .cpp 파일은 포함하지 않습니다.
Emile Cormier 2012

3
Xcode Statisician은이 시점에서 프로젝트의 하위 디렉토리를 처리하지 않습니다.
Matt__C

@Matt__C Aye, 따라서 "실제 폴더 안에 보이지 않습니다". 불행히도 (그리고 재귀 폴더 검색은 코딩하기 쉽습니다) 상당히 수동 작업이지만 실행 가능합니다.
Matthew Frederick

1
Lion의 X-Code 4.2 프로젝트에서 전혀 작동하지 않는 것 같습니다 (적어도 내 프로젝트에 대한 통계는 제공하지 않음)
BadPirate

아, 부머, 지금 구식일지도 모른다.
Matthew Frederick

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를 추가했습니다find . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne

@WCByrne 또는, 원래 명령에 .swift를 추가 할 수도 있습니다
RileyE

과연. 대부분의 라이브러리와 빌린 코드는 여전히 .h & .m에 있기 때문에 내가 작성한 것으로 카운트를 줄이는 데 도움이되었습니다.
WCByrne

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

빠르고 쉬운 방법 :

정규식 검색을 사용하십시오 (탐색기 찾기, 찾기> 정규식 선택).

.\엔

Xcode 검색 범위와 편리하게 작동하며 계산하려는 행 유형에 맞게 쉽게 사용자 정의 할 수 있습니다.


이제 좋은 것입니다! 가장 빠르지는 않지만 개발 환경을 떠나지 않습니다. 나는 그것을 좋아한다. 아마도 더 나은 정규 표현식은 공백 줄과 그와 같은 것을 계산하지 않을 수 있습니다.
Motti Shneor

간단하게 유지하십시오. 나는 그것을 좋아한다.
devios1

6

MacPorts를 통해 SLOCCount 를 설치할 수 있습니다 . 또는 더 요컨대 wc -l을 사용할 수 있습니다.


CLOC는 SCLOCount를 기반으로하므로 CLOC를 사용하는 것이 더 좋은 방법이라고 생각합니다.
tiguero

4
"개발에 소요되는 총 예상 비용 = $ 1,934,715". 이것은 나의 하루를 만들었다!
Valeriy Van

4

xcode에 익숙하지는 않지만 디렉토리 트리 내의 모든 특정 파일에서 줄 수를 세는 것만 필요하면 다음 명령을 사용할 수 있습니다.

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

다음 여호수아 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 ". * \. 등이 MacOS에서 작동하지 않습니다.-불법 옵션이라고 주장합니다. --r 어떤 종류의 검색을 사용하고 있습니까?
Motti Shneor

@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

@MottiShneor MacOS의 접근 방식을 제공해 주셔서 감사합니다. 나는 그 대답을 업데이트했습니다.
fedorqui 'SO 중지 피해'

2

반복해서 죄송합니다. IMHO가 가장 쉬운 방법입니다.

  1. 터미널 타입

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

프로젝트 폴더의 모든 파일이로 복사됩니다 newFolder.

  1. Xcode Statistician을 다운로드 하여 사용하십시오newFolder 여기에 이미지 설명을 입력하십시오

이 도구는 모든 것을 찾지 못하며 실제로는 현재 폴더 (하위 폴더도 아님)에서만 보이는 것처럼 보입니다.
Daniel

첫 번째 단계는 모든 파일을 프로젝트 폴더에서 하나의 폴더로 복사하는 것입니다.
Nik Kov

"XcodeStatistican"오픈 소스입니까? 나는 모든 프로젝트 구조에서 즉시 작동하게 만들 것입니다 ... 디렉토리 및 파일 반복자는 그렇게 어렵지 않습니다. 또한-여기에서 다운로드-확인 된 개발자가 서명하지 않았으므로 맬웨어 일 수 있음 : /
Motti Shneor

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.