CLang 정적 분석기는 Objective-C와 C언어로 작성된 코드를 분석해서 오류를 발견해 주는 툴이다. 디버깅이나 인스투루먼츠는 실행중인 프로그램을 분석하는 동적인 작업인 반면, CLang은 정적으로 소스 코드 자체를 분석해서 오류를 검사한다. 검사할 수 있는 오류는 메모리의 누수, dealloc누락, 널(Null)값 참조 등이 있다. 직접 사용해 보자.(CLang은 또다른 프로젝트 LLVM 컴파일러를 위한 프론트엔트 프로젝트이다. LLVM은 GCC를 기반으로 컴파일 성능을 최적화하는 기술을 적용한 프로젝트이다. CLang 프로젝트의 일부로 CLang 정적 분석기 프로젝트가 포함된다. )
*프로젝트 설정하기
CLang분석기를 이용하기 위해서 Xcode상에서 설정할 사항이 하나 있다.
Base SDK 설정
위 그림과 같이 프로젝트 속성에서 Base SDK를 iPhone Simulator로 설정해야 한다. iPhone Device의 경우는 코드 서명 문제로 오류가 발생하기 때문이다. 우리는 정적으로 코드만 분석하면 되기 때문에 시뮬레이터를 선택해 주자.
* 설치하기
CLang 정적 분석기는 다음 사이트에서 무료로 다운로드 받을 수 있다. 오픈소스 프로젝트 이기 때문에 소스코드도 받을 수 있다. 아래 링크에서는 친절하게 맥OS를 위해서 바이너리 형태로 파일을 제공해 주기 때문에, 바로 쓸 수 있다.
첫 번째 명령은 프로젝트의 빌드파일을 모두 정리하는 명령이다. 두번째가 실제로 CLang분석기를 실행시키는 명령이다. 명령을 내리면 CLang분석기는 디버그 타깃을 시뮬레이터SDK로 빌드하고, 그 결과를 보여줄 것이다. 문제가 발견되면 그림30과 같이 웹페이지를 실행시켜 준다. (만약 프로젝트의 빌드가 실패하면 분석결과 오류를 발견했더라도 실행이 멈추게 되어있다. 성공적으로 빌드되었는지 확인하기 바란다.) 만약 성공적으로 빌드하고 오류가 전혀 발견되지 않았다면 웹페이지는 따로 보여주지 않는다.
CLang 분석기로 애플리케이션을 하나 분석해 보자. 아래 그림이 그 결과다.
<그림> 발견한 오류를 웹 페이지로 보여준다.
다행이 오류가 하나 만 발견되었다. Leak of returne object 오류인데, 객체를 해제하지 않았다는 오류이다. 한 가지 주의할 점은 CLang 분석기가 오류로 판단했다고 해서 반드시 오류는 아니라는 것이다. 어디까지나 그 것이 오류인지를 판단하는 것은 개발자의 몫이다. 진짜 오류인지 한번 들어가 보자. 왼쪽 화면의 View Report 를 클릭하자. 그러면 문제가 되는 소스코드를 보여주고, 친절하게 설명까지 보여준다.
31행에서 NSURL 객체를 생성하고 34행에서 잘 사용했다. 그런데 해제하지 않았다. 실수다. 고치도록 하자.
이 책은 원래 iPhone 을 위한 Web programming 을 위해서 쓰여졌다. 서문에서 저자들도 아이폰이 2007년 처음 판매되었을때 애플 스토어 앞에 길게 늘어선 행렬에 있었다고 할 정도로 아이폰 과 애플의 제품들을 좋아하는 매니아라고 밝히고 있다.
이 책은 다른 아이폰 SDK 서적과는 확실히 다르다. 시작부터 아이폰을 위한 Web 프로그래밍에 대해서 책의 40% 가량을 할당해서 설명하고 있다. 대부분의 사람들이 아이폰SDK에 관심을 갖고 있는 상황에서 상당히 신선한 시도라는 생각이 든다. 분명 아이폰은 물론이고 모바일 기기에서의 인터넷은 데스크톱의 인터넷과 확실히 다르기 때문에 웹 개발자들에게는 상당한 도움이 될 것이다.
책을 쓰는 중에 아이폰SDK 가 발표되었고, 그에 따라서 아이폰SDK를 이용한 개발에 대한 내용을 추가한 것으로 생각된다. 어떤 챕터들로 이루어져 있는지 한번 보도록 하자.
*1부 : 아이폰 프로그래밍 소개
1장 : 아이폰에 대한 소개
2장 : 웹 프로그래밍과 SDK
- 웹 프로그래밍과 일반 아이폰 개발에 대한 논의 *2부 : 아이폰을 위한 웹페이지
3장 : 아이폰을 위한 웹페이지 만들기
- 아이폰 친화적인 페이지
- 웹페이지에서 멀티 터치를 처리하기
4장 : 웹킷과 텍스트 기반의 웹 어플리케이션
5장 : 아이폰을 위한 웹 어플리케이션 개발 (iUI)
6장 : 캔버스 이용하기
7장 : 대쉬코드
8장 : 아이폰 웹페이지 디버깅 하기
9장 : 웹 개발자를 우한 SDK 프로그래밍
- 메모리 관리, 오브젝트와 클래스 등의 기본 프로그래밍 개념 소개 *3부 : SDK기초
10장 : ObjC 와 아이폰 OS
11장 : Xcode 사용법
12장 : Interface builder 사용법
13장 : 뷰 컨트롤러
- UI 프로그래밍의 핵심이라고 할 수 있는 ViewController 를 소개하고, 대표적으로 tableview 를 소개한다.
14장 : 이벤트와 액션 처리
- 버튼과 터치등의 이벤트에 대한 소개
15장 : 고급 뷰 컨트럴러
- 탭바, 네비게이션 컨트럴러, 모덜 뷰 컨트럴러 소개 *4부 : SDK 프로그래밍
16장 : 액션, SQLite, 파일 접근, 주소록 API, Preference 소개
17장 : 가속도계와 위치정보
18장 : 미디어 : 이미지와 사운드
- 아이폰의 사진라이브러리에 접근하는 법, Core Graphic 예제, 미디어 플레이어 프레임 워크에 대한 소개
19장 : Quartz, Core Animation, OpenGL
20장 : 웹
- 웹View 와 기타 인터넷 프로토콜
- URL 조작, XML 파싱
2부는 웹 프로그래밍에 대한 내용이고, 3,4부가 우리가 관심있는 아이폰 SDK에 대한 내용이다. 아이폰에 대해서는 가장 기본적인 주제들을 다루고 있다. 물론 누락되는 내용도 상당히 많다. 10장에서는 ObjC와 아이폰OS에 대해서 간단히 소개하고,
11장,12장에서 가장 많이 쓰는 툴인 Xcode와 IB에 대해서 설명하고 있는데, 툴에 대해서 2개의 장을 할당할 정도로 프로그래밍 자체보다는 iPhoneSDK를 위한 준비과정과 기초과정에 신경을 썻다고 볼 수 있다. 아무래도 웹 개발자의 입장에서 접근하는 면이 이런 곳에서 보이는 것 같다. 그 다음으로 뷰를 기준으로 여러가지 뷰과 뷰 컨트럴러를 설명함으로 써 아이폰 어플리케이션을 개발하기 위한 UI를 만드는 방법을 설명한다. 그리고 거기에 수반되는 이벤트 처리에 대해서도 설명하고 있다.
그 외에 추가적인 요소로 Action,SQLite,주소록,Preference 그리고 가속도계와 위치정보를 이용하는 방법을 설명하고, 미디어 요소로써 동영상 플레이와 사운드 플레이에 대해서 설명하고 있다. 마지막 두챕터에서는 각각 OpenGL,Quartz의 그래픽 프로그래밍과 Web에 관련된 프로그래밍 스킬을 소개하고 있다. 하지만 19장에서 OpenGL에 대한 내용은 고작 반페이지가 전부이다. 그 내용은 인터넷에 있는 OpenGL ES문서를 보라는 것인데, 이 부분은 좀 미흡하다고 하겠다.
다른 책들과 약간 다른 목차를 가지고 있고, 접근 방식도 다르다고 생각된다. 책에서 코드를 설명하는 부분이 마음에 드는데, 대부분 하나하나 꼼꼼한 설명을 해 주는데, 이 부분은 저자가 상당히 신경을 많이 썼다고 생각된다.
아이폰 SDK에 대해서 전반적으로 무난하고 쉬운 내용을 담고 있다. 대신 웹개발자들에게 도움이 될 내용들은 많은 것 같다. 반대로 SDK개발에 있어서는 특별한 장점이 없는 책이다. 또한 SDK 개발에 필요한 많은 내용이 누락되어 있어서, 내용을 보강할 필요가 있을 것이다.
특징
1. 웹 개발자를 위한 내용을 유일하게 다루고 있다.
2. 아이폰 SDK 개발을 위해서 필요한 요소가 많이 누락되어 있다. (디버깅, 국제화이슈,네트워크,OpenGL, 등등등)
3. UI 관련된 내용에서 View 외의 control 에 대해서 설명이 부족하다.
4. 책의 40%가 Web 프로그래밍에 대한 내용이다.
5. 책에서 어떤 툴이나 프래임워크에 대해서 반복적으로 Anatomy 를 해서 설명한다고 하고 있지만, Overview에 가깝다.
6. 저자가 블로그를 운영하면서, iPhoneSDK 3.0은 물론이고, 추가적인 Article 들을 열심히 제공하고 있다.
1장 : 아이폰 SDK를 설치하고 환경을 구축하는 방법
- 프로비져닝에 대한 설명
- ObjectiveC 에 대한 소개
2장 : 인터페이스 빌더에 대한 소개
3장 : UI Kit 프레임워크
- 윈도우와 뷰
- 뱃지, 사파리, 전화 걸기
4장 : 이벤트 처리와 좌표계
- 멀티 터치
5장 : 레이어, 코어 그래픽과 Quartz 로 트랜스폼 하기
6장 : AVFoundation 과 Audio ToolBox 로 오디오관련 조작하기
- 플레이, 진동
7장 : 네트워크 프로그래밍
- 소켓 프로그래밍, HTTP,FTP 클래스 소개
8장 : 위치정보 이용하기(GPS)
9장 : 주소록 이용하기
10장 : UI킷의 고급 응용
- 기본 뷰를 제외한 모든 Control 에 대한 설명
- 가속도계
11장 : 어플리케이션 정보 저장하기
12장 : 커버 플로우
13장 : 페이지 전환
14장 : 동영상 재생
아쉽게도, 목차를 통해서도 상당히 정리되지 못한 느낌을 받게 된다. 하지만 전에 소개했던,
이 책에서 다루지 않는 부분들에 대해서 거의 모두 다루고 있다는 점에서 의미는 있다.
먼저 아이폰을 설치하고 인터페이스 빌더라는 툴을 다루는 1,2장은 거의 의미가 없는 챕터다.
3장에서 기본적인 윈도우와 뷰의 개념에 대해서 설명해 주고 있고, 전화를 거는 방법도 여기서 다루는데,
약간 정리가 안된 느낌이다.
5장의 레이어와 코어그래픽에 대한 설명은 너무 부실해서 애플이 공개하고 있는 리퍼런스 수준에도 미치지 못한다.
그외, 모든 내용이 애플의 리퍼런스에서 얻을 수 있는 정보에도 미치지 못할 정도로 급조된 느낌이 있다.
빠른 시점에 책을 내기 위해서 많은 변화들이 반영되지 못했기 때문에 초기 아이폰 SDK가 발표된 시점에
의미가 있던 기능들이 주로 소개되오 있다는 느낌이 든다.
좀 더 개선해야 할 점은, 각 장에 대해서 기본적인 동작원리및 철학에 대해서 설명해야 하고,
예제만 딸랑 소개하는 것에서 그치지 말고, 그 예제가 어떻게 동작되는지 자세히 설명할 필요가 있다.
또한 3장에서 전화걸기 기능에 대해서 소개하고, 10장에서 가속도계를 설명하는 등 목차 자체도 다시 정리되어야 할 것이다.
슬프게도 거의 얻을 수 있는 정보가 없는 책이었고, 설명하는 주제나 방식에 있어서 일반 개발서 라고 보기보다는 쿡북이라고 해야 더 옳을 것 같다.
개인적으로,
일반적인 아이폰 개발서라고 한다면, 크게 다음의 주제들은 다뤄줘야 한다고 생각된다.
0. Tools & Install
: 툴 설치와 환경 구축 방법
1. UI components
: 화면을 이루는 기본 구성요소인 뷰와 윈도우 그리고 컨트럴들에 대한 소개
: Maps framework (3.0)
2. Interfacing
: 사용자 인터페이스 방법 , 가속도 등의 모든 입력 수단
: Copy & Paste (3.0)
3. Graphics
: 게임 개발을 위한 요소인 그래픽, Quartz, OpenGL ES 4. Media access : iPod 의 미디어 라이브러리에 접근하는 방법, 플레이백 제어 방법 (3.0) 5. Network : 네트워크 프로그래밍, PeerToPeer 프레임워크 (3.0)
6. Phone resources (Camera...)
: 아이폰 고유의 자원들 : 폰, 메시징, 주소록, 이미지 라이브러리 등의 정보 7. AppStore & inApp purchase : AppStore 에 대한 내용과 InApp Purchase (3.0) 8. More applications : 아이팟 악세서리에 접근하기 위한 방법과 응용사례
A1. ObjectiveC A2. Debug issue
A3. How to use help documents
A4. Security issue
지금까지 두권의 책을 살펴본 결과, 디버깅 이슈, AppStore에 대한 소개, 네트워크 프로그래밍에 대한 소개가 아주 부족했거나, 아예 다뤄지지 않고 있다. 3.0에 새로 추가된 기능들이 어느정도 수준으로 보강될지 주목해 봐야 한다.
아이폰 관련 서적중에서 가장 평가가 좋은 책이다. 최초로 국내에도 소개된 iPhone SDK cookbook 시리즈가 팁 위주의 문제 해결을 위한 여러가지 주제들을 다룬다면, 이 책은 처음부터 하나하나 차근차근 배워나가는 전형적인 입문서이다.
총 18개의 장으로 이루어져 있고, 간단히 각 장이 다루고 있는 내용을 보면,
1장 : Welcome to the jungle
- 필요한 개발환경에 대한 소개.
- 아이폰 개발의 특수성에 대한 설명
2장 : Tiki Gods (Hello World) 를 만들기 위한 따라하기 예제
- 인터페이스 빌더에 대한 소개
- 컴파일과 실행 방법
3장 : 인터렉션 방법
- 사용자의 입력을 받기 위한 방법.
- 아웃렛과 뷰 컨트럴러에 대한 소개
- 어플리케이션 딜리게이트
- 간단한 예제를 통한 따라하기 실습
4장 : 좀더 재밌는 인터페이스
- 그림 이미지 사용하기
- 키보드 사라지게 하는 팁
- 슬라이더와 레벨 컨트럴에 대한 설명
- 스위치와 세그먼트 컨트럴
- 버튼, 엑션 시트, 경고 창
- 버튼 다듬기
5장 : 로테이션과 사이즈 조절
- 회전에 대한 반응 방법
- 뷰 스왑시키기
6장 : 다중 뷰 구조
7장 : 탭바와 픽커 컨트럴
8장 : 테이블 뷰 컨트럴
9장 : 테이블뷰와 네비게이션
10장 : 어플리케이션 환경설정 방법
- User defaults
11장 : 데이터 저장방법
- 샌드박스 개념
- 시리얼라이져블 Object 들
- 파일 저장을 위한 전략
- Embedded SQLite3
12장 : 그리기 와 OpenGL
- Quartz2D와 OpenGL ES 예제 어플리케이션 위주의 설명
13장 : 터치와 손동작
- 멀티터치, 닦아냄 동작 등
- 커스텀 동작
14장 : 위치정보(GPS) 이용
15장 : 가속도계 이용법
- 흔들기 감지
- 흔들기 예제 -> 화면 깨짐 (이 책에서 가장 재미있는 예제임)
16장 : 카메라 이용하기
- 카메라와 포토라이브러리 접근
17장 : 지역화 이슈
18장 : 추가 정보로 마무리
전체적으로 거의 모든 중요한 내용들은 커버하고 있다. 하지만 목차를 통해서도 느낄 수 있듯이,
모든 내용을 애플의 iPhone SDK 문서를 잘 정리해서 만들었다는 느낌이 든다. 중요한 특징 및 단점은
1. 아이폰 AppStore에 대한 등록절차나 경향에 대한 내용이 전혀 다뤄지지 않고 있다는 점
2. 대부분의 예제가 기초적인 수준에 머물러 있다는 점
3. 초보자를 주 타깃으로 하고 있다는 점
4. ObjectiveC에 대한 설명은 없다는 것
5. 그래픽 분야에 대한 설명이 상대적으로 빈약하며, 주로 어플리케이션의 구조인 UI 컨트럴에 초점을 두고 있음.
6. 아이폰 SDK 3.0에 대한 내용을 포함하지 않음. (개선될 것으로 예상?)
7. 아이폰의 다른 자원들 (전화!!!, SMS, Contacts ) 등에 대한 설명은 전혀 없음.
8. 동영상과 사운드는 거의 다루지 않음.
9. 디버깅 기법에 대해서 거의 다루지 않음.
10. 보안이슈 누락
12. 네트워크 프로그래밍에 대해서 전혀 다루지 않음.
13. 원서의 경우는 평균적인 엔지니어링 서적에서는 많이 쓰이지 않는 고급 단어들이 많이 사용된다.
14. NSArray 등의 자료구조의 이용은 기존의 C/C++ 개발자에게는 가장 어색한 부분이다. 이 부분에 대한 설명이 없다.
이 책은 현재 나와 있는 아이폰 관련 책 중에서 가장 잘 쓰여진 책이지만, 아쉬운 부분이 몇가지 있다.
개선될 수 있는 여지라면, 위의 10가지 항목에 대한 고려가 필요하다고 생각된다.
이 글에서는 단점을 주로 지적했지만, 초보자를 위한 입문서로는 정말 알차고 도움이 될 만한 내용을 많이 담고 있다.
특히 일반 UI 컴포넌트를 주로사용하는 일반 어플리케이션 개발을 위해서는 최적의 입문서임은 확실하다.