리뷰 이벤트 등의 이슈로 iOS 앱을 출시하기 전에 앱스토어 링크가 필요한 경우가 있다.

앱스토어 링크는 아래와 같은 형식이다.

http://itunes.com/apps/AppName
itms://itunes.com/apps/AppName
itms-apps://itunes.com/apps/AppName

특히 제일 아래 itms-apps 형식을 사용하면 앱브라우저를 거치지 않고 바로 앱스토어로 이동한다.
AppName은 AppName 부분은 Xocde의 PRODUCT_NAME 값과 같다.
PRODUCT_NAME 은 Xcode 프로젝트에서 Build Settings의 Packaging 섹션을 보면 Product Name 으로 정의되어 있다.


<관련 링크>

http://stackoverflow.com/questions/1513945/how-can-i-give-app-store-link-in-my-apps-before-approving-another-apps

http://stackoverflow.com/questions/8723164/where-are-executable-name-and-product-name-defined


저작자 표시
신고
Creative Commons License
Posted by 가리봉맨

넥서스7을 4.2.2(젤리빈) 업데이트한 이후 이클립스 DDMS에서 기기가 계속 offline으로 떴다. 구글링을 해보니 안드로이드 SDK와 SDK tools를 최신 버젼으로 업데이트해야 한단다. 왠지 모르겠지만 SDK Manager에서는 업데이트해야 할 항목들이 보이지 않았다. 그래서 커맨드로 직접 업데이트를 시도했다. 안드로이드 SDK를 설치한 디렉터리 밑의 /tools 디렉터리로 이동한 뒤 아래와 같이 명령어를 입력한다.

다운로드가 모두 완료되면 아래와 같이 설치가 진행된다.

SDK Manager를 실행하면 SDK tools는 버젼이 21.1이고 SDK Platform-tools는 16.0.2가 돼있다. Android SDK 4.2.2도 설치됐다.



넥서스7에서 USB 디버깅을 활성화한 뒤, 컴퓨터에에 연결하면 이 컴퓨터에서 USB디버깅을 허용하겠느냐는 팝업이 뜬다. 이전 버젼의 안드로이드OS에서는 뜨지 않던 팝업이다. 당연히 '예'를 선택한다.

이제 DDMS에서 넥서스7이 Online으로 뜬다.



참고 사이트: http://stackoverflow.com/questions/14993855/android-adb-device-offline-cant-issue-commands


저작자 표시
신고
Creative Commons License
Posted by 가리봉맨

  "많은 사람들이 리눅스를 언급할 때 "자유"를 말한다. 하지만 실제 많은 사람들이 자유의 진정한 의미에 대해서 제대로 알고 있지 못한다고 생각한다. 여기서 말하는 진정한 자유란 자신의 컴퓨터가 무엇을 할지에 대해 결정할 수 있는 힘이라고 생각한다. 또한, 이러한 자유를 지켜내기 위해서는 자신의 컴퓨터가 무엇을 할 수 있는지를 알아야 한다는 것이다. 즉 자유란 비밀이 전혀 없는 컴퓨터 그 자체다. 사용자가 관심을 갖고 알아내고자 한다면, 무엇이든 답을 찾을 수 있는 것이 바로 자유다." - 저자 서문 중에서


  저자 서문 내용이 참 멋지다. 리눅스 하면 자연스럽게 '자유'라는 단어가 떠오른다. 하지만 구체적이고 않고 막연한 느낌이거나 공짜와 같은 뜻으로 이해하기 쉽다. 저자는 서문에서 리눅스에서 말하는 자유에 대해 자세히 설명하고 있다. 리눅스에서 자유란 자신의 컴퓨터가 무슨 일을 할 수 있는지를 이해하고 그것을 아무 제한 없이 사용할 수 있는 것을 의미한다. 그러기 위해서는 필연적으로 GUI 환경이 아닌 커맨드라인 환경을 이용해야만 한다. 파워유저, 특히 프로그래머에게 이보다 더 강력한 학습 동기가 어디 있겠는가.


  제목에 커맨드라인이 들어가면서 다소 거리감이 느껴질 수도 있지만, 이 책은 어떤 리눅스 입문서보다도 더 기초적이고 근본적인 내용을 다루고 있는 진정한 의미의 입문서다. 초반에는 '쉘이란 무엇인가'부터 시작해서 ls, cd, cp 등 기본적인 명령어를 다룬다. 그리고 단계적으로 시스템 환경 설정, VI 편집기 다루는 법, 패키지 관리 등의 내용으로 넘어간다. 그리고 후반부에는 소스 컴파일, 쉘 스크립트 작성 등 파워유저로 넘어가기 위한 지식을 알려준다. 그리고 단순히 지식을 나열하는 데에 그치지 않고 그것이 어떻게 동작하고 유저가 무엇을 할 수 있는지에 대해 자세히 설명한다.


  "리눅스 커맨드라인 완벽 입문서"는 자신의 컴퓨터로부터 진정한 자유를 얻기를 원하는 파워유저들에게 적극 추천하고 싶은 책이다.

