아이폰어플개발정보2010. 8. 19. 15:24
아이폰 어플의 기본원리를 파악하면 어플 개발이 쉬워..

한국에 iPhone 개발자가 더 쉽게 개발 할 수 있기를 기원하며 이 튜토리얼을 작성합니다.

먼저 이 튜토리얼의 대상자는 Objective-C 와 Cocoa를 이용하여 Mac 어플리케이션 개발 경험이 있는 사람을 대상으로 합니다.

이 튜토리얼은 iPhone 개발을 빠르게 시작하기 위해 만들어졌습니다. 기본 아키텍쳐나 구조에 대해서는 ADC의 공식 문서를 참고하시기 바랍니다.

저도 지식이 부족한 편이기 때문에 틀린 내용이 다수 있을수도 있습니다. 지적 해주시면 바로바로 시정하겠으니 많은 지적 부탁드립니다.

iPhone OS technology layers (출처 : ADC - iPhone Dev Center)

iPhone OS 는 위의 그림과 같은 시스템 구조를 갖고 있습니다. 그중 우리가 주로 접근하고 개발하게 될 레이어는 코코아 터치 입니다. 물론 추후 아래 레이어로 내려가면서 개발하게 될 경우도 생길 것 입니다.

iPhone 개발을 크게 보면 게임과 애플리케이션 개발 2가지로 보겠습니다. 게임 개발의 경우 개발방법에 있어서 상이한 차이가 있으므로 제외하고 우리는 애플리케이션 개발을 하려고 합니다.

필요한 개발 환경
  1. Mac 계열 PC
  2. Xcode 3.1.2
  3. iPhone SDK 2.2
  4. 최신 펌웨어 업데이트가 되어있는 iPhone 혹은 iPod Touch

위와 같은 개발 환경을 갖추고 개발을 시작하면 무리 없이 개발을 시작할 수 있을겁니다. Xcode나 iPhone SDK의 버전은현재 제 환경을 쓴것이지 저 버전을 강요하지는 않습니다. iPhone 이나 iPod Touch 와 같은 경우도 시뮬레이터로만개발을 하실 경우에는 필요로 하지 않습니다.

My First App
  1. Xcode 를 열고 New Project 를 열고,  iPhone OS 카테고리의 Application 중 View-Based Application 를 선택하여 프로젝트를 생성합니다.
  2. 실행하여 실행화면을 확인해봅니다. (메뉴의 Project -> Set Active SDK 를 시뮬레이터로 바꿔서 실행하시기 바랍니다.)
iPhone Application Life Cycle

iPhone 애플리케이션은 사용자가 터치를 통해 실행하여 Home 버튼을 눌러 종료되는 사이클을 갖고 있습니다. 그 사이클을 도식화 하여 코드와 비교해보면 아래와 같습니다.

Application life cycle (출처 : iPhone Application Programming Guide)

iPhone 애플리케이션의 엔트리 포인트인 main 함수를 살펴 보겠습니다.

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

