10월, 2012의 게시물 표시

iOS Binary Upload시 no suitable application records were found 에러

이미지
XCode에서 Archives Build 후 Binary Upload시 no suitable application records were found 에러가 발생했습니다. 이미 App을 등록을 해봤던터라 갑자기 나타난 이 에러는 절 당황스럽게 했는데요, 원인은 포스팅 예정에 있는 In App Purchase 때문인지 아니면 제가 강제로 Reject을 해서인지 확실치 않네요.

해결책은 간단합니다. Prepare for Upload 단계에서 Waiting for Upload 단계의 과정을 진행하시면 됩니다. 자세한 내용은 링크의 하단부를 확인하시면 됩니다.

App Store에 App 등록해보자. 2 - Waiting for Upload ~ Waiting for Review 단계

이미지
iTunes Connect에 App의 정보를 올렸다면 이제는 실제로 제작된 App의 Binary를 올려야합니다. 올리기 이전에 먼저 Archives로 Build해서 Binary를 생성해야겠죠.

 Project Navigator -> Project -> Build Settings -> Code Signing의 Release를 iPhone Distribution으로 선택합니다.

 이제 Scheme를 Device로 선택하신 후 Product -> Archive를 선택해서 Build합니다. 만약 No unexpired provisioning profiles found that contain any of the keychain's signing certificates The identity 'iPhone Distribution' doesn't match any valid, non-expired certificate/private key pair in the default keychain
 이런 에러 로그와 함께 Build가 실패한다면 Distribution Provisioning Profile에 문제가 있는 것인데 제 경우는 아예 프로파일을 등록하지 않고 작업을 해서 생긴 문제였습니다. 등록과정은 링크를 확인하시기 바랍니다.

 Build가 성공하면 자동으로 Organizer이 실행이 되고 Archives에 Build한 App이 추가되어 있습니다. 다음으로 유효한 App Binary인지 확인을 위해 Validate를 클릭합니다.

 개발자 계정으로 먼저 로그인을 합니다.

 개발중인 App중에 Waiting for Upload 중인 것들이 Application의 콤보박스에 있습니다. 이중에서 현재 Upload할 App을 선택합니다.

 아무문제가 없다면 Validation Succeeded가 됩니다. 만약,

warning: iPad: Icon.png: icon dimensions (57 x 57) don't meet th…

iOS App을 App Store에 Binary 업로드 시 Validate 에러

이미지
warning: iPad: Icon.png: icon dimensions (57 x 57) don't meet the size requirements.  The icon file must be 72x72 pixels, in .png format (-19014)

 App Store에 앱을 업로드하기전에 제대로 된 놈인지 체크하기 위해 Validate를 하죠. 체크중에 위와 같은 에러로 Failed Validation하는 경우가 있습니다.

 먼저 Info.plist에 Icon files와 실제 파일명이 같게 매치가 되는지 확인합니다. 사실 이부분은 cocos2d-x template가 자동으로 생성한 것이라 문제될 건 없는듯하네요.

 다음으로 확인한게 실제 Icon.png 정보를 보니 57x57이더군요. 그래서 에러메세지대로 72x72로 확장해서 이미지를 넣고 Clean, Archive Build해서 Validate 체크해봤지만,

warning: iPhone/iPod Touch: Icon.png: icon dimensions (72 x 72) don't meet the size requirements.  The icon file must be 57x57 pixels, in .png format (-19014)

이번엔 이런 다른 에러가 발생하더군요. 처음엔 iPad더니 이번엔 iPhone/iPod용 Icon.png가 말썽? 아니 Device는 다른데 Icon.png는 같은 걸 쓴다는건가? 뭐지이거?

 아무튼 해결이 안되 더 검색해보니 Application Loader의 구버전 사용에 따른 버그 문제로 iTunes Connect에 접속해서 Manage Your Applications에서 Download Application Loader를 클릭해 최신버전을 받아 설치 후 App을 Clean, Archive해서 진행하면 해결이 된다고 했지만, 저는 해결이 안되더군요 ㅜ.ㅜ

 구글링 끝에 애플 개발자 사이트 App Icons on IPad and iPhon…

iOS 배포용 App Build를 위한 Distribution Provisioning Profiles 처리 작업

이미지
개발이 막바지에 이르면서 개발중인 App을 디바이스에도 올리고 추가적인 기능 구현을 위해 App Store에 올리기위해 Archives Build를 하는 과정에서 아래와 같은 에러가 발생하더군요.