저작자 표시
신고
Creative Commons License
Posted by 가리봉맨

앱이 실행 중 크래쉬됐을 때는 크래쉬 덤프(crash dump)를 확인하면 대강의 원인을 파악할 수 있다. 이를 위해 ‘Addr2line’ 라는 툴을 사용한다. Addr2line 툴은 명령어 주소와 실행 이미지를 파일 이름, 함수 이름, 소스 라인 번호로 변환하는 유틸리티이다. NDK는 ‘arm-linux-androideabi-addr2line’ 라는 이름으로 해당 툴을 제공한다.


먼저 아래 그림과 같이 사용자 계정의 루트 디렉토리로 이동한 뒤 편집기로 .bash_profile 파일을 연다. 



그리고 PATH 에 ‘arm-linux-androideabi-addr2line’ 툴이 있는 디렉토리를 다음과 같이 추가한다.


 export PATH=${PATH}:$NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin


여기서 ‘$NDK_ROOT’ 는 NDK가 설치된 디렉토리를 의미한다. 각자 환경에 맞게 절대 경로를 넣는다. 설정을 마쳤으면 현재 프로젝트의 /proj.android 디렉토리로 이동한 뒤 아래와 같이 Addr2line를 실행한다.


 arm-linux-androideabi-addr2line -C -f -e obj/local/armeabi/libXXX.so <address>


libXXX.so 는 게임 소스 라이브러리를 의미하며 기본으로 설정된 이름을 수정하지 않았다면 libgame.so 다. <address>는 앱이 크래쉬됐을 때 이클립스 LogCat에 출력되는 주소 값이다.


아래 그림은 앱이 크래쉬됐을 때 LogCat에 출력되는 로그다. 하이라이트된 라인의 000e6c54가 크래쉬된 코드의 주소 값이다. 



이 주소 값을 Addr2line 툴에 넘겨주고 실행해 보면 아래 그림과 같이 문제가 된 파일명인 ‘HelloWorldScene.cpp’과 ‘76’ 이라는 라인 정보, 그리고 멤버 함수명인 ‘HelloWorld::init()’ 까지 출력된다.



이것으로 세 번에 걸친 Cocos2d-x 안드로이드 디버깅 연재를 마치겠다.


저작자 표시
신고
Creative Commons License
Posted by 가리봉맨

이클립스에서 C/C++ 소스에 브레이크 포인트(break point)를 설정하여 디버거에서 변수의 값을 확인하는 방법을 살펴보겠다. 안드로이드 SDK, CDT 플러그인 등 기본적인 도구들은 이미 설치되어 있다고 가정한다.


Native 코드(C/C+)에 대한 디버깅을 하려면 다시 별도의 플로그인을 설치해야 한다. 여러가지 플러그인이 있는데 여기서는 많이 사용되는 두 가지 플러그인을 소개한다.


먼저 ADT(Android development tools)에 포함된 NDK 플러그인을 이용한 방법이다. 해당 플러그인을 설치하려면 이클립스 메뉴에서 Help -> Install New Software를 선택한다. 그리고 work with: 옆에 있는 콤보 박스에 ‘https://dl-ssl.google.com/android/eclipse/’를 입력한다. 표시되는 아이템들 중에서 ‘NDK plugins’를 선택하고 안내에 따라 설치한다.


<그림> NDK플러그인 설치


이제 NDK 설치 경로가 이클립스에 정상적으로 설정되어 있는지 확인한다. 이클립스 환경설정(Preferences) 창을 띄운 뒤, 좌측 메뉴에서 Android -> NDK 를 선택한다. 여기서 NDK Location 이 올바르게 설정되어 있는지 확인한다.


<그림> NDK 설치 경로 설정


다음으로 프로젝트를 선택한 뒤 마우스 오른쪽 버튼을 누른다. 팝업 메뉴에서 ‘Android Tools’ -> ‘Add native support’ 를 선택한다. <그림8>과 같은 팝업창이 나타나면 Finish 버튼을 누른다.


<그림> Add native support


만약 C/C++ 소스 파일들을 이미 프로젝트에 추가했다면 이 과정은 생략한다. 아마도 ‘Add native support’ 메뉴 자체가 나타나지 않을 것이다.


위의 작업들을 모두 완료했다면 이클립스 메뉴에서 Procjet -> Build All 을 선택해서 프로젝트를 빌드한다. 이제 C/C++ 코드에 브레이크 포인트를 설정하고 디버깅을 진행할 수 있게 됐다.


<그림> C/C++ 코드에 브레이크 포인트 설정


