[출처] - http://www.cocoadev.co.kr/200




iPhone 어플리케이션은 Xcode란 개발툴에서 코코아터치 프레임워크와 Objective-C 언어를 사용하여 개발합니다. 코코아 터치는 맥 OS X의 핵심 프레임워크인 코코아를 기본으로 아이폰/터치라는 모바일 기기의 특성에 맞추어진 iPhone 개발의 기본 API입니다.

그렇기 때문에 아이폰 어플리케이션 개발을 위해 기본적으로 알아야할 사항은 통합개발 환경인 Xcode와 인터페이스 빌더라는 툴의 사용법, Cocoa Touch 프레임워크, Objective-C 크게 세가지입니다. 이번에는 간단히 iPhone OS의 계층구조를 중심으로 iPhone 어플리케이션 제작을 위해 접근하는 방법에 대해서 알아 보겠습니다.

1. iPhone OS 계층 구조
아래의 그림은 애플에서 설명하는 아이폰 OS의 기술 계층입니다. 이에 대한 자세한 내용은 아이폰 개발자 센터iPhone OS Technology Overview란 문서에 잘 정리되어 있습니다.


가장 로우레벨의 Core OS부터 가장 상위단계인 코코아 터치까지의 계층구조입니다. 주로 하단은 API가 C로 제공되며 상위로 올라 오면서 Objective-C로 제공됩니다. 많이 사용되는 로우레벨의 API들은 상위단계에서 쉽고 편하게 사용할 수 있는 프레임워크로 제공됩니다. 간 계층의 간단한 설명은 아래와 같습니다.

1) Core OS
메모리/프로세서 관리, 파일 시스템, 네트워크, 각종 하드웨어 드라이버등, 운영체제 하단의 커널 레벨에서 제공하는 커널 API 입니다. 흔히 이야기하는 시스템 프로그래밍에 관련된 C를 기반으로 한 라이브러리를 제공합니다.

2) Core Services
Core Foundation, CFNetwork, SQLite, POSIX threads와 같은 파일입출력, 저수준 데이터 타입, 소켓등에 관련된 서비스입니다. Core OS 레벨에 비교적 쉽게 접근할 수 있는 API를 제공합며 대부분 C로된 프레임워크를 제공됩니다. 여기서 제공하는 많은 기능들은 상단 코코아터치의 Foundation Framework에서 Objective-C 프레임워크로 제공됩니다.

  • Core Foundation - 배열, 스트링, 날짜, URL, 로우레벨 데이터등 아이폰 어플리케이션을 위한 기본적인 C API를 제공합니다.
  • CFNetwork - BSD 소켓 및 HTTP, FTP 프로토콜등 네트워크에 쉽게 접근할 수 있는 API를 제공하는 프레임워크입니다.
  • Core Location - GPS, 주변검색등에 사용할 수 있는 사용자의 현재 위치(위도, 경도) 정보와 관련된 API를 제공하는 프레임워크입니다.
  • SQLite - 아이폰 어플리케이션에서 쉽게 사용할 수 있는 파일기반의 경량 데이터베이스 입니다. SQLite에 관련된 보다 자세한 내용은 이전 포스팅을 참조해 주세요.
  • XML - XML 파싱을 위한 libXML2 라이브러리를 제공합니다.

이외에 보안, 주소록등에 관련된 서비스를 제공합니다.

3) Media
비디오, 오디오, 2D/3D 그래픽, 에니메이션을 구현할 수 있는 API를 제공합니다. Objective-C 또는 C로된 API를 제공합니다.

  • Quartz - OS X의 벡터를 기반으로 한 그래픽 엔진입니다. 선과 도형을 그리고 이미지, 비트맵, PDF를 출력하고 색상, 위치에 관련된 C로된 API를 Core Graphic 프레임워크를 통해 제공합니다.
  • Core Animation - 각종 에니메이션과 시각효과를 제공하는 Objective-C로된 프레임워크입니다.
  • OpenGL ES - 게임등과 같은 고성능의 2D/3D 그래픽 출력을 위한 OpenGL ES 1.1에 기반한 C 프레임워크입니다. OpenGL ES를 사용한 게임은 이를 지원하는 다양한 모바일 플랫폼에서의 포팅을 쉽게 할 수 있습니다. 자세한 내용은 공식 홈페이지를 참조하시기 바랍니다.
  • Core Audio - 마이크를 통해 녹음하고 음악파일을 출력하고 각종 음향효과를 제공하는 C로된 오디오 관련 프레임워크입니다.
  • OpenAL - OpenGL ES와 유사한 개념의 크로스 플랫폼을 지원하는 게임등을 위한 고성능 3D 오디오 라이브러리입니다. 자세한 내용은 공식 홈페이지를 참조 하시기 바랍니다.
  • 동영상 - mov, mp4, 3gp와 같은 각종 동영상 파일을 출력을 지원합니다. 이는 Objective-C를 기반으로 한 Media Player framework를 이용하여 손쉽게 접근할 수 있습니다.

4) Cocoa Touch
iPhone개발의 기본이 되는 계층으로 Objective-C를 기반으로 한 핵심적인 두개의 프레임워크를 가지고 있습니다. 사용자 인터페이스, 이벤트 처리등과 함께 위에서 언급한 로우레벨의 기술들을 보다 쉽게 사용할 수 있는 프레임워크를 제공합니다.

  • Foundation Framework - 배열, 스트링, 날짜 로우레벨 데이터등에 관련된 클래스를 제공하는 기본적인 프레임워크입니다. 위의 Core Foundation에서 제공하는 기본 API들의 Objective-C 레퍼 클래스를 제공합니다.
  • UIKit Framework -각종 컨트롤, 윈도우등의 UI, 이벤트 처리등 iPhone 어플리케이션의 사용자 인터페이스와 관련된 API를 제공하는 프레임워크입니다.


2. Mac or iPhone
Mac의 Cocoa와 iPhone의 Cocoa touch는 이름에서 부터 알 수 있듯이 매우 비슷합니다. 가장 큰 차이점은 역시 인터페이스에 관련된 부분으로 이와 관련하여 Mac에서는 AppKit이란 프레임워크를 iPhone에서는 UIKit이란 프레임워크를 제공합니다.

Foundation Framework는 거의 유사하지만 아이폰의 특성상 제거 또는 변경된 부분이 있습니다. 아이폰은 코코아 바인딩, Objective-C 2.0의 가비지 컬렉션, 애플스크립트, NSUndoManage등은 지원하지 않습니다.

개인적으론 시간이 충분하다면 맥에서 코코아 프로그래밍으로 시작한 후에 코코아 터치로 넘어가도 큰 어려움은 없을 것 같습니다.


3. C or Objective-C
대표적인 코코아 프로그래밍 서적인 Cocoa Programming for MAC OS X (번역본:코코아 프로그래밍)의 저자 아론 힐리가스는 그의 저서에서 아래와 같이 이야기 했습니다.

"C와 Java/C++같은 객체지향 언어를 알고 있다면 두시간이면 Objective-C를 마스터할 수 있다"

OOP와 프로그래밍 언어에 대한 개념만 있다면 Objective-C를 익히는 것은 쉽다라는 의미인 것 같습니다.

사실 어느 언어나 기본지식만 있으면 언어 자체를 익히는데는 그다지 어려움이 없습니다. 하지만 해당 플랫폼에 대한 지식과 핵심 라이브러리나 프레임워크를 배우는데 더욱 많은 시간을 소비해야 합니다. 아이폰도 Xcode, 인터페이스빌더의 사용법, OS X에서의 프로그래밍에대한 이해와 코코아 API를 배우는데 Objective-C 언어 자체를 배우는 것보다 더 많은 시간이 필요합니다.

