요즘은 어디 나갈 때 핸드폰보다 터치를 더 챙기게 되었습니다. NDS도 있지만 아기자기한 게임들을 기울기와 터치로 즐기는 색다른 재미에, 가족들 사이에서도 터치의 게임이 훨씬 더 인기가 좋습니다. 제가 요즘 터치에서 가장 즐겨하는 게임은 Smallware에서 나온 Sol Free라는 카드게임입니다. (유료지만 무료 버젼도 있습니다.) 화장실에도 들고 갑니다. ^^;;


이전에 윈도우에서도 심심풀이로 많이 했지만, 터치에서는 직접 손으로 카드를 옮기고 넘기는 손맛때문에 한층 재미가 더 한 것 같습니다. 컴퓨터의 마우스로는 이 맛이 느낄 수 없어 재미가 없습니다.

다음으로 Rocking Porket Games에서 나온 Blue Skies란 게임도 간혹 하고 있습니다. 유료게임이지만 무료로된 lite 버젼을 설치하였습니다. 대공과 대지 공격을 하는 헬리콥터를 조정하여 적들을 찾아 파괴하는 게임입니다. 기울여서 방향을 조종하기 때문에 조금 반응이 늦는 감은 있지만, 헬리콥터의 움직임과는 잘 어울리는 것 같습니다.

그리고 오늘 App 스토어에서 또 다른 재미있는 게임을 찾았습니다. 작년 초에 아이맥에서 가끔 하고 저의 다른 블로그에서도 소개했던 3D 슈팅게임인 sauerbraten이 아이폰, 터치용으로 포팅이 되어 sauerbraten의 이전 이름인 Cube란 게임으로 나왔습니다.


위는 터치에서 캡쳐한 게임화면입니다. 터치를 돌리면서 진행 방향을 정하고 아래와 같이 외각을 터치해서 움직이고 총을 쏘고 점프를 할 수 있습니다.


이전에 컴퓨터에서 했던 게임을 똑같이 터치에서 할 수 있다는게 신기하긴 하지만, 컨트롤이 터치에서 제가 하기엔 너무 어려운 것 같습니다. 익숙해지면 좀 나아질지 모르겠습니다. PC용 버젼은 전체소스가 공개되어 있는데 터치용 버젼의 소스는 공개가 되지 않은 것 같습니다.

한번씩 App 스토어를 들어가면 이런 재미있는 공짜 게임들이 많이 올라오니, 사용자 입장에선 참 행복하고 고마운 일입니다. 이제는 초기에 비해서 완성도가 꽤나 높은 게임들이 무료나 lite 버젼으로 많이 올라오고 있는 것 같습니다.

애플은 아이폰 개발자 유니버시티 프로그램을 추가하여 대학생들이 공부를 목적으로 무료로 아이폰 어플리케이션을 사용하고 기기에서 테스트 해 볼 수 있는 지원을 하고 있습니다. 이와 마찬가지로 공개 소프트웨어 개발자에게도 무료 개발자 프로그램 등록과 같은 혜택을 주었으면 좋겠습니다.

2. 소프트웨어
아이폰 어플리케이션을 위해 준비해야될 소프트웨어는 Xcode와 iPhone SDK 입니다. 내용은 조금 길지만 요약하면 ADC 맴버쉽 프로그램에 가입 후에 Xcode와 iPhone SDK를 다운로드 받아 설치하시면 됩니다. 맴버쉽 프로그램 등록, 개발 툴 모두 무료입니다.

1) Xcode 와 iPhone SDK 설치
1.1) ADC 가입
Xcode와 iPhone SDK는 모두 무료로 제공됩니다. 하지만 다운로드 받기 위해서는 ADC (Apple Developer Connection) 멤버쉽 프로그램에 가입하셔야 됩니다. (Xcode는 설치CD에 포함되어 있지만, 최신버젼을 얻기 위해서는 다운로드 받아서 설치하시는 것을 권장합니다.)  ADC는 애플이 제공하는 개발에 관련된 각종 툴, 문서, 샘플코드등을 제공하는 서비스입니다. 현재는 아래와 같이 아이폰과 맥, 두개의 색션으로 분리되어 있습니다.