No unexpired provisioning profiles found that contain any of the keychain's signing certificates

The identity 'iPhone Distribution' doesn't match any valid, non-expired certificate/private key pair in the default keychain

 이는 Distribution Provisioning Profile에 문제가 있어서 발생한 것으로 제 경우는 아예 배포용 프로비저닝 프로파일을 만들지 않아서 생긴게 원인이었습니다. 간단히 프로파일을 만들어 등록하면 됩니다.

 예전에 정리했던 Development Provisioning Profile을 생성했던 것과 과정이 비슷한데 이에 대한 정리 들어갑니다.

iOS Provisioning Portal에 로그인 후 Provisioning -> Distribution탭에서 New Profile을 클릭합니다.

Distribution Method - App Store를 선택Profile Name - 원하는 이름을 작성App ID - 작업중인 App ID를 선택
 위와 같이 채운 후 Submit을 클릭합니다.

 그러면 배포용 Provisioning Profile을 다운받을 수 있습니다. Download 버튼이 보이지 않는다면 웹페이지를 리플레쉬하면 됩니다. Download를 클릭합니다.

 다운로드한 파일을 더블클릭해서 실행하시면 Organizer이 자동으로 실행되면서 Provisioning Profile이 등록됩니다.

cocos2d-x 사용 iOS Static Lib를 Release(Archive) Build 하기

이미지
처음 iOS용 Static Lib를 만들때는 Debug Build용 설정을 처리했었죠. 이제는 App Store에 올리기 위해 cocos2d-x를 사용하는 Static Lib의 Archive용 Build Setting Release부분 설정에 대해 정리해봅니다.

 먼저 Device를 연결 후 Scheme를 연결한 Device용으로 선택합니다. 그리고 Product -> Build For -> Archiving Build를 해보시면,
/Volumes/Macintosh HD 2/Program/Engine/cocos2d-2.0-rc2-x-2.0.1/cocos2dx/platform/CCPlatformConfig.h #error  "Can not recognize the target platform, compling under a unsupported platform?" #error  "Can not recognize the target platform, compling under a unsupported platform?" #error  "Can not recognize the target platform, compling under a unsupported platform?"
 위와 같은 에러가 발생합니다. 이는 Release관련 Build Setting이 안 되어있어서 그런건데 맨위에 링크에도 있지만 Preprocessor Macros 아래 2개를 추가해줍니다. NDEBUGTARGET_OS_IPHONE  다시 Archiving Build하시면 위와 같이 Release-iphoneos 디렉토리에 lib가 생긴걸 확인할 수 있습니다.
 이제 개발중인 App에 Static Debug lib는 삭제하시고 Release빌드 된 Lib를 추가해서 사용하시면 됩니다.

cocos2d-x iOS용 AD fresca 연동시 orientation 문제 해결하기

이미지
ADFresca iOS버전을 cocos2d-x에 연동했을 때 스샷과 같이 Simulator에서 orientation문제가 발생했었죠.

 ADFresca에 문의결과 해결할 수 있었는데, 개발중인 App의 Info.plist에 아래와 같이 Add Row 해주시면 일단 됩니다.
Key - Initial interface orientationString Value - Landscape (left home button) 또는 Landscape (right home button)

 잘 되네요!? 근데 위에서 일단이라고 한 건 Simulator에서만 잘 되기때문이었습니다. 요즘 개발 일정 막바지라 Device로 테스트를 하고 있는데 iPhone 4에서는 처음과 동일한 문제가 발생을 하더군요.

 제차문의결과 Info.plist 에 이번에는 Supported interface orientations 설정에 Landscape (right home button) 값이 추가되어있는지 확인하라고 해서 해봤지만 해결이 안되더군요. 한가지 해결방법이 더 있었는데, iOS Device들이 정확히 수평으로 놓여져 있는데도 세로모드로 인식되기도 한다는 피드백을 받으신 적이 있어서 이를 해결하기 위해 ADFresca에서 관리자 사이트에서 웹상의 설정변경으로 App의 Orientation을 Fix 할 수 있다고 하더군요.

 먼저 ADFresca admin 사이트에 로그인을 한 후 Orientation을 Fix할 App의 오른쪽에 View를 클릭합니다.

 App 정보 페이지에서 상단 메뉴중 AD Display를 클릭합니다.

 AD Display화면에서 Display Logic의 Set을 클릭합니다.

 그러면 팝업창이 뜨는데 Orientation -> Fix AD Display Orientation에서 원하시는 설정으로 변경 후 Save changes하시고 테스트 하시면 Device에서도 잘 됩니다. 기존에 Info.plist에 추가했던 2가지는 삭제하셔도 무관합니다.

