페이지

2014년 7월 31일 목요일

ERROR ITMS-9000: "Missing required icon file. The bundle does not contain an app icon for iPad of exactly '72x72' pixels, in .png format for iOS versions < 7.0."

작업환경 : XCODE 5.1.1

AppStore 업로드시 아이콘때문에 에러가 날때가있습니다.

ERROR ITMS-9000: "Missing required icon file. The bundle does not contain an app icon for iPad of exactly '72x72' pixels, in .png format for iOS versions < 7.0."






그럴경우엔 아래와 같이 화살표를 눌러서 추가해줍니다.



App Icons 추가 - option 키를 누르고 이미지를 드래그하면 복사도 됩니다.
하지만 혹시 모르니 사이즈별로 넣어주세요

LaunchImage 추가



혹여나 사이즈 별 적용 하고 싶으면
Source - Don't use asset catalogs 를 누르면

이런식으로 나옵니다. 이미지는 드래그 해서 넣을 수 있게 됩니다.
이때는 꼭 이미지사이즈가 다 정확해야합니다.


그런뒤엔 꼭. 클린(clean) 후 빌드 해주세요!!

2014년 7월 30일 수요일

Query Language

데이터 정의 언어(영어: Data Definition Language, DDL)
CREATE - 새로운 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저 만들기
DROP - 이미 존재하는 데이터베이스 관계(테이블), 뷰, 인덱스, 저장 프로시저를 제거한다.
ALTER - 이미 존재하는 데이터베이스 개체에 대한 변경, RENAME의 역할을 한다.
TRUNCATE - 관계 (테이블)에서 데이터를 돌이킬 수 없는 제거

데이터 조작 언어(영어: Data Manipulation Language, DML)
SELECT - 검색 (질의)
INSERT - 삽입 (등록)
UPDATE - 업데이트 (수정)
DELETE - 삭제
데이터 제어 언어(영어: Data Control Language, DCL)
GRANT - 특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여
REVOKE - 특정 데이터베이스 이용자에게 부여한 특정 권한을 박탈
SQL의 GRANT 및 REVOKE 데이터베이스 사용자로 설정할 수있는 권한에는 다음과 같은 것이있다.
CONNECT- 데이터베이스 또는 스키마에 연결하는 권한
SELECT - 데이터베이스에서 데이터를 검색하는 권한
INSERT - 데이터베이스에 데이터를 등록할 수 있는 권한
UPDATE - 데이터베이스의 데이터를 업데이트 할 수 있는 권한
DELETE - 데이터베이스의 데이터를 삭제할 수 있는 권한
USAGE - 스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한


출처 :
위키
http://ko.wikipedia.org/wiki/%EC%A7%88%EC%9D%98%EC%96%B4
MSDN
http://msdn.microsoft.com/ko-kr/library/bb510741.aspx
SQL문 배우기
http://dblab.duksung.ac.kr/databaseprogramming-20041/sql/sql.htm

2014년 7월 28일 월요일

게임서버공부

WIKI
http://ko.wikipedia.org/wiki/%EC%95%A1%ED%8B%B0%EB%B8%8C%EC%97%91%EC%8A%A4_%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8
MSDN
http://msdn.microsoft.com/ko-kr/library/8xx3tyca(v=vs.110).aspx
ADO(ActiveX Data Object)란?
http://www.dragoneye.co.kr/lecture/ado/ado.asp
ADO.NET을 이용한 SQL 프로그래밍
http://www.sqlprogramming.co.kr/AdoNet/adonet-intro.aspx
ADO.NET에 대한 짧은 이야기
http://www.taeyo.pe.kr/Columns/View.aspx?SEQ=129&PSEQ=10&IDX=0

검색어
ADO 서버


[TCP/IP] 쓰레드 동기화 기법
http://swingmybaby.com/%EC%93%B0%EB%A0%88%EB%93%9C-%EB%8F%99%EA%B8%B0%ED%99%94-%EA%B8%B0%EB%B2%95/
C++ 동기화 객체(Critical Section, Mutex, Semaphore, Event)
http://thermidor.tistory.com/23
3장. 크리티컬 섹션(CriticalSection)과 인터락(InterLock) 함수
http://www.nicklib.com/?mid=application&category=720&document_srl=725&sort_index=readed_count&order_type=asc

