달력

10

« 2024/10 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
http://crystalclear.musingsfrommars.org/

이쁘네요
사용해보고 싶다...ㅎ
:
Posted by netkorea
property와 synthesize자동 적용
Instance variable to synthesized property (an Xcode user script)

ctrl+command+[ 등록해서 속성 추가한 후 실행하면  property와 synthesize자동 적용,
지금까지 귀찮게 고생한게 억울한 느낌 ?
속성명에 _붙이는것도 반영해줌 미라클

Xcode 화면 꾸미기
Scripted window management in Xcode
myxcodelayout.png
이거 보고 수정한 다른 분꺼
Source: http://pastie.org/671356 
Screenshot: http://img34.imageshack.us/img34/6003/screenshot20091027at831.png


더 자세한 설명은 생략
:
Posted by netkorea
아래 이전 글에서 NSLog를 삽입하는 Automator를 소개하고 잘 사용중인데 아주 약간 불편한게 있어서 수정하고 공유합니다.
2010/07/22 - [개발 - iPhone/개발 환경 구축] - xCode에서 단축키로 현재 method의 시작과 끝에 NSLog를 삽입하는 Utility

원저작자처럼 NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__);로 사용할 경우, __PRETTY_FUNCTION__가 Preprocessor의 전처리기이다보니 실제 NSLog를 호출하는 Class의 하위 Class에서는 Runtime시에 어떤 Class가 실행되는지 알 수 없더군요.

그래서 아래처럼 수정했습니다.
    NSString *entryString = @"\tNSLog(@\"##### Entering %@-[%s] [%@] [%@]\", self,__PRETTY_FUNCTION__,self,self);";
    NSString *exitString =  @"\tNSLog(@\"----- Leaving %@-[%s] [%@] [%@]\", self,__PRETTY_FUNCTION__,self,self);";
__PRETTY_FUNCTION__전의 self는 runtime Class를 알기위함이고, 이 후의 self는 실제 Log를 출력할 때 관심있는 변수를 출력하기위해 미리 공간을 마련해둔겁니다. 어짜피 이전 글대로 Project 세팅을 했으면 Release시엔 NSLog가 출력되지 않을 것이기에 디버깅하는 동안엔 좀 더 많은 내용을 간편하게 출력하고 싶더군요. ^^;

실제 효용성이 있는진 모르겠지만, 2번 입력방지하는 부분에선 아래 문자열을 이용해 검사하도록 했습니다. 그런데 소스 코드 보면서 작업할건데 2번입력할 일이 있기나한지 모르겠네요. ㅎㅎ
    NSString *entryMask = @"\tNSLog(@\"##### Entering %@-[%s] [%@] [%@]";
    NSString *exitMask =  @"\tNSLog(@\"----- Leaving %@-[%s] [%@] [%@]";

변경한 소스와 Snow Leopard에서 컴파일한걸 같이 올립니다.

:
Posted by netkorea

우연찮게 NSLog를 편하게 삽입해주는 툴을 찾아서 공유하려합니다.

먼저 NSLog에 대한 팁으로부터 시작하죠.
It's NSLog, NSLog... 를 보면 필자도 아래처럼 NSLog를 사용했었다는군요.

NSLog(@"Now entering viewDidLoad in RootViewController");
// Do stuff
NSLog(@"Now leaving viewDidLoad in RootViewController");

그러다가 this page(Logging Current Method or Function)를 알게되었다는 군요. 좋네요. 훌륭합니다. NSLog를 아래처럼 사용하면 자동으로 함수명이 출력된다고 합니다.

NSLog(@"%s", __PRETTY_FUNCTION__);
*2008-12-12 09:22:49.552 Healthcheck[79016:20b] -[HealthcheckAppDelegate applicationDidFinishLaunching:]*

 

