11월, 2013의 게시물 표시

Error: String types not allowed (at 'configChanges' with value 'orientation|screenSize|smallestScreenSize').AndroidManifest.xml

이미지
Cocos2d-x 3.0 alpha1 의 SimpleGame을 빌드 중에 아래와 같은 에러가 발생했습니다.

DescriptionResourcePathLocationType
error: Error: String types not allowed (at 'configChanges' with value 'orientation|screenSize|smallestScreenSize').AndroidManifest.xml/SimpleGameline 14Android AAPT Problem

android:configChanges="orientation|screenSize|smallestScreenSize">

 AndroidManifest.xml 파일의 위 내용 중 screenSize와 smallestScreenSize가 API Level 13부터 지원하는 속성이라고 합니다. 아래 그림과 같이 프로젝트 속성 - Android - Project Build Target에서 13보다 큰 것으로 지정하면 됩니다.

Unity3D Unable to find suitable jdk installation.

이미지
집에 유니티3D 4.3을 설치하고 안드로이드 빌드를 해보는데 아래와 같은 에러가 발생했습니다.

Unable to find suitable jdk installation

Please make sure you have a suitable jdk installation. Android development requires at least JDK 6 (1.6). The latest JDK can be obtained from the Oracle


 유니티 공식 사이트에 보면 4.2.14.2.2, 지금 오류를 일으키고 있는 4.3 에서 Unable to find suitable jdk installation 에러를 수정 했다고 연달아 되어 있는데 해결이 제대로 안 되었나 봅니다.

 아래와 같이 시스템 속성 - 환경 변수 - 시스템 변수에 JAVA_HOME으로 jdk 설치 폴더를 지정해주면 됩니다.


 Cocos2d-x 나 이런 환경 관련 에러가 발생할 줄 알았는데 유니티3D도 발생하는군요.

Cocos2d-x iOS7 Presenting view controllers on detached view controllers is discouraged

이미지
Presenting view controllers on detached view controllers is discouraged <UIViewController: 0xc808560>.
 전에 정리했던 Cocos2d-x iOS Game Center 연동 샘플소스를 그대로 사용했더니 iOS7에서 위와 같은 로그와 함께 이후 뷰로 터치등이 먹통이 되는 증상이 발생했습니다. 단순히 아래와 같이 게임 센터 로그인 창에서 로그인을 안하고 Cancel 후


 아래와 같이 showLeaderboard 기능을 하는 Close 버튼을 클릭해 리더보드를 한 번 호출하고 OK를 눌러 게임으로 돌아가는 순간부터 먹통이 되더군요.



// Display another view controller as a modal child. Uses a vertical sheet transition if animated.This method has been replaced by presentViewController:animated:completion:
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 6_0);

 iOS SDK에 위와 같이 있길래 아래와 같이 presentViewController로 해줬지만 해결되지 않았습니다.


//[tempUIView presentModalViewController:pController animated:YES]; [tempUIView presentViewController:pController animated:YES completion:nil];

 혹시나 해서 예전에 정리했던 RootViewController을 가져오기 해서 아래와 같이 했더니 잘 작동하네요.

// 루트뷰에하므로불필요 //UIViewController* tempUIView; + (void) showLeaderboard { G…

Cocos2d-x 3.x Android Native Activity JNI 연동하기

이미지
Cocos2d-x 가 3.x가 되면서 기본적으로 아래 그림과 같이 안드로이드 자바 소스부분은 필요치 않게 변경이 되었습니다. 이는 안드로이드 Native Activity를 사용하게 되면서 이렇게 되었는데요, 이 부분에 있어서 요즘 이슈가 있는거 같아 R&D를 해봤습니다.


 이렇게 새로운 프로젝트를 만들면 떡하니 nojava.txt가 있어서 당황하실 수 있습니다. 사실 java 파일을 넣어도 작업이 될 듯은 하네요. 해보진 않았지만요.

 아래 정리할 내용은 Cocos2d-x 3.x에 간단하게 네이티브 액티비티와 간단한 JNI 처리하는 내용인데요, 사실 어떻게보면 기존에 정리했던 Cococs2d-x 1.x나 2.x 에서 처리했던 JNI 연동GLThread 이슈 처리와 비슷합니다. 왜냐면 Cocos2d-x에서 하듯이 정석?으로 안하고 간단히 샘플로 정리한 것이기 때문이죠. 정석은 밑에서 잠깐 소개하겠습니다. 또한 현재 3.0 alpha1까지 나왔는데 alpha0과는 폴더구조가 다릅니다. 아래 내용은 alpha1으로 진행한 내용입니다.

 먼저 project-creator을 통해 아래와 같이 프로젝트명은 BasicNativeActivityJNI, 패키지명은 com.westwoodforever.sample.nativeactivityjni 로 만들었습니다.


 C++에서 안드로이드 자바를 호출하기 위해 cocos2d-x-3.0alpha1\cocos\2d\platform\android\jni\Java_org_cocos2dx_lib_Cocos2dxHelper.cpp 를 수정해야 합니다.