검색어
LPCRITICAL_SECTION


IOCP의 AcceptEx 모델~
http://symlink.tistory.com/52
윈속 확장 라이브러리 AcceptEX, GetAcceptExSockaddrs, TransmitFile
http://teraphonia.tistory.com/28

검색어
GetAcceptExSockaddrs


주소정보의 표현 (sockaddr / sockaddr_in)
http://mintnlatte.tistory.com/269

검색어
SOCKADDR_IN

bind() 소켓에 IP주소와 포트번호 지정
http://forum.falinux.com/zbxe/index.php?document_srl=430926&mid=C_LIB

IPv6 프로그래밍
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/TCP_IP/IPv6/IPv6Prog


검색어
SOCKADDR_IN bind


WinSock2 그 두 번 째
http://www.viper.pe.kr/docs/WinSock2-html/winsock2_2.html

검색어
WSAConnect

2014년 7월 25일 금요일

Cocos2D-x 외부라이브러리 사용하기.

외부라이브러리는 
proj.android/jni/ 폴더에
XXXXX.a 와 XXXXX.h 를 함께 복사해놓음.


Android.mk 수정

LOCAL_PATH := $(call my-dir)

# Android.mk 수정시작
# 외부 라이브러리 로드 시작
include $(CLEAR_VARS)
# nmsv_static 이라는 이름으로 만들어짐
LOCAL_MODULE := nmsv_static
LOCAL_SRC_FILES = ./libnmsgsv.a
# build rule ( 라이브러리가 복사됨 )
include $(PREBUILT_STATIC_LIBRARY)
# 외부 라이브러리 로드 끝
# Android.mk 수정끝

include $(CLEAR_VARS)

LOCAL_MODULE := game_shared

LOCAL_MODULE_FILENAME := libgame

FILE_LIST := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)
LOCAL_SRC_FILES := hellocpp/main.cpp $(FILE_LIST:$(LOCAL_PATH)/%=%)

#LOCAL_LDLIBS := -lnmsgsv

LOCAL_STATIC_LIBRARIES := nmsv_static

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes                  

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static
           
include $(BUILD_SHARED_LIBRARY)

$(call import-module,cocosdenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions)

2014년 7월 24일 목요일

Cocos2d-x 2.0.4 다른 작업자 프로젝트 가져와서 빌드 할때 이슈들 정리

Cygwin 명령어
$ cd d:
$ cd WORK_ijkim/02_source/JumpingCat/RollingCat_20140724_Android/JumpingCat/proj.android
$ ./build_native.sh

VC++ 변경
// Include  Directories
D:\Setup\WTL\Include;D:\cocos2dx\cocos2dx204\cocos2dx\platform\win32;D:\cocos2dx\cocos2dx204\cocos2dx\include;D:\cocos2dx\cocos2dx204\cocos2dx;D:\cocos2dx\cocos2dx204\cocos2dx\platform\third_party\win32\OGLES;D:\cocos2dx\cocos2dx204\cocos2dx\kazmath\include;D:\cocos2dx\cocos2dx204\CocosDenshion\include;$(IncludePath)

// Library Directories
D:\WORK_ijkim\02_source\JumpingCat\1398738605.27\lib\win32;$(LibraryPath)

build_native.sh 빌드
./build_native.sh: line 96: /cygdrive/D/cocos2d-x/android-ndk-r9d/ndk-build: No such file or directory   에러 후 정지

경로문제
build_native.sh 수정
#NDK_ROOT="/cygdrive/D/cocos2d-x/android-ndk-r9d"
#COCOS2DX_ROOT="/cygdrive/D/cocos2d-x/cocos2d-2.0-x-2.0.4"


Android NDK: WARNING: APP_PLATFORM android-16 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
Android NDK: WARNING: Ignoring unknown import directory: /cocos2dx/platform/third_party/android/prebuilt
Android NDK: jni/Android.mk: Cannot find module with tag 'cocosdenshion/android' in import path
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
Android NDK: The following directories were searched:
Android NDK:
jni/Android.mk:29: *** Android NDK: Aborting.    .  멈춤.

COCOS2DX_ROOT 에 cocs2dx설치경로를 정확히 입력해준다.
COCOS2DX_ROOT="/cygdrive/D/cocos2dx/cocos2dx204"