ADC 회원은 지원범위에 따른 여러 유료회원도 있지만, 무료인 온라인 회원으로 가입하셔도 개발툴과 관련 문서, 샘플코드를 사용할 수 있습니다. ADC회원가입과 Xcode, iPhone SDK 설치에 관한 자세한 내용은 Xcode 3 다운로드 및 설치란 포스팅을 참고 하시기 바랍니다.

1.2) Xcode
Xcode는 애플에서 제공하는 OS X에서 맥/아이폰 어플리케이션 개발을 위한 대표적인 개발툴입니다. GCC를 컴파일러로 사용하는 Xcode는 Objective-C, C/C++, Java, Ruby, Python등의 언어를 지원하며, GUI 어플리케이션뿐만 각종 커멘드라인 유틸리티, 프레임워크, 라이브러리, 드라이버등 맥과 아이폰에서 사용하는 다양한 실행 바이너리를 만들 수 있습니다.


* 인터페이스 빌더
Xcode는 맥과 아이폰의 GUI 디자인을 위한 툴로 인터페이스 빌더(IB)를 제공합니다. IB는 OS X 어플리케이션에서 사용하는 nib 파일을 생성해 줍니다. nib에 대한 자세한 설명은 nib 파일 둘러보기란 포스팅을 참조하시기 바랍니다.
 


1.3) 아이폰 시뮬레이터
Xcode 와 iPhone SDK를 설치하면 아이폰 시뮬레이터를 사용할 수 있습니다. 시뮬레이터는 아이폰이나 아이팟 터치가 없더라도, 맥에서 만든 어플리케이션을 실행할 수 있는 아이폰의 에뮬레이터 입니다. 마우스로 터치 UI를 시연해 볼 수 있으며, 회전도 가능합니다.



2) 아이폰 개발자 프로그램 가입
아이폰 어플리케이션을 개발 후에 배포 및 판매를 위해서는 반드시 아이폰 개발자 프로그램에 가입을 하셔야 됩니다. 스텐다드와 엔터프라이즈 두개의 프로그램이 있으며 각각 $99, $299의 비용이 들어 갑니다. (1년마다 같은 비용으로 자격을 연장하셔야 합니다) 차이점은 개발한 어플리케이션을 App 스토어에 등록을 하여 배포를 하는지 또는 직접 배포를 하는지의 여부입니다.


개발자 프로그램에 가입을 하시면 아이폰/아이팟 터치를 테스트 기기로 등록을 할 수 있습니다. Xcode를 이용해 이 등록된 기기로 어플리케이션을 업로드 하여, 실제로 동작을 테스트 해 볼 수 있습니다.

가입이 완료된 후에는 아이폰 개발자 프로그램 포탈에서 iPhone Developer Program Portal User Guide란 문서를 참조하시면, 추후 등록과정을 쉽게 진행하실 수 있습니다. 아이폰 개발자 프로그램 등록 완료란 포스팅에 등록에 관한 저의 간단한 후기가 있습니다.

* 아이폰 개발자 포럼
개발자 프로그램에 등록하시면 현제 베타로 운영중인 아이폰 개발자 포럼도 이용할 수 있습니다. 아이폰 개발자 포럼은 전세계 아이폰 개발자들의 커뮤니티로 주제별로 다양한 의견을 나누고 질문 또는 답변을 할 수 있습니다. 현재까지는 아이폰 개발과 관련되어 질문을 하고 궁굼한 내용을 검색을 하기에 가장 좋은 곳으로 생각이 됩니다.