1) C의 선행학습이 필요한가?
개발경험이 있으신 분들은 그동안의 경험을 바탕으로 어떻게 공부해야 할지 나름대로 방법이 있을 것입니다. 하지만 처음 시작하시는 분들은 Objective-C가 C를 기반으로 하고 있기 때문에, 반드시 C를 공부한 후에 Objective-C를 공부해야하는 지에 대해 질문을 하시는 분들이 있습니다.

이 부분은 아마 많은 분들이 차이가 있을 것 같습니다. 제 생각은 "반드시 필요하지는 않다" 입니다. Objective-C는 C에서 확장된 슈퍼셋이라고 하지만 Objective-C를 공부하기 위해 반드시 C를 먼저 공부해야 할 필요는 없을 것 같습니다.

C를 이해한 후에 Objective-C를 시작하는 것이 이론상으로도 맞고, 정상적인 방법일 것입니다. 하지만 대부분의 Objective-C 서적이나 메뉴얼에는 기본적인 문법에 대한 설명이 있고, 전문 C 서적보다는 범위가 작습니다. Objective-C를 사용할 수 있을 만큼 최소한의 문법만 알고 시작하는 것이 더 접근이 쉬울 것 같습니다.

아래는 iPhone 어플케이션의 샘플 소스중에 한부분입니다. 기존에 C/C++ 개발자들도 이런 Objective-C의 문법을 처음 보게되면, 이것이 C와 관련이 있고 C에서 확장되었다는 사실이 잘 이해가 가지 않을 것입니다.
 

처음 시작하시는 분이라면 차라리 이런 혼란을 피하고 코코아 어플리케이션을 바로 제작할 수 있는 Objective-C로 시작하는 것도 한 방법이라고 생각됩니다.

2) 접근방법
사실 가장 좋은 것은 아래와 같이 가장 로우레벨단계 부터 이해하고 올라 가는 것이 기초도 탄탄하고 가장 좋은 방법일 것입니다.

  1. 메모리/CPU등 컴퓨터 하드웨어에 대한 이해
  2. OS에 대한 이해
  3. 컴파일러에 대한 이해
  4. C언어
  5. 시스템 프로그래밍
  6. 자료구조/알고리즘
  7. Objective-C
  8. OOP, 디자인 패턴
  9. Cocoa API

위의 단계대로 차례로 지식과 실력을 쌓아서 접근하면 좋겠지만, 당장 아이폰 어플리케이션을 만들고 싶은데 지루하고 많은 시간을 필요로 합니다. 흥미를 잃지 않고 접근하는 방법은 위의 순서와 반대로 접근하는 것입니다.

Objective-C에 대한 메뉴얼을 대충(?) 한번 읽어 보고 바로 책, 웹사이트, 동영상등의 간단한 튜토리얼등을 따라해 보면서 실제 실행되는 모습을 보면 계속 흥미를 유지할 수 있습니다.

그후에 어느정도 감이 생기면 직접 만들고 싶은 어플리케이션을 목표로 잡습니다. 첫 목표는 과한 욕심은 버리고 간단하고 쉬운 어플리케이션 부터 시작합니다. 아무리 간단해도 따라해 보며 만들었던 것과는 달리 원하는 기능을 직접 구현하는 것은 매우 어렵습니다. 자료도 많이 찾아 보아야되고, 다른 샘플 소스에서 복사해 와야 하는 경우도 있고, 관련 커뮤니티를 통해 도움을 받을 수도 있습니다. 관련자료들은 이전의 iPhone 어플리케이션 개발을 위한 준비 - 3. 관련 자료 포스팅을 참고하시기 바랍니다.

우여곡절끝에 만들어 내면 부족한면이나 필요한 부분이 무엇인지 조금씩 보이게 될 것 입니다. 필요에 의해 공부를 하다보면 아마 위의 순서를 거슬러 올라 접근하게 되는 경우가 많을 것 같습니다. 그러면 차차 복잡하고 어려운 어플리케이션을 만들 수 있을 것입니다.

막상 처음 시작하게 되면 알아야 할 것은 많고 답답한 마음만 드실 것입니다. 하지만 안타깝게도 왕도는 없습니다. 흥미와 열정을 유지하면서 차근차근 해 나가다 보면 어느새 바라는 어플리케이션을 만들수 있는 날이 눈앞에 와있을 것 입니다.

간혹 주위에 개발경험이 전혀 없는 분들로 부터 "무엇부터 시작해야 아이폰 어플리케이션을 만들 수 있냐?"는 질문을 들으면서 이와 관련해서 간단히 포스팅을 해보아야 겠다고 생각했습니다.

정리는 해보았는데 역시 어렵네요. 제가 봐도 이상한 용어들만 난무하고 설명도 중구난방이고, 개발을 처음 하시는 분들이 보면 잘 이해가 안가실 것 같다는 생각이 듭니다.

* 관련링크
iPhone 어플리케이션 개발을 위한 준비 - 1. 하드웨어
iPhone 어플리케이션 개발을 위한 준비 - 2. 소프트웨어
iPhone 어플리케이션 개발을 위한 준비 - 3. 관련 자료
iPhone 어플리케이션 개발을 위한 준비 - 4. 시작하기

출처 : http://blog.naver.com/PostView.nhn?blogId=seogi1004&logNo=110085696098
Posted by 오늘마감
출처 - http://www.cocoadev.co.kr/183



Xcode3 에서 간단한 코코아 UI 샘플을 만들어 보는 튜토리얼입니다. 아래와 같이 하나의 입력 창과 세개의 버튼을 가진 간단한 어플리케이션 입니다.

각각의 버튼들의 기능은 아래와 같습니다. 라벨의 이동시에는 animator를 이용해 간단한 효과를 주었습니다.

텍스트에 입력된 내용을 상단의 라벨에 출력합니다.

라벨이 원래 있던 좌측의 위치로 이동하도록 합니다.

라벨이 우측 끝으로 이동하도록 합니다.


1. 프로젝트 생성
Xcode를 실행하고 메뉴에서 File/New Project...를 클릭합니다. 좌측에서 Mac OS X/Application을 선택하고 Cocoa Application 템플릿을 선택한 후, Choose... 버튼을 클릭합니다. 

(iPhone SDK 설치되어 있지 않으면 좌측의 메뉴가 조금 다를 수도 있습니다)

프로젝트가 저장될 디렉토리를 선택한 후에 프로젝트명(Control1)을 입력하고 Save 버튼을 클릭합니다.



2. 인터페이스 빌더
1) 인터페이스 빌더 실행
좌측과 같이 Xcode의 Groups & Files/Resources의 MainMenu.xib를 더블클릭하여 인터페이스 빌더를 실행합니다.







2) 라이브러리 윈도우
인터페이스 빌더의 메뉴에서 Tools/Library를 클릭하거나 단축키(Shift+Command+L)를 이용하여 아래와 같은 라이브러리 윈도우를 오픈합니다. 이 윈도우 하단의 아이템중에서 필요한 각종 오브젝트나 컨트롤들을 원하는 위치에 드래그하여 사용할 수 있습니다.



3) 윈도우
라이브러리 윈도에서 아래와 같이 Label, Text Field, Push Button을 드래그 해서 윈도우에 아래와 같이 배치하고 윈도우 크기를 적당하게 조절합니다.


라이브러리 윈도우에서 각 컨트롤의 위치는 아래와 같습니다.

  • Label - Cocoa / Views & Cell / Input & Values
  • Text Field - Cocoa / Views & Cell / Input & Values
  • Puish Button - Cocoa / Views & Cell / Buttons


3. AppController
1) 소스파일 생성
다시 Xcode로 돌아와 Groups & Files에서 Classes를 우클릭을 하거나 단축키(Command+N)를 이용하여 파일생성 창을 오픈합니다.


Mac OS X/Cocoa에서 Objective-C class를 선택하고 Next 버튼을 클릭합니다.

