라벨이 xcode인 게시물 표시

Xcode cannot run using the selected device.

이미지
Xcode cannot run using the selected device. No provisioned iOS devices are available with a compatible iOS version. Connect an iOS device with a recent enough version of iOS to run your application or choose an iOS simulator as the destination.  Cocos2d-x 구버전으로 만들어진 게임을 오랜만에 빌드 후 디바이스에 넣으려고 하니 위와 같은 오류가 발생했습니다.  프로젝트 - General - Deployment Info - Deployment Target의 버전을 Build Settings에 있는 Base SDK 버전보다 낮게 설정하면 된다지만 이미 그리 세팅된 상태였습니다.  다른 방법으로 Organizer에서 해당 디바이스를 선택 후 Restore using iTunes를 누르면 된다는데 저는 Use for Development을 누르니 되더군요.  To add this device, select a Development Team to use for provisioning 팝업창에서 디바이스를 추가할 개발자를 선택하고 Choose를 누르면 됩니다. 디바이스 옆에 아이콘도 전엔 회색이더만 녹색으로 되네요.  Scheme에서 iOS Device로만 보이던 것이 제대로 보이네요. 폰에도 잘 들어가구요.

iOS could not change executable permissions on the application

이미지
 오랜만에 iOS 관련 작업중에 위 그림과 같은 에러가 발생했습니다. 원인은 Bundle Identifier가 같은 앱이 디바이스에 설치 되어 있을 때 발생하는 것으로 기존 앱을 삭제 후 진행하면 됩니다. 예전에 cocos2d-x 기반 프로젝트 할 때는 안 이랬던것 같은데 그동안 iOS SDK 버전 올라가면서 바겼나보네요.

Undefined symbols for architecture armv7

이미지
 Undefined symbols for architecture armv7 또는 Undefined symbols for architecture i386 에러가 Xcode에서 빌드시 발생할 수 있습니다. Undefined symbols for architecture i386:   "aaa::bb()", referenced from:       eee::~eee() in eee.o   "aaa::ccc(aaaa)", referenced from:       fff::fff() in fff.o   "aaa::ddd()", referenced from:       fff::ggg() in fff.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)  이런식으로 로그가 생기죠.  원인은 Xcode에 소스코드 추가할 때 Add to targets의 체크를 해제하고 추가하면 이런 문제가 생기네요.  프로젝트 네비게이터에서 문제가 되는 파일을 선택하고 오른쪽에 보이는 유틸리티의 Target Membership에서 프로젝트에 체크를 하고 빌드하면 에러가 해결됩니다.

cocos2d-x Mac OSX iOS 개발 환경 설정하기

이미지
 맥의 Xcode에 cocos2d-x 개발환경 세팅과 간단하게 프로젝트 하나 생성하는 것을 정리해봅니다. 1. cocos2d-x 설치   cocos2d-x 사이트 에 가셔서 다운로드 받습니다. 최신 Stable 버전은 2.1.0입니다.  적당한 곳에 압축을 해제합니다. 이제 xcode용 템플릿을 설치해야합니다. 혹, 구버전 cocos2d-x를 사용중이셨다면 구버전 템플릿을 삭제 후 시도하시기 바랍니다.   터미널에서 cocos2d-x가 있는 경로로 이동 후 sudo ./install-templates-xcode.sh 를 실행합니다. 혹시라도 command not found 가 나오면서 설치가 안되거나 그러면 링크 를 참고하시기 바랍니다.  이런식으로 설치 로그가 나오면 성공한 것입니다. 이제 터미널은 종료시키고 Xcode를 실행합니다. 2. cocos2d-x HelloWorld 프로젝트 생성  File -> New -> Project 또는 Xcode 처음 실행시 보이는 창에서 Create a new Xcode project를 선택합니다.  cocos2d-x 템플릿이 추가된 것이 보입니다. 간단한 Hello World 프로젝트를 생성할 것이므로 cocos2dx를 선택하고 Next를 클릭합니다.  프로젝트 이름등을 설정하고 Next를 클릭합니다.  원하시는 디렉터리에 Create해줍니다.  프로젝트 생성이 되었습니다.  빌드 후 실행하시면 이상없이 실행이 될 것입니다. 이제 살을 붙여나가시면 됩니다.

Xcode Debug/Release 별로 Static Lib Link 설정하기

이미지
 iOS로 개발하다보면서 궁금했던게 있었습니다.  iOS Device와 Simulator용 Debug Universal Static Lib 와  배포용인 Release(Archive) Static Lib 를 사용하면서 개발하다가 스토어에 배포하기위해서는 만든 static lib를 그때그때 교체해줘야 하는 불편사항이 있었습니다. 이 내용은 Universal Static Lib를 만들때도 이미 불만을 토로했던 내용이죠. 디바이스용과 시뮬레이터용 Debug static lib를 빌드때마다 교체해줘야 한다는 문제가 있어서 Universal Static Lib를 만든것이죠. 이에 대한 해결을 정리해보겠습니다.  해결하기에 앞서 기존 Project Navigator의 Frameworks나 Build Phases -> Link Binary With Libraries에 추가했던 static lib는 삭제하시기 바랍니다.  먼저 제가 만든 Framework의 플랫폼별 static lib 디렉토리 구조입니다. 스샷에서 선택되어진 libFramework.a는 배포용이고 libFrameworkUniversal.a는 개발용 Debug static lib입니다.  첫번째 해결책으로는 Tapjoy를 연동할 때 나왔던 Link에러 내용 에 있는 -force_load 를 사용하는 것입니다. Debug -force_load  "$(SRCROOT)/../Libs/Framework/ios/ libFrameworkUniversal.a " Release -force_load  "$(SRCROOT)/../Libs/Framework/ios/ libFramework.a "  이렇게 lib가 있는 위치와 파일을 빌드 설정별로 지정해줘서 해주면 됩니다.  두번째로 -force_load 없이 그 뒤에 내용만으로도 가능하더군요. Debug "$(SRCROOT)/../Libs/Framew...