아이폰 개발에 필요한 소프트웨어를 간단히 알아 보겠습니다. 다음 포스팅에서는 개발을 위해 필요한 정보, 자료등과 접근하는 방법에 대해서 알아 보겠습니다.
* 관련링크
iPhone 어플리케이션 개발을 위한 준비 - 1. 하드웨어
iPhone 어플리케이션 개발을 위한 준비 - 2. 소프트웨어
iPhone 어플리케이션 개발을 위한 준비 - 3. 관련 자료
iPhone 어플리케이션 개발을 위한 준비 - 4. 시작하기


몇일 전 아마존에서 도서 추천 메일을 받았습니다. 맥과 아이폰 프로그래밍에 관련해서 나온 신간들인데, 대부분 아직 출시는 되지 않았고 예약을 받고 있었습니다. 새로 나올 관련 도서와 저자들을 대충 보면 아래와 같습니다.

Core Animation for Mac OS X and the iPhone
- $23.07
- Pragmatic Bookshelf
- Bill Dudney
- 188page

저자는 iPhone SDK Development의 공동저자중 한사람인 Bill Dudney입니다. 소개하는 책중에서 유일하게 아마존에서 현재 판매중인 책입니다. 페이지도 얼마 안되고 내년 초쯤에 구입해 볼까 생각중입니다.


RubyCocoa
- $23.07
- Pragmatic Bookshelf
- Brian Marick
- 300page

이전에 한번 제 블로그에서도 포스팅 했었던 RubyCocoa에 관련된 서적이 나올 예정에 있습니다. Brian Matrick은 애자일 방법론 컨설던트이며, Kent Beck, Andrew Hunt등과 함께 애자일 선언서의 작성자중 한명입니다. 이런 주제의 책이 벌써 나올 수 있다는 것이 신기하고 부럽기도 합니다.


iPhone SDK Application Development
- $23.09
- O'Reilly Media, Inc.
- Jonathan Zdiarski
- 250page

오렐리에서 나오는 대부분의 아이폰 개발 서적을 쓴 Jonathan Zdziarski의 신간입니다. 책 제목과 표지를 봐서는 아이폰 SDK의 교과서적인 책이 아닐까 생각됩니다.


Learn Objective–C on the Mac
- $26.39
- Apress
- Mark Dalrymple, Scott Knaster
- 350page

우리나라에 OS X 프로그래밍 서적중 유일하게 번역되어 나온 코코아 프로그래밍의 원저자인 Aaron Hillegass의 Big Nerd Ranch에서 근무하고, Advanced Mac OS X Programming 의 공동저자인 Mark Dalrymple의 신간입니다. Scott Knaster는  Hacking Mac OS X TigerMacintosh Programming Secrets의 저자이며 현재 구글의 애플팀에서 근무하고 있다고 합니다.

이와 비슷하게 아래의 Dave Mark가 쓴 Learn Cocoa on the Mac도 출간을 앞두고 있습니다.


Beginning iPhone Development
- $26.39
- Apress
- Dave Mark , Jeff LaMarche
- 536page

90년대 초 파스칼과 C의 맥 프로그래밍 관련 서적을 쓴 오래된 맥 프로그래밍 저자인 Dave Mark와  iphonedevelopment 블로그 운영자인 역시나 경험 많은 개발자인 Jeff LaMarche가 쓴 책입니다.

목차보기



iPhone in Action
- $26.39
- Manning Publication
- Christopher Allen, Shannon Appelcline
- 350page

iphonewebdev.com의 운영자인 Chritopher Allen과 게임 RPG 시나리오 작가인 Shannon Appelcline이 공저로 아이폰 어플리케이션에 관한 내용도 있지만, 아이폰에 적합한 웹 사이트를 만드는데 치중한 책인 것 같습니다.


iPhone Programmer's Road Map
- $26.39
- Addison-Wesley Professional
- Michael Juntao Yuan, Sam Griffith, Norm Richards
- 288page

Cocoa와 Objective-C, 모바일 프로그래밍의 전문가들이 공동으로 집필한 책입니다. 아이폰 개발에 관한 전반적인 내용을 다루고 있는 것 같습니다.

