Snow Leopard로 업그레이드하면 Xcode도 3.2로 된다.
Xcode 3.2의 주요 신규 기능 중의 하나가 “Build and Analyze” 메뉴를 통해서 코드의 정적 분석 (Static Analysis)를 할 수 있다.
기존 Xcode에서는 Instruments로 동적 분석 (Dynamic Analysis)를 할 수 있었다.
정적분석은 앱을 수행하지 앟은 상태에서 코드 분석을 통해서 문제점을 리포팅 해주기 때문에 많은 이점이 있다. 특히 어플리케이션의 모든 시나리오를 수행하는 것은 불가능에 가까운 일이기 때문에 오히려 동적 분석으로 잡지 못하는 문제점도 정적 분석을 통해서 찾아낼 수 있다.
아무튼, 몇 일전 정의의 소 님이 Snow Leopard로 업글하셔서 원격으로 붙어서 현재 진행 중인 코드에 대해서 정적 분석을 해보니 4군데에서 문제점이 발견되었고 다음과 같이 두 가지 type이 보고되었다.
1. iPhone SDK 3.0에서 deprecated 된 method 사용을 지적
아래와 같이 UITableViewCell의 initWithFrame:reuseIdentifier을 사용하고 있었는데 deprecated 된 것이라고 지적했다.
(-_-; 현재는, 사실 사용해도 3.0에서 죽거나 문제가 발생하진 않는다)
Initializing a UITableViewCell Object
-
– initWithStyle:reuseIdentifier:
-
– initWithFrame:reuseIdentifier:Deprecated in iPhone OS 3.0
2. 사용되지 않고 있는 변수 지적
아래와 같이 int k = 1;만 있는 경우 컴파일러가 워닝을 줬다. k=2;하고 더이상 k가 사용되지 않는 경우, 컴파일러는 이를 감지 하지 못하지만, 정적 분석 도구는 k=2;를 해도 k가 의미 있게 사용되지 않았다고 경고를 해준다.
int k = 1; // <-- 이 코드만 있으면 compiler가 warning을 줌 k = 2; // <-- 이 코드만 있을 경우 정적 분석을 통해 k가 더이상 사용되지 않는다고 지적
여기에 오늘 보니 iPhone Developer:tips에서도 사용 후기를 써서 좀 더 포스팅해본다.
3. Uninitialized 변수의 사용에 대한 지적
아래와 같은 코드는 x가 0인 경우 uninitialized 된 x가 반환되는 문제를 가지고 있다.
- (BOOL)getSomeValue:(int)x {
BOOL positiveFlag;
if (x < 0) { positiveFlag = NO; } else if (x > 0) {
positiveFlag = YES;
}
return positiveFlag;
}
이것을 정적분석 해보면 아래와 같이 멋지게 문제점을 지적해준다. 아름답다.

빌드 시 항상 정적 분석을 수행하려면 아래와 같이 Project 설정의 Debug 설정에서 “Run Static Analyzer”를 체크하면 된다.

오늘 나도 눈범이를 결재할 것인데, SVN 관련 기능이 좀 제대로 업데이트 되었으면 하는데 모르겠다.
Ref 1: Static Analysis in Xcode
Ref 1: Static Code Analysis (Clang) and Xcode 3.2
Related posts:
- [iPhone] Snow Leopard의 Xcode 3.2에서 이전의 Monaco 폰트 사용하기 스노우 레오파드에 있는 Xcode 3.2를 설치하고 프로젝트를 열어 보면 무엇인가...
- [iPhone] Xcode 3.2 (Snow Leopard) 에서 SDK 3.0 이전 버전으로 셋팅하는 방법 Snow Leopard에서는 Xcode가 3.2이다. 문제는 업데이트 후 기존 프로젝트가 iPhone...
- [iPhone] 스노우 레오파드 !! Snow Leopard (Mac OS X 10.6) 간단 설치 후기 (Xcode, Spaces, Expose) 오늘 받은 Snow Leopard를 맥북에 설치했다 (정확히는 하면서 틈틈이 포스트를...
- [XCode] XCode Code Completion XCode의 code Completion은 아주 똑똑하다.근데 도대체 auto completion된 code의 placeholder...
- [iPhone] Tutorial – 하나의 Xcode Project로 여러 버전의 Product 만들기 – Tutorial – Same Xcode Project Create Multiple Products for iPhone 아래 두 Tutorial을 읽기 전까지는 Lite (Free) 버전과 Full (Paid)...
Related posts brought to you by Yet Another Related Posts Plugin.
-
정의의소
-
Gidae Yeo
-
igni
-
Gidae Yeo
-
cnook
-
Gidae Yeo
-
Gidae Yeo