파일명에 AppController.m을 입력하고 Finish 버튼을 클릭합니다.

좌측과 같이 AppController.h와 AppController.m 소스 파일이 Classes 아래에 생성되었습니다.

먼저 AppController.h를 클릭하여 소스를 변경합니다.


2) AppController.h
헤더 파일에서 아래에 푸른색으로 되어 있는 부분을 입력합니다.
#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    IBOutlet NSTextField    *textLabel;
    IBOutlet NSTextField    *inputField;
   
    IBOutlet NSButton    *refreshButton;
    IBOutlet NSButton    *leftButton;
    IBOutlet NSButton    *rightButton;

    NSPoint    originalPoint;
}

- (IBAction)setLabel:(id)sender;
- (IBAction)moveLeft:(id)sender;
- (IBAction)moveRight:(id)sender;

@end

인터페이스 빌더에서 생성한 각각의 컨트롤들을 연결하기 위해 IBOutlet 변수와 버튼을 클릭했을 경우에 처리할 IBAction 메소드를 선언합니다.

3) AppController.m
 소스코드에서 아래에 푸른색으로 되어 있는 부분을 입력합니다.
#import "AppController.h"

@implementation AppController

- (void)awakeFromNib {
   
    // 버튼 이미지를 지정
    NSImage *buttonImage = [NSImage imageNamed:NSImageNameRefreshTemplate];
    [refreshButton setImage:buttonImage];

    buttonImage = [NSImage imageNamed:NSImageNameGoLeftTemplate];
    [leftButton setImage:buttonImage];
   
    buttonImage = [NSImage imageNamed:NSImageNameGoRightTemplate];
    [rightButton setImage:buttonImage];
   
    originalPoint = [textLabel frame].origin;
}

- (IBAction)setLabel:(id)sender {
   
    // 입력한 문자를 라벨에 지정하고 라벨의 크기를 문자열의 길이만큼 변경
    [textLabel setStringValue:[inputField stringValue]];   
    [textLabel sizeToFit];
}

- (IBAction)moveLeft:(id)sender {
   
    // 라벨을 초기 위치로 이동
    [[textLabel animator] setFrameOrigin:originalPoint];
}

- (IBAction)moveRight:(id)sender {
    CGFloat xPos;
   
    // 우측 모서리로 이동하도록 윈도우의 크기에서 라벨의 크기를 뺀 위치로 설정
    xPos = [[[NSApp mainWindow] contentView] bounds].size.width;
    xPos -= [textLabel frame].size.width;
   
    // 에니메이션과 함께 라벨의 위치 변경
    NSPoint targetPoint = NSMakePoint(xPos, originalPoint.y);
    [[textLabel animator] setFrameOrigin:targetPoint];
}

@end


4. 연결
다시 인터페이스 빌더로 돌아 가서 작업을 마무리 합니다

1) AppController 인스턴스 생성
라이브러리 윈도우에서 좌측과 같은 Object를 MainMenu.xib 윈도우로 드래그해서 가져다 놓습니다.

Object는 라이브러리 윈도우에서 Cocoa / Objects & Controllers / Controllers내에 있습니다.

아래와 같이 Object가 생성된 것을 확인하시고 Object가 선택된 상태에서 인터페이스 빌더의 Tools/Inspector 메뉴를 클릭하거나 단축키 (Shift + Command + I)를 이용하여 Inspector 창을 오픈합니다.

Inspector 창에서 좌측과 같이 6번째에 있는 App Controller Identity를 선택합니다. (단축키: Command + 6)

Class메뉴의 콤보박스를 클릭하고 Xcode에서 이전 단계에서 생성한 AppController를 선택합니다.


2) 연결
MainMenu.xib 창에서 App Controller를 선택한 상태에서 마우스 우클릭을 하면 아래와 같이 연결 창이 오픈됩니다.


연결창의 각 항목 좌측에 있는 원 모양의 영역에 마우스를 가져가면 우측과 같이 '+' 모양으로 변경됩니다. 이 상태에서 마우스로 '+'를 클릭한 후에 드래그 하여 각각의 해당 항목들에 연결합니다.

마우스를 클릭한 상태에서 파란색 선을 연결할 컨트롤로 가져가면 아래와 같이 컨트롤의 이름과 함께 선택되었을 때 마우스 클릭을 해제합니다.


이런 방식으로 Outlet과 Action을 각각의 컨트롤들과 연결합니다.

  • Outlets / inputField -> Text Field 
  • Outlets / textLabel -> Label
  • Outlets / refreshButton -> Button (첫번째)
  • Outlets / leftButton -> Button (두번째)
  • Outlets / rightButton -> Button (세번째)

  • Received Actions / setLabel -> 버튼 (첫번째)
  • Received Actions / moveLeft -> 버튼 (두번째)
  • Received Actions / moveRight -> 버튼 (세번째)

작업이 완료되면 아래와 같이 연결되었는지 확인합니다.

 
3) 빌드 및 테스트
이제 모든 작업이 완료되었습니다. 인터페이스 빌더와 Xcode에서 변경된 내용을 저장하고, Xcode에서 좌측의 툴바를 클릭하거나 단축키(command + R)를 이용하여 빌드하고 테스트 해 봅니다.


Xcode를 처음 해보시는 분들도 따라 하실 수 있게 최대한 자세하게 설명을 할려고 했습니다. 하지만 제 생각대로 처음 하시는 분들도 무리없이 하실 수 있을지는 잘 모르겠습니다.

잘 안되시는 분들은 아래의 프로젝트 파일을 다운로드 받아서 비교해 보시기 바랍니다.



출처 : http://blog.naver.com/PostView.nhn?blogId=seogi1004&logNo=110085700437

'아이폰어플개발정보' 카테고리의 다른 글

[펌] 2. 간단한 Core Data 예제  (0) 2011.04.09
애플 앱스토어 등록 Tip  (0) 2011.04.09
[펌] 1. Xcode3 첫 어플리케이션  (0) 2011.04.09
[펌] 1.10 기본 콘트롤 사용법  (0) 2011.04.09
[펌] Delegate  (0) 2011.04.09
아이폰 사운드 재생방법  (0) 2011.04.09
Posted by 오늘마감
[아이폰 어플리케이션 개발] view 전환하는 방법
1. 전체개관

Window-Based Application 을 생성하면 델리게이트 한개와 기본 윈도우 한개가 자동생성된다.
화면을 한개만 사용할때는 기본 윈도우를 사용하지만 이 프로그램에서는 아무런 기능을 하지 않는다.

어플리케이션 전체를 위한 뷰컨트롤러를 한개를 만들게 되는데 이 컨트롤러가 모든 화면전환 작업을 책임진다.
이 프로그램에서는 뷰컨트롤러를 위한 뷰를 생성하고 화면전환 버튼을 넣는다.
화면이 전환되더라도 가장 높은 레이어에 이 뷰가 지정되기 때문에 버튼은 계속 보이게 된다.

각각의 전환될 화면을 만들게 되는데 각각의 화면마다 뷰와 뷰컨트롤러를 생성한다.



2. Xcode 를 실행한다.



3. 새프로젝트를 생성한다.

- 상단바 > File > New Project

- Window-Based Application 을 선택한다.

- 프로젝트명을 ChangeTest 로 입력한다.

- Use Core Data for storage 게 체크되어 있으면 해제한다.



4. 어플리케이션 전체를 위한 뷰컨트롤러를 생성한다.

- "Groups & Files" 목록에서 ChangeTest > Classes 로 이동한다.

- 상단바 > File > New File 을 클릭한다.

- Cocoa Touch Class 메뉴를 선택하고 UIViewController subclass 를 선택한 후

  옵션은 전부해제하고 Next 를 클릭한다.

- ChangeTestViewController.m 을 생성한다.



5. 각각의 화면을 위한 뷰컨트롤러를 생성한다.