(이미지 출처:아마존)



코코아 프로그래밍, 특히 아이폰 개발에 관한 책들이 다수 나오고 있습니다. 출판사 사이트들을 들어가 보면 이외에도 준비하고 있는 책들이 많이 있었습니다. 아직은 원서로 밖에 볼 수 없는 것이 아쉽기도 하고 이중 몇개의 책들이 번역이 되서 나올지 모르겠네요.

아직 사놓고 못 읽은 책들이 많아 올해에 깨끗이 마무리하고, 내년초에 흥미있어 보이는 책들을 주문해 보아야 겠습니다. 


PickerView, ImageView, TableView를 이용한 간단한 예제입니다. 좌측의 테이블뷰나 하단의 피커뷰에서 moveIn, push, reveal, fade 효과를 선택하면 우측의 이미지가 해당 효과로 다음 이미지와 변환되는 간단한 샘플입니다. 피커뷰의 2번째 컴퍼넌트에서는 효과가 진행되는 방향을 설정합니다. fade 효과에서는 이 방향이 적용되지 않습니다.

(사용한 샘플 이미지에 대해선 사과 드립니다)

이 샘플은 애플의 아이폰 DevCenter의 샘플코드중에서 UICatalogView Transitions 를 참조하였습니다.

1. 프로젝트 생성

Xcode의 메뉴에서 File / New Project를 클릭합니다. iPhone OS / Application을 선택하고 View-Based Application 템플릿을 선택하고 Choose..를 클릭합니다.


적당한 프로젝트명을 입력하고 Save를 클릭하여 프로젝트를 생성합니다. 여기서는 Control2로 생성하였습니다.


2. 소스코드 수정
Control2ViewController의 소스와 헤더 파일에 아래의 푸른색으로 되어 있는 부분을 입력합니다. 설명은 간단한 주석으로 대체하겠습니다.

1) Control2ViewController.h
#import <UIKit/UIKit.h>

@interface Control2ViewController : UIViewController {

    IBOutlet UITableView *myTableView;
    IBOutlet UIPickerView *myPickerView;
    IBOutlet UIView *myView;
   
    UIImageView *imageView1;
    UIImageView *imageView2;
   
    NSArray *effectArray;
    NSArray *directionArray;
}

@end

2) Control2ViewController.m
#import "Control2ViewController.h"
#import <QuartzCore/QuartzCore.h>

@implementation Control2ViewController

static NSString *kCellIdentifier = @"MyIdentifier";
static NSString *kAnimationKey = @"transitionViewAnimation";

- (void)viewDidLoad {
    [super viewDidLoad];
   
    // 에니메이션 효과들을 배열로 저장
    effectArray = [[NSArray arrayWithObjects:kCATransitionMoveIn, kCATransitionPush,
                    kCATransitionReveal, kCATransitionFade, nil] retain];
   
    // 에니메이션 시 진행방향을 배열로 저장
    directionArray = [[NSArray arrayWithObjects:kCATransitionFromLeft, kCATransitionFromRight,
                       kCATransitionFromTop, kCATransitionFromBottom, nil] retain];
   
    // 이미지 뷰 생성
    imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"no1.png"]];
    imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"no2.png"]];
   
    // 이미지 뷰 크기 설정
    CGRect rect;
   
    rect.origin = CGPointZero;
    rect.size = [myView frame].size;
       
    [imageView1 setFrame:rect];
    [imageView2 setFrame:rect];

    // 첫번째 이미지 뷰 추가
    [myView addSubview:imageView1];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
    // Release anything that's not essential, such as cached data
}


- (void)dealloc {
    [imageView1 release];
    [imageView2 release];
   
    [effectArray release];
    [directionArray release];
   
    [super dealloc];
}

#pragma mark Animation methods