void BasicJNICallTest(const char* pszMsg)
{
    JniMethodInfo t;
    //#define  CLASS_NAME "org/cocos2dx/lib/Cocos2dxHelper"
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME
        , "AndroidJNI…

Unity3D Facebook SDK for Android Integration - 6. 친구에게 자랑하기

이미지
유니티3D 페이스북 안드로이드 친구에게 앱 요청하기에 이어 친구에게 게임 상태 자랑하기를 연동해보겠습니다.


    private void showDialogWithoutNotificationBar(String action, Bundle params) {
// Create the dialog
        dialog = new WebDialog.Builder(UnityPlayer.currentActivity
, Session.getActiveSession()
, action
, params).setOnCompleteListener(
                        new WebDialog.OnCompleteListener() {

               @Override
               public void onComplete(Bundle values, FacebookException error) {
                       if (error != null && !(error instanceof FacebookOperationCanceledException)) {

                       }
                       dialog = null;
                       dialogAction = null;
                       dialogParams = null;
               }
                        }).build();

   // Hide the notification bar and resize to full screen
   Window dialog_window = dialog.getWindow();
   dialog_window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

  …

Cocos2d-x 3.0 alpha1 Sample Build시 프로젝트 파일은 이름이 바뀌었거나 솔루션에 더 이상 없습니다

이미지
Cocos2d-x 3.0 alpha1 이 릴리즈 되었습니다. 샘플을 빌드해보려고 sln 파일을 찾아보았으나 안보이더군요. 그래서 samples\Cpp\HelloCpp\proj.win32 에 있는 프로젝트 파일을 직접 열어서 빌드했더니 아래와 같은 오류가 발생했습니다.
 프로젝트 파일은 이름이 바뀌었거나 솔루션에 더 이상 없습니다. 라는 에러인데 첨 보는 에러입니다. 보통은 비주얼 스튜디오 프로젝트 파일을 열어서 빌드해도 되는데 말이죠.

Cocos2d-x의 깃허브에 가보니 맨 밑에 플랫폼별 빌드 설명이 있네요. 모두 build 폴더에 들어 있고 윈도우의 경우는 아래 그림과 같이 cocos2d-win32.vc2012.sln 파일을 열어서 빌드하면 됩니다.

 샘플 sln 이니 이렇게 여러게 있는게 정상이죠. Cocos2d-x 3.0 alpha1로 오면서 폴더 구조가 변경이 되고 그냥 바로 샘플 폴더에서 진행하다보니 이런 이슈도 발생했네요.

UDK 저장 불가: 그래프가 외부 맵 패키지에 있는 오브젝트에 링크되어 있습니다.

이미지
저장 불가: 그래프가 외부 맵 패키지에 있는 오브젝트에 링크되어 있습니다. (시간이 좀 걸리겠지만) 해당 오브젝트로의 참조 체인을 찾아 보십시오.

 UDK 재질 R&D 중 위와 같은 오류가 발생 했습니다. 플레이 테스트를 하려고 하면 저장이 되는데 저장 할 수 없다는 오류와 함께 플레이는 해보지도 못하고 있는거죠.

Log:
==== Worlds needing PIE Save:
Log: Untitled_2
Log: ==== 1 total
Log: Built Phys StaticMesh Cache: 2.789 ms
Log: COOKEDPHYSICS: 0 TriMeshes (0.000000 KB), 2 Convex Hulls (2.164063 KB) - Total 2.164063 KB
Log: COOKEDPHYSICS: BSP 0.42 KB
Log: Obj in another map: Material Untitled_1.MaterialError
Log:
Referencers of Material Untitled_1.MaterialError:
Log: Model Untitled_2.TheWorld:PersistentLevel.Model_0 (1 refs)
Log: Polys Untitled_2.TheWorld:PersistentLevel.Brush_2.Model_4.Polys_7 (1 refs)
Log: ModelComponent Untitled_2.TheWorld:PersistentLevel.ModelComponent_0 (1 refs)
Warning: D:\UDK\Binaries\Win64\..\..\UDKGame\Autosaves\UEDPIEUntitled_2.udk 저장 불가: 그래프가 외부 맵 패키지에 있는 Material Untitled_1.MaterialError (Unknown property) 오브젝트에 링크되어 있습니다.

 로그는 위와 같습니다.

 한국어로 구글링을 하니 같은 증상으로 질문만 있을 뿐 해결책이 없어 UDK를 영어로 재시작…

UDK Command not recognized: AddBots

이미지
첫 UDK 포스팅이네요. 그렇습니다 이젠 UDK 이슈들도 포스팅을 시작합니다.
 번역서를 보면서 R&D 중인데 AddBots 명령어를 해줘도 봇이 생성이 안되더군요. 조금 리서치를 해보면 Add PathNode, Add Trigger, Actor Factory 등등의 해주라는 글들이 있지만 커스텀 봇 추가도 아닌 그냥 심플한 봇 추가 자체도 안되고 있는 것이죠.
 Command not recognized: AddBots 에러와 함께 봇 생성이 안되더군요. 위 그림은 ` 키를 눌러 콘솔에서 명령어를 입력한 것입니다. Tab키로 나온 콘솔에서는 에러 메시지가 보이질 않더군요.

 보기 -> 월드 프로퍼티를 클릭해 속성창을 엽니다.

 월드 프로퍼티 창에서 Game Type -> Default Game Type이 Node으로 되어있다면 다른 UTDeathmatch 등으로 바꿔줍니다. UTCTFGame_Content 이하부터 기본적으로 가능한 것 같습니다.

 이제 콘솔에서 AddBots 1 등을 입력하면 봇과 싸울 수 있습니다.

 과연 유니티3D와 비교해서 어떨지 기대되는 UDK 군요!

Cocos2d-x Eclipse androidmanifest.xml file missing

이미지
androidmanifest.xml file missing

 Cocos2d-x 안드로이드 프로젝트 빌드중 위와 같은 오류가 발생했습니다. 프로젝트 루트에 있는 androidmanifest.xml을 말하는 건 아닌 듯 하구요 bin파일에 생성되는 androidmanifest.xml 이 생성되지 않아 생긴 오류였습니다.

 Clean 후 다시 빌드등을 해보았으나 계속 오류가 발생했습니다. 제 경우 위 그림과 같이 assets, bin, gen, libs, obj 를 지우고 다시 빌드해주니

 bin 폴더에 androidmanifest.xml이 생성이 잘 되네요.

Eclipse 자바 소스에서 한글 인코딩 빌드 오류

이미지
String literal is not properly closed by a double-quote

Syntax error on token "}", delete this token
Syntax error on token ")", { expected
Syntax error on token ",", delete this tokenSyntax error, insert ")" to complete MethodInvocation
Syntax error, insert ";" to complete Statement
Syntax error, insert "}" to complete MethodBody
Syntax error on tokens, delete these tokens

 이클립스에서 빌드중 위와 같은 에러가 발생했습니다.

 관련 소스를 보니 한글이 입력 되어 있는지 깨져 보이네요.

 에러가 발생하는 파일에 마우스 우클릭 -> Properties -> Resource에서 위 그림과 같이 Text file encoding을 MS949에서 UTF-8로 설정하시면 됩니다.

 소스에서도 한글이 잘 보이고 컴파일 에러도 수정 됩니다.

Unity3D Error building Player: ArgumentException: An empty file name is not valid.

이미지
Error building Player: ArgumentException: An empty file name is not valid.

 오랜만에 맥에서 유니티3D를 가지고 안드로이드 빌드하려니 이런 에러가 발생하네요. 맥은 10.8.5고 유니티3D는 4.1.2 였습니다. 구글링을 해보면 맥을 다시 설치해야한다는 내용도 있지만 아래 내용으로 해결했습니다. 아무래도 안드로이드 SDK 환경이 맥 OS 업데이트 전에 사용하던 것이라 오래되서 그런 듯 하네요.

 이클립스도 실행이 안되길래 구글 개발자 센터에 있는 Adding Platforms and Packages 문서를 보고 위와 같이 sdk/tools 폴더에서 ./android sdk 를 실행해 줬습니다.

 맥에서는 Java SE 런터임이 기본 설치가 되어 있는줄 알았는데 아닌가보네요. 일단 설치해줍니다.

 역시나 Android SDK Tools가 21.0.1로 비교적 구버전이네요. Android Support Library도 구버전 이구요. 업데이트 해줍니다.

 업데이트 해준 후 이상없이 apk가 빌드 되었습니다.

iOS AppStore This bundle is invalid. The value for key CFBundleVersion [xxx] in the Info.plist file must be a period-separated list of non-negative integers.

이미지
This bundle is invalid. The value for key CFBundleVersion [1.0.2.b] in the Info.plist file must be a period-separated list of non-negative integers.

 현재는 서비스중인 게임을 애플 앱스토어에 버전업하면서 생긴 이슈입니다. 위 그림과 같이 Bundle version을 1.0.2b 로 했더니 에러가 발생했는데요, b를 빼고 1.0.2 로 변경 후 이상없이 업로드에 성공했습니다. 아무래도 숫자만 지원하는 것 같습니다.

 다른 해결 방법으로는 위 그림과 같이 Bundle versions string, short와 Bundle version의 값을 같게 해주면 해결이 된다고 하지만 유니티3D에서 기본적으로 빌드한 xcode 프로젝트에는 Bundle versions string, short가 아예 없더군요. 위 그림은 제가 추가한 것이구요. 아무튼 이 것과는 상관없이 스토어에 업로드 성공했습니다.

facebook The app references non-public selectors in Payload/xxx.app/xxx: id

이미지
유니티3D iOS 페이스북을 연동한 게임이 현재 애플 앱스토어의 승인이 된 상태입니다.

The app references non-public selectors in Payload/xxx.app/xxx: id

 그런데 위와 같은 경고가 있는 상태인데요, 일본의 한 개발자는 페이스북 iOS SDK 3.8로 업데이트하면 된다고 하지만 이미 저희는 3.8을 사용중이었습니다.

페이스북 개발자 센터에서도 관련해서 이슈가 있더군요. 유저나 친구의 id를 가져올 때 소스상 수정을 해줘야 하는데요, 기존에 자신의 ID를 가져오는 부분친구 목록을 가져오는 부분에서

user.id

 이런 부분을

 [user objectForKey:@"id"]

 이런식으로 변경을 해줘야합니다.

 아마도 오브젝트-C에서 기본 예약어로 지정된 id라서 그런것 같네요. 어쩐지 xcode에서 색상이 분홍색이더라니...

C# 에서 SQLite 사용하기 - System.Data.SQLite

이미지
닷넷 프레임워크에서는 기본적으로 SQLite를 지원하지 않는 듯 하네요. 이번 포스팅은 C#에서 SQLite를 사용할 수 있게 해주는 System.Data.SQLite에 대한 것을 정리해 봅니다.

System.Data.SQLite Download 페이지에 가셔서 각자 개발하고 있는 환경에 맞는 OS 버전과 닷넷 버전용 설치파일을 다운로드 후 설치해줍니다.

 진행중인 C# 프로젝트에서 References 마우스 우클릭 -> Add Reference를 선택하신 후 Browse 버튼을 눌러 위와 같이 설치된 System.Data.SQLite.dll 을 참조로 추가해줍니다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// SQLite 사용하기 위해
using System.Data.SQLite;

namespace SqliteCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            string strConn = @"Data Source=D:\testdb.db";

            using (SQLiteConnection conn = new SQLiteConnection(strConn))
            {
                conn.Open();

                string strSQL = "CREATE TABLE member (name string)";
                SQLiteCommand sqlcmd = new SQLiteCommand(strSQL, conn);
                sqlcmd.ExecuteNonQuery();
                sqlcmd.Dispose();

   …