make: *** No rule to make target '/cygdrive/d/cocos2d-x/cocos2d-2.0-x-2.0.4/CocosDenshion/android/SimpleAudioEngine.cpp', needed by 'obj/local/armeabi/objs/cocosdenshion_static/SimpleAudioEngine.o'.  멈춤.

아래 링크를 보니 obj 폴더를 지우라던데... 생각해보니 전에 작업자가 빌드를 해놓은 상태라 그런거라 생각 됨. ./build_native.h clean 하니 깔끔하게 해결
http://cocos2dx.tistory.com/21
http://westwoodforever.blogspot.kr/2012/08/cocos2d-x-xxxo-xxxcpp.html

2014년 7월 22일 화요일

페이스북 포스팅하기 소스 (아이폰, 안드로이드) FaceBook Post



안드로이드 소스



public void SendFeed( )
 {
  Handler m_FacebookHandler = new Handler();
  m_FacebookHandler.post(new Runnable() {
   public void run() 
   {
  Bundle params = new Bundle();

  params.putString("name", "Rolling Cat");
  params.putString("caption", "Now Download");
  params.putString("description",  "Rolling Rolling Cat~!"  );  
  params.putString("picture", "http://54.76.113.24/rollingcaticon.png" );
  params.putString("link", "http://54.76.113.24/rollingcatlink.htm");
  
  showDialogWithoutNotificationBar("feed", params);
   }
  });  
 }


private void showDialogWithoutNotificationBar(String action, Bundle params)
 {
  WebDialog mWebDialog = new WebDialog.Builder(mActivity, Session.getActiveSession(), action, params).setOnCompleteListener(new WebDialog.OnCompleteListener() {
      @Override
      public void onComplete(Bundle values, FacebookException error) {
          if (error != null && !(error instanceof FacebookOperationCanceledException)) {
             
          }
          mWebDialog = null;
          mDialogAction = null;
          mDialogmParams = null;
          
          //ds5623 1128
          if(values != null)
           mNotification = NOTIFICATION_STATE.NOTIFICATION_OK;
          else
           mNotification = NOTIFICATION_STATE.NOTIFICATION_CANCLE;
      }
  }).build();
 
  Window dialog_window = mWebDialog.getWindow();
  dialog_window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
      WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
  mDialogAction = action;
  mDialogmParams = params;
 
  //ds5623 1128
  mNotification = NOTIFICATION_STATE.NOTIFICATION_OPEN;
  mWebDialog.show();
 }




아이폰 IOS 소스



- (void)SendFeed
{
    // Check if the Facebook app is installed and we can present the share dialog
    FBLinkShareParams *params = [[FBLinkShareParams alloc] init];
    params.link = [NSURL URLWithString:@"http://54.76.113.24/rollingcatlink.htm"];
    
    // If the Facebook app is installed and we can present the share dialog
    if ([FBDialogs canPresentShareDialogWithParams:params]) {
        
        // Present share dialog
        [FBDialogs presentShareDialogWithLink:params.link
                                      handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                                          if(error) {
                                              // An error occurred, we need to handle the error
                                              // See: https://developers.facebook.com/docs/ios/errors
                                              NSLog(@"Error publishing story: %@", error.description);
                                          } else {
                                              // Success
                                              NSLog(@"result %@", results);
                                          }
                                      }];
        
        // If the Facebook app is NOT installed and we can't present the share dialog
    } else {
   NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"Rolling Cat", @"name",
                                       @"Noew Download", @"caption",
                                       @"Allow your users to share stories on Facebook from your app using the iOS SDK.", @"description",
                                       @"http://54.76.113.24/rollingcatlink.htm", @"link",
                                       @"http://54.76.113.24/rollingcaticon.png", @"picture",
                                       nil];