int UIApplicationMain (int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

UIApplicationMain 함수는 아래와 같은 역할을 합니다.

  • 애플리케이션 객체를 생성
  • 애플리케이션 딜리게이트를 설정
  • 이벤트 루프

첫번째, 두번째 인자는 main 함수의 인자를 넘겨주면 되고, 세번째 principalClassName 인자는 nil 로 넘겨주면UIApplication 으로 애플리케이션 객체를 생성합니다. 여기서 주목할 곳은 네번째 인자인 delegateClassName입니다. 이 인자는 애플리케이션을 생성하고 딜리게이션을 할 클래스의 이름을 문자열로 넘겨줍니다. 이 인자를 nil 로 넘겨줄경우 이 애플리케이션의 main nib 파일의 딜리게이션 클래스로 딜리게이션 되게 됩니다. 애플리케이션 생성이 완료되면애플리케이션은 딜리게이션 객체에게 applicationDidFinishLaunching 메시지를 보냅니다. 그리고 애플리케이션이종료되기 전에는 applicationWillTerminate 메시지를 보냅니다.

애플리케이션 delegate 클래스의 applicationDidFinishLaunching 메시지를 살펴 보겠습니다.

  1. (void)applicationDidFinishLaunching:(UIApplication *)application {
        [window addSubview:viewController.view];
        [window makeKeyAndVisible];
    }

첫째줄에서는 UIWindow 객체에 UIView 객체를 subView 로 추가시켜주는 메시지를 보내고 있습니다. (UIWindow 와 UIView 는 다음 튜토리얼에서 자세히 다루겠습니다.)

둘째줄에서는 UIWindow 를 invisible 상태에서 visible 상태로 바꿔주는 메시지를 보내고 있습니다. 이것은인터페이스 빌더의 Window Attributes 탭의 View 속성 들중 Hidden 과는 조금 틀립니다. 아래 스크린샷의Visible at Launch 를 체크해주게 되면 makeKeyAndVisible 메시지를 보내지 않아도 애플리케이션 실행시에화면이 보여지게 됩니다.

여기까지 기본적인 iPhone 애플리케이션을 작성하는 법, 그리고 그 구조에 대해 배워봤습니다.

다음 튜토리얼에서는 이것들을 이용하여 UIWindow 와 UIView 그리고 UIViewController 들을 작성하여, 원하는 화면을 구성하고 이벤트를 처리해보도록 하겠습니다.

원본은 http://jweb.springnote.com/pages/2354454.xhtml 에서 작성되었고, 향후 수정시에 원본은 가장 최신 상태로 업데이트 됩니다.



출처 : http://blog.naver.com/PostView.nhn?blogId=74hans&logNo=109898429
Posted by 오늘마감

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 14:22
iPhone SDK Tutorial 어플의 실행 순서

참 많이도 궁금했다. 실은 이런걸 먼저 습득한 후 개발에 들어가야 했었는데,

내가 알아낸건 앱이 최초 실행될 때의 과정에 대해서이다.

딜리게이트, XIB, 뷰, 뷰콘트롤러.. 그리고 이것들의 연결고리들.. 복잡해 보였기 때문에, 이 부분을 파는게 옳았다.

뷰에 관점을 두어야 한다.

뷰는 도화지다. 아니 화면이다. 사용자화면 말이다.

앱은 실행될 때 최초로 "화면에 뷰를 띄워야 한다" 는 것이다.

윈도우베이스로 프로젝트를 생성하고 실행시키게 되면 어떠한 뷰도 나타나지 않는다.

시뮬레이터에 보이는 것은 그냥 먹먹한 회색빛 화면이다.

따라서,

앱한테 최초에 어떤 뷰를 보여주어야 하는지 설정해줘야 한다. 이걸 어디서 하느냐면..

바로 딜리게이트에서 한다. 딜리게이트의 헤더에 뷰콘트롤러를 아웃렛으로 코딩해주고 구현부에서

해당 뷰콘트롤러가 가진 뷰를 윈도우의 뷰로 설정하라는 코드가 필요하다.

이하 헤더부

#import <UIKit/UIKit.h>

@interface SPWinBaseAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
UIViewController *viewContrller;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIViewController *viewContrller;

@end

이하 구현부

#import "SPWinBaseAppDelegate.h"

@implementation SPWinBaseAppDelegate

@synthesize window;
@synthesize viewContrller;

- (void)applicationDidFinishLaunching:(UIApplication *)application {   

    // Override point for customization after application launch
[window addSubview:viewContrller.view];
    [window makeKeyAndVisible];
}


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

그리고 인터페이스 빌더에서 MainWindow.XIB 를 열고 라이브러리로부터 뷰콘트롤러를 드래그 하여 추가한다.

이제 위에서 코딩한 뷰콘트롤러 아웃렛이 바로 이녀석임을 설정!! (난 사실 이 부분이 너무 알고 싶었던 거다. 후후)


자, 이제 끝인가? 아니다.

뷰콘트롤러를 딜리게이트에 연결해줬고, 델리게이트의 런치피니쉬 메소드에서 메인윈도우의 뷰로 설정도 해줬지만

정작 뷰콘트롤러는 아무런 뷰도 가지고 있지 않다.

라이브러리를 통해서 뷰콘트롤러에 "뷰" 콘트롤을 추가해주고 실제 UI 작업은 그곳에서 해야 한다.

뷰를 올려놓으면 위 그림처럼 뷰콘트롤이 뷰콘트롤러의 하위 콘트롤로 생성이 되며, 그곳에 아무 라벨이나 올려놓고 실행해보자.




출처 : http://blog.naver.com/PostView.nhn?blogId=suny4rang&logNo=50081347132
Posted by 오늘마감

댓글을 달아 주세요