/** 에니메이션 실행 */
- (void)transitionView:(NSUInteger)effect
{
    UIView* newView;
    UIView* oldView;
   
    // 나올 뷰와 사라질 뷰를 설정
    if ([imageView1 superview] == myView) {
        newView = imageView2;
        oldView = imageView1;
    } else {
        newView = imageView1;
        oldView = imageView2;
    }
   
    // 이전 뷰를 삭제하고 새로운 뷰를 등록
    [oldView removeFromSuperview];
    if (newView && ([newView superview] == nil)) {
        [myView insertSubview:newView atIndex:1];
    }
   
    // 에니메이션 효과와 방향을 설정
    NSString *transition = [effectArray objectAtIndex:effect];
    NSString *direction = [directionArray objectAtIndex:[myPickerView selectedRowInComponent:1]];
   
    // 에니메이션
    CATransition *animation = [CATransition animation];
   
    // 변환효과 설정
    if (transition == kCATransitionFade) {
        [animation setType:kCATransitionFade];
    } else {
        [animation setType:transition];
        [animation setSubtype:direction];
    }
   
    // 변환속도 설정
    [animation setDuration:0.75];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
   
    [[myView layer] addAnimation:animation forKey:kAnimationKey];
}   


#pragma mark TableView delegate/dataSource methods

/** 테이블뷰의 선택이 변경되었을 경우 */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // PickerView의 효과 컴포넌트 선택 변경
    [myPickerView selectRow:[indexPath row] inComponent:0 animated:TRUE];
   
    // 에니메이션 실행
    [self transitionView:[indexPath row]];
}

/** 테이블뷰 섹션 수 */
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

/** 테이블뷰 row count */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [effectArray count];
}

/** 테이블뷰 각 항목 타이틀 설정 */
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:kCellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:kCellIdentifier] autorelease];
    }
   
    cell.text = [effectArray objectAtIndex:indexPath.row];
   
    return cell;
}

/** 색션 해더 타이틀 설정 */
- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section
{
    return @"Effect";
}


#pragma mark PickerView delegate/dataSource methods

/** 피커뷰의 선택이 변경되었을 경우 */
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    // componet가 0(첫번째 컴퍼넌트)일 경우에만 처리
    if (component == 0) {
        // 테이블뷰의 선택된 row 변경
        [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:component]
                                 animated:NO
                           scrollPosition:UITableViewScrollPositionTop];
   
        // 에니메니션 실행
        [self transitionView:row];
    }
}

/** 피커뷰의 컴퍼넌트 수 설정 - 2(효과, 방향) */
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

/** 피커뷰의 각 컴퍼넌트의 row count */
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component == 0)
        return [effectArray count];
    else
        return [directionArray count];
}

/** 피커뷰의 각 컴퍼넌트의 항목 타이틀 설정 */
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == 0)
        return [effectArray objectAtIndex:row];
    else
        return [directionArray objectAtIndex:row];
}

@end


3. 인터페이스 빌더

이제 인터페이스 빌더에서 UI를 생성하고 속성들을 연결해 보겠습니다.

Groups & Files의 Resources 폴더에서 Control2ViewController.xib를 더블클릭하여 인터페이스 빌더를 오픈 합니다.

1) 컨트롤 배치
라이브러리 윈도우에서 View, TableView, PickerView를 각각 드래그 해서 아래와 같이
View에 배치합니다.

2) Outlet 연결
xib 윈도우에서 File's Owner를 우클릭 합니다. 여기서 File's Owner는 Control2ViewController 입니다. 각 Outlet들을 위에서 생성한 컨트롤들과 연결합니다. myPickerView를 PickerView와 myTableView를 TableView와 myView를 View로 연결합니다.
 

이제 작업이 완료되었습니다. 빌드를 하고 테스트를 하여 봅니다. 아래는 전체 프로젝트를 압축한 파일입니다.



