본문 바로가기

Study/Engine

[Cocos2d-x] Windows RT (WinRT) 로 포팅 시 주의해야할 점 (수정)




오늘 새벽, 드디어 Windows 8.1 용 DigiDigi 를 실행시키는데 성공했습니다. 그동안 여러 삽질을 하긴 했습니다만, 역시나 국내 자료는 전무하고, 영어로 된 자료도 찾기 힘들더라구요. 아무래도 Cocos2d-x 가 중국에서 시작되어 그런가봅니다. 어쨌든, 제가 포팅을 하면서 겪었던 이슈들을 생각나는대로 적어보겠습니다.


***** 주의 : 해당 이슈는 Cocos2d-x 2.2 버전에서 경험한 것들입니다. 일부 사항의 경우엔 상위 릴리즈에서는 고쳐졌을 수도 있습니다.


***** 추가 : DigiDigi Project 를 Cocos2d-x 2.2 에서 Cocos2d-x 2.2.2 로 업그레이드한 후에 아래의 현상 중 몇몇은 개선이 되었습니다. 보시는데 참고해주시기 바랍니다.



1. Windows 8.1 개발자 라이센스 갱신 문제


Cocos2d-x Root 폴더에 있는 tools/project-creator/create_project.py 로 프로젝트를 생성하셨다면 proj.winrt 라는 폴더가 있을 겁니다. 그 폴더의 솔루션 파일을 열어보면, 만약 Windows App 개발을 처음하는 컴퓨터라면 Windows 8.1 개발자 라이센스 갱신에 대한 안내창이 뜰겁니다. 동의함을 누르고 인증을 진행하면 Microsoft 계정으로의 로그인을 요구하는데, 이 때 Microsoft 개발자 등록한 계정으로 로그인 하시면 라이센스 서버와 연결해서 인증을 진행하게 되는데, 저같은 경우는





이와 같은 문제가 발생했습니다. 그래서 애초에 Windows RT 개발 시작도 못했다고 합니다... 그래서 저 오류 코드로 구글에 검색해보니, 라이센스 서버를 수동으로 바꾸면 된다고 하는데 어떻게 해야하는지도 모르겠고, 답답하기만 했습니다. 다른 의견으로는 마소 담당자에게 연락해서 풀어보라 하더라구요. 그렇게 하려니까 절차도 복잡하고 무슨 계약을 하라느니 어쩌느니... 하여간 불편한게 이만저만이 아니더라구요. 그래서 더 찾아봤더니, 일본 쪽 블로그에 써있는 글귀를 발견하게 됩니다. 계속 재시도 해서 된 사례도 있고, 정 안된다면 윈도우를 재설치해보라더군요. 이 문제가 Windows OS 의 정품 인증 관련 문제인 것 같습니다. 실제로 제가 쓰고 있던 OS 도 Windows 8.1 Enterprise 평가판이었거든요. 어차피 체험 기간도 만료되어 가서 깔끔하게 재설치할 겸 오늘 새벽에 포멧을 진행했습니다. 포멧하고나서 정품 인증을 받고, Visual Studio 2012 를 설치하고 다시 인증을 받아보니 잘 되더군요.






2. pch.h 문제


위와 같은 실행 성공(?) 화면을 얻기 위해서는 한가지 더 해야할 것이 있습니다. 라이센스를 갱신하고나서 바로 빌드를 하면 본인이 작업한 소스코드에 pch.h 가 없다는 처음보는 애러가 발생할 것입니다. 해당 에러는 프로젝트에서 다음 항목을 바꿔주면 해결됩니다.





Precompiled Header 에 아마 Use 가 기본으로 되어있을텐데, Not Using Precomiled Headers 를 선택해주고 확인을 누른 후 빌드를 하면 성공적으로 이루어질 것입니다.



3. CocosDenshion 문제 (Cocos2d-x 2.2.2 에서는 정상 작동)