- FirstViewController.m 과 SecondViewController.m 을 생성한다.

- 3번과 동일한 방식으로 생성한다.



6. 각각의 화면을 생성한다.

- "Groups & Files" 목록에서 ChangeTest > Resources 로 이동한다.

- 상단바 > File > New File 을 클릭한다.

- User interface 메뉴를 선택하고 View XIB 를 선택한 후 Next 를 클릭한다.

- FirstViewController.xib 를 생성한다.

- 동일한 방식으로 SecondViewController.xib 를 생성한다.



7. 델리게이트와 첫번째 생성한 뷰컨트롤러를 연결한다.

- ChangeTestAppDelegate.h 를 수정한다.

===============================================================================
#import

@class ChangeTestViewController;

@interface ChangeTestAppDelegate : NSObject {
    UIWindow *window;
    ChangeTestViewController *ctr;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ChangeTestViewController *ctr;

@end
===============================================================================

- ChangeTestAppDelegate.m 을 수정한다.

===============================================================================
#import "ChangeTestAppDelegate.h"
#import "ChangeTestViewController.h"

@implementation ChangeTestAppDelegate

@synthesize window;
@synthesize ctr;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Override point for customization after application launch
    [window addSubview:ctr.view];
    [window makeKeyAndVisible];
}

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

@end
===============================================================================



8. 첫번째 생성한 뷰컨트롤러와 뷰컨트롤러를 연결한다.

- ChangeTestViewController.h 를 수정한다.

===============================================================================
#import

@class FirstViewController;
@class SecondViewController;

@interface ChangeTestViewController : UIViewController {
    FirstViewController *first;
    SecondViewController *second;
}

@property (nonatomic, retain) IBOutlet FirstViewController *first;
@property (nonatomic, retain) IBOutlet SecondViewController *second;

- (IBAction)goPrev:(id)sender;
- (IBAction)goNext:(id)sender;

@end
===============================================================================

- ChangeTestViewController.m 을 수정한다.

===============================================================================
#import "ChangeTestViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation ChangeTestViewController

@synthesize first;
@synthesize second;

- (void)viewDidLoad
{
    FirstViewController *f = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    self.first = f;
    [self.view insertSubview:f.view atIndex:0];
    [f release];
}

- (IBAction)goPrev:(id)sender
{
    if (self.first == nil)
    {
        FirstViewController *f = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
        self.first = f;
        [f release];
    }

    if (self.second.view.superview != nil)
    {
        [second.view removeFromSuperview];
        [self.view insertSubview:first.view atIndex:0];
    }
}

- (IBAction)goNext:(id)sender
{
    if (self.second == nil)
    {
        SecondViewController *s = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        self.second = s;
        [s release];
    }

    if (self.first.view.superview != nil)
    {
        [first.view removeFromSuperview];
        [self.view insertSubview:second.view atIndex:0];
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

    if (self.first.view.superview == nil)
    {
        self.first = nil;
    }
    else
    {
        self.second = nil;
    }
}

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

@end
===============================================================================



9. 첫번째 생성한 뷰컨트롤러를 의한 뷰를 생성한다.

- MainWindow.xib 를 더블클릭한다.

- Library 창을 열고 Library > Cocoa Touch > Controllers 에서 View Controller 를 선택해서

  MainWindow.xib 에 넣는다.

- 새로 View Controller 창이 뜨면 그창을 선택하고 Identity Inspector 를 열고 Class 에 ChangeTestViewController 를 선택한다.

- Library 창을 열고 Library > Cocoa Touch > Windows, Views & Bars 에서 View 를 선택해서 새로 View Controller 창에 View 를 넣고

  hidden 속성을 준다.

- 버튼을 두개 생성하고 이전 다음으로 제목을 변경한다.

- 버튼을 선택하고 Connection Inspector 를 열고 Touch up inside 와 ChangeTestViewController 에서 각 함수를 연결한다.

- MainWindow.xib 창의 아이콘중 델리게이트 아이콘을 클릭후 Connection Inspector 를 열어 ctr 과 ChangeTestViewController 를 연결한다.



10. 뷰컨트롤러를 수정한다.

- FirstViewController.h 를 수정한다.

===============================================================================
#import

@interface FirstViewController : UIViewController {

}

@end
===============================================================================

- SecondViewController.h 를 수정한다.

===============================================================================
#import

@interface SecondViewController : UIViewController {

}

@end
===============================================================================

- FirstViewController.m 을 수정한다.

===============================================================================
#import "FirstViewController.h"

@implementation FirstViewController

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
}


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

@end
===============================================================================

- SecondViewController.m 을 수정한다.

===============================================================================
#import "SecondViewController.h"

@implementation SecondViewController

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
}


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

@end
===============================================================================


11. 뷰를 수정한다.

- FirstViewController.xib 를 더블클릭한 후 File's owner 를 선택한다.

- 상단바 > Tools > Identity Inspector 를 연다.

- Class 에 FirstViewController 를 선택한다.

- View 창 바닥색을 바꾼다.(화면이 바뀌는지 확인을 위해)

- 뷰를 연결한다.(클래스를 바꾸면 View 연결이 해제되므로 다시 연결해주어야 한다.)

- 같은 방법으로 SecondViewController.xib 를 수정한다.



12. 실행한다.

메뉴중 "Build & Go" 를 클릭한다.


출처 : http://blog.naver.com/PostList.nhn?blogId=heajin722¤tPage=23
Posted by 오늘마감
아이폰어플정보2010.09.10 15:29
스마트폰용 이화여대 전용 어플리케이션 - iLoveEwha
아이폰 전용 : http://itunes.apple.com/app/iloveewha/id376327226?mt=8

아이폰 이외에도,
안드로이드도 구글 안드로이드 마켓, T-STORE 등을 이용하면 다운로드가 가능합니다.

iLoveCampus에서 만든 어플리케이션입니다.
(연세대, 고려대, 성균관대용 어플리케이션도 있다고 합니다.)

support : http://twitter.com/ilovecampus
pswang@naver.com



첫 화면입니다.




학교 홈페이지의 공지사항을 확인 할 수 있습니다.
(각 과, 학부의 홈페이지 X)






무려 열람실 조회가 가능합니다!
할렐루야!


개발자 소개입니다.

"내 손 안에 이화여자대학교"
- 이대생들의 캠퍼스라이프 모바일도우미!

*이 앱은 T-STORE 에서도 만나보실 수 있습니다. by ilovecampus
1. 식단정보
오늘의 학생식당 메뉴를 알아보세요
2. 열람실조회
빈 자리는 어디에! 중앙도서관 or ECC?
3. 모바일학생증 - 서비스준비중입니다.
출석도, 도서관 출입도 앱만있으면 OK!
4. 무료국제전화
국내통화료로 국제전화를!
5. 위치정보
학관은 어디?00관은 어디?
6. 공지사항
학교 홈페이지의 공지사항,이곳에서 확인하세요.
7. 멤버십카드를 하나로 - 서비스준비중입니다.
두꺼운 카드 대신 휴대폰을 꺼내라! 포인트가 쉽게 쌓일것이다.
8. 회사정보

여담이지만,
제가 스마트폰이 없어서...
아버지걸로 잠시 빌려서 다운받아봤는데
훌륭한 어플리케이션입니다 T-T
스마트폰 없는게 한이 됩니다.
그나저나 제 약정이 끝나고 스마트폰을 마련할 때쯤이면..
...
... 졸업 했을 것인데(...)

슬프네요.
...

어쨌든 상당히 유용한 어플리케이션!
스마트폰을 사용하시는 이화여대생 여러분
많이들 이용하세요!



출처 : http://blog.naver.com/PostView.nhn?blogId=lily8647&logNo=50090642902
Posted by 오늘마감
아이폰기본사용2010.09.08 19:00

 
서론은 그만하고  아이팟에 내가 만든 어플 올리는 방법을 소개하겠다.