Xcode는 맥 OS X 어플리케이션과 아이폰용 어플리케이션을 개발할 수 있는 애플에서 무료로 제공되는 통합개발환경(IDE)입니다. Xcode 3는 Max OS X 10.5(레오퍼드) 이상에서만 사용할 수 있습니다.

Xcode는 OS X 설치 CD에 포함되어 있지만 ADC(Apple Developer Connection)에서 최신버젼을 다운로드 받으셔서 설치하는 것이 좋습니다.

1. ADC 회원 가입

사용자 삽입 이미지
ADC에서 Xcode등의 개발툴을 다운로드 받기 위해서는 ADC 회원에 먼저 가입을 해야 합니다. 유료회원에게는 더 많은 서비스와 지원이 제공되지만 무료 온라인 회원으로 가입을 해도 개발툴을 다운로드 받고 관련 문서와 샘플코드를 사용할 수 있습니다

아래는 한국 애플 스토어의 ADC 페이지에서 가져온 각 회원별 가격 및 지원내용입니다.

* ADC Premier 회원- 3,499달러 (364만원)
  • 월드와이드 개발자 컨퍼런스 티켓
  • ADC Software Seeding 프로그램
  • Mac OS X 및 Xcode 도구
  • 8가지 기술 지원
  • 10가지 ADC 하드웨어 할인
  • ADC Compatibility Labs 액세스
  • ADC Monthly Mailing/Download
  • ADC 비즈니스 및 마케팅 프로그램

* ADC Select 회원 - 499달러 (52만원)
  • ADC Software Seeding 프로그램
  • Mac OS X 및 Xcode 도구
  • 2가지 기술 지원
  • 1가지 ADC 하드웨어 할인
  • ADC Compatibility Labs 액세스
  • ADC Monthly Mailing/Download
  • ADC 비즈니스 및 마케팅 프로그램

* ADC Online 회원 - 무료
  • OS X 개발툴 다운로드
  • ADC의 개발 문서 및 샘플코드 다운로드

이외에 학생, 월간 메일링, 기술지원등의 제품이 더 있습니다. 유료 멤버쉽의 유효기간은 1년이며 1년마다 갱신을 해야 합니다. 자세한 정보는 ADC 제품 한국어 사이트에서 확인하세요.


2. 다운로드

가입이 완료되면 Xcode 다운로드 페이지에서 'Download Now' 버튼을 클릭하여 아이디, 패스워드를 입력하고 로그인 후에 Xcode를 다운로드 받습니다. 설치 파일 크기는 1GB 입니다.

사용자 삽입 이미지

현재(2008년 7월) 버젼은 2008년 7월 11일 등록된 3.1 버젼 입니다.


3. 설치
다운로드가 완료되면 Xcode*.dmg 파일을 마운트 한 후에 XcodeTools.mpkg를 실행합니다. 설치화면에서 약관에 동의를 하고 진행하면 아래와 같은 선택사항이 나옵니다.

사용자 삽입 이미지

기본으로 처음 세개의 패키지는 선택되어 있습니다. 그 아래의 체크되지 않은 'Mac OS X 10.3.9 Support'를 선택하면 OS X 10.3(팬서)를 지원하는 SDK와 GCC 3.3를 설치합니다. OS X 10.4(타이거) SDK는 기본으로 포함되어 있습니다. WebObjects를 선택하면 웹서버에서 실행되는 웹어플리케이션인 WebObjects를 지원하는 Java로 된 라이브러리와 툴등의 실행 환경을 설치합니다. 일반적으로 기본 선택사항대로 설치를 하면 무난할 것 같습니다.

사용자 삽입 이미지
완료되면 /Developer/에 관련된 파일과 디렉토리들이 설치됩니다. 그 아래의  Applications 디렉토리에서 Xcode 아이콘을 더블클릭하면 Xcode가 실행됩니다. 이 디렉토리에서 Interface Builder, Dashcode(버젼 2.0), Instruments등 Xcode의 중요 어플리케이션들을 찾을 수 있습니다.
 