개발용은 NSLog를 사용하더라도 배포용에는 NSLog가 필요없겠죠. 블로그에 자세한 설명이 나와있으니 간략히 정리만 하겠습니다. 자세한 내용은 위 블로그에 가보세요. ^^;

1. xcodeproject의 pch 파일에 다음 내용 입력 (DCBLOCKNSLOGSTATEMENTS은 보통 RELEASE_MODE등으로 많이쓰죠?)
#ifdef DCBLOCKNSLOGSTATEMENTS
#define NSLog(format, ...)
#else
#define NSLog(format, ...) NSLog(format, ## __VA_ARGS__)
#endif

2. Release Configuration의 GCC 4.2 - Preprocessing의 Preprocess Macros와 Preprocess Macros Not Used In Precompiled Headers에 DCBLOCKNSLOGSTATEMENTS 추가

3. 당연한 예기지만 Debug Configuration에선 DCBLOCKNSLOGSTATEMENTS 정의하면 안되겠죠? ^^;

그래서 이 글을 적은 블로거가 이렇게 NSLog를 잘 사용했는데, 그래도 코드 타이핑하기가 너무 귀찮더랍니다. 그런 이유로 NSLog를 좀 더 쉽게 입력해주는 툴을 만들었다고 합니다.

Free Utility For Adding Logs 에 가보시면 다운받을 수 있습니다. 혹시 다운 링크가 께질지 모르니 미래를 위해 여기에도 올려둡니다. ㅎㅎ Build해서 Automator에 추가한 후 Service Template이용해서 새 Workflow만들어 줍니다. 이때 Service는 <any application>에 대해 <text>를 받아들이도록 합니다. <Replaces selected text> 도 체크해서 선택해주도록 합니다.

단축키 등록은 System Preferences -> Keyboard -> Keyboard Shortcuts tab에서 좌측에서 Services를 선택하고 우측에서 Automatror에서 저장한 이름을 찾습니다. Text항목 밑에 있을 겁니다. 거기서 단축키를 지정해 주시면 됩니다.


테스트는 xcode를 실행중이었다면 닫고 다시 실행합니다. 그냥하면 단축키가 작동안하더군요. method 정의의 {나 }를 더블클릭하면 method이름을 제외한 전체 method 블록이 선택되는데, 이때 단축키를 눌러줍니다. 그럼 NSLog가 추가됩니다. method 본체뿐만 아니라 어떤 Block에서도 가능한 모양이네요. 타이핑 작업을 획기적으로 줄여주는 참 유용한 툴인것 같습니다.

만든분이 영감을 얻었고 강력 추천한다는 Accessorizer 을 보니 참 많은 기능이 있는 것 같네요. 관심있는 분은 이것도 사용해 보시면 좋을 것 같습니다. $15이라는거 같네요.

:
Posted by netkorea
라이센스 정책과 전반적인 기능을 보고 맘에 들었다면, 이젠 설치를 할 차례네요.