[FBWebDialogs presentFeedDialogModallyWithSession:nil
                                               parameters:params
                                                  handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                                                      if (error) {
                                                        NSLog(@"Error publishing story: %@", error.description);
                                                      } else {
                                                          if (result == FBWebDialogResultDialogNotCompleted) {
                                                             NSLog(@"User cancelled.");
                                                          } else {
                                                             
                                                            NSLog(@"Success.");
/*
                                                              NSDictionary *urlParams = [self parseURLParams:[resultURL query]];
                                                              
                                                              if (![urlParams valueForKey:@"post_id"]) {
                                                                
                                                                  NSLog(@"User cancelled.");
                                                                  
                                                              } else {
                                                                 
                                                                  NSString *result = [NSString stringWithFormat: @"Posted story, id: %@", [urlParams valueForKey:@"post_id"]];
                                                                  NSLog(@"result %@", result);
                                                              }
*/
                                                          }
                                                      }
                                                  }];
    }
}

2014년 7월 21일 월요일

모바일에서 안드로이드인지 아이폰인지 체크


모바일에서 안드로이드인지 아이폰인지 체크 해서 해당 앱스토어로 연결해주기

<head>
<script language="javascript">

var userAgent = navigator.userAgent.toLowerCase();

if(userAgent.match('iphone')) {   //아이폰
 window.location.href="http://goo.gl/KZJEvV";
} else if(userAgent.match('ipad')) {   //아이패드
 window.location.href="http://goo.gl/KZJEvV";
} else if(userAgent.match('ipod')) {   //아이팟
 window.location.href="http://goo.gl/KZJEvV";
} else if(userAgent.match('android')) {  //안드로이드
 window.location.href="http://goo.gl/Ka37nv";
} else {  //기타
 window.location.href="http://goo.gl/Ka37nv";
}

</script>
</head>


모바일 웹에서 안드로이드 폰 내의 애플리케이션 설치 판단
http://www.cyworld.com/study_js/7854528

2014년 7월 20일 일요일

페이스북 친구초대 구현 (Graph API 2.0 기준)

Graph API 2.0 기준 페이스북 친구초대 기능 구현해보겠습니다.

작업환경
Facebook : Graph API 2.0
Cocos2D-x 2.0.4

구현목적
이미지와 같이 친구리스트를 불러와 친구를 초대할 수 있는 기능구현

이미지출처 : https://developers.facebook.com/docs/games/invitable-friends/v2.0

검색키워드
taggable_friends (친구리스트) , invitable_friend (친구초대요청), apprequests ,  json

테스트링크 ( Facebook : Graph API 2.0 )
- 친구리스트 ( me/taggable_friends )
https://developers.facebook.com/tools/explorer/454156201353672/?method=GET&path=me%2Ftaggable_friends&version=v2.0
Application : 개발중인 App 선택
Get Access Token - user_friends 체크

- 앱 리퀘스트 (  me/apprequests )
https://developers.facebook.com/tools/explorer/454156201353672/?method=GET&path=me%2Fapprequests&version=v2.0

app/app_link_hosts


테스트
https://developers.facebook.com/tools/explorer/145634995501895/?method=GET&path=app%2Fapp_link_hosts&version=v2.0



참고
https://developers.facebook.com/docs/games/requests/v2.0
https://developers.facebook.com/docs/graph-api/reference/v2.0/user/taggable_friends
https://developers.facebook.com/docs/games/invitable-friends/v2.0

https://developers.facebook.com/docs/android/send-requests

http://books.google.co.kr/books?id=18WjAgAAQBAJ&pg=PT521&lpg=PT521&dq=fb%5Bapp_id%5D&source=bl&ots=eFwo9aVRXa&sig=LKrNBae7xYrC4y3v5YVrSZGp5ns&hl=ko&sa=X&ei=5cXNU66uL47y8QXH84GADw&ved=0CDgQ6AEwBA#v=onepage&q=fb%5Bapp_id%5D&f=false

http://zone.co.kr/infinite/bbs/board.php?bo_table=note&wr_id=29