Cocos2d-x 에서 배경음악이나 효과음을 쓸 때 SimpleAudioEngine 이라는 걸 쓰지요? 근데 아마 create_project.py 로 생성한 템플릿에서 SimpleAudioEngine.h 를 추가하고 using namespace CocosDenshion 을 쓰면 밑줄이 쫘악 그어질 겁니다. 이유는 프로젝트 내에 CocosDenshion 에 대한 헤더 파일이 어디에 있는지 모르기 때문입니다. 보통 win32 프로젝트의 경우엔 미리 정의해놓았지만, 어째서인지 winrt 프로젝트에서는 해당 헤더와 라이브러리 경로를 찾아볼 수가 없더라구요. 아래와 같이 설정하시면 됩니다.





프로젝트 설정에서 C/C++ -> General 로 가서 Additional Include Directorires 에서 위의 그림에 선택된 것 처럼 CocosDenshion 의 include 폴더를 추가해주시면 됩니다. 그리고 나서,





현재 솔루션에 Cocos2d-x Root 의 CocosDenshion/proj.winrt 에 있는 CocosDenshion 프로젝트를 추가해주세요. 그 후 아래 그림처럼 솔루션 설정에서 CocosDenshion 프로젝트를 체크해주시면 됩니다.






4. Windows 8.1 Retargeting 문제 (혹은 Visual Studio 2013)


최근에 Windows 가 8.1 로 업그레이드 되면서 개발한 앱이나 개발중인 앱, 개발하려는 앱들을 8.1 로 판올림 하는 것을 권장(?)하는 것 같더라구요. 처음에 Visual Studio 2012 에서 시도해보려고 했으나, 라이센스 문제로 Visual Studio 2013 을 설치해서 프로젝트를 판올림했는데, 다시 깔고나서 Visual Studio 2012 로 하려니까 버전이 높다면서 안되더라구요. 이건 저의 내부 문제인 것 같아서 딱히 공유할 문제는 아닌 것 같네요... (쓰고보니 이상함;)



5. Resource 경로 문제 (2.2.2 정상 작동)


제가 Windows RT 용 프로그램을 처음 만들어보는거라서 그런지도 모르겠습니다만, 현재 Visual Studio 프로젝트의 Solution Explorer 에 Resource 를 추가할 때 주의해야할 사항이 있습니다. Project Root 에 있는 Resource 에서 추가하면 안되고, 반드시 proj.winrt/Assets/Resource 에 있는 파일들을 추가해야 합니다. 그렇지 않으면 기존에 상대경로로 작성했던 모든 코드들을 바꿔야하는 상황에까지 몰리게 됩니다 (...)





반드시 Assets/Resources 에 있는 녀석들을 추가해두도록 합시다. 위의 것들은 컴파일을 하면 Visual Studio 에서 자동으로 MyProject/Resources 에 있는 모든 자원들을 MyProject/proj.winrt/Assets/Resources 로 복사합니다.



6. 그래도 Resource 를 불러오는 코드에서 에러가 난다...? (2.2.2 정상 작동)


그렇다면 한가지 할 일이 더 남았습니다. 에러나는 애들을 아래와 같이 설정(Content = YES)해주면 됩니다.





에러가 주로 발생하는 부분이 plist 나 fnt 와 같은 미리볼 수 없는 파일들인 것 같습니다. 제가 추측하는 에러의 원인은 아마 윈도우에서 타입을 특정할 수 없는 녀석들을 앱을 Deploy 할 때 제외시키는 게 아닐까 싶습니다만...



그도 그럴 것이 프로젝트 파일을 까보면 그림 파일들은 아래와 같이 Image Include 라면서 챙겨주는데, 위의 스샷은 그렇지 않잖아요 ㅎ? 심지어 mp3 이나 wav 들도 Media Include 라면서 챙겨줍니다 (...)




마무리하며...


쓰고보니 생각보다 글이 길어졌네요. 하지만 제가 요 며칠동안 고생한 것을 되새길 겸, 저와 같은 삽질과 고통으로부터 벗어나길 바라며 정성스럽지는 않지만 나름대로 써보았습니다. 우리나라에서 Windows 8.1 용 앱으로, 게다가 게임으로, 특히나 Cocos2d-x 로 개발을 하려는 사람이 몇이나 될까 싶지만서도, 이런 국문으로 된 팁이 많이 없어서 아쉬웠던 것도 사실입니다. 이 글을 보고 조금이나마 도음이 되었으면 좋겠네요 :)