두번째로 살펴볼 플러그인은 그래픽 처리 장치로 유명한 Nvidia사에서 만든 NVIDIA Debug Manager 플러그인이다. 해당 플러그인은 Nvidia 개발자 사이트의 Tegra Resources 페이지에서 다운로드 받을 수 있다. 페이지 주소는 다음과 같다. 


Tegra Resources: https://developer.nvidia.com/tegra-resources#tools


단, 파일을 다운로드 받기 위해서는 Nvidia 계정을 생성하고 Tegra Registered Developer Program 에 가입해야 한다. 모두 무료다. 해당 페이지에서 Tegra Android Deveoper Pack을 다운로드 받은 뒤, 설치 과정에서 NVIDIA Debug Manager 플러그인만 선택해서 설치한다. 참고로 NVIDIA Debug Manager 플러그인은 Tegra 칩을 사용하지 않은 기기에서도 잘 작동한다.


NVIDIA Debug Manager 플러그인의 특징과 설치 방법에 대한 보다 자세한 정보는 아래 페이지를 참조하기 바란다.


NVIDIA Debug Manager for Android NDK: https://developer.nvidia.com/nvidia-debug-manager-android-ndk


플러그인 설치를 완료하고 디버깅을 시작하려면 이클립스에서 프로젝트를 선택한 뒤, 마우스 오른쪽 버튼을 클릭을 한다. 그리고 Debug as -> Android NDK Application 을 선택한다. ‘Android NDK Application’ 메뉴는 NVIDIA Debug Manager 플러그인을 설치해야만 나타난다.


<그림> Android NDK Application 디버깅



<참고 사이트>

http://tools.android.com/recent/usingthendkplugin

http://www.raywenderlich.com/11283/cocos2d-x-for-ios-and-android-getting-started


저작자 표시
신고
Creative Commons License
Posted by 가리봉맨

PC 프로그램 개발은 개발 환경과 실행 환경이 같다. 하지만 모바일 앱은 개발을 PC(맥 포함)에서 하지만 실행 환경은 모바일 기기다. 즉, 프로그램이 PC 에뮬레이터 상에서 정상적으로 작동한다고 해도 모바일 기기에서는 그렇지 않을 수 있다. 기기 디버깅이 반드시 필요한 이유다.


타겟 디바이스가 iOS 기기라면 디버깅에 Xcode를 그대로 사용하면 된다. 하지만 안드로이드 기기에서는 상대적으로 디버깅이 어려운 이클립스(eclipse) 또는 커맨드라인 도구(Command Line Tool)를 이용할 수 밖에 없다. 이에 안드로이드 기기 디버깅 방법을 총 세 편의 포스트를 통해 알아보겠다.


이에 앞서 Cocos2d-x 설치 시 함께 제공되는 스크립트(create-android-project.sh)를 이용해서 기본 프로젝트를 만든다. 프로젝트 이름은 “Cocos2dxTest”로 한다. 참고로 현재 Cocos2d-x 최신 버젼은 2013년 1월 28일에 릴리즈된 버젼 2.1.1이다.


<그림1> Cocos2d-x 안드로이드 프로젝트 생성


이 포스트는 연재의 첫번째 편으로 이클립스 LogCat 창에 로그를 찍는 방법을 알아보겠다. Xcode에서는 C++ 소스 코드에서 CCLog 메서드를 호출해서 콘솔 창에 로그를 출력한다. 이클립스에서도 같은 방법으로 콘솔 창에 로그를 출력할 수 있다.

/cocos2dxTest/Classes/HelloWorldScene.cpp 파일의 HelloWorld:scene() 메서드에 다음 코드를 입력한다.


CCLog(“start HelloWorld scene!”); 


만약 CDT 플러그인을 설치했다면 <그림2>와 같이 이클립스에서 바로 C++ 코드를 편집할 수 있다.

<그림2> 프로그램 소스에서 CCLog 메서드 호출


다음으로 프로젝트를 디버깅 모드로 실행한 뒤, 퍼스펙티브 창을 DDMS로 변경한다.


<그림3> DDMS 선택


<그림4>와 같이 LogCat 창에 “start HelloWorld scene!”이라는 로그가 출력된다.


<그림4> LogCat에 로그 출력


LogCat은 원하는 종류의 로그만 화면에 표시하는 기능인 필터를 지원한다. 만약 cocos2d-x라는 필터가 없다면 새로 만든다. LogCat 좌상단에 있는 녹색 ‘+’ 버튼을 클릭하면 “LogCat Message Filter Settings” 라는 창이 뜬다. 여기서 Filter Name: 에 ‘cocos2d-x’를 입력하고, by Log Tag: 에는 ‘cocos2d-x debug info’라고 입력한다.


<그림5> LogCat 필터 생성

저작자 표시
신고
Creative Commons License
Posted by 가리봉맨


티스토리 툴바