딥 링킹(Deep Linking) 
https://developers.facebook.com/docs/ios/app-links
정의
http://www.zdnet.co.kr/column/column_view.asp?artice_id=20120611104304&type=det
딥 링킹(Deep Linking) 
Deep Linking은 페이스북 뉴스피드나 타임라인에 노출된 특정 앱을 클릭했을 때 바로 해당 앱을 실행시키거나 앱을 다운로드 받을 수 있는 마켓 또는 앱스토어로 연동하기 위한 기능이다. Deep Linking은 특히 오픈 그래프 기반의 타임라인 앱에서 매우 유용하게 사용할 수 있는데 만약 여러분의 친구가 어떤 앱을 사용하고 있다는 것을 보고 해당 링크를 클릭하면 바로 앱을 실행하거나 다운로드 할 수 있는 방식이다. 현재 Deep Linking은 iOS와 안드로이드 플랫폼 모두를 지원하고 있고, 해당 기능은 페이스북 앱 설정에서 확인할 수 있다.
http://zeonisko.tistory.com/107
딥 링킹
정리 연결되거나 검색되어 들어간 사이트의 최상위 페이지 즉, 홈페이지를 제외한 나머지 모든 웹페이지로 연결되는 하이퍼링크라고 나와있다. 그리고 딥(deep)은 한 사이트에 있는 웹페이지의 계층구조 내에 있는 아래에 있는 페이지라면 어떠한 것이라도 딥이라고 간주된다. 딥링크는 월드와이드웹의 기본적인 기능이긴하나 예를 들어, 사이트의 최상위 홈페이지 방문 횟수만을 기준으로 카운트하는 광고에서는 모든 페이지를 같은 딥 하나로 하는 것도 제시되고 있고, 콘텐츠 보호를 위해 타 사이트가 딥 링크하는 것을 방해하도록 딥 링크 방어 (Deep Link Defense) 프로그램을 만들기도 합니다.

결론은 딥링킹 은 도메인같은 느낌인듯, 쌩 IP 링크 같은 변경 어려운것을 도메인형식으로 변환해줘서 변경하기 쉽게 해준다는 개념..


에러들
Facebook - Apps - Setting 에서 App Domains 등록을 하려고 하면 아래의 메세지가 나오면서 셋팅이 안된다.
This must be derived from 캔버스 URL, 보안 캔버스 URL, Unity Binary URL, 사이트 URL, Mobile Site URL, 페이지 탭 URL 또는 Secure Page Tab URL.
Add Platform 에서 WebSite 를 입력해줘야 한다.



2014년 7월 17일 목요일

언리얼4 시작



언리얼4 공식 사이트 (한글)
https://www.unrealengine.com/ko/blog

언리얼4 네이버 카페
http://cafe.naver.com/unrealenginekr

언리얼4 에디터 소개 (한글자막)
https://www.youtube.com/playlist?list=PLZlv_N0_O1gasd4IcOe9Cx9wHoBB7rxFl

언리얼4 간단한 레벨 제작 (한글자막)
https://www.youtube.com/playlist?list=PLZlv_N0_O1gak1_FoAJVrEGiLIploeF3F

언리얼4 블루프린트 (한글자막)
https://www.youtube.com/playlist?list=PLZlv_N0_O1gaG5BW72It4chjhypxIO9ZB

언리얼4 프로그래밍 입문 (한글자막)
https://www.youtube.com/watch?v=Q3AvZmZEPyc

언리얼4 레벨디자인 입문 (한글자막)
https://www.youtube.com/watch?v=XDsJOFyxMnw

언리얼4 모든 튜토리얼
https://www.youtube.com/playlist?list=PLZlv_N0_O1gaCL2XjKluO7N2Pmmw9pvhE

2014년 7월 16일 수요일

액션 RPG ‘크리티카: 혼돈의 서막’ 모바일 UI 스샷 및 플레이



게임빌 과 컴투스의 HIVE 로그인으로 시작합니다.


전사류를 워낙 좋아해서 광전사로 시작

오프닝은 동영상으로 되어있네요.

로딩엔 멋진 장비류 광고로 되어있습니다.

출석체크는 기본

초기 화면도 기존 게임들과 비슷합니다.

장착하기

상점 무기 정보

스테이지 형식의 미션





게임결과

게임결과 보상


게임결과 보상 2


열쇠 뽑기

열쇠 뽑기 2

열쇠 뽑기 3

열쇠 뽑기 4

열쇠 뽑기 5

열쇠 뽑기 6

열쇠 뽑기 7

스킬 장착

스킬 선택

랭킹

랭킹

골드 구매

캐럿 구매

VIP 구매

환경설정


상점


멋진 방어구, 무기, 날개를 구매할 수 있다.



한정 판매 팝업

게임씬









강화!!




웨이브 미션









미션 팝업



소켓도 박을 수 있다.

우편함 팝업

제작