옛글/아이폰 프로그래밍
[iOS프로그래밍] NSRunLoop로 잠시 Timer걸기
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]]; 위의 NSData dateWithTimeIntervalSinceNow:"원하는 시간" 동안 텀을 준 이후 다음 명령을 실행. 왠만하면 selector를 통해 메서드들의 Flow가 순차적으로 진행 되도록 해야 하지만, 피치 못하는 경우에는 위와 같은 방법으로 사용'-'
iOS Universal 프로그래밍. 모델 구별하기
iOS 유니버셜(패드, 폰)으로 구별해서 프로그래밍을 하는 경우에는 One Source로 구현하는 경우가 많습니다(굳이 UI 가 크게 다르지 않다면, 다르더라도 기능은 거의 비슷하므로) 이 때 따로 클래스를 하나 두고 모델타입을 리턴해주는 방식으로 구현하면 굉장히 편리합니다. 물론 UI .. Idom 으로 Pad등을 구별하는 방법도 있긴하지만, 맥으로의 포팅이나 이래저래 봤을 때 효율적이진 않아 보입니다. 클래스를 하나 만든 뒤 + (BOOL)isIpad { if ([self getModelType] == MODEL_IPAD) { return YES; } else { return NO; } } + (MODEL_TYPE)getModelType { if ([[[UIDevice currentDevice] mo..
MAC App용 이미지 파일 변경앱 'img2icns'
MAC App 의 icon 파일은 iOS처럼 png 등 이미지 파일로는 불가능합니다. 확장자가 icns라는 파일이 필요한데, 포토샵에 아이콘빌더 등을 통해 만들수도 있지만, 굳이 어려운방법보다 너무나 간단하게 이미지를 icns파일로 변경을 시켜주는 앱이 있어 소개합니다. http://www.img2icnsapp.com/위 사이트에서 Download 무료버전으로도 충분히 실사용하는데 문제 없이 잘되네요~!
MAC App sandboxing 하기
맥앱스토어가 더이상 샌드박스를 적용하지 않는 앱의 경우에는 허용하지 않겠다는 발표아래 샌드박싱을 하는 방법을 퍼와 포스팅합니다. https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxQuickStart/AppSandboxQuickStart.html#//apple_ref/doc/uid/TP40011183-CH2-SW3 에서 퍼왔으며 생각보다 간단하니 천천히 따라하시면 될 듯 합니다. (맥 Developer 인증서가 없이 자체 인증서 생성으로 테스팅이 가능합니다. Sandbox가 적용되어 있는 iOS앱처럼 (숨겨져있는) 라이브러리에 앱 폴더가 정상적으로 만들어지네요)* 애..
iOS앱을 MAC App으로 Porting하기
iOS 와 Cocoa는 유사하지만 생각보다 다른 점이 많다. iOS는 UIKit 을, 맥은 AppKit을. 그리고 iOS는 Touch를 (- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event), 맥은 Mouse를 - 여기서 좀 더 설명하자면 위의 ccTouch 대신 ccMouse를 사용하기에 바꾸어주어야 한다. ccMouseDown, Up, RightMoved 등등 그런 후에 원소스든 아니든 간에 클래스 init 시에 self.MouseEnabled를 꼭 Yes로 해주어야 마우스가 사용가능하다. 맥에서는 Touch 는 트랙패드를 의미한다. iOS는 UI, 맥은 NS를 - 대부분의 프레임워크들의 이름들은 UI를 NS로 바꾸면 작동하지만, 모..
child already added. It can't be added again COCOS2D CCNode에러
COCOS2D 의 CCnode에서 발생하는 에러로 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'child already added. It can't be added again' 위와 같은 에러메세지를 출력하는 경우, Child가 중첩되어 Add 를 하거나 Child의 Parent가 존재하지 않는데 추가를 하려고 시도하는 경우 발생한다. -(void) addChild: (CCNode*) child z:(NSInteger)z tag:(NSInteger) aTag { if (nil==child) { CCLOG(@"%@ : have nil child. not adding.",self.class); re..
XCode iOS MAC 구별하는 전처리문
타겟을 2개 이상 놓고 iOS(iPhone, iPad) 및 MAC 둘다 지원하는 원소스를 구현하기 위해서는 서로 간에 맞지 않는 프레임워크를 사용하기 떄문에 (이를테면 UIKit이나, UI 관련 된 iOS 프레임워크에 포함되어 있는 소스를 맥북 타겟으로 실행시키면 에러처리를 내버린다) 이를 위해서 전처리문을 통해 맥과 iOS를 구분하는 전처리문을 사용해보자. *(전처리문은 이전 글에 설명이 되어 있습니다.) 아래와 같은 코드를 사용하면, 컴파일하기 전 처리를 하게 되는 전처리문에서 다음 타겟이 맥인지 iOS인지를 구분해서 #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED //iOS용 코드 #elif defined(__MAC_OS_X_VERSION_MAX_ALLOWED) //맥용 코드 ..
Cocos 2D for iPhone 개념잡기
Cocos 2d에는 주요 Concept가 존재한다. (www.cocos2d-iphone.org참조)이 Concept에는 CCScene, CCDirector, Clayer, CCSprite, CCNode가 존재한다. - CCScene CCScene은 한 씬(독립적인 장면을 구현한다)App은 여러개를 가질 수 있지만, 특정한 순간에는 한 Scene을 가집니다. 하나 이상의 CCLayer로 구성이됩니다. (CCLayer에 대해서 먼저 짚고 넘어가면 그릴수 있는 영역을 의미, 구현방식을 정의하며 여러개의 Layer을 겹치게 표현이 가능합니다.) Event Handler를 구현하는 클래스입니다) Scene사이에 변환은 CCTransitionScene클래스로 구현이 가능합니다. CCLayer가 조금 작은 개념으로 ..