먼저 간단히 설치 순서부터 살펴보죠.
  1. cocos2d 다운로드
    http://www.cocos2d-iphone.org/ 의 Download에서 다운받습니다. 2010/4/30현재 0.99.2가 최신 버전이네요.
    Stable버전은 정식 릴리즈된 버전이란 의미입니다.
  2. 추가로 필요한 프로그램
    cocos2d를 다운로드해서 설치한 후 템플릿을 이용해서 빈 프로젝트를 만들어서 실행하면 잘되지만, cocos2d-iphone.xcodeprog 를 컴파일하면 오류가 생깁니다. 전 이 오류들을 보고 검색해서 설치했지만, 미리 다음 프로그램들을 받아서 설치해 두는게 좋겠죠.
    • plblocks 1.0.1 (http://code.google.com/p/plblocks/)
      block관련 컴파일러와 runtime framework입니다.
      라이센스에 대한 특별한 언급은 없네요.
      애플에서 4.0에서는 Block을 지원할 예정이지만 3.x에서는 지원하지 않기 때문에 3.x에서 Block을 사용하려면 이것을 설치해야만 한다네요.
      ref: Blocks with Cocoa
    • doxygen 1,6,3 (http://www.stack.nl/~dimitri/doxygen/download.html)
      javadoc처럼 html 도움말을 만들어 줍니다.
      이걸 설치해야 전체 컴파일시에 에러가 없습니다.
      그런데 html 파일들은 생기는데 lib는 안생기네요. 저도 이건 잘 몰라서 패스... 어짜피 도움말이니...
자, 그럼 설치를 시작합니다.
1. cocos2d 설치
다운받은 cocos2d-iphone-0.99.2.tar.gz를 더블 클릭하면 자동으로 압축을 풀어줍니다.
터미날을 실행해서 그 폴더로 이동해서 sudo ./install-templates.sh 라고 실행합니다.
암호를 물어보면 로그인 암호를 입력하면 됩니다. 참고로 사용자 암호가 없으면 sudo 실행이 안되더군요.

이렇게 설치가 끝나면 2군데에 파일이 유지됩니다.
  • 프로젝트 템플릿: /Library/Application Support/Developer/Shared/Xcode
  • 예제: 다운받은 폴더 밑의 cocos2d-iphone-0.99.2
2. cocos2d 예제 컴파일
2.1 plblocks 설치
plblocks-1.0.1-snowleopard.dmg 을 더블클릭하면 다음 화면이 실행됩니다.
Plausible Blocks SDK.pkg를 더블 클릭해서 설치합니다.
실제 프로젝트에서 사용할 프레임워크는 수작업으로 복사해야하는데, iPhone Runtime 아래의 PLBlocks.framework를 복사해서, cocos2d 예제를 수정없이 실행하시려면, 다운받은 폴더 밑의 cocos2d-iphone-0.99.2로 복사하시면 됩니다.

2.2 doxygen 설치
Doxygen-1.6.3.dmg를 더블클릭한 후 Doxygen/Applications/ 에 복사합니다.

2.3 cocos2d 예제 컴파일
다운받은 폴더 밑의 cocos2d-iphone-0.99.2에 있는 cocos2d-iphone.xcodeproj를 Xcode에서 엽니다.
아래처럼 Project->Set Active Target->build all tests 를 선택하고 Build합니다.

2.4 cocos2d 예제 실행
아래처럼 Project->Set Active Executable에서 실행할 예제를 선택하고 실행하면 됩니다.


이제 기본적인 환경 구성은 마쳤고, 예제와 구글링을 통해서 실력을 쌓는 것만 남았네요.
다들 파이팅입니다.
:
Posted by netkorea
(라이센스에 대한 잘못된 해석에 대해 책임지지 않습니다. 잘못된 부분 지적 부탁드립니다.)

작년 4월에 아이폰용 앱을 개발해보자고 마음 먹고, 한달 동안 열심히 만들어서 앱 스토어에 등록했었습니다.
게임이긴 하지만 간단한 거라 OpenGL ES는 사용하지 않고 만들었었죠.
기대(?)를 품고 올렸지만 역시 현실은 이상과는 많은 차이가 있더군요. ^^;

그동안 여러가지 일들도 있고해서, 아이폰용 프로그램 개발은 관심만 유지하고 실제 개발은 안하고 있었는데
어느날 갑자기 이러고 있으면 안된다는 생각이 들더군요. ㅎㅎ
개인적으론 아이폰 개발자 등록을 갱신하라는 메일때문은 아니었을거라고 믿고 있습니다.

어쨌든 이제는 제대로된 게임이다라고 생각하고, 작년부터 틈틈이 공부해둔 OpenGL ES로 시작하려니
아무리 아이폰용 앱 개발이 쉽더라도 좀 더 쉬운 방법이 있지 않나 싶어서 구글링을 했습니다.

여러가지가 있지만 cocos2d(http://www.cocos2d-iphone.org)란게 눈에 들어오네요.
일단 무료고 위 홈페이지에도 나와 있듯이 아래 그림처럼 여러 게임들에서 사용됐네요.


흠... 좋아 좋아
그럼 일단 정확한 라이센스 정책부터 알아봐야겠죠.
cocos2d for iPhone license:
---------------------------
cocos2d for iPhone was originally licensed under the GNU LGPL v3 license.
But since it is impossible to distribute 3rd party dynamic libraries
for the iPhone, this license extends the GNU LGPL v3 license by allowing you:
  a) to use cocos2d for iPhone as a static library
  b) to include all or part of the cocos2d for iPhone sources inside your project
This means that if you do a) and/or b) you are NOT forced to release your
source code under the GNU LGPL v3 license.
What is an improvement to the library and what's part of your game is
decided by the your own good faith.
Remember that cocos2d for iPhone follows the copyleft idea. So if you think that
you're improving the library, share your changes with the community with this same
license.
If you have any doubt regarding the license, please contact Ricardo Quesada.
좋네요. 그냥 사용해도 된다는 거네요. ^^;