사용자 삽입 이미지
사용자 삽입 이미지
자주 쓰는 개발에 관련된 어플리케이션들은 레오퍼드의 스택을 이용하여 독에 등록하면 빠르고 편리하게 사용할 수 있습니다.

적당한 위치에 개발툴이라는 디렉토리를 만들고 필요한 실행파일들의 가상본을 만들어서 해당 디렉토리로 옮겨 놓습니다. 그런 후에 개발툴 디렉토리를 독의 스택 위치로 드래그해서 가져다 놓습니다.







4. iPhone SDK 설치
사용자 삽입 이미지
iPhone 어플리케이션 개발을 위해서는 iPhone SDK를 설치해야 합니다. ADC의 다운로드 페이지에서 다운로드 받으실 수 있습니다. 파일 크기는 1.2GB이며 현재 버젼은 베타 8 (빌드넘버: 9M2199a)입니다.

다운로드가 완료되면 받은 dmg 파일을 더블클릭하고 iPhone SDK를 실행하여 설치하시면 됩니다. 설치가 완료된 후에 Xcode를 실행하고 New Project를 클릭하면 아래와 같이 iPhone OS 개발 환경이 추가되어 있는 것을 확인할 수 있습니다.

사용자 삽입 이미지

App Store에서 iPhone용 어플리케이션을 배포 또는 판매 하기 위해서는 애플의 iPhone Developer Program에 가입을 해야 합니다. Standard Programe은 99달러 Enterprise Program은 299달러 입니다. ADC 멤버쉽과 마찬가지로 역시 1년마다 갱신을 해야 합니다.

등록하면 아래와 같이 제작한 게임을 App Store에 등록하고 판매할 수 있으며, 판매되면 금액의 70%를 받습니다. 애플의 광고대로 신용카드 수수료를 따로 청구하지 않고 App Store를 통해 광고와 안정적인 호스팅을 제공하니 등록비용과 수수료가 그렇게 비싸다는 생각은 들지 않습니다. 

사용자 삽입 이미지

iPhone Developer Program에 자세한 내용은 ADC의 해당 페이지에서 확인하세요.

iOS 2008.05.26 14:05
사용자 삽입 이미지
어제 iPhone SDK를 다운로드 받고 설치를 해보았습니다. SDK는 애플의 다운로드 페이지에서 받으실 수 있습니다. 실행환경은 OS X 10.5.2 이상의 인텔맥에서만 사용할 수 있습니다. 최신 버젼은 2008년 5월 8일에 올라 왔으며 파일크기가 1GB가 조금 넘었습니다.

 Xcode 3과 레오퍼드의 개발툴들을 잘 몰라서 설치 후 무엇이 추가되고 변경되었는지는 잘 모르겠습니다. 다만 Xcode와 Dashcode에서 차이점을 발견할 수 있었습니다.

1. Xcode
그러고 보니 아직 Xcode 3에서 한번도 New Project를 실행해 본적이 없었습니다. 그렇지만 아래의 iPhone OS란 메뉴가 SDK 설치로 새로 생겼을 것으로 짐작은 됩니다.

사용자 삽입 이미지

이름을 보니까 아이폰 SDK에서 사용하는 Cocoa는 'Cocoa Touch'로 부르는 것 같습니다. 일단 'Cocoa Touch Application'을 선택하고 프로젝트를 만들어 보았습니다.

사용자 삽입 이미지
프로젝트 명을 'iPhoneSDK'로 하였더니 좌측과 같은 파일들이 기본적으로 생성되었습니다.
 
기존 Cocoa 프로젝트에서 볼 수 있었던 파일들도 보이고 iPhoneSDKAppDelegate 클래스와 MainWindow.xib와 몇개의 프레임워크등 새로 추가된 부분들도 보입니다.

