검색결과 리스트
2009/03/04에 해당되는 글 1건
- 2009/03/04 아이폰/아이팟 터치 애플리케이션 개발 중 버그를 쉽게 잡는 두 가지 방법 그리고 tv팟 앱 업그래이드에 관하여 (12)
글
Learning 2009/03/04 16:03아이폰/아이팟 터치 애플리케이션 개발 중 버그를 쉽게 잡는 두 가지 방법 그리고 tv팟 앱 업그래이드에 관하여
제 포스팅 중 가장 긴 제목을 가진 포스팅입니다. :) 얼마전 tv팟 애플리케이션 업그래이드 버젼을 배포했었습니다. 버젼이 1.2였고 새로운 UI를 추가하여 너무너무 즐거운 마음에 배포를 했었습니다. 새로 선보인 가로방향 모드에서의 film view는 이쁘긴 하죠? 사용하기도 편해서 좋습니다만.... 배포후 드디어 폭탄이 하나 터졌습니다. 예.... 이전 보다 훨씬 잦은 crash입니다. 이유가 머였을가요?
일단 첫번째 이유는 다들 생각하시는 메모리 관련이 맞습니다. 그렇지만 leak은 아닙니다. 바로 너무 많은 메모리를 사용하는 것입니다. film view에서 많은 이미지를 긁어오기 때문에 메모리 사용량이 급격하게 증가한 것이죠. 그렇지만 아이폰/아이팟 터치의 테이블은 이미 메모리관리가 되고 있습니다. 뷰도 그러하고 말입니다. 흐음...머가 문제였을까요? 바로 메모리를 많이 잡아먹고 있으니 보이는 뷰말고는 다 메모리에서 지워버린 것입니다. 음... 그럼 자동으로 생성해준다고 하지 않았나요? 맞습니다. 그런데... 거기서 생성이 잘 처리가 안된 것이죠. 뷰가 그렇게 생겨먹었는데 그 이유를 길게 적기는 뭐합니다. 일단 그건 그렇다치고 그럼 해법은? 뷰를 다 뜯어고치는 것! 자동으로 잘 생성되게... 이건 일이 많습니다. 그리고 변명의 여지도 있는 것이 interface builder를 사용하면 그렇게 코딩하게 되어 있었다는 것이죠. 끙...
그래서 해법은 아에 테이블의 셀을 재사용하는 pool을 따로 만들었습니다. 기본적으로 제공하는 방법을 다 걷어 냈습니다.
결과는?
곧 받을 1.2.1버젼은 아마 대부분의 경우 죽지 않을 것입니다. :) 엄청나게 튼튼하고 안정적인 애플리케이션이 되었답니다. (짜자잔~ 아 기쁘다.) 그럼 얻은 경험은?
-
인터페이스빌더는 곤란하다.- 편하지만 뚝딱만드는 간단한 것이 아니면 안쓰는 것이 좋다. 퍼포먼스도 문제가 생길 수 있다.
-
애플이 제공하는 것을 맹신은 곤란하다. - 특별히 관리하고 싶을 것 같은 것들은 그냥 만들어 쓰는 것이 속편하다.
이렇게 낑낑거려서 겨우 만족할 만한 해답을 얻은 후 어제 제출을 했습니다. 음 생각보다 해결은 빨리 된 것이죠. 흐흐흐흐 애플리케이션이 갑자기 죽는 경우는 거의 다 메모리 문제입니다. 너무 많은 메모리를 사용해서 스프링보드가 강제로 죽이는 경우거나 또는 너무 많은 메모리를 사용해서 아이폰/아이팟 터치가 강제로 뷰를 메모리에서 내린 후 다시 생성을 못했거나... 아 하나 더 있군요. 메모리 관리 자체를 잘 못해서 해제한 메모리를 다시 해제하려고 했거나...
요즘처럼 스크립트 언어가 잘 되어있는 상황에서 메모리관리라는 것은 아무래도 피곤한 일입니다. 거기다가 Objective-C는 스크립트 언어같이 유연한데 메모리관리는 빡빡하니 좀 짜증이 나기도 하고 말이니다. 그래서 "예제로 시작하는 아이폰 개발"에서는 간단한 부록도 적긴 했는데 말입니다. :) 그런데 어제 배포전 쉽게 한번 더 확인할 수 있는 간단한 2가지 방법을 찾았습니다.
우선 첫번째
C와 Objective-C의 버그를 찾아주는 툴입니다. 현재 커멘트라인 툴로 개발되어 있습니다. 아직 초기단계이고 모든 버그를 다 잡아주지는 않지만 그래도 훌륭합니다. 그냥 개발하는 프로젝트가 있는 곳에서 실행하게 되면 잘못한 코드를 집어주는 html 리포트까지 생성합니다. "여기서 너가 alloc하고 retain했는데 그냥 반환했어. 그럼 메모리에 남겠지?" 코드에 말풍선으로 아주 꼼꼼히 집어줍니다. (저도 배포전 돌려보고 3개 잡았습니다. 해해) 다 잡아주진 않지만 그래도 잡아주는게 어딘가요.
홈페이지에 들어가시면 Mac OS X용은 미리 빌드가 되어 있습니다. 다운받고 적당한 곳에 두신 다음 path만 걸어주시면 준비는 오케이. 그리고 작업중인 프로젝트에 가셔서
$scan-build -k -V xcodebuild
간단하죠! 그러면 에러를 잡았을 경우 safari를 띄워 리포트까지 보여줍니다. 그 다음은 수정이죠. 아 안에 있는 다른 파일들은 그냥 scan-build가 사용하는 것입니다. 자세한 옵션들은 홈페이지를 참고하셔요. 아 그리고 꼭 debug상태로 project를 설정하고 돌리셔야 합니다.
두번째
빌드 환경설정입니다.
가장 하기 쉬운 실수 중에 하나인 release된 객체에 다시 release를 시도하는 또는 autorelease된 객체에 다시 release를 시도하는 경우입니다. 이걸 조금 더 잘잡아 주는 설정이 있습니다. Xcode에 Project메뉴 그 아래 Edit Active Executable을 선택합니다. 거기 Arguments 탭을 선택하신 다음 환경변수란에 아래 3가지를 등록하시고 YES로 설정합니다.
NSAutoreleaseFreedObjectCheckEnabled
NSZombieEnabled
NSDebugEnabled
YES로 설정한 경우는 release나 autorelease시 추가 확인을 수행하고 문제가 생겼을 경우 스택 트레이스를 제공합니다. 아 그리고 디버그시에는 Run메뉴의 Enable Guard Malloc 설정을 켜두는 것도 도움이 됩니다. 없는 것보다야 나은거죠. :)
앗 저기 이미지는 값을 설정하기 직전 창이군요. 이런~ 켑쳐를 하다보니... 값 YES로 설정하셔요. :) 하여간 작은 팁이지만 튼튼한 애플리케이션을 만드시는데 도움이 되었으면 좋겠습니다. 그럼 또!
ps1) 오늘 3월 4일! 드디어 "예제로 시작하는 아이폰 개발"이 yes24의 주간베스트 컴퓨터 부분 1위를 달성했습니다. 이런! 대박이! (참고로 전 잘 팔린다고 돈을 더 버는게 아닙니다. 절래절래~) 판매수량도 좋지만 정말 번역이 매끄럽더군요. 또는 정말 오류가 없더군요. 라는 후기를 보고 싶은데 아직 다들 공부 중이신지 서평이 없어요. 계속 불안해하고 있습니다. 흙 그렇지만 일단 기뻐해야죠?
ps2) 코어 애니메이션 번역에 곧 들어갑니다. 좀 쉬어야죠 저도... 그런데 모바일 에디터라는 직함을 가지고 있어 이것 저것 에이콘에 말씀을 드렸더니... 덜컥 다음 번역책도 결정되었답니다. 아마 나오면 제 모바일 시리즈중 가장 많이 팔릴 책이 말입니다. 흐흐흐 기대해주셔요. 먼지는 말 못하죠! 해해해
'Learning' 카테고리의 다른 글
| 새 책 읽기 시작! - 마케팅 + 사진 (13) | 2009/03/23 |
|---|---|
| 라이브 re-블로깅 : 아이폰 OS 3.0 스페셜 이벤트 (62) | 2009/03/18 |
| 아이폰/아이팟 터치 애플리케이션 개발 중 버그를 쉽게 잡는 두 가지 방법 그리고 tv팟 앱 업그래이드에 관하여 (12) | 2009/03/04 |
| 책걸이 - 슬라이드:올로지, 프리젠테이션 젠의 다른 반쪽 (6) | 2008/12/17 |
| 책걸이-세스 고딘의 트라이브 (0) | 2008/12/08 |
| 책 주문했어요! 드리밍이 보고 있는 책 그리고 볼 책들... (22) | 2008/11/14 |
RECENT COMMENT