필수 Symbian OS
코딩 팁
시장 진출 루트를 확보하십시오 Symbian Signed 는 Symbian OS 소프트웨어 개발 자들이 어플리케이션에 디지털 서명을 받도록 하 는 업계 후원 프로그램입니다. ‘Symbian Signed’ 인증 어플리케이션이 되기 위해서는 각종 표준 테스트를 통과해야 합니다. 어떤네트워크 오퍼레 이터와 휴대폰 제조업체들(예: Orange, Nokia, Sony Ericsson)은 이제 서명된 C++ 및 AppForge MobileVB/Crossfire 어플리케이션만 자사 채널을 통해 유통시키고 있습니다. Symbian Signed 를 통과한 어플리케이션은 ‘application source untrusted’ 경고 없이 실행할 수 있고, B2B 어플 리케이션 카탈로그에 실립니다. 어플리케이션 인증 을 받은 ISV 도 ‘for symbian OS’ 로고를 사용할 수 있 습니다:
좀더 상세한 정보는 www.symbiansigned.com 을 방문하십시오
필수 Symbian OS
코딩 팁
출판
코딩 팁 필수 Symbian OS 시리즈 1st edition, 12/06 발행자: Symbian Software Limited 2-6 Boundary Row Southwark London SE1 8HP 영국 www.symbian.com 상표, 저작, 면책 ‘Symbian’ ‘Symbian , OS’및 기타 관련 Symbian 마크는 모두 Symbian Software Ltd 의 상표입니다. Symbian 사는 본 책자에서 언급되는 모든 제 3 자의 상표권을 인정합니다. © Copyright Symbian Software Ltd 2006. All rights reserved. 본 책자의 어느 부분도 Symbian Software Ltd 의 명시된 서면 허가 없이 재생할 수 없습니다. Symbian Software Ltd 는 본 문서에 실린 정보의 적합성이나 정확성에 대해 어떤 보장이나 보증 도 하지 않습니다. 본 문서에 실린 정보는 단지 일반적 정보 목적을 위 한 것이며, 다른 어떤 목적을 위해서도 사용하거나 의존할 수 없습니다.
편찬: Phil Spencer Hamish Willee 편집장: Freddie Gjertsen Satu McNabb 한국어 검토 : 임형태 손기환
디자인 컨설턴트: Annabel Cooke Merchant Adventurer (해외 담당): James Mentz 심사: Ricky Junday
감사의 말 수년 간에 걸쳐 코딩 비결과 최고 관행에 대한 정보를 제공해 주 신 고도의 기술과 경험을 보유하신 소프트웨어 엔지니어 여러분 들 모두에게 감사의 말씀을 드립니다. 본 책자에 실린 많은 비결 은 그분들의 공동 지혜에서 유래한 것입니다.
서문 Symbian OS 용 어플리케이션을 프로그래밍 할 때는, 설 계에서부터 설치 파일의 최종 터치에 이르기까지, 여러 가지 요소를 고려해야 합니다. 그 모두가 어플리케이션 의 품질과 견고함에 영향을 끼칩니다. 본 책자에는 개발 자들이 가능한 한 최고로 신뢰할 수 있는 Symbian OS 어 플리케이션을 만들도록 돕는 유용한 힌트와 팁 그리고 링크가 나와 있습니다.
차례 일반 팁.............................................................................. 2 설계 팁.............................................................................. 4 코딩 팁.............................................................................. 6 테스팅 팁 ........................................................................ 17 디버깅 팁 ........................................................................ 18 참고문헌 ......................................................................... 21 개발자 자원 .................................................................... 22
2
일반 팁 1. Symbian Developer Network 은 Symbian OS 어플리케
이션 프로그래밍에 도움이 되는 많은 귀중한 자원들 을 호스팅 합니다. http://developer.symbian.com 를 정기적으로 방문해 최신 SDK, 기술정보, 코드 예 그 리고 백서등을 입수하십시오. Developer 네트워크 웹 사이트는 다음 자료에 대한 액세스를 제공합니다: • Symbian OS FAQ 데이터베이스 – 개발자를 위한 매우 귀중한 정보 소스로 설계 및 코딩에 대해 가장 자주 묻는 질문과 대답이 나와 있습니다. • Symbian OS C++ Coding Standards 를 포함한 많은 백 서들 – Symbian OS 자체를 개발하면서, Symbian 은 중요한 여러가지 코딩 언어 및 스타일에 대한 정의를 내렸습니다. Coding idioms paper 에 외부 개발자들을 위한 그런 설명이 나와 있습니다. 이미 검증된 이 컨 벤션을 이용하면, Symbian 사가 Symbian OS 작업 기 간 중에 얻은 모든 경험의 혜택을 볼 수 있습니다. • Symbian OS Developer Library – 공인 API 레퍼런스 및 Symbian OS 안내서입니다. • 다운로드 – 어플리케이션 예제, 유틸리티 라이브러리, Symbian OS 의 일부이지만 모든 휴대폰에는 장착될 수 없는 寗궈쳄皓 시스템 API, Symbian OS 신 버전의 API 를 구 버전 OS 에 실행시킬 수 있도록 하는 포팅된 (ported) 라이브러리 등을 다운로드 할 수 있습니다.
3
• 디버깅 및 개발용 툴에 대한 정보 • 뉴스그룹 포럼 (http://developer.symbian.com/forum) Symbian 엔지 니어와 광범위한 개발자 커뮤니티로부터 자문을 구 할 수 있는 곳. 포럼에서는 C++ 및 Java 관련 질문에 서부터 하드웨어와 Symbian Signing 프로세스까지, 개발의 모든 면을 다룹니다. 2. Symbian Developer Network 뉴스레터를 구독하십시
오(http://developer.symbian.com/main/getstarted /newsletterarchive) – 뉴스레터는 월간으로 이메일 을 통해 배포되며, 최신 Symbian 개발자 뉴스를 접 할 수 있는 최상의 방법입니다. 3. Symbian OS 를 사용하는 휴대폰 제조업체들도 개발
자 프로그램을 운영하고 있습니다. 해당 업체 사이 트에 등록해 최신 휴대폰 관련 정보와 팁을 입수하 십시오. 4. 자격증을 받으십시오!
(http://developer.symbian.com/main/academy) Accredited Symbian Developer 자격증은 고용주에게 여러분이 유능한 Symbian OS 엔지니어라는 것을 보 여주고, 여러분 자신의 Symbian OS 능력을 객관적으 로 평가하는 데 도움이 됩니다. 5. Symbian Signed 는 Symbian OS 휴대폰에서 실행되는
어플리케이션을 설계하는 최고의 관행을 장려합니
4
다. Symbian Signed 어플리케이션은 업계품질 지침을 준수하고, 서명된 어플리케이션에 대한 네트워크 오 퍼레이터 요건을 지원합니다. Symbian Signed 웹사이 트 (www.symbiansigned.com)로 가서 상세한 인증 절 차를 알아 보십시오. 6. Symbian 및 Symbian 기반 제조업체들 이외에도 활
발한 개발자 커뮤니티가 있습니다. www.symbian.com/developer/about/trdprtysites.html 에 잘 알려진 몇몇 제 3 자 디벨로퍼 사이트들의 링 크가 나와 있습니다. 7. 마지막으로, 구입 가능한 Symbian OS 출판물이 점
점 더 많아 나오고 있습니다. Symbian Press (http://developer.symbian.com/main/academy/press) 는 각종 주제별 서적들을 제공합니다. 이들 서적들은 모두 Symbian OS 코드를 좀더 쉽고 신뢰할 수 있게 프로그래밍 하는 데 도움이 되도록 설계되었습니다.
설계 팁 1. Symbian OS 를 위한 가장 중요한 설계 팁은“엔진”
과 UI 코드를 각기 다른 모듈로 분리시키는 것입니 다. Symbian OS 자체가 그 방법으로 설계되었고, 그 방법은 다른 UI 시스템 간 포팅을 지원합니다. 한 가지 방법은 Binary level 에서 그러한 구별을 해서 모든 비 UI 관련 코드를 한 개의 별도 엔진 .DLL 파일
5
로 만드는 것입니다. 그 다음 어플리케이션 UI 를 이 .DLL 에 연결해 엔진 기능에 액세스 할 수 있습니다. 다른 한 가지 방법은 Source level 에서 그 구별을 해 서, 어플리케이션은 하나의 싱글 .APP 파일로 만들지 만, ‘엔진’ 과 UI-관련 코드를 다른 .CPP 및 .H 파일로 분리시켜, 관리와 디버깅이 쉽도록 하는 것입니다. 이 방법으로 코딩하면, 신규 UI 플랫폼에서 포팅 부 담을 덜 수 있습니다; 순수 엔진 코드는 자주 어떤 UI 플랫폼에도 변경없이 실행됩니다. 그래서 신규 UI 에서 포팅하고 최적화해야 하는 것은 여러분 자 신의 별도 UI layer 뿐입니다. 2. 현지화 지원을 염두에 두고 설계하십시오. 소스 파
일에 하드 코딩된 문자열이나 Literal 을 절대 넣지 마십시오 – Symbian OS 가 문자열 저장을 위해 제공 하는 리소스 파일 메카니즘을 사용하십시오. 3. 문서가 첨부되고 해당 SDK 및 Symbian OS Release 용
으로 지원되는 API 만을 사용하도록 유의하십시오. 지원되지 않거나 성능이 떨어지는 API 를 사용하면 나중에 어플리케이션에 문제가 발생할 수 있습니다 – 예를 들어, Symbian 은 향후 Release 에서 외부 개 발자 사용 용도가 아닌 API 를 변경 또는 제거할 수 있는 권리를 보유합니다. 4. 모든 휴대폰에 모든 ‘시스템’파일들이 존재한다고
가정하지 마십시오. Symbian OS 라이센스 소유자들
6
이 자사 휴대폰을 커스터마이즈할 수 있는 범위는 넓습니다; 같은 플랫폰 기반 휴대폰도 제조업체에 따라 다른 지원 파일을 장착할 수 있습니다 – 예를 들어, 여러분이 재생하기를 원하는 사운드 클립의 위 치를 하드 코딩한다면 우수한 이식성이 보장되지 않 습니다. 최소한도, 지원파일이 미래 휴대폰에 존재하 지 않을 경우를 가정해 언제나 에러 상태에 대한 적 절한 처리를 고려해야 합니다.
코딩 팁 아래에는 코드 작성 시에 염두에 두어야 할 일반적 인 팁이 나와 있습니다. 1. 어플리케이션이 시스템 종료 이벤트를 처리하는지
확인하십시오. AppUi::HandleCommandL()메소 드(method)에서 EEikCmdExit (및 모든 플랫폼-관 련 이벤트, 예: Series 60 의 EAknSoftkeyBack)을 처리하는 것이 필수적입니다. 2. Incoming 시스템 이벤트를 처리하십시오. 여러분의
어플리케이션이 멀티타스킹 휴대폰 시스템에서 운 영된다는 것을 명심하십시오. 얻거나 잃은 이벤트 등에 세심한 주의를 기울여, 사용자가 높은 우선순 위 통지를 받을 때 정확하게 반응해야 합니다. 예를 들어, 어플리케이션이 포커스를 잃도록 할 수 있는 착신 전화가 있을 때 현재의 상태와 데이터를 저장
7
하도록 보장해야 합니다 (즉, 표준 ‘to background’ 이벤트에 대해 적절하게 반응해야 합니다 – 자세한 것은 SDK 를 참조하십시오). 일반적으로, 프레임워 크가 여러분을 대신해 이것을 처리하므로 여러분이 특별히 조치할 일은 없습니다 – 그러나 여러분이 프 레임워크가 의도된 대로 작동되는 것을 방해하는 무 엇인가를 하지 않도록 확인해야 합니다. 3. 메모리처리는 Symbian OS 에서 고려해야할 중요한
주제입니다. 휴대폰에서 동작이 에뮬레이터에서 동 작과 다를 때가 있다는 점에 유의하십시오. Symbian Signed 에 제출해서 테스트 받기 전에 실제 휴대폰 에 어플리케이션을 테스트하는 것이 필수적입니다. 4. Stack 은 작습니다!가능하면 객체를 Stack 이 아니
라 Heap 에 할당하십시오. 설명 없는 KERN-EXEC 3 크 래시는 Stack Corruption/Overflow 증상일 경우가 많 습니다. 5. 어플리케이션 패닉은 여러분 코드에 Bug 가 있다
는 표시입니다. 흔히 하는 주요 오류는 다음과 같습 니다: • CleanupStack 에 비멤버, Heap 할당 변수를 추가 하는 것을 잊는 것 • CleanupStack 에 멤버 변수를 넣는 것 – 절대 그렇게 하면 안됩니다; 보통 때처럼 그냥 Destructor 에서 삭 제하십시오.
8
• ‘이중 삭제’– 예: CleanupStack 에서 이미 삭제된 항목을 올바로 Pop()하지 않아, Stack 이 그것을 나 중에 다시 삭제 하도록 만들거나, 함수를 사용한 후 에 삭제했지만, NULL 로 설정하지 않아, Destructor 에 서 다시 삭제되는 것. • Destructor 에 존재하지 않는 변수의 함수에 액세스 하는 것. 예를 들면, 아래 코드는 iSomeServer 가 NULL 이면 패닉이 일어납니다 – 메모리를 할당하기 전에 객체를 삭제한 경우나, 어플리케이션의 다른 어 디에서 메모리를 삭제했을 때 나타날 수 있습니다: CMyClass::~CMyClass() { iSomeServer->Close(); delete iSomeServer; }
는 항상 아래와 같이 코딩 되어야 합니다: CMyClass::~CMyClass() { if (iSomeServer) { iSomeServer->Close(); delete iSomeServer; } }
9
• NULL Pointer 의 함수를 호출하는 것 • 이미 영역밖으로 나간 변수의 함수에서 함수를 호출 함. 예를 들어, Stack 기반 변수를 비동기성 함수로의 Callback 으로 패싱하는 것. 6. 시스템 리소스가 가용하지 않을 때 적절하게 Fail 되
는 것도 중요합니다. 가장 제한적인 리소스는 보통 시스템 RAM 이기 때문에, 저 메모리 상태를 취급할 때는 조심해야 합니다. 아래 설명 대로, 2-단계 Construction 및 CleanupStack 사용이 그러한 방어적 프로그래밍에 필수적입니다. 7. Close()메소드가 있는 ‘R’ 클래스에는 항상
CleanupClosePushL()를 사용하십시오. 그러면 Leave 발생 시 확실하게 클린업되는 것을 보장할 수 있습니다. 예를 들면: RFile file; User::LeaveIfError(file.Open(…)); CleanupClosePushL(file); … CleanupStack::PopAndDestroy(&file); 또한 Close()대신에 Release()또는 Destroy()를 사용하는 ‘R’ 클래스에는 CleanupDeletePushL()및 CleanupReleasePushL()을 사용할 수 있습니다.
10
8. 또한 CleanupStack 은 확장 가능한 메카니즘으로
Leave 가 발생했을 때는 무엇이든지 클린업할 수 있 다는 것을 기억하십시오. 처리해야 할 상황이 복잡한 경우에, 그냥 무시하고 적절하게 클린업하지 않으면 안됩니다. 좀더 자세한 정보는 TCleanupItem 에 대한 Symbian OS 라이브러리 문서를 참조하십시오. 9. 멤버 HBufC 변수를 삭제하고 동일 변수에 재할당하
기를 원하는 경우에는 삭제 후에는 언제나 NULL 로 설정하십시오. HBufC 할당 (또는 재할당)이 잠재적 으로 Leave 될 수 있기 때문에, Destructor 가 더 이 상 존재하지 않는 HBufC 삭제를 시도하는 상황이 발생할 수 있습니다. 이런 일이 물론 Heap 할당 변 수에도 생기지만, HBufC 사용 시 생기는 경우가 보 통입니다. 10. 여러분 자신의 TRAP 을 사용해야 할 이유가 있을 때
는, 에러 메시지를 전부 무시하지 마십시오. 자주 일 어나는 코딩 실수는 다음과 같습니다:
TRAPD(err, DoSomethingL()); if (err == KErrNone || err == KErrNotFound) { // Do something else }
11
위의 예는 모든 다른 에러 코드가 무시되었다는 의 미입니다. 그러나, 패턴이 꼭 위와 같아야 한다면, 다 른 에러는 Leave 로 만드십시오: TRAPD(err, DoSomethingL()); if (err == KErrNone || err == KErrNotFound) { // Do something else } else User::Leave(err); 11. CleanupStack 에 PushL()할 때를 기다리지 마십
시오. 새로 할당된 모든 객체 (멤버 변수 제외)는 Stack 에 즉시 추가시키십시오. 예를 들어, 아래 예는 잘못된 것입니다: void doExampleL() { CSomeObject* myObject1=new (ELeave) CSomeObject; CSomeObject* myObject2=new (ELeave) CSomeObject; … // Do something here with the variables CleanupStack::PushL(myObject1);
12
CleanupStack::PushL(myObject2); // Do something more with the variables … CleanupStack::PopAndDestroy(2); // myObject2, myObject1 }
myObject2 의 할당에 실패할 수 있고 그러면 myObject1 은 클린업될 수 없는 ‘dangling’ 으로 남 습니다. 올바른 방법은 아래와 같습니다: void doExampleL() { CSomeObject* myObject1=new (ELeave) CSomeObject; CleanupStack::PushL(myObject1); CSomeObject* myObject2=new (ELeave) CSomeObject; CleanupStack::PushL(myObject2); … // Do something here with the variables … CleanupStack::PopAndDestroy(2); // myObject2, myObject1 }
13
12. 이름이 ‘C’ 로 끝나는 함수(예: NewLC()메소드)는
객체를 자동으로 CleanupStack 에 넣는다는 점에 유의하십시오. 이들 객체를 Stack 에 Push 하지 마십 시오. 그러면 객체가 이중으로 존재하게 됩니다. 이 름이 ‘C’ 로 끝나는 함수는 비멤버 변수를 할당할 때 유용합니다. 13. 2 단계 Construction 은 Symbian OS 메모리 관리의 주
요한 부분입니다. 기본 룰은 Symbian OS Constructor 나 Destructor 가 절대 Leave 가 되면 안된다는 것입 니다. C++ Constructor 가 Leave 되면, 포인터가 없기 때문에 부분적으로 구축된 객체들이 클린업될 수 없 습니다. 그 이유로, Symbian OS Constructor 는 객체 를 그냥 Instantiate 하고, 그 다음에 그 객체가 멤버 데이터를 Instantiate 할 수 있는 ConstructL()메 소드를 제공합니다. ConstructL()가 Leave 하면, 표준 Destructor 가 호출되어 그 시점까지 성공적으 로 할당된 모든 객체를 제거하도록 합니다. 이 설계 패턴을 충실히 반영해서 코드에서 메모리 누출이 되 는 것을 막는 것이 필수적입니다. 각 코드 라인을 작 성할 때마다, 스스로에게 아래의 질문을 하는 것이 좋습니다:“이 라인이 Leave 될 수 있는가?”대답이 “예”라면, 그 다음에 생각할 것은,“모든 리소스가 Free 가 되어야 하나?” 14. 여러분의 코드에 _L()마크로를 사용하지 마십시
오. 이 함수는 Symbian OS v5 이후 구식이 되었습니 다 – 그래서 _LIT()을 사용하는 것이 좋습니다.
14
_L()의 문제점은 TPtrC(const TText*) Constructor 를 호출하고, 그 다음 Constructor 가 문자열의 길이를 계산하는 strlen()함수를 호출해야 하는 것입니다. 이것은 추가 RAM 을 소모하지는 않지만, 실행시간에 CPU 싸이클을 소모합니다. 그 반대로, _LIT()마크 로는 컴파일 시간에 완전히 초기화된 구조를 직접 구 축하기 때문에, TPtrC 구축을 위한 CPU 오버헤드를 절약합니다. 또한 하드 코딩된 Literal 이 꼭 필요한 지 를 고려해야 합니다; 하드 코딩된 Literal Descriptor 들 은 어플리케이션을 나중에 현지화하는 경우 코딩을 다시 해야 할 수 있습니다. 15. 함수 파라미터로 Descriptor 을 사용하는 경우는, Base
클래스를 디폴트로 사용하십시오. 대부분의 경우에 const TDesC& 로 Descriptor 를 패싱하십시오. 변경 가능 Descriptor 에는 TDes& 를 사용하십시오. 16. 객체를 함수에 전달 또는 리턴할 때는 여러분이 삭
제하는 객체의 소유권을 가지고 있는지 확인하십시 오! Symbian 사가 사용하는 컨벤션에서는, 메소드 에 있는 Pointer 는 Caller 에게 소유권 이전을 표시하 고, 레퍼런스는 전달된 객체의 소유권이 원 소유자 에게 남는다는 것을 표시합니다.
15
17. Active Object-는 Symbian OS 기능의 주요한 요소입
니다. SDK 문서와 Symbian Developer Network 백서등 을 숙독해 이 Active Object 들의 속성을 잘 이해하는 것이 중요합니다. 유용한 팁 몇 가지를 보면 다음과 같습니다: - RunL()안에서 TRAP()을 호출할 필요가 없습 니다. Active Scheduler 자체가 이미 RunL()을 TRAP 하고, Leave 후에 CActive::RunError() 를 호출합니다. - 여러분은 자신의 RunError()함수를 구현하 여 RunL()의 Leave 시 처리하도록 하십시오. - RunL()작동은 짧게, 빨리 하십시오. 길게 작 동하면 다른 Active Object 이 동작하는 것을 방 해합니다. - 언제나 DoCancel()함수를 구현하고 언제나 AO Destructor 에서 Cancel()을 호출하십시오. 18. 마찬가지로, 가능하면 언제나 Active Object 프레임워
크를 활용하십시오. Loop 에서 잦은 Polling 은 배터 리로 작동되는 디바이스에서는 아주 부적당하고, 상 당한 파워 손실을 유발할 수 있습니다. 게임을 프로 그램할 때 이 점에 특히 유의하십시오 – 좀더 자세 한 것은 Symbian Developer Network 웹사이트의 기술 문서 (www.symbian.com/developer/techlib/papers/porting_ 3D_games/XenGames_paper.pdf ) 를 참조하십시오.
16
19. ViewSrv 11 패닉은 게임 같은 분주한 어플리케이션을
프로그램할 때는 방해물입니다. 이것은 어플리케이 션에 있는 ViewSrv Active Object 가 제때 View server 에 반응하지 않을 때 발생합니다. 허용되는 최대 반 응 시간은 보통 10-20 초입니다. 상세한 설명은 FAQ0900 을, 이 문제를 피하는 실용적인 팁은 FAQ-0920 을 참조하십시오. 둘 다 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에서 입수할 수 있 습니다. 20. HBufC 로 들어가려고 할 때 HBufC::Des()를 사
용할 필요가 없습니다. 그냥 * 연산자로 HBufC 를 Dereference 하기만 하면 됩니다 – 이점은, 예를 들 어, TDesC& 파라미터가 필요한(위에서 추천한 대 로) 메소드에 대한 인수로 HBufC 를 전달할때, 특히 중요합니다. 21. 표준 어플리케이션 .INI 파일 기능을 사용할 때는 (즉,
Application UI 클 래 스 에 서 Application()>OpenIniFileLC();API 를 사용함으로써), 스트림 에 버전 번호 정보와 함께 적는 것을 잊지 마십시오. 그러면 여러분 어플리케이션의 미래 버전을 위한 새 스트림을 만들 수 있고, 최종 사용자가 미래에 귀하 제품의 새 버전을 설치할 수 있습니다.‘또한’ old 亮 .INI 파일이 맞는 세팅이나 스트림을 찾을 수 없더라 도 새 버전에 패닉 상태를 유발하지 못합니다.
17
22. 어플리케이션에 프레임워크 클래스를 구현할 때는
조심하십시오. 언제나 제공되는 플랫폼-고유의 프 레임워크 클래스에서 파생시켜야 합니다. 예를 들 어, UIQ 에서는, AppUi 클래스를 CEikAppUi 에서 파생시키지 말고, CQikAppUi 에서 파생시키십시 오. 모든 어플리케이션 베이스 클래스 (CQikAppUi, CQikApplication, CQikDocument)는 어플리케이션들이 정확하게 작동하도록 하기 위해 광범위 프레임워크가 의존하 는 기능을 추가합니다.
테스팅 팁 1. 테스팅 팁 중에서 가장 중요한 것은, 그냥 에뮬레이
터 전체를 종료시키는 것이 아니라, 에뮤레이터 하 에서 어플리케이션을 종료시키는 것입니다. 디버그 모드에는, 어플리케이션 프레임워크 종료 함수들 주변에 메모리와 핸들 체킹 코드가 있습니다. 어플 리케이션을 종료하면, 이 코드가 작동되어 메모리 누출이 있는 지 아니면 핸들(예: R 객체)이 오픈 상 태인 지를 볼 수 있습니다. UIQ 어플리케이션에는 이 목적을 위해 종료 메뉴 아이템을 디버그 모드 만으로 제공하는 것이 관례입니다. 2. 다른 필수적인 팁은, Deployment 전에, 정확한 플랫
폼 의존 정보가 .PKG 파일에 포함되는 것을 보장하 는 것입니다. 필요한 의존성 문자열에 대한 좀더 상 세한 정보는 여러분의 플랫폼-고유의 SDK 에 나와
18
있습니다. 웹사이트 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에 있는 FAQ-0853 에 서도 유용한 정보를 제공합니다. 3. .PKG 파일을 작성할 때는, 또한 적절한 곳에 !:\ Syntax
를 사용하십시오. 일반적으로, 어플리케이션은 최종 사용자 휴대폰의 어떤 드라이브에도 설치되고 실행 될 수 있어야 합니다. C:\ 드라이브에만 설치되는 것 들(예: .INI 파일)은 거의 없어야 합니다.
디버깅 팁 1. 언제나 제일 먼저 에뮬레이터에서 디버깅하십시오.
에뮬레이터와 하드웨어에 생기는 대부분의 문제는 에뮬레이터에서 디버깅하는 것이 훨씬 쉽습니다. 2. 새로운 컨트롤 클래스를 작성하고 디버깅할 때는,
AppUi 의 ConstructL()함수에 iEikonEnv>WsSession().SetAutoFlush(ETrue)를 넣으 십시오. 그러면 gc draw 명령이, 윈도우 서버 클라이 언트 버퍼가 다음에 플러시 될 때가 아니라, 즉시 에 뮬레이터에 나타납니다. WSINI.INI 파일 (\epoc32\release\winscw\udeb\system\data\)을 편집 해 키워드 FLICKERFREEREDRAW 가 존재하지 않도록 확실히 하십시오. 그러면 draw code 를 한 단계씩 체 크하며 각 라인에 미치는 영향을 볼 수 있습니다. 그러나, 이 라인이 Release 되는 소프트웨어에게는들
19
어가지 않도록 조심하십시오. 효율성에 영향이 있습 니다. 3. 소스 파일에 정기적으로 LeaveScan 툴을 실행하십시
오. 그러면 Leave 가능한 코드의 모든 함수들을 체크 하고, 트레일링 L 이 없을 경우 에러 리포트를 해, 소 스에 있는 잠재적인 Bug 나 누락부분를 알려줍니다. 이것은 어느 코드를 잠재적으로 Leave 로 할 수 있는 지 체크하고, 우발사건을 제대로 처리하도록 하는 데 유용합니다. 툴을 다운로드 하거나 상세한 정보 를 원하는 경우에는 www3.symbian.com/faq.nsf 의 Symbian OS FAQ 데이터베이스에 있는 FAQ-0291 을 참조하십시오. 4. 메모리 누출로 인해 종료 시 어플리케이션이 패닉
상태가 되면, MS Visual Studio 에서 누출된 주소를 CBase* 로 Casting 하면 누출된 객체의 타입을 종종 알 수 있습니다. 5. Symbian OS 개발자가 구입 가능하도록 최근에 추가
된 중요한 기능은 On-target debugging 입니다. 이 기 능은 현재로서는 모든 SDK 와 툴 종류에는 사용할 수 없지만, 대부분의 최신 SDK 와 IDE Release 들은 이 기 능을 지원합니다. 가용한 경우에는, 어플리케이션을 Release 하기 전에 이 기능을 사용해서 휴대폰에 관련 된 모든 결함을 찾아내도록 권장합니다. 좀더 상세한 정보는 SDK 나 IDE 문서를 참고하십시오.
20
6. 아래과 같이 “Just in Time” 디버깅이 Enable 되어 있
는 지 확인하십시오: • \epoc32\data\epoc.ini 에서 아래 마크로가 제거되었는 지 확인: JustInTime 0 • 다음 레지스트리 값 설정: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Windows NT\CurrentVersion\AeDebug] "UserDebuggerHotKey"=dword:00000000 "Debugger"="\"C:\\apps\\Metrowerks\\bin\ \IDE.exe\" -p %ld -e %ld" "Auto"="0" 7. %Temp%epocwind.out 에서 디버그 메시지를 검토하
십시오. 8. Lint, Leavesan, HookLogger, Panix, D_EXC 등 사용할 수
있는 개발자 툴을 사용해 메모리 누출 및 기타 에러 를 디버깅 하십시오. 이들뿐만 아니라 다른 유용한 툴들을 Symbian Developer Network (http://developer.symbian.com/main/tools)에서 다운 로드 할 수 있습니다. 9. FAQ-1344 에 Platform Security
(KErrPermissionDenied)위반을 디버깅하는 진 단 방법이 나와 있습니다 – 그렇게 하면 놓친 Capability 들을 쉽게 확인할 수 있습니다.
21
참고문헌 [1]
Symbian Developer Network newsletter
http://developer.symbian.com/main/getstarted/newsletterarchive/ index.jsp [2]
Symbian OS FAQ database
http://developer.symbian.com/main/academy/faqs/index.jsp [3]
Symbian OS C++ Coding Standards paper
http://developer.symbian.com/main/oslibrary [4]
Coding Idioms paper
http://developer.symbian.com/main/oslibrary [5]
Symbian Press
http://developer.symbian.com/main/academy/press/index.jsp [6]
Games Writing paper
http://www.symbian.com/developer/techlib/papers/porting_3D_ games/XenGames_paper.pdf [7]
Active Objects paper
http://nds2.ncsp.nokia.com/download/?asset_id=11981;ref=symbian or http://www.forum.nokia.com/main/1,,1_32_10_5,00.html
22
개발자 자원 Symbian Developer Network http://developer.symbian.com
Symbian OS Tools Providers http://developer.symbian.com/main/tools
Sony Ericsson Developer World http://developer.sonyericsson.com
Forum Nokia http://forum.nokia.com
Sun Microsystems Developer Services http://developer.java.sun.com
개발자 설문조사 Symbian 에게 영향을 미칠 수 있는 5 분 Symbian 은 당사의 개발자 지원에 대한 여러분의 생각을 알고 싶습니다. 당사는 당사 지원 프로그램 개발에 사용될 설문조사를 하고 있습니다. 여러분이 당사 결정에 영향을 주기를 원하시거나, Symbian Press 서적 시리즈를 탈 수 있는 기회를 원하신 다면, 다음 웹사이트를 방문하십시오:
http://developer.symbian.com 그리고 설문지를 작성해 주십시오.
New from
Symbian OS Platform Security 는 …Symbian OS 보안 모델과 Symbian Signed 같은 관련 Symbian 이니셔티 브를 보여주는 내용으로 Licensee 에 서 ISV 까지 모든 개발자 청중들을 위한 필독서임을 입증할 것입니다.
Accredited Symbian Developer Primer “Accredited Symbian Developer Primer” 는 ASD 시험을 통과해서 공인 Symbian 개발자가 되기 위한 공식 지침서입 니다. 이 책은 산업 전문가가 저작 해서 간결 명료하게 설명되어 있습 니다.
Symbian Press: http://developer.symbian.com/main/academy/press
Also from
모든 Symbian OS C++ 개발자용: Developing Software for Symbian OS 저자: Steve Babin Symbian OS C++ for Mobile Phones – Volume 1 저자: Richard Harrison Symbian OS C++ for Mobile Phones – Volume 2 저자: Richard Harrison Symbian OS Explained 저자: Jo Stichbury Symbian OS Internals 저자: Jane Sales
Also from
기업체 및 IT 전문가용: Rapid Mobile Enterprise Development for Symbian OS 저자: Ewan Spence
Symbian OS 프로젝트 매니저용: Symbian for Software Leaders 저자: David Wood
Connectivity 어플리케이션 개발자용: Programming PC Connectivity Applications for Symbian OS 저자: Ian McDowall
Java 개발자용: Programming Java 2 Micro Edition for Symbian OS 저자: Martin de Jode
Also from
출판된 책자 Coding tips Signing tips Getting started Performance Tips Essential UIQ – Getting Started
번역된 책자 Getting Started, Chinese Coding Tips, Chinese Essential UIQ – Getting Started, Chinese Performance Tips, Chinese Coding Tips, Japanese Performance Tips, Japanese
필수 Symbian OS
코딩 팁 설계
코딩
테스트
디버깅
이 미니 책자는 설계에서 디버깅까지 어플리케이 션 생산을 단계적으로 다루면서, 고품질 Symbian OS 소프트웨어 생산을 위한 자문을 제공합니다. 코딩 팁은 필수 Symbian OS 시리즈의 하나입니다: 이 시리즈는 간편하게 Symbian OS 개발자들에게 정보를 제공하도록 계획되었습니다.
Symbian Press Symbian Press 는 Symbian OS 와 관련 기술에 대 해 적시에 권위 있고 실용적인 관련 정보를 제공 하는 책자를 출판합니다. Symbian Press 시리즈 에 대한 정보는 http://developer.symbian.com/main/academy/press 에서 찾을 수 있습니다.