환경은 아래와 같다.
iPod Touch 2세대 (2.2.1) - 해킹된 버전(jailbreak)
OSX 10.5.4  (실제로 쓴건 iDeneb 10.5.4... 맥 살 돈이 없고..난 쓰고 싶을 뿐이고..)
Xcode Version 3.1.2

잘 모르는 사람을 대상으로 쓴 글이기에 주로 스크린샷으로 설명을 대체하겠다.

1. 프로젝트를 하나 만들어서 NIB파일을 더블클릭해 아무 컨트롤 또는 HelloWorld를 입력
  (시뮬레이터에서 컴파일하고 테스트는 가능하다 Device로 선탁해서 컴파일 하면
   Codesign어쩌고저쩌고 에러가 뜬다.)

2. 프로젝트 셋팅으로 들어간다.
  

3. 프로젝트 셋팅 화면에서 위 4개의 탭중 Build탭을 선탁 한 후 
  아래 "Add User-Defined Setting"을 클릭하여 화면과 같이 2개 값을 입력한다.
  (보기좋게 Show항목을 User-Defined Settings으로 해놓으면 좋다.)

4. 인증서를 생성해야 한다. 
  (참고 : Obtaining a Signing Identity )
  아래 위치에 있는 "키체인 접근"이란 프로그램을 실행시킨다.
  (영문 : Application > Utilities > Keychain Access )
5. 이제 인증서를 생성하자. 그냥 화면대로 따라하면 된다.
  메뉴 중 "키체인 접근 > 인증 지원 > 인증서 생성" 을 클릭한다.
  (영문 : Keychain Access menu > Certificate Assistant > Create a Certificate )

6. 인증서 생성을 클릭하면 아래와 같은 화면이 보인다.
  그곳에서 이름란에 반드시 "iPhone Developer" 라고 입력한다. (철자 틀림 주의)
  유형은 "자체 서명 루트", 기본값 무시 체크 를 한다. 그리고 계속 버튼을 클릭
  (영문 : 자체 서명 루트 == Self Signed Root)
7. 인증 정보란에는 
  다른 입력란은 Default로 입력되는 내용을 그대로 놔두고 
  인증 유형을 "코드 서명" 으로 변경하고 "계속"버튼을 누른다.
  (영문 : 코드서명 == Code Signing)
 8. 개인정보 란에는 그냥 그냥 적는다. (이름란에는 iPhone Developer... 이렇게 안적으면 어떻게 되는지 모름)
   그리고 인증서 생성 될때까지 완료 누른다.
아래와 같이 인증서 생성 완료~!!!


9. 프로젝트 디렉토리 안에 있는 Info.plist파일을 체크(수정)한다.
 만약 Info.plist파일안에
  CFBundleIdentifier 와 CFBundleName항목이 없다면 아래와 같이 추가한다. 또는 임의로 넣어주어도 된다.
 (아래 화면에서 잘 찾아서... 참고로 key와 string이 한쌍이다.)

10. 위 까지 한 후 빌드(Target : Device 2.2.1)를 하게 되면 아래와 같은 창이 뜨고 "허용"을 누르면 
   뭔가 에러가 나서 프로그램이 실행되지 않는다.
11. 그래서 방금 전 수정했던  Info.plist파일에 
  SignerIdentity란 키로 "Apple iPhone OS Application Signing"이란 값을 입력해 준다.

12. 이제 Build & Run(Go)를 누르면 실제 디바이스에서 동작하는 것을 확인 할 수 있을 것이다.
  (타겟을 iPhone 2.2.1로 설정)



우선 1차 목표는 끝냈고 문제는 어둠의 루트에서 흐르는 해킹된 어플파일 처럼 ipa파일로 만드는 방법이다.
(그래야 보관도 편하고 그러니깐... 일일이 ipod꼽고 Xcode켜고 빌드 해서 넣을 순 없잔아~)
ipa파일을 ipod에 넣는 방법은 인터넷에 많이 있으니깐 알아서... (~^_____^)~

1. 타켓을 만들어야 한다.
  과녁표시 아이콘이 그것인데 마우스 오른쪽 클릭 한 후 "Add > New Target" 을 클릭

2. 옆 메뉴 중에 Other 에 있는 Aggregate를 선택하여 Next를 클릭하자

3. Target Name은 적당히 지어주고 비록 프로젝트가 1개밖에 없지만
  현재 선택된 프로젝트가 내가 ipa로 만들고 싶은 프로젝트인지 확인한다. 그런 후 Finish클릭~

4.  Finish를 클릭하면 아래와 같은 팝업창이 뜨는 것을 확인 할 수 있다.
  당황하지 말고 상단 4개의 탭중 가장 왼쪽에 있는 Gerneral탭을 클릭한다.
5. Gerneral을 클릭하면 아래와 같은 화면이 뜨는데 Direct Dependencie...란 이름을 가진 리스트박스 바로 아래있는
  + 버튼을 눌러 프로젝트를 선택 하고 Add Target버튼을 클릭해 줍니다.
  (화면에 보이는 IPA라고 과녁표시는 무시해버리세요~ 테스트로 먼저 해본거라...)
 

  위 작업을 모두 하면 아래와 같은 화면을 볼 수 있습니다.


6. 스크립트 작성을 위해 방금 전에 만든 타겟에 마우스 오른쪽 버튼 클릭 한 후
  "Add > New Build Phase > New Run Script Build Phase" 를 클릭합니다.


