답변:
Xcode를 사용하면 일부 유형의 사용되지 않는 코드를 경고 할 수있는 특정 컴파일러 경고에 대한 설정을 확인 (취소) 할 수 있습니다. (소스 목록에서 프로젝트를 선택하고 파일> 정보 가져 오기를 선택한 다음 빌드 탭을 선택합니다.) 다음은 관심이있을 수있는 몇 가지 (Clang 및 GCC 4.2에 표시됨)입니다.
사용하지 않는 가져 오기를 감지하는 옵션은 없지만 조금 더 간단합니다. 저 기술 접근 방식은 컴파일 오류 / 경고를받을 때까지 가져 오기 문을 주석 처리하는 것입니다.
사용하지 않는 Objective-C 메서드는 메시지가 동적으로 전달되기 때문에 사용하지 않는 C 함수보다 감지하기가 훨씬 더 어렵습니다. 경고 또는 오류는 잠재적 인 문제가 있음을 알려줄 수 있지만 문제가 없다고해서 런타임 오류가 발생하지 않는다는 보장은 없습니다.
편집 : (잠재적으로) 사용되지 않는 메서드를 감지하는 또 다른 좋은 방법은 실제 실행에서 코드 커버리지를 검사하는 것입니다. 이는 일반적으로 자동화 된 단위 테스트와 함께 수행되지만 반드시 그럴 필요는 없습니다.
이 블로그 게시물 은 Xcode를 사용한 단위 테스트 및 코드 커버리지에 대한 적절한 소개입니다. (그런데 gcov
GCC에 의해 생성 된 코드로만 작동하는) 섹션에서는 Xcode가 실행 된 빈도를 기록 할 수있는 계측 된 코드를 빌드하는 방법을 설명합니다. 시뮬레이터에서 회전을 위해 앱의 계측 된 빌드를 가져온 다음 gcov를 실행하면 CoverStory (상당히 단순한 GUI) 또는 lcov
(HTML 보고서를 생성하는 Perl 스크립트 ) 와 같은 도구를 사용하여 실행 된 코드를 확인할 수 있습니다. .
내가 사용 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 상태를 반환 함). 그런 다음 디렉토리의 각 소스 파일에 대해 비어 있습니다 (예 : 내용을 제거하고 길이를 자릅니다). 소스 및 헤더 파일에 대해 빌드를 시도하고 실패하면 파일을 되돌리고 그렇지 않으면 비워 둡니다.
이것을 실행 한 후 모든 빈 파일을 되 돌린 다음 삭제하고, 오류가있는 모든 #imports를 컴파일 한 다음 제거합니다.
또한 추가해야합니다. .xib 또는 .sdef 파일에서 참조되는 파일을 피해야하며 다른 동적 연결 사례가있을 수 있지만 삭제할 수있는 항목에 대한 좋은 리드를 제공 할 수 있습니다.
동일한 기술을 사용하여 제거 할 수있는 #import를 확인할 수 있습니다. 파일을 자르는 대신 파일에서 각 #import를 차례로 제거하고 빌드가 실패하는지 확인합니다.
id
하거나 런타임에 호출 할 선택기를 만들면 정적 분석기가 보장 할 수 없습니다. 코드가 실제로 사용되지 않는다는 것입니다. 여전히 필요한 코드가 제거되면 런타임 오류가 발생합니다. 내가 뭔가를 놓치고 있습니까?