NIB Files가 비어 있어 순간 인터페이스빌더를 지원하지 않는가 생각했는데 MainWindow.xib를 더블클릭하니 인터페이스 빌더를 볼 수 있었습니다. nib의 n이 NeXTSTEP을 의미하는 것으로 알고 있는데 xib의 x가 OS X를 의미하는지는 모르겠습니다. (나중에 OS X 어플리케이션으로 만들어 봐도 nib 파일 대신 xib가 생겼습니다. 이 부분은 Xcode 3에서 변경된 것 같습니다.)

사용자 삽입 이미지
   
우측에 생략된 전체 이름은 'I PhoneSDK App Delegate' 입니다. 

사용자 삽입 이미지
라이브러리 팔레트에서는 좌측과 같이 사용할 수 있는 오브젝트나 컨트롤들의 목록이 있습니다. 이전에 아이폰의 사진에서 보았던 버튼이나 UI들도 보입니다.

몇개 끌고 와서 윈도우에 배치를 해 보았습니다. 실제 구현은 아직 모르기 때문에 무조건 빌드를 하고 실행을 해 보았습니다.





사용자 삽입 이미지
특이하게 애플은 일반적으로 사용하는 에뮬레이터가 아니라 시뮬레이터라고 이름을 붙였습니다. 아이폰 시뮬레이터를 살펴 보는데 아직 베타 버젼이라 그런지 제가 잘 못 해서 그런지 실행된 어플리케이션의 입력란에 포커스가 갈 경우에는 시뮬레이터가 다운되었습니다. 


아래의  좌측은 인터페이스 빌더에서 작업한 모습이고 우측은 빌드 후에 아이폰 시뮬레이터에서 실행된 모습니다.

사용자 삽입 이미지

자동으로 생성된 코드들은 아래와 같습니다. main에 추가 된것은 UIApplicationMain에 대한 호출입니다. 실제 작업은 그 이름과 같이 AppDelegate 클래스에서 수행해야 하는 것 같습니다. 아마 UIKit이 아이폰의 핵심 프래임워크 같습니다.

main.m
#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
   
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

iPhoneSDKAppDelegate.h
#import <UIKit/UIKit.h>

@interface iPhoneSDKAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
}

@property (nonatomic, retain) UIWindow *window;

@end

iPhoneSDKAppDelegate.m
#import "iPhoneSDKAppDelegate.h"

@implementation iPhoneSDKAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    // Override point for customization after app launch
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end


2. Dashcode
혹시나 하는 마음에 Dashcode도 실행해 보았습니다. 아래와 같이 New Project에서 Web Application이란 추가된 항목이 있었습니다.

사용자 삽입 이미지

이전 포스팅에서 한번 보았던 RSS를 선택하고 새 프로젝트를 만들었습니다. 이전과 동일하게 속성의 Feed URL에 올블로그 주소만 입력하고 실행해 보았습니다. 아래와 같이 시뮬레이터가 실행되었습니다.

사용자 삽입 이미지
아마 Dashcode로 만든 어플리케이션은 사파리내에서 실행되는 거 같습니다. 웹어플리케이션이니까 당연히 웹플랫폼에서 실행되겠지만 주소창이나 브라우져의 UI들은 안 보여 줄 것으로 생각했는데 아닌 것 같습니다.

아직 Xcode 3도 모르고 간만 본 상태에서 조금 이른 생각 같지만 iPhone에서의 개발은 기존의 다른 모바일 플랫폼 보다 쉬운 것 같습니다. 신경써야 될 폰이 아이폰 딱 하나인 것도 개발자 입장에선 편할 것 같고요. 개발자료들도 ADC에 충분한 것 같으니 많은 어플리케이션들이 나올 것 같습니다.
SDK와 툴들을 대충 둘러 보면서 느낀 첫번째 생각은 우리나라에 나오기만 하면 꼭 아이폰을 사야 겠다는 것이었습니다. 비록 에뮬 환경에서 일부분만 본 아이폰이지만 화면과 UI가 환상이었습니다. 에뮬레이터로 핸드폰 뽐뿌 받기는 처음이었습니다.