7. 스크립트를 아래와 같이 작성 해 줍니다.
  참고로 띄어쓰기 조심~!!! ( if 와 [ 사이 공백 존재합니다..... 쉘스크립트 해본지 오래되서 공백안줘서 헤멘 1인)

   만약 ipa가 잘 만들어지지 않는다면 시험삼아 위에서 3번째줄까지 (if ~ fi ) 를 삭제하고 다시 해 보세요.

------------------------------------------------------------------------------------------------------
if [ $BUILD_STYLE != "AdHoc_Distribution" ]; then
exit
fi

# compress application.

/bin/mkdir $CONFIGURATION_BUILD_DIR/Payload
/bin/cp -R $CONFIGURATION_BUILD_DIR/프로젝트이름.app $CONFIGURATION_BUILD_DIR/Payload

cd $CONFIGURATION_BUILD_DIR

# zip up the Test Project
/usr/bin/zip -r 프로젝트이름.ipa Payload iTunesArtwork
------------------------------------------------------------------------------------------------------

8. ipa로 만들기 위해 아래와 같이 설정을 해 줍니다.

9. 빌드 하기 전 "Build > Clean"을 해 주는건 제 습관입니다.... 그냥 습관이에요~ ㅋㅋ
아무튼 빌드하게 되면 아래와 같이 ipa파일이 생성되는 것을 볼 수 있습니다.


글로 하자면 몇 줄 (약 20~30줄)안에 모두 설명가능한거지만
혹시 헤매고 있을 처음하시는 분을 위해 스크린샷으로 도배를 하였습니다.
(다들 알고 있는 것을 해 버린거 아닌가 모르겠네요...)

아무튼 경험상 처음하면 가장 고마운게 스크린샷으로 설명해 주시는 분이라 저도 스크린샷으로.. ^^;
이상 끝

돈없는 자취생은 하루하루 삽질해가며 이러고 있답니다. 쩝..... 

참고 URL
- 애플 개발자 사이트 : http://developer.apple.com
- 아이팟터치팬 : http://www.ipodtouchfans.com  (http://www.ipodtouchfans.com/forums/showthread.php?t=167311)
- http://www.hackint0sh.org/forum/f9/70075.htm
- http://www.iphonedevx.com/?p=59
- security 문제 해결 : http://isagoksu.com/2009/development/iphone/how-to-get-rid-of-security-policy-error/
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150067093058
Posted by 오늘마감
[펌] iPhone 어플리케이션 아이콘 설정
맥과는 달리 아이폰에서는 아이콘 파일(*.icns)을 사용하지 않고, 57X57 사이즈의 PNG 파일 포맷을 사용하는 것 같습니다.






재미있는 것은 좌측이 원본 아이콘 이미지이고 우측이 아이폰의 홈스크린에서 보여지는 모습입니다. 시스템에서 자동으로 아이콘의 모서리를 둥글게 보여주고 명함 효과를 주기 때문에 이미지에서 별도의 작업이 필요 없습니다.


만약 이미지에 배경이 없고 투명색으로 처리되었을 경우에는 좌측과 같이 검정색 배경의 아이폰 아이콘의 형식으로 출력이 됩니다.




* 아이콘 파일 등록
아이콘 파일은 메뉴의'Project/Add to Project...'나 Groups & Files에서 해당 디렉토리를 우클릭 한 후에 아래와'같이 Add/Exsiting Files...'를 클릭하여 해당 파일을 선택하시면 됩니다.



* 아이콘 파일 지정
사용자가 지정하지 않으면 실행파일 번들내의 Icon.png를 기본 아이콘 파일로 인식합니다. 별도로 아이콘 파일을 지정할 경우에는Info.plist 또는 아래와 같이 타겟의 Info Properties의 'Icon File:' 항목에서 png 확장자를제외한 파일명을 입력합니다. 



출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150055162184
Posted by 오늘마감
[펌] 아이폰 어플리케이션 개발 준비부터 등록까지 (초요약버전)
아이폰 어플리케이션 개발 준비부터 등록까지 (초요약버전)
 
 
1. 개발 준비
   - 개발을 할 수 있는 맥 컴퓨터 준비 (Mac OS X 설치되어 있어야 함)
   - 실제 개발한 프로그램을 올려서 테스트 해볼 수 있는 아이팟/아이폰 준비

2. 애플 개발자 등록
   - 회사의 경우 사업자 등록증 등을 팩스로 보내고, 확인 전화를 받아서 확인을 한 후 등록 가능
      (약 10만원의 등록비용이 드니 미리 준비)

3. 개발환경 구축
   - Xcode, SDK 다운로드 및 설치 (모두 무료)

4. 프로그램 개발
   - 일단은 아이폰 시뮬레이터로 테스트 가능 (5번을 동시에 진행 가능)

5. 디바이스에 올려서 테스트
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      (각 항목마다 How To 페이지가 있으니 잘 보고 따라하면 됨)
      a. 팀원으로 등록 (개인인 경우 패스)
      b. Development Certificate 받아서 설치
      c. 기기 등록 (100대까지 기기 등록을 할 수 있음)
      d. App ID 생성
      e. Development Provisioning Profile 생성 후 다운로드, 설치
   - 빌드 할 때, Build Info 에서 Provisioning Profile 선택 및 Target을 Device로 설정해서 Build
   => 실제 기기에서 돌아가게 하면서 디버깅 할 수 있음

6. 앱스토어에 등록할 배포용 빌드하기
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      a. 위 5.b에서 한것처럼 Distribution Certificate 받아서 설치
      b. 위 5.e에서 한것처럼 Distribution Provisioning Profile을 생성 후 다운로드해서 설치
      c. Distribution 용 Build Target을 만들고, 
          Build Info에서 설치한 Provisioning Profile을 선택하고, 프로그램 버전 정보, 이름 등 지정 후 빌드.

7. 앱스토어에 등록하기
   - iPhone Dev Center > iTunes Connect > Manage Your Applications
      에 들어가서 Add New Application.
      등록할 때 아래 것들이 준비되어 있어야 함.
      a. 6번에서 만든 배포용 빌드한 바이너리 -> zip 으로 압축한 zip 파일
      b. 512x512 짜리 큰 아이콘 이미지
      c. 스크린샷 (Status Bar를 없앤 320x460 사이즈의 스크린샷 파일)
      d. 프로그램을 설명하는 글
      => 이것들이 준비되어 있으면,  요구하는 정보들을 잘 입력해주면 됨.

8. 등록 심사/대기
    - 7번 과정으로 추가를 하면 애플쪽에서 심사를 한 후 등록 또는 거절 될 수 있음.
       심사 과정은 대략 1주~3주까지도 걸리는 듯함. 
       아주 간단한것이 아니고는 2주 정도 예상하고 있으면 될듯함.
       * 혹 거절되면 다시 수정을 하던해서 다시 등록을 하고, 또 기다려야 함.

9. Bank Info, Tax Info 등록
    - 유료로 파는 것을 등록한다면 이 과정을 처리해줘야 함. (어플 등록 전 해도 되고 등록 후에 해도 됨)
       : iPhone Dev Center > iTunes Connect > Contracts, Tax & Banking Information
         에 들어가서 정보들을 입력

10. 등록 완료
    - 등록완료되면 메일이 오고, 이제 홍보 시작!
       Promotional Codes를 받아서, 사람들에게 나눠줘서 무료로 받아보게 할 수 있음(유료어플의 경우)
       어플리케이션별로 50개씩 받아서 뿌릴 수 있음 (대신, iTunes 미국 AppStore 계정이 있어야 함;;;)
       (iPhone Dev Center > iTunes Connect > Request Promotional Codes)       

11. 내 어플은 몇 개나 다운되었나?
    - iPhone Dev Center > iTunes Connect > Sales/Trend Reports
       에 들어가면, 일/주/월 단위로 어느 지역에서 얼만큼 다운되었는지 볼 수 있음.


위 글은 http://blog.xiles.net 에서도 보실 수 있습니다.
(블로그에 몇 개의 글이 더 있고, 앞으로 올리는 글들도 공유할 수 있도록 하겠습니다.)
 


출처 : http://blog.naver.com/PostView.nhn?blogId=baek2187&logNo=150079417804
Posted by 오늘마감
iPhone 어플리케이션 실행 구조

어플리케이션이 처음 실행되고 부터 종료될 때 까지의 흐름을 살펴보도록 하겠다.
맥이나 윈도우 모두 그래픽 기반의 운영체제이다. 그래픽 기반의 운영체제에서

어플리케이션을 구현시키는 가장 좋은 방식은 이벤트 드리븐(Event driven)이다.

이벤트는 사용자가 마우스나 키보드를 누르는 것부터 특정 시간이 지났다는 이벤트,

네트워크로 데이터를 받았다는 이벤트 등등 모든 것이 해당할 수 있다.  놀랍게도 세계에서

가장 발전한 상용 GUI OS들인 맥 OS , MS의 윈도우즈 들의 아름다운 UI 밑에는 가장 기본적인

뼈대 Main Loop이 버티고 있다. 사실 컴퓨터 소프트웨어가 하는 일은 최초의 컴퓨터가 발명된 때와 별반 다르지 않다. 그 위에 수만 겹의 추상화가 지금의 컴퓨팅 환경을 만들어 놓았지만,

그 뼈대는 변하지 않은 것이다. 컴퓨터는 여전히 0 과 1밖에 모르는 바보다. 크게 어렵지

않으니 하나하나 익혀나가면서 정복해 보자.

* 처음 시작

사용자가 스프링 보드에 있는 어플리케이션의 아이콘을 누르면 어플리케이션이 실행된다.

다음 코드를 보자.

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



Xcode 에서 자동으로 생성해 주는 코드이다. 기존의 C 함수와 마찬가지로 아이폰OS 에서

실행되는 프로그램들도 시작점은 메인 함수 이다. 메인 함수는 가장 먼저 자동해제 풀을

하나 할당한다. 자동해제 풀이란 메모리를 자동 릴리즈 하겠다고 설정한 객체들을 임시로

보관해 두었다가 적절한 시점에 해제시키기 위한 저장공간 정도로 이해하고 넘어가자.

다음 코드는 UIApplicationMain 함수를 실행시킨다. 이 함수는 argc, argv 이외에 두 개의

중요한 인자를 받는다. 

첫 번째로 UIApplication 클래스의 이름을 전달받는다. nil 을 입력하는 경우는 기본값인 UIApplication이 사용된다.
만약 UIApplication 을 상속받아서 새로운 클래스를 만들었다면 그 이름을 넣어주도록 하자. 

두번째는 어플리케이션 델리게이트의 이름을 입력하며, nil 일 경우 info.plist 에 정의된 NSMainNibFile이 가리키는 nib파일에 설정되어 있는 델리게이트를 이용한다. 



<그림> 어플리케이션 흐름

그림을 통해서 흐름을 이해하도록 하자. 최초 main 이 호출되고 UIApplictionMain 이라는

함수 안에서 UIApplication 클래스가 하나 만들어 진다. 이 클래스는 UIKit8 에서 미리 구현해

놓은 것으로 어플리케이션 자체를 의미하는 클래스이며 한 어플리케션에 오직 하나의 UIApplication 클래스를 가지고 있다. pInfo.list 에서 UIApplication이 사용할 메인 nib 파일을

지정했다면(NSMainNibFile) 이 nib 파일을 읽어들인다. UIKit 프레임 워크는 이 파일을 분석해서

내부에 포함되어있는 객체들을 생성하고 초기화 시킨다. 보통 UIWindow 객체와 UIView 객체 등이 생성될 것이다. 그리고 인터페이스 빌더에서 설정했던 델리게이트나 객체 간의 연결도

설정한다. 이 작업이 완료되면 연결된 델리게이트의 applicationDidFinishLaunching 이

불려진다. 만약 nib 파일이 없는 경우 즉 NSMainNibFile을 설정하지 않은 경우에는

델리게이트의 applicationDidFinishLaunching 가 호출될 때 화면에 보여줄 객체들을 수동으로

만들어 줘야 한다.

그 이후 부터 UIApplication 에서는 이벤트를 처리하기 위한 메인 루프가 실행된다. 사용자가

홈 버튼을 누르거나, 전화를 받는 등의 이벤트에 의해서 어플리케이션이 종료된다.

이 때는 applicationWillTerminate 메시지가 불려지고, 이곳 에서 어플리케이션의 상태를

저장하는 등의 작업을 해야 한다.

UIApplicationDelegate 는 지금 설명한 것 외에도 중요한 이벤트가 발생한 경우 그에 맞는

처리를 할 수 있는  다음 메서드들도 있다.

applicationDidReceiveMemoryWarning
메모리 부족 경고를 받은 경우. 현재 사용중인 메모리를 최대한 해제해야 한다.
applicationWillResignActive
어플리케이션이 실행중일 때 전화가 오면, 전화를 받을 것인지 무시할 지를 선택할 수 있다.

그 전에 이 메서드가 호출될 것이다. 또한 화면 잠금 버튼을 누른 경우에도 호출된다.
applicationDidBecomeActive
사용자가 전화나, 문자 등을 무시하는 버튼을 선택할 경우 다시 어플리케이션이 활성화 된

것을 알 수 있다.
처음 실행될 때 applicationDidFinishLaunching 메시지가 보내진 이 후에도 호출되고, 잠금 상태에서 다시 해제된 경우 도 호출된다.

application:didFinishLaunchingWithOptions
아이폰 OS 3.0에 추가된 것으로 URL 이나 원격 통보(Remote notification) 에 의해서

어플리케이션이 실행된 경우를 처리할 수 있다.
application:didReceiveRemoteNotification
역시 3.0에 추가된 것으로 프로그램이 실행중에 원격 통보(Remote notification)을 받은 경우

필요한 처리를 할 수있다.



출처 : http://blog.naver.com/PostView.nhn?blogId=noonkoki&logNo=70082152048
Posted by 오늘마감
아이폰어플개발정보2010.06.24 14:11
아이폰 어플리케이션 개발 준비부터 등록까지 (초요약버.
1. 개발 준비
   - 개발을 할 수 있는 맥 컴퓨터 준비 (Mac OS X 설치되어 있어야 함)
   - 실제 개발한 프로그램을 올려서 테스트 해볼 수 있는 아이팟/아이폰 준비

2. 애플 개발자 등록
   - 회사의 경우 사업자 등록증 등을 팩스로 보내고, 확인 전화를 받아서 확인을 한 후 등록 가능
      (약 10만원의 등록비용이 드니 미리 준비)

3. 개발환경 구축
   - Xcode, SDK 다운로드 및 설치 (모두 무료)

4. 프로그램 개발
   - 일단은 아이폰 시뮬레이터로 테스트 가능 (5번을 동시에 진행 가능)

5. 디바이스에 올려서 테스트
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      (각 항목마다 How To 페이지가 있으니 잘 보고 따라하면 됨)
      a. 팀원으로 등록 (개인인 경우 패스)
      b. Development Certificate 받아서 설치
      c. 기기 등록 (100대까지 기기 등록을 할 수 있음)
      d. App ID 생성
      e. Development Provisioning Profile 생성 후 다운로드, 설치
   - 빌드 할 때, Build Info 에서 Provisioning Profile 선택 및 Target을 Device로 설정해서 Build
   => 실제 기기에서 돌아가게 하면서 디버깅 할 수 있음

6. 앱스토어에 등록할 배포용 빌드하기
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      a. 위 5.b에서 한것처럼 Distribution Certificate 받아서 설치
      b. 위 5.e에서 한것처럼 Distribution Provisioning Profile을 생성 후 다운로드해서 설치
      c. Distribution 용 Build Target을 만들고, 
          Build Info에서 설치한 Provisioning Profile을 선택하고, 프로그램 버전 정보, 이름 등 지정 후 빌드.

7. 앱스토어에 등록하기
   - iPhone Dev Center > iTunes Connect > Manage Your Applications
      에 들어가서 Add New Application.
      등록할 때 아래 것들이 준비되어 있어야 함.
      a. 6번에서 만든 배포용 빌드한 바이너리 -> zip 으로 압축한 zip 파일
      b. 512x512 짜리 큰 아이콘 이미지
      c. 스크린샷 (Status Bar를 없앤 320x460 사이즈의 스크린샷 파일)
      d. 프로그램을 설명하는 글
      => 이것들이 준비되어 있으면,  요구하는 정보들을 잘 입력해주면 됨.

8. 등록 심사/대기
    - 7번 과정으로 추가를 하면 애플쪽에서 심사를 한 후 등록 또는 거절 될 수 있음.
       심사 과정은 대략 1주~3주까지도 걸리는 듯함. 
       아주 간단한것이 아니고는 2주 정도 예상하고 있으면 될듯함.
       * 혹 거절되면 다시 수정을 하던해서 다시 등록을 하고, 또 기다려야 함.

9. Bank Info, Tax Info 등록
    - 유료로 파는 것을 등록한다면 이 과정을 처리해줘야 함. (어플 등록 전 해도 되고 등록 후에 해도 됨)
       : iPhone Dev Center > iTunes Connect > Contracts, Tax & Banking Information
         에 들어가서 정보들을 입력

10. 등록 완료
    - 등록완료되면 메일이 오고, 이제 홍보 시작!
       Promotional Codes를 받아서, 사람들에게 나눠줘서 무료로 받아보게 할 수 있음(유료어플의 경우)
       어플리케이션별로 50개씩 받아서 뿌릴 수 있음 (대신, iTunes 미국 AppStore 계정이 있어야 함;;;)
       (iPhone Dev Center > iTunes Connect > Request Promotional Codes)       

11. 내 어플은 몇 개나 다운되었나?
    - iPhone Dev Center > iTunes Connect > Sales/Trend Reports
       에 들어가면, 일/주/월 단위로 어느 지역에서 얼만큼 다운되었는지 볼 수 있음.


위 글은 http://blog.xiles.net 에서도 보실 수 있습니다.
(블로그에 몇 개의 글이 더 있고, 앞으로 올리는 글들도 공유할 수 있도록 하겠습니다.)

 


출처 : http://blog.naver.com/PostView.nhn?blogId=gonagi&logNo=150071709992
Posted by 오늘마감
아이폰어플정보2010.06.22 09:48
쓸만한 아이폰 어플리케이션 (1) - Air Video
iPOD Nano를 쓸때도 16GB 용량을 가득채우고 다녔던터라
iPhone을 구입하면서는 고민할 것도없이 가장 용량이 큰 32GB 모델로 구입했다.
어플리케이션과 동영상 등 iPOD보다 더 많은 자료를 넣고 다녀야하기 때문이지만,
정작 현재의 iPhone에는 9GB 정도의 용량만을 사용하고 있는 중이다.
물론 더 익숙해지면 더 많은 데이터들로 여유공간이 많이 줄어들긴 하겠지만.....




워낙 카본특유의 패턴광을 좋아하기 때문에 내가 사용하는 모든 물건들은 카본화가 진행되곤 한다.
카메라에도 리얼카본을 입히고...자동차 본네트와 천정도 리얼카본 패브릭을 입히고.....
자전거도 카본 자전거들을 탔었고 클릿신발 역시 카본.....하다못해 골프채 중 드라이버까지도 카본헤드를 썼었다.
난 분명 심각한 카본중독자가 분명한가보다.....-.-;

앱스토어를 검색하던 중 눈에 띄는 소프트웨어를 발견하고 바로 설치를 진행했다.
Air Video 라는 iPhone용 멀티미디어 스트리밍 Client 어플리케이션이다.



아이폰용 유료 어플리케이션들이 보통 $0.99에서 시작하지만 이 어플리케이션은 무료 3배나 비싼 $2.99라
구입전에 한참을 망설였었다.
(웬만한 핸드폰 게임들도 3천원이 넘는데 아이폰 어플리케이션들이 저렴하다보니 별게 다 고민된다.)

이 어플리케이션의 기능을 간략하게 요약하면 PC(서버)에 있는 멀티미디어 데이터들을 실시간 스트리밍해주고,
원격으로 멀티미디어 데이터들을 Converting 해준다.
한마디로 멀티미디어 데이터를 굳이 아이폰에 용량이 큰 멀티미디어 데이터를 넣고 다니지 않아도
Wi-Fi 지역에서 편리하게 사용할수 있게 해준다.

먼저 클라이언트 딴의 화면을 보기로 하자.



집에서 쓰는 MacBook과 직장에서 사용중인 iMac을 네트워크를 통해 연결시킬수도 있고,
Server의 PIN 코드를 입력하면 인터넷을 통해 서버에 접속해 멀티미디어 데이터를 활용할 수도 있다.
서버 소프트웨어는 Mac용과 Windows용 두가지를 모두 지원하기 때문에
PC 기반에 상관없이 활용이 가능하다.

하지만, Java 기반의 소프트웨어이기 때문에 Java가 설치되어 있어야하고 PC의 경우 Bonjour라는 추가 소프트웨어가
설치되어 있어야 제대로 작동이 된다.
Mac에서 테스트해본 결과 레오파드와 스노우 레오파드에서는 무난히 작동했지만,
타이거에서는 Java 버젼을 1.6으로 업그레이드해야 사용할수 있지만,
애플싸이트와 인터넷을 모두 뒤져봐도 타이거용 Java 1.6은 찾을수가 없었다.
이 참에 MacBook도 스노우 레오파드로 업그레이드를 해야하나.....-.-;




일단 접속이 되면 공유된 폴더를 볼 수 있다.
서버 프로그램에서 지정한 폴더 또는 드라이버의 내용이 iPhone (Client)에서 활용할수 있다.




지정한 폴더로 들어가면 서브폴더를 볼 수 있다.
서버의 폴더내용이 그대로 보여진다.




멀티미디어 데이터가 포함된 폴더로 들어가면 첫화면과 함께 동영상 데이터의 런타임과 용량이 나타난다.
개발사에서는 용량이나 해상도가 너무 높으면 제대로 지원이 안되는 경우도 있다고 하지만,
고해상도의 DVDRip 버젼도 제대로 지원이 되었다.




동영상 화일을 선택하면 메뉴가 뜬다.
실시간 스트리밍과 화일변환 그리고 화일변환 옵션 메뉴가 뜬다.
그냥 실시간 스트리밍을 해서 봐도 Buffering 시간이 그리 오래걸리지 않고도 동영상이 실시간으로 보여진다.
같은 무선공유기상의 화일로 돌릴때나 인터넷을 통해 연결을 하나 시간차이가 그리 크진 않다.
네트워크 스트리밍 부하보다는 화일변환을 위한 서버부하가 크기 때문에 하드웨어 사양이 높을수록 유리하다.
하지만, Core2 Duo 2.0Ghz, 메모리 2기가 사양의 맥북에서도 잘 돌아가니 최근 몇년내에 출시된
PC 사양이라면 무난하게 사용할수 있다.

그럼 지금부터는 PC (서버)의 셋팅화면을 본다.



서버 프로그램을 실행하면 셋팅을 해줘야한다.
가장 먼저 공유할 폴더를 지정하면 된다.
하드디스크의 폴더나 iTunes Playlist 중 선택해서 등록해주면 Client 연결시 자동으로 공유된 폴더가 뜨게된다.




셋팅화면에서는 실시간 스트리밍시 동영상 해상도를 지정해주고, Client 접속에 대한 권한을 지정해준다.
Default값으로 써도 무방하지만, 보안을 위해서라면 비밀번호를 지정해 주는게 좋다.
뭐 자료는 공유하는게 미덕이라고 생각한다면 오픈시켜둬도 무난하고....^^;




Remote 항목은 인터넷 접속에 대한 셋팅을 해주는 메뉴이다.
인터넷 접속을 Enable 시켜주면 PC (서버)의 PIN 코드가 뜬다.
이 코드를 메모해 뒀다가 iPhone에서 Client 어플리케이션을 실행하고 입력해주면 된다.
Test Connection을 이용해 접속여부를 확인해보고 문제가 없다면 제대로 작동이 된다.




마지막으로 자막화일 지원을 위한 Subtitle 항목을 셋팅해 준다.
한글자막을 봐야하니까 폰트는 당연히 한글폰트를 지정해줘야 한다.
윈도우 비스타의 맑은고딕 폰트를 설치하고 지정해줬다.
기본 Encoding은 'Korean (KS C 5601)'로 해주면 무난히 자막이 보인다.
그리고 원하는 언어를 지정해주면 모든 셋팅이 끝난다.

이제부터는 iPhone에서 간편하게 PC의 동영상 화일들을 실시간 스트리밍시켜 볼 수 있게된 것이다.
물론 Wi-Fi 지역에 있어야 활용이 가능하다는 제약이 있긴 하지만,
시내에서 오픈된 Wi-Fi 지역을 찾기는 그리 어렵지 않기 때문에 활용지역은 다양하다.
또한 Converting 옵션을 통해 훨씬 빠른 시간에 동영상 화일들을 iPhone에서 지원되는 포맷으로
변환이 되기 때문에 화일 Converter로 활용해도 편리하다.

참고하셔서 유용하게 활용하시길.....^^;


(Photo Images were taken with Canon EOS 40D, EF-S 17-55mm F2.8 IS USM)

 


출처 : http://blog.naver.com/PostView.nhn?blogId=inetami&logNo=20103746907
Posted by 오늘마감
«이전  1 2  다음»