그런데 함께 포함된 CocosDenshion이라는 사운드용 라이브러리는 아래 라이센스 정책을 사용하네요.
  Sound Engine

Copyright (C) 2009 Steve Oldmeadow

For independent entities this program is free software; you can redistribute
it and/or modify it under the terms of the 'cocos2d for iPhone' license with
the additional proviso that 'cocos2D for iPhone' must be credited in a manner
that can be be observed by end users, for example, in the credits or during
start up. Failure to include such notice is deemed to be acceptance of a
non independent license (see below).

For the purpose of this software non independent entities are defined as
those where the annual revenue of the entity employing, partnering, or
affiliated in any way with the Licensee is greater than $250,000 USD annually.

Non independent entities may license this software or a derivation of it
by a donation of $500 USD per application to the cocos2d for iPhone project.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

영어인데다가 라이센스 부분이라 잘못 해석할까봐 불안하긴 하지만, 일단 간단히 살펴보면 다음과 같습니다.
개인이나 소규모 회사에서는 시작화면이나 만든사람 화면에 cocos2d for iPhone을 이용했다는 것만 최종 사용자들이 알 수 있으면 되지만, 여하한 방법으로 년간 25만 USD이상의 매출이 있는 기업이나 소규모 회사라도 이런 정보를 표시하지 않은 경우에는 앱당 500 USD를 내야 한다.
뭐 가만 생각해보면 년간 25만불 이상 매출이 발생한다면, 500 불정도야....ㅎㅎ
하지만 이제 커나갈려고 하는 신생 회사에서는 조금 고민을 해봐야 겠네요.

이외에도 물리 엔진으로 Chipmunk와 Box2D를 포함하고 있는데, 소스 코드에 있는 라이센스 언급을 보면 공짜네요.
Chipmunk: Copyright (c) 2007 Scott Lembcke

Box2D: Copyright (c) 2006-2009 Erin Catto http://www.gphysics.com

여기다가 또 테스트 프로젝트를 만들어보면, FontLabel과 TouchJSON이란게 있네요. 참조해야할게 많다. ㅠㅠ
어쨌든 이것도 공짜네요.
FontLabel: Copyright © 2009 Zynga Game Networks

TouchJSON: Copyright (c) 2008 Jonathan Wight

이외에도 내부적으로 더 사용하고 있는 다른 모듈이 있는지 모르겠지만, 기본적으로 cocos2d의 라이센스를 따른다고 보면 되겠네요. 그래서 템플릿을 이용해서 빈 프로젝트를 생성하면, cocos2d와 CocosDenshion 라이센스 파일만 보이나 보네요.

기본적인 라이센스 정책을 알아봤으니 다음 편에선 설치 방법을 살펴보겠습니다.
:
Posted by netkorea