Xcode Link Error : duplicate symbol _main in xxxx.a and xxxx for architecture armv7

이미지
duplicate symbol _main in xxxxxxxxxxx/libcurl.a(main.o) and Objects-normal/armv7/main.o for architecture armv7  위와 같은 로그와 함께 Xcode에서 링크에러가 발생하네요.  Tapjoy SDK를 개발 테스트 중인 cocos2d-x 기반 게임에 붙이는 중 기존에 추가했던 libcurl.a와 뭔가 같은 심볼이 있어서 난듯합니다.  SDK 가이드에 나온 것처럼 Other Linker Flags에 -all_load로 해서 작업을 했었는데, 이것 말고 대체할 방법으로 -force_load "$(SRCROOT)/../ExtLib/ios/TapjoyPublisherSDK_iOS_v9.0.0_UDIDOptOut/TapjoyPublisherLibrary/TapjoyPublisherLibrary.a"  이렇게 -force_load를 쓰라고 가이드에 되어있더군요. 이렇게 했더니 말끔히 빌드 완료했습니다.  그런데 이상하게 한번 빌드 성공 후엔 -all_load든 -force_load든간에 아무것도 안해줘도 빌드 성공하고 있다는게 함정...  참고 stackoverflow xcode duplicate symbol _main

Xcode Line Number 보기

이미지
 Xcode에서 라인 넘버를 보려면 Xcode -> Preferences -> Text Editing에서 Line numbers를 체크하면 됩니다.

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 단계의 과정 을 진행하시면 됩니다. 자세한 내용은 링크의 하단부를 확인하시면 됩니다.

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를 하는 것입니다. 즉, De...

XCode에 Command Line Tools 설치하기

이미지
  iOS Static Lib Device용과 Simulator용 두개를 하나로 합쳐 Universal Lib 로 만들려고 하다보니 libtool이라는게 필요한 걸 알게되고 이게 XCode의 Çommand Line Tools에 들어가 있다는 걸 알게되었습니다. 예전 XCode버전에서는 XCode설치시에 같이 설치가 되었다는데 XCode 4.3이상이 되면서 따로 패키지로 분리를 했다고 합니다. 간단히 Command Line Tolols 설치하는 것에 대해 정리해봅니다.  Xcode를 실행해서 Preferences -> Downloads탭에서 Command Line Tools의 Install을 클릭해서 설치하시면 됩니다.  또는 애플 개발자 사이트에서 원하시는 버전으로 다운 받아 설치하시면 됩니다.  Command Line Tools는 gcc나 make, libtool같은 build 관련된 것들 묶음인 듯하네요.

cocos2d-x 기존 c++로 만든 lib를 xcode ios용 static lib로 만들어서 게임프로젝트에 사용하기

이미지
cocos2d-x Android Framework lib는 완성 을 했었고  cocos2d-x ios에서는 Framework를 lib까지 만들지는 않고 프로젝트에 직접 파일을 추가해서 빌드 를 해봤었죠. 이제는 지난 포스팅에서 언급했듯이 Framework를 lib로 만들어서 개발할 수 있는 환경을 만들어보겠습니다. 이전 포스팅 내용과 연관되어있는 부분도 있고 제 개인 환경부분(폴더구조등)에 대한 설명이라 약간 노말하지 않을 수 있습니다. 이점 염두해 두시고 봐주세요.  Xcode에서 new project -> iOS -> Framework & Library -> Cocoa Touch Static Library를 선택합니다.  Product Name은 원하시는 것을 써주시고 저는 win32와 android static lib가 모두 Framework 였기에 이렇게 기입했습니다.  svn으로 관리되고 있는 저희 프로젝트 폴더 구조인데요 역시나 win32나 android가 그랬듯 Engine의 하위에 생성되도록 해줍니다. 여기서 FrameworkSrc는 win32버젼과 Android.mk가 들어있는 폴더인데 Framework는 svn관리를 안하고 있어서 따로 복사해서 쓰려고 저렇게 준비를 해봤습니다.  이렇게 하는 이유는 일단 같이 개발중인 팀원들에게 lib를 만들어 인터페이스만 공개할 것이기 때문입니다. 이게 아니라면 그냥 svn에 올렸을 테고 Framework 소스 복사 하는 과정은 없겠죠?  기본 Framework static lib가 만들어졌습니다. 이제 win32에서 작업했던 cpp, h를 추가해줘야합니다.  win32의 vcxproj나 user, stdafx.cpp, h등은 복사하지 않고 순수 구현된 소스 들만 폴더째로 복사했습니다.  Add File to나 command + option + a 를 눌러 폴...