iOS libsystem_kernel.dylib`__pthread_kill, GraphicsServices`GSRegisterPurpleNamedPort 문제

이미지
libsystem_kernel.dylib`__pthread_kill: 0x3145f324:  mov    r12, #328 0x3145f328:  svc    #128 0x3145f32c:  blo    0x3145f344               ; __pthread_kill + 32 0x3145f330:  ldr    r12, [pc, #4] 0x3145f334:  ldr    r12, [pc, r12] 0x3145f338:  b      0x3145f340               ; __pthread_kill + 28 0x3145f33c:  mcrreq p12, #14, r1, r9, c0 0x3145f340:  bx     r12                       0x3145f344:  bx     lr                       
GraphicsServices`GSRegisterPurpleNamedPort: ... ... GSEventCreateApplicationSuspendEvent + 154
 갑자기 잘 실행되던 iOS Game이 실행하면 바로 죽어버리는 것이에요. 위와같이 Thread 1에서 말이죠. Clean Build나 App을 삭제 후 다시 해봐도 안되더군요. 해결은 iPhone를 재부팅 시키고 App을 삭제 후 다시 하니 잘 되는군요.

SourceTree 기존에 Push된 파일 Delete 해보자

이미지
iOS용 Universal Static Lib를 만들다 보니 제가 만든 Framework lib가 SDK 디렉토리에 이렇게 3개나 되어버렸네요. libFramework.a는 Simulator용만 있는거고 libFrameworkiOSDebug.a는 링크내용 정리하면서 나온 중간단계 파일, 마지막 libFrameworkUniversal.a가 우리 팀원들에게 배포할 lib파일입니다. 필요없는 2개의 lib를 지우기위해 SourceTree로 작업하는 것을 정리해보겠습니다. svn이었으면 간단히 delete후 commit하면 되겠지만...

 SourceTree를 실행하면 이렇게 Pending 즉, 어떤 처리를 대기중인 파일들만 목록에 보입니다. modify를 했다던지 새로운 파일이라던지 말이죠. 여기서 Show Pending이라는 콤보박스를 클릭하면 스샷과 같이 여러개가 보이는데 Show Clean이나 Show All을 선택하면 기존에 push된 파일 목록들이 다 나오게 됩니다.

 새로 추가하려고 했던 libFrameworkUniversal.a는 Add버튼을 눌러 추가하고 나머지 2개 파일은 선택해서 Remove를 클릭합니다. 이제 Commit후 Push하시면 됩니다.

XCode 4.x iOS Device와 Simulator용 Static Lib 통합해서 Universal Lib로 만들기

이미지
제가 만들고 있는 Framework Static Lib를 기존에는 Simulator용으로만 빌드해서 사용했었습니다. 링크의 포스팅에도 언급했고 팀 프로그래머들이 Framework Lib 가져다 쓸 연동 시점도 다가오고 있어서 Device용 Static Lib도 만들어서 사용을 해야합니다. 해서 이번 포스팅에서는 Simulator와 Device용 Static Lib를 하나로 통합해서 사용하는 것을 정리해보겠습니다.

 먼저 간단하게 App과 외부 Static Lib Project간에 Build Target Lib가 맞지않아 생기는 에러와 해결 시 불편한 점 때문에 왜 굳이 Universal Lib로 통합을 해야하는지 짚고 넘어가보도록 하겠습니다.

 위와 같이 Simulator과 iPhone Device용 Static Lib가 만들어져있을때,
 App에서는 Device를 선택해서 빌드를 하는데 기존에 Static Lib를 추가한게 Simulator용이었다면 아래와 같은 에러가 나올 것입니다.


Undefined symbols for architecture armv7:   "xxxxx", referenced from:       xxxxx in xxxxx.o       xxxxx in xxxxx.o ... ... ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

 반대로 App은 Simulator이고 Static Lib가 Device용이어도 같은 에러가 발생합니다.

 이에 대한 해결은 당연하게도 App과 Static Lib가 같은 Bulid Target에 매칭되게 해서 Build를 하는 것입니다. 즉, Device용을 빌드할 때는 Static Lib도 Device용 Lib를 가져다써야하는거죠. Simulator로 테스트 할 땐 Simulator용 Static Lib를 넣었다가…