XCODE2011.05.16 00:42

기본 문법 #1

[object message:parameter];

//C style

DrawMyGradient(myView, aquaGradient, 0.0, 1.0, YES);

//Objective - c

[myview drawMyGradient:aquaGradient formValue:0.0 toValue:1.0 opaque:YES];


-(void)drawMyGradient:((CGGradientRef)gradient fromValue:start toValue:end opaque:opaque  //메소드 선언


기본 문법#2

//C Style

SubStringFormTo(sourceStr, &destStr, 2, 5); //위에서 타입을 정하고 메모리 얼록하고 여기다가 넣어달라

//O

NSString *destStr = [sourceStr subStringFrom:2 to:5];

long hash = [[sourceStr subStringFrom:2 to:5] hash]; //hash라는 메소드를 또 던진다


-(NSString *)subStringFrom:(int)from to:(int)to


오브젝트의 생성과 소멸

리테인 카운트 관리    //생성시점과 소멸시점을 관리

//person 클래스의 me 오브젝트를 만들고 없애기

Person *me = [[Person alloc] init];초기화     //리테인 카운트 1 생명줄!

[me retain];                                             //리테인 카운트 2

[me release];                                          //리테인 카운트 1

[me release];                                         //리테인 카운트 0

alloc -> release 해줄 필요, retain 해주지않은건 release 해줄 필요가없음


클래스 선언

.h 확장자를 가지는 파일

//헤더의 시작 interface  Person 클래스이름 NSObject는 슈퍼클래스

@interface Person : NSObject <NSCopying> {    //person은 NSObject의 서브클래스

int age;                          //instance변수 IVAR

 NSString *name;

}


-(void)singAsong:(Song *)song; //메소드선언 리턴타입 보이드 매개변수로 Song을 받는다

@end


클래스의 구현

.m 확장자를 가지는 파일


@implementation Person


-(void)singAsong:(Song *)song

{                                                       //cocoa object

NSlog(@""&@ can sing a song", name);      //NSlog가 있고 C에있는 printf와 유사하다, 중간중간에 token을 사용할 수 있다. 

}

@end


코딩 규약 - 이름 짓기

첫 글자를 대문자로

TheSinger.proj   Person.h / Person.m


nameOfPerson

ageOfPerson

addressOfPerson

//매개변수이름도 첫글자 소문자로,


-(void)singASong:(Song *)song


아이폰은 singleWindow




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

'XCODE' 카테고리의 다른 글

아이폰 개발 Xcode 기본문법 #1,#2  (0) 2011.05.16
xcode에서 iphone app 이름 변경  (0) 2011.04.09
Xcode 삭제  (0) 2011.04.09
[Objective-C] Xcode프로젝트 창  (0) 2011.04.09
[펌] Xcode 에 Subversion 적용하기  (0) 2011.04.09
XCODE용 디버그 메크로  (0) 2011.04.09
Posted by 오늘마감

아이폰 용 애플리케이션을 제대로 개발하려면 애플 개발자 센터에 개발자로 등록을 해야 한다.

 

솔직히 이 과정이 짜증이 나기도 하지만 무쟈게 복잡하다. 정리해 두지 않으면 휘발성 메모리에서 훌훌 날아가 버릴 것 같아 이 참에 문서화 해둔다.

 

개발자 등록을 하지 않는다고 SDK를 다운로드 받는 데 제약이 있는 건 아니다.

 

Xcode 등 개발 환경을 못 쓰는 것도 아니다.

  

애플리케이션 개발 자체에 제약을 받는 것도 아니다.

 

그럼 뭐 하러 그 짜증나고 복잡한 짓을 하냐고?

  

개발자로 정식 등록하지 않으면 하다 못해 자신의 기기라 하더라도 자신이 개발한 애플리케이션조차 설치를 못하기 때문이다.

  

개발 단계에서는 시뮬레이터를 통해 시험 및 디버깅을 할 수 있지만 기기 자체에 설치해보려면 어쩔 수 없이 개발자로 등록해야 한다는 거다.

  

http://developer.apple.com/iphone/program

  

  

여기 가서 Enroll Now 버튼을 누질러 주시는 걸로 개발자 등록 과정이 시작된다.

  

한 걸음씩 가보자.

  

1. 개발자 등록

   

  

  

이제 대망의 아이폰 개발자로 등록하는 거다. 컨티뉴~~~

  

  

기존 애플 ID를 사용하거나 새로 만들어야 한다. 세금 문제를 고려해 따로 만들기를 권하는데 난 걍 기존 ID 썼다.

  

개발자로 등록하려면 개인의 경우 연간 $99를 내야 한다. (기업은 더 비싸다.) 인증을 위해서라도 어쩔 수 없는 선택이니 투덜거릴 거면 개발 안 하면 된다.

  

  

하루 이틀쯤 지나면 메일로 활성화 코드(activation code)가 날라온다.

  

  

등록하고 나면 드디어 개발자 사이트가 열린다.

  

  • Xcode - 매킨토시 Objective-C 통합 개발환경 (아이폰 포함)
  • iPhone Simulator - 아이폰이 없어도 시뮬레이터를 통해 개발한 애플리케이션을 실험 및 디버깅 할 수 있다
  • Instruments - 디버거와 프로파일러가 포함돼 있다
  • InterfaceBuilder - GUI 디자인 환경으로 직접 코딩을 하지 않고도 손쉽게 뷰 디자인을 할 수 있다. 특이한 건 VisualStudio 등 여타 IDE내 디자이너처럼 코드를 자동 생성하는 게 아니라 아예 객체(objects)를 인스턴스화해서 냉동실에보관(freeze)하는 구조라는 거다. 애플의 소프트웨어 최적화 신화의 근간이 아닌가 싶다.
  • 나머지는 모두 레퍼런스 자료들이다. 배터지게 읽거나 보고도 남을 정도로 넘쳐난다. 물론, 다 영어다. (근까, 우린 영어 공부 안하면 뭘 해도 먹고 살기 힘들다. 특히, 영어 공부 안하고 한글화를 기다리는 호모 사피엔스는 늘 뒤쳐질 수 밖에 없는 현실이다.구실 찾지 말고 걍 영어 공부하는 게 상책이다.)

  

2. 개발 인증서 발급 받기

  

인증서는 개발자가 애플리케이션에 사인을 하는 것과 같다. 어떤 넘이 만든건지 전자 꼬리표가 따라다닌다는 거다. 금융 거래 할 때공인인증서를 통해 신분을 증명하는 절차와 다를 게 없다. 이 과정이 없다면 게나 고동이나 익명으로 애플리케이션을 개발하고 악성코드를 심어둘 수도 있으니 당연한 절차라 할 수 있다.

  

인증서는 개인 키(private key)와 공개 키(public key)로 구성된다. 개인 키는 개발자 혼자 꿍쳐 두는 열쇠고 공개 키는 개인 키로 암호화된 디지털 데이터를 풀기 위해 공개적으로 배포하는 열쇠다.

  

예컨대, 중요한 워드 문서 하나를 대두족장의 개인 키로 암호화해서 대두족장의 공개 키와 함께 배포하면 오로지 대두족장의 공개키로만 암호화를 풀 수 있다는 거다. 소두족장이란 넘이 이 문서에 장난질을 하고 대두족장의 문서인 것처럼 배포를 하면? 개인키로 암호화했던 데이터와 다르기 때문에 공개 키와 아귀가 맞지 않게 된다. 근까, 대두족장 본인이 사인하지 않은 장난질 문서를누군가 '대두족장이 서명한 문서'로 오인할 가능성이 없다는 말이다. 서명 위조도 하는데 뭐 그까짓 게 안 되겠냐고? 해 보시라.128비트 쯤 되는 키를 깰만한 알고리즘 짱구굴릴 수 있으면 (이 따위 짓이 가능하다고 생각한다면 24같은 드라마나Swordfish 같은 영화 넘 많이 본거다ㅡ.ㅡ) 워렌 버핏 부럽지 않은 부자… 아니 세계 정복 야심도 키울 수 있을 거다.(아마 빈 라덴한테 납치될 지도 모른다…쿨럭~)

  

데이터 보안을 위해 대두족장과 소두족장이 손잡고 일할 수도 있다. 대두족장의 개인 키 + 소두족장의 공개 키로 문서를 암호화 해대두족장이 소두족장에게 메일로 보낸 다음 소두족장의 개인 키 + 대두족장의 공개 키로 풀어 보면 전송 과정에서 데이터가왜곡되거나 변질되지 않았는지 확인이 가능하다는 거다. 예컨대, 0100…..0111 로 보냈으면 당근 도착 후 까봐도0100…0111 이어야 한다는 거다. 0111….1010 따위로 바뀌어져 있다면 껍데기는 그럴 듯 해 보여도 중간에 누군가장난질을 한 거라는 말이다. 보안은 유지하면서도 대두족장과 소두족장은 자신의 도장(개인 키)를 외부에 공개할 필요가 없다. 달랑공개 키만 주고 받으면 (개인 키와 맞물리는 열쇠) 되기 때문이다.

  

그럼 아이폰에서는 왜 쓰냐고?

  

개발자는 개인 키로 애플리케이션에 서명을 하고 공개 키와 함께 설치를 하면 아이폰에서 그 공개 키로 개발자의 신분을 확인한 다음애플리케이션을 실행한다. 분명 서명한 넘은 대두족장인데 사인이 어딘가 짝퉁스럽다면? 글타. 실행 안 된다.

  

아리까리하다면 걍 아이폰 사용자의 안전을 위한 장치라고 생각하면 그만이다.

  

근데 인증서를 지 혼자 만들어 지 혼자 쓰면 애플이 확인할 길이 없다. 그래서 인증서는 공신력 있는 기관에서 확인을 받아야 한다.동사무소 가서 인감도장 등록하는 과정이라 생각하면 된다. 이른바 CSR(certificate signaturerequest)이라는 걸 동사무소(이 경우는 애플)에 제출해야 하는데 이게 바로 개발자의 공개 키가 된다. (과거 사이트 운영할때 이 과정 지랄 맞게 복잡했는데 요즘은 손 안 대고 코 푸는 수준이다ㅠ.ㅠ)

  

개인 키 및 공개 키(CSR)는 맥의 키체인 유틸리티로 생성할 수 있다.

  

메뉴에서 '키체인 접근 -> 인증 지원 -> 인증 기관에서 인증서 요청'을 순서대로 클릭해 다음처럼 인증 정보를 입력하고 디스크에 저장한다.

  

  

디폴트로 키 크기가 2048비트, RSA 알고리즘의 키를 생성해 준다.

  

2048비트로 암호화된 데이터를 깨는 해커는 영화에도 등장할 가능성이 없다. 외계인 캐릭터가 아닌 이상 이 따위 헛소리를 지껄이면 욕먹기 딱이니깐ㅡ.ㅡ

  

CSR을 저장했다면 개발자 프로그램 사이트로 가서 신청을 한다.

  

http://developer.apple.com/iphone/manage/overview/index.action

  

 

왼쪽 메뉴에서 Certificate을 클릭하면 뜨는 화면이다. 난 이미 인증서를 받았기 때문에 저렇게 나오지만 아직 인증서 발급을받지 않은 상태라면 CSR을 선택해 업로드 할 수 있는 화면이 뜬다. 개발용은 Development 화면에서, 배포용은Distribution 탭에서 처리할 수 있다. 

  

근까, 개발용이든 배포용이든 기본적으로 다음과 같은 화면에서 CSR을 업로드하게 된다. (다음은 배포용의 경우다.)

  

  

CSR을 업로드하면 승인할지 묻는 화면이 뜨는데 오케바리를 눌러주면 그만이다.

  

  

그런 다음 Download 버튼을 클릭해서 발급 받은 인증서를 개발자 맥에 다운받으면 된다.

  

인증서를 더블클릭하면 키체인 유틸리티가 떠서 '추가하까?' 물어본다. 추가 안할거면 이 개고생 할 이유가 없다. 당근이라고 클릭해 준다.

  

요기까지 하면 이제 대두족장의 맥북은 대두족장 전용 아이폰 개발 머신이 된다. 다시 말해, 이 개발 머신에서만 대두족장 신분으로개발한 애플리케이션을 디지털 서명하고 실행할 수 있다는 거다. 돈이 좀 튀어서 개발 머신이 두 세대 쯤 된다면 함께 생성한 개인키를 해당 개발 머신에도 복사해 주면 된다.

  

  

키체인에서 개인 키 클릭하고 내보내기 해서 2차, 3차, 4차…n차(오우~ 돈이 좀 많이 튀나 보지?ㅡ.ㅡ) 머신에 심어 주면 되신다고 하는데 나도 안 해봤으니 돈을 주체하지 못해서 맥을 2대 이상 굴리는 분은 해 보시라. 

3. 개발 기기 등록

  

개발자의 아이폰도 등록해 줘야 한다.

  

역시 개발자 프로그램 사이트 오른쪽 메뉴에서 Devices를 클릭한다.

  

  

Add Device 버튼을 클릭해 기기 이름(자신이 식별하기 위한 거니까 아무거나 쓰면 된다)과 Device ID를 입력해 준다. Device ID는 아이폰 연결하고 아이튠즈에서 확인할 수 있다.

  

4. 애플리케이션 ID 생성

  

왼쪽 메뉴를 보면 App IDs라는 게 있다. 기기 뿐 아니라 애플리케이션도 ID를 등록한다.

  

  

1Z3K14B128.so.what

  

애플리케이션 ID는 두 부분으로 나뉘는데 앞의 암호 같은 부분이 번들 시드(bundle seed)라는 걸로 애플이 알아서 만들어주는 거고 나머지는 개발자가 입력한다. 애플리케이션마다 일일이 만들기 귀찮으면 와일드카드를 쓸 수도 있다.

  

  

와일드카드를 쓰면 개발할 때마다 일일이 신경 쓰지 않아서 편하겠지만, Push Notification 기능을 사용할 수 없다고경고한다. 푸시는 딱 꼬집어 그 넘과만 연동돼야 하기 때문에 구체적으로 애플리케이션 ID를 만들어줘야 한다는 거다.

  

5. 개발용 프로비전 생성

  

프로비전이란 앞에서 마련한 디지털 신원 확인 데이터(개발 인증서, 기기 ID, 애플리케이션 ID 등)를 한 데 묶은 패키지라 할수 있다. 이걸 개발용으로 쓰려는 아이폰에 깔아주면 그제서야 개발용 아이폰이 완성되는 거다. 개발자의 인증서로 디지털 서명이 돼있고, 프로비전에 포함된 기기 ID와 실제 아이폰 ID가 동일해야 하며, 애플리케이션 ID도 일치해야 애플리케이션이 실행된다.(배포할 때는 모든 기기에서 쓸 수 있어야 하기 때문에 애플리케이션 ID 정보는 빠진다.)

  

  

NewProfile 버튼을 클릭해 프로파일 이름을 입력하고 인증서를 선택한 다음 애플리케이션 ID 및 사용 기기를 골라 Submit해주면 Download할 수 있는 화면이 나오고 *.mobileprovision 이라는 파일을 다운로드 받게 된다. 이걸더블클릭하면 Xcode Organizer가 뜬다. 프로비전 파일을 my iPhone에 드래그해주면 개발자의 아이폰에 설치가된다.

  

  

5. 프로젝트 설정

  

아이폰에 프로비전을 설치했으면 프로젝트에서도 궁합을 맞춰줘야 한다. 다음 화면은 개인적으로 Stanford University의아이폰 애플리케이션 개발 강좌를 따라해보며 만든 Stalker란 프로젝트의 Info 화면이다. Xcode의 Project메뉴에서 Edit Project Settings를 클릭하고 Build 탭을 누르면 Code Signing Identity 항목을볼 수 있다. Any iPhone OS Device를 클릭하면 다음과 같은 화면이 뜬다.

 

*참고로 영어가 부담스럽지 않은 분이라면 아이튠즈에서 무료로 볼 수 있는 Stanford University의 iPhoneApplication Programming 강좌를 강추한다. 어떤 책 보다도 감 잡기 쉬울 거다. (특히, 질의응답을 형식이아닌 필수 요소로 생각하는 외넘들의 대학 강의 모습에 감동 받을 기회가 되기도 한다…쿨럭~)

  

  

여기서 원하는 프로비전을 선택해 주면 된다. (구체적으로 만든 애플리케이션 ID가 아니라 와일드카드를 써서 퉁친 애플리케이션ID라면 여러 프로젝트에서 공용으로 쓸 수 있다. 근까, 공부하는 중이라 프로젝트를 남발할 게 뻔하다면 와일드카드 애플리케이션ID를 만들어 둬야 생고생 안 한다.)

  

여기까지 마치고 아이폰 연결한 다음 프로젝트를 실행하면 (시뮬레이터가 아닌 Device를 타겟으로 설정해야 한다) 짜잔~ 아이폰에서 프로그램이 뜨는 걸 목도할 수 있다.



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

다음 네 개의 장에서는 iPhone의 UIKit과 Cocoa Touch를 이해하는 데 필수적인 내용에 대해 다루지만, 아마 당장이라도 프로그램을 만들 준비가 되었을 것이라 여겨지기 때문에 먼저 간단한 iPhone 애플리케이션을 작성해 보겠다. 이 예제를 통해 IBOutlet과 IBAction의 사용법 그리고 Xcode 및 인터페이스 빌더와 친숙해질 것이다.

 

[Note]
이 책에서 소개하는 거의 모든 따라하기 예제는 이 책의 공식 블로그(
http://blog.naver.com/ipgipg)에서 동영상 서비스되고 있으며, 정보문화사 홈페이지(http://www.infopub.co.kr)의 자료실에서 다운로드 받을 수 있다. 첫 번째 동영상-지금 보여줄 따라하기 예제 애플리케이션-은 단계별로 음성 설명을 포함하고 있으나, 나머지 동영상은 음성 없이 화면만 나온다. 그러나 이번 예제 동영상에서 설명하는 과정을 잘 익혀놓으면 나머지 동영상도 어려움 없이 따라올 수 있을 것이다.


1. Xcode를 실행한 다음, 메뉴에서 [File]-[New Project]를 선택하면 New Project 창이 나타난다([그림 1-5]).
 

 

[그림 1-5] New Project 창

 

2. View-based Application을 선택하여 클릭한다. Save As 창이 나타나면 애플리케이션 이름으로 QuickStart라고 입력한다([그림 1-6]).

 

[그림 1-6] Save As 창

 

3. Xcode가 새 프로젝트를 생성하면 [그림 1-7]과 같이 왼쪽의 Groups & Files 목록에서 Classes와 Resources 폴더를 각각 아래로 펼친다.
 

[그림 1-7] Xcode에서 Classes와 Resources 폴더를 펼친 상태의 화면

 

4. Resources 폴더에 있는 QuickStartViewController.xib를 더블 클릭하여 인터페이스 빌더를 불러온다.

 

5. [그림 1-8]과 같은 캔버스(canvas)가 나타나지 않는다면 [그림 1-9]와 같이 도큐먼트 창에서 View를 더블 클릭한다.
 

[그림 1-8] 인터페이스 빌더 상의 뷰 캔버스

 

 

[그림 1-9] 도큐먼트 창

 

6. 인터페이스 빌더의 메인 메뉴에서 [Tool]-[Library]를 선택하면 라이브러리 창을 나타낼 수 있다. 라이브러리 창의 상단에서 모든 Cocoa Touch 클래스를 보여준다. Library를 아래로 펼친 후 Cocoa Touch를 클릭한다([그림 1-10]).
 

[그림 1-10] 라이브러리 창

 

7. 라이브러리 창 중앙 부분의 내용을 아래로 스크롤하면 Round Rect Button이 나오는데 Round Rect Button을 그대로 뷰 캔버스로 드래그 앤 드롭한다([그림 1-11]).
 

[그림 1-11] 버튼 추가

 

8. 뷰 캔버스 상의 버튼을 더블 클릭하여 Click Me라고 입력한다.

 

9. 7과 마찬가지로 Label을 만든다([그림 1-12]).

[그림 1-12] 레이블 추가

 

10. 저장한 다음 인터페이스 빌더를 종료한다.

 

11. 다시 원래 프로젝트 창으로 돌아와 Groups & Files 목록의 Classes 폴더 안에 있는 QuickStart ViewController.m을 선택하면 오른쪽의 편집 창에 소스 코드가 나타난다([그림 1-13]).

 

[그림 1-13] QuickStartViewController.m 화면

 

12. QuickStartViewController.m 소스 내용을 [소스 코드 1-1]과 같이 수정한다.

 

[소스 코드 1-1] QuickStartViewController.m
#import "QuickStartViewController.h"
@implementation QuickStartViewController
@synthesize myLabel;
- (IBAction) sayHello: (id) sender {
 NSLog(@"Hello....");
 self.myLabel.text = @"Hello";
}
- (void) dealloc {
 [super dealloc];
 [myLabel release];
}
@end

 

13. 마찬가지로 QuickStartViewController.h 파일을 열어 [소스 코드 1-2]와 같이 수정한다.

 

[소스 코드 1-2] QuickStartViewController.h
#import <UIKit/UIKit.h>
@interface QuickStartViewController : UIViewController {
 IBOutlet UILabel * myLabel;
}
@property (nonatomic, retain) IBOutlet UILabel * myLabel;
- (IBAction) sayHello: (id) sender;
@end

 

14. Xcode 메인 메뉴에서 [Build]-[Build]를 클릭하여 방금 작성한 프로젝트를 빌드한다.

 

15. QuickStartViewController.xib를 더블 클릭하여 인터페이스 빌더로 불러온다.

 

16. 뷰 캔버스에서 버튼을 선택한 후 인터페이스 빌더 메인 메뉴에서 [Tool]-[Inspector]를 선택하여 인스펙터 창을 띄운다([그림 1-14]). 인스펙터 창이 뜨면 두 번째 탭을 클릭하여 버튼 인스펙터를 띄운다([그림 1-15]).

 

[그림 1-14] 인스펙터 창

 

 

[그림 1-15] 버튼 인스펙터 창

 

17. 이벤트 목록에서 Touch Up Inside로 마우스 포인터를 옮긴 후 오른쪽의 동그라미를 도큐먼트 창의 File’s Owner로 드래그 앤 드롭한다. 이때 나타나는 팝업 창에서 sayHello:를 선택한다([그림 1-16]).
 
 

[그림 1-16] 버튼과 IBAction 연결하기

 

18. 뷰 캔버스의 레이블을 클릭하면 인스펙터 창의 내용이 레이블에 맞게 변경된다. 마찬가지 방식으로 New Referencing Outlet을 도큐먼트 창의 File’s Owner로 드래그 앤 드롭한 후 팝업 창에서 myLabel을 선택한다. 팝업 창에서 view를 선택하지 않도록 주의한다.

 

19. 저장하고 인터페이스 빌더를 종료한다.

 

20. Xcode 상에서는 현재 사용 중인 SDK로 iPhone Simulator 3.0과 Debug가 선택되어 있을 것이다([그림 1-17]).

 
[그림 1-17] 사용 중인 SDK로 iPhone Simulator 3.0과 Debug가 선택된 화면

 

21. Xcode 메인 메뉴에서 [Build]-[Build And Run]을 선택하면 방금 작성한 예제 애플리케이션이 iPhone 시뮬레이터에 설치된 후 동작한다([그림 1-18]).
 


[그림 1-18] iPhone 시뮬레이터에서 동작하는 예제 애플리케이션

 

22. Xcode 메인 메뉴에서 [Run]-[Console]을 선택하여 디버거 콘솔창을 띄운다.

 

23. 버튼을 클릭하면 레이블의 내용이 Hello로 바뀌며 디버거 콘솔창에 로그가 기록되는 것을 확인할 수 있다([그림 1-19]).
 


[그림 1-19] 버튼을 클릭한 후의 예제 애플리케이션 모습

 

 

 

예제로 배우는 핵심 패턴 아이폰 프로그래밍

제임스 브래넌 | 정기훈 옮김

정보문화사 2010.04.28



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

iPhone 개발을 위해서는 개발툴인 XCode(Visual Studio와 같은개념)iPhone SDK3.0(.Net Compact Frame work와 같은개념)이상을 설치해야한다.

물론 운영체제인 OSX10.5.7 이상버젼이 설치되어 있어야함은 말할 필요도 없다. 스티브 잡스 아저씨가 이거 외에는 절대 개발 안된다고 했다.

 

설치는 이미 완료되었다는 가정하에 진행하겠다. (사실 설치는 컴맹이 아니면 설치파일 클릭하고 다음,다음 누르다보면 완료된다.)

 

설치된 XCode를 실행해보자. 저자도 사실 처음 설치하고 어디있는지 좀 헤매었다. 윈도우 탐색기와 같은 Finder를 실행시킨다.(아래 이미지 아이콘)

[그림1]

 

XCode실행 파일의 위치는 Developer>Applications 에 위치하고 있다.

 

[그림2]

[그림3]

[그림4]

[그림4]XCode 파일을 더블클릭한다.

실행이 되면 아래 네모부분처럼 하단에 아이콘이 생성된다. 파란 종이위헤 망치모양(장도리?) 아이콘이다.

 

[그림5]

그리고 상단의 메뉴역시 XCode메뉴로 변경이된다.

[그림6]

[Welcom To XCode]라고 적힌 프로젝트 시작화면이 뜨는데 그냥 닫기를 누른다.

 

[File]메뉴의 [New Project…]를 클릭한다.

[그림7]

[그림8]

 

[그림8] 에서 처럼 [View-based Application]을 선택하고 [Choose…]를 클릭한다.

 

[그림9] 에서 처럼 프로젝트명을 입력합니다. 저자는 GoMediHomePage 라는 명칭을 입력했습니다.

[그림9]

다음과 같이 XCode가 파일들을 생성하게됩니다.

[그림10]

왼쪽 TreeGroup&Files 메니져입니다. 오른쪽 상단은 왼쪽에 선택된 영역에 속하는 파일들이 보여지고 그 하단은 파일의 상세 내용 또는 소스코드가 보여지게 됩니다.

[그림10]은 현재 왼쪽 Tree의 최상단이 선택되어 있으므로 프로젝트내의 모든 파일들이 표시된 상태입니다.

[그림11]

[GoMediHomePageViewController.xib] 파일을 더블 클릭합니다. 이파일은 화면 디자인을 하는 파일이라고 생각하시면 됩니다.

[그림12]

 

[그림12]과 같이 인터페이스 빌더가 실행이됩니다. 왼쪽창은 문서윈도우 이며 오른쪽 빈 창은 뷰 디자인 윈도우 입니다.

 

[그림13]

상단 메뉴의 [Tools][Library][Inspector]를 실행합니다. 단축키는 [윈도우키+Shift+L] [윈도우키+Shift+I] 입니다.

[그림14]

아래와 같이 창이 열립니다. 인스펙터창은 Visual Studio 의 속성창과 비슷하고 Library창은 도구상자와 비슷한 개념입니다.

 

[그림15]

라이브러리 창에서 [Label] [Round Rect Button] [UIImageView] 를 각각 끌어다가 View윈도우에 놓습니다.

결과는 [그림16] 과 같습니다.

[그림16]

버튼을 클릭하고 인스펙터 창에서 [Title]부분을 다음과 같이 수정합니다. 그리고 버튼 크기도 적당히 드래그하여 늘여줍니다.

[그림17]

[그림18]

라벨 또한 Text 수정합니다.

 

UIImageView 에 추가할 이미지를 리소스에 추가합니다. 웹에서 적당한 이미지를 다운로드받고 Finder에서 끌어다가 Resources폴더에 드래그해서 떨구어줍니다.

 

[그림19]

 

[그림20]

카피할것인지 물어봅니다. [Add]를 클릭합니다.

 

다시 왼쪽창에서 Tree 최상단을 클릭하고 [GoMediHomePageViewController.xib] 파일을 더블 클릭합니다.

다시 View윈도우의 [UIImageView]를 클릭하고 인스펙터 창의 Image 부분의 콤보박스를 클릭하면 조금전에 추가한 이미지의 파일명이 뜨게 됩니다. 이것을 선택하면 해당 이미지가 이미지뷰에 뜨게 됩니다. 역시 적당한 크기와 위치로 드래그해 줍니다.

 

[그림21]

[그림22]

[그림23]

[그림24]

문서윈도우에서 닫기 버튼을 클릭합니다.(빨강,주황,초록 버튼 중 빨간 동그라미 부분) [그림24]와 같이 저장여부를 물어옵니다. [Save]를 클릭해서 저장해줍니다.

[그림25]

[그림25] 의 -(IBAction) onGoToMediexpert; 부분을 헤더파일에 추가합니다. 홈페이지로 이동하는 버튼을 클릭했을 때 쓰일 이벤트를 헤더파일에 선언하는 것입니다. 그리고 저장합니다.

[그림26]

반드시 [그림26]과 같이 저장을 해야 다음단계에서 이벤트가 뜨게됩니다. (단축키는 [윈도우키+S]입니다.)

그다음 다시 [GoMediHomePageViewController.xib] 파일을 더블 클릭합니다.

그리고 [그림27]과 같이 문서윈도우의 [File’s Owner]에서 마우스 오른쪽 버튼을 클릭하면 방금전에 헤더파일에 선언했던 [onGoToMediexpert] 이벤트가 뜨게 됩니다.

[그림27]

[그림28]

이벤트의 오른쪽에 빈동그라미 부분을 드래그해서 이벤트가 발생할 객체인 [메디엑스퍼트 홈페이지] 버튼으로 드래그해서 놓습니다. 그럼 이벤트와 버튼이 연결되는것입니다. 이때 버튼에는 이벤트가 여러 개 있는데 이중에서 버튼이 눌러졌다가 놓일 때 발생하는 이벤트인 [Touch Up Inside]를 선택해줍니다.

[그림29]

[그림30]

이 같은 과정의 결과로 [그림31]과 같이 이벤트와 버튼이 연결된 것을 볼 수 있습니다.

굉장히 직관적인 과정이죠? 검은색의 상자를 왼쪽상단 X 버튼을 눌러 닫습니다.

 

[그림31]

마찬가지로 문서윈도우 닫기 버튼을 클릭하고 저장을 합니다.

[그림32]

[GoMediHomePageViewController.m] 파일의 제일 마지막 부분에 [그림32]과 같이 코딩을 합니다.

@end윗 부분의 -(IBAction) 부분..

이제 완성되었습니다. 컴파일하고 실행시켜보겠습니다.

 

[그림33]

[그림34]

[그림33]를 클릭하고 [그림34]처럼 모두 저장을 클릭합니다.

[그림35]

컴파일이 오류없이 정상적으로 완료되면 XCode 창 오른쪽 하단에 Suddeeded라는 표시가 뜨게되고 아이폰 에뮬레이터가 뜨게됩니다.

 

[그림36]

버튼을 클릭하면 브라우져를 통해 홈페이지가 뜨게 됩니다. 이때 [Alt]키와 마우스 드래그를 통해 그 유명한 멀티터치로 풀브라우징 되는 홈페이지를 확대 또는 축소해서 보실수 있습니다.

[그림37]

 

종료는 상단의 에뮬레이터 메뉴에서 종료를 하셔도 되고 하단의 실행중인 아이콘에서 마우스 오른쪽 버튼을 클릭해서 [그림37]과 같이 종료하여도 됩니다.

 

문서의 내용이 다소 긴듯하지만 차근차근 반복하시다보면 쉽게 익히실 수 있을듯합니다.

이상  Goldrush였습니다.

 

감사합니다.

 

[인용시 출처를 밝혀주세요.]

 



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

 

//현재일자 세팅 

NSCalendar *calendar = [NSCalendar currentCalendar];

unsigned int unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comp = [calendar components:unitFlags fromDate:date]; 

 

//사용하기

[comp year]    //년도

[comp month] //월

[comp day]    //일

[comp hour]   //시

[comp minute]//분

[comp second]//초 

 



출처 : http://blog.naver.com/PostView.nhn?blogId=goldrushing&logNo=130086308063
Posted by 오늘마감
XCODE2011.04.09 11:09

C 와 Objective C 를 공부할까 하고 보니 개발환경이 필요해졌습니다.

매킨토시를 가지고 있다면 그대로 시작하면 될거구요, 아니라면 피씨에 VMWare 를 설치하고

그 위에 OSX 를 올릴 수도 있습니다. http://cafe.naver.com/paramsx/2006

 

어느 쪽이든 준비가 되었다면 Xcode 를 설치해봅시다.

Xcode 는 맥에서 제공하는 IDE 로 OSX 와 아이폰용 어플을 개발하기 위한 툴이네요.

 

기본 OSX 의 설치가 끝났다면 DVD 의 선택설치 폴더를 열어서 Xcode 인스톨러를 실행시켜도 되구요,

http://developer.apple.com/mac/ 에 가서 간단한 설문에 답하고 애플 아이디를 만들어

개발자로 등록한 다음 다운받아도 됩니다. 아이폰용 SDK 가 필요하다면 OSX 의 DVD 에는 포함되어 있지

않으므로 처음부터 위 사이트에 가서 풀버전으로 다운받는게 좋을거 같아요.

 

설치가 끝나면 Xcode 를 찾아서 실행시키면 됩니다. 위치는 /Developer/Applications/ 에 있어요.

 

 

잘 모르겠다 싶으면 그냥 파인더를 열고 좌측 메뉴에서 하드디스크를 클릭한 다음,

Developer 폴더와 Applications 폴더를 차례로 클릭해 들어가면 됩니다.

 

 

 

여러가지 개발툴이 보입니다만, 당장은 Xcode 에만 관심을 가지면 됩니다.

 

 

 

실행시키면 위와 같은 환영화면이 나타납니다.

제가 C 를 공부하기 위해 고른 책이 윤성우님의 “난 정말 C Programming 을 공부한 적이 없다구요!” 입니다.

http://cafe.naver.com/paramsx/1974

 

흔히들 쓰는 윈도우 환경이나 Visual C++ IDE 를 고르지 않은 이유는 우선 목표로

Objective C 의 공부를 염두에 두고 있기도 하지만 또 약간 마이너한 성격이기도 해서입니다.

 

매킨토시의 Xcode 에 포함된 컴파일러는 GCC 입니다. 리눅스와 매킨토시! 근사하지 않습니까? ^^

“난 정말...” 책을 공부하는 중에 Visual C++ 가 C99 표준을 잘 준수하지 않고 있다는 걸 보면서

더더욱 마음이 확고해졌습니다. 마소의 툴은 뭐랄까요? 강력하긴 하지만 절대강자의 오만함도 느껴지는거 같아요.

 

비록 매킨토시 개발서들은 Xcode 의 편리함과 강력함에 대해 칭찬을 하고 있지만,

주력으로 Visual C++ 를 사용해온 개발자들은 디버깅 기능이라든지 여러 면에서

마소의 툴들을 따라가지 못한다고들 하는 거 같습니다.

 

저야 어디까지나 취미로서의 프로그래밍이니, 예쁜 쪽으로 갑니다. ^^

 

각설하고 위 화면에서 Create New Xcode Project 버튼을 누릅니다.

 

 

 

탬플릿 선택은 다른 여타 개발툴들과 거의 비슷한 인터페이스인거 같아요.

OSX 의 Application 에서 Command Line Tool 을 고르세요. 언어는 C 입니다.

윈도우 환경이라면 콘솔 응용 프로그램 선택하는 거랑 같습니다.

 

 

 

프로젝트명과 저장할 위치를 선택하는건데요,

저는 C Study 라는 이름의 프로젝트를 데스크탑 화면에 저장하도록 선택했습니다.

 

 

 

그러고 나면 위와 같은 화면이 뜹니다.

기본 main.c 라는 샘플 프로그램이 들어있네요.

 

 

 

새 프로그램 작성을 위해서 좌측 source 폴더에 마우스 우측 버튼을 클릭한후

ADD 에서 New File 을 선택합니다.

 

 

 

탬플릿 선택화면에서 C 를 고릅니다.

 

 

 

오버플로우와 언더플로우 관련 예제를 입력하고 실행시켜볼 생각이어서

제목을 flow 로 정하고 Finish 버튼 눌렀습니다.

 

 

 

우하에 보이는 소스코드는 “난 정말...” 책 107페이지의 예제 프로그램을 약간 수정한겁니다.

책은 int 형 변수의 최소값에 대해 오자가 있더군요. 제대로 수정해서 어떻게 반응하는지 실행시켜 볼겁니다.

 

실행전에 화면을 볼 수 있는 콘솔 창을 열어야 돼요.

Xcode 메뉴에서 Run 을 선택하고 쭉 내려가면 Console 이 있습니다.

 

 

 

자... 위 예제 프로그램의 실행화면입니다.

int 형 데이터에서 2147483647 에 1을 더하면 -2147483648 이 되고

반대로 -2147483648 에서 1을 빼면 2147483647 이 되는 거 신기합니다. ^^

 

MSB 를 두고 2의 보수로 양수와 음수를 표현하기 때문이라고 이해했습니다.

 

자 이걸로 매킨토시에서 C 를 공부할 수 있는 기본 준비는 완료되었습니다.

우리 책으로 윤성우님의 “난 정말...” 을 보고 있다고 말씀드렸구요, 살짝 살짝 컨닝용으로

Dave Mark 의 Learn C On The Mac http://cafe.naver.com/paramsx/1991 도 참고로 하고 있습니다.

 

 

 

Xcode 에서 오브젝티브 C 를 공부할 땐 위 과정에서 아주 조금 차이가 납니다.

 

 

New Project 만들기에서 커맨드라인 툴의 타입을 Foundation 으로 합니다.

 

 

 

Xcode 화면이 책에서 보던거랑 많이 달라져서 좀 헷갈렸습니다만,

코코아 클래스의 오브젝티브 C 클래스를 선택하면...

 

 

 

아까처럼 제목을 입력하는 창이 뜹니다. 오브젝트 C 의 확장자는 m 이에요.

Hello 프로그램을 한번 만들어볼께요.

 

 

 

위쪽의 주석라인은 자동생성입니다.

 

오브젝티브 C 는 #include 대신에 #import 가 바로 눈에 띄죠.

stdio.h 대신에 코코아의 foundation 프레임웍을 포함하고 printf 대신 NSLog 함수를 써서 생소하게 보일지도 모르지만,

Objective C 야말로 정통 C 의 수퍼셋이랍니다. 원래의 C 언어에 스몰토크의 객제지향 개념이 결합된것 뿐이래요.

 

그래서 그냥 C 스타일로 코딩해도 아무 문제없이 컴파일 된답니다.

C++ 만 해도 에러나 오류가 난다지요?

 

콘솔 창에 정상적으로 안녕, 세상! 메시지가 뜨는걸 확인했습니다.

 

참고로 할 만한 도서는 Mark Dalrymple 과 Scott Knaster 의 Learn Objective C On The Mac

http://cafe.naver.com/paramsx/1976 (오브젝티브 C 2.0, 비제이퍼블릭) 이나

 

Stephen G. Kochan 의 Programming in Objective-C 2.0 이 괜찮은 거 같아요.

http://cafe.naver.com/paramsx/1979 (프로그래밍 오브젝티브 C 2.0, 인사이트)

 

다른 책도 많겠지만 일단 저 두권은 국내에 번역판이 있으니 보기가 수월합니다.

건투를 빌어요. ^_^



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

기본 문법 #1

[object message:parameter];

//C style

DrawMyGradient(myView, aquaGradient, 0.0, 1.0, YES);

//Objective - c

[myview drawMyGradient:aquaGradient formValue:0.0 toValue:1.0 opaque:YES];


-(void)drawMyGradient:((CGGradientRef)gradient fromValue:start toValue:end opaque:opaque  //메소드 선언


기본 문법#2

//C Style

SubStringFormTo(sourceStr, &destStr, 2, 5); //위에서 타입을 정하고 메모리 얼록하고 여기다가 넣어달라

//O

NSString *destStr = [sourceStr subStringFrom:2 to:5];

long hash = [[sourceStr subStringFrom:2 to:5] hash]; //hash라는 메소드를 또 던진다


-(NSString *)subStringFrom:(int)from to:(int)to


오브젝트의 생성과 소멸

리테인 카운트 관리    //생성시점과 소멸시점을 관리

//person 클래스의 me 오브젝트를 만들고 없애기

Person *me = [[Person alloc] init];초기화     //리테인 카운트 1 생명줄!

[me retain];                                             //리테인 카운트 2

[me release];                                          //리테인 카운트 1

[me release];                                         //리테인 카운트 0

alloc -> release 해줄 필요, retain 해주지않은건 release 해줄 필요가없음


클래스 선언

.h 확장자를 가지는 파일

//헤더의 시작 interface  Person 클래스이름 NSObject는 슈퍼클래스

@interface Person : NSObject <NSCopying> {    //person은 NSObject의 서브클래스

int age;                          //instance변수 IVAR

 NSString *name;

}


-(void)singAsong:(Song *)song; //메소드선언 리턴타입 보이드 매개변수로 Song을 받는다

@end


클래스의 구현

.m 확장자를 가지는 파일


@implementation Person


-(void)singAsong:(Song *)song

{                                                       //cocoa object

NSlog(@""&@ can sing a song", name);      //NSlog가 있고 C에있는 printf와 유사하다, 중간중간에 token을 사용할 수 있다. 

}

@end


코딩 규약 - 이름 짓기

첫 글자를 대문자로

TheSinger.proj   Person.h / Person.m


nameOfPerson

ageOfPerson

addressOfPerson

//매개변수이름도 첫글자 소문자로,


-(void)singASong:(Song *)song


아이폰은 singleWindow




출처 : http://blog.naver.com/PostView.nhn?blogId=naoh14&logNo=10100421043
Posted by 오늘마감
버튼을 클릭하면 사운드를 플레이 하는 방법입니다.

1. xcode 를 실행합니다.
  가. 맥킨토시 하드를 클릭합니다.
  나. Develper - Application - Xcode 를 클릭합니다.

2. 새로운 프로젝트를 생성합니다.
  가. File - New Project 를 클릭합니다.
  나. iPhone OS - Application 을 선택합니다.
  다. View-Based Application을 선택합니다.
  라. SoundTest 란 이름을 선택하고 저장을 합니다.

3. 프레임워크를 등록합니다.
  가. Group & Files 에서 Frameworks 를 선택합니다.
  나. 오늘쪽 버튼을 클릭하여 Add - Existing Frameworks 를 선택합니다.
  다. AudioTool...framework 를 선택합니다.
  라. AudioToolbox.framework 가 프레임워크 폴더에 추가되었는지 확인 합니다.

4. 헤더파일을 수정합니다.
  가. SoundTestViewController.h 파일을 클레스 폴더에서 찾아 클릭합니다.
  나. #import <AudionToolbox/AudionToolbox.h> 를 임포트 시킵니다.
  다. SystemSoundID 변수를 선언합니다.

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface SoundTestViewController : UIViewController {
SystemSoundID ssid;
}

5. SoundTestViewController.m 파일을 수정합니다.
  가. viewDidLoad 를 수정합니다.
    -(void)viewDidLoad {
        [super viewDidLoad];
        // 사운드 파일을 생성합니다.
        NSString *sndPath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav" inDirectory:@"/"];
        // URL을 생성합니다
        CFURLRef sndURL = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndPth];
        // 사운드 아이디를 생성합니다.
        AudionServicesCreateSystemSoundID(sndURL, &ssid);
    }
  나. sound.wav 파일을 프로젝트 디렉토리에 복사한 다음 그 파일을 Xcode - Resource 폴더로 드래그하여 추가합니다.
  다. 이제 터치이벤트가 발생하면 플레이 되도록 이벤트를 생성합니다.
    -(void)touchesBagan:(NSSet *)touches withEvent:(UIEvent *)event {
      AudioServicesPlaySystemSound(ssid);
    }
  라. dealloc 에서 사운드를 제거합니다.
    -(void)dealloc {
      AudionServicesDisposeSystemSoundID(ssid);
      [super dealloc];
    }
    마. 이제 Build&Go 를 클릭하여 실행하여 봅니다.

오디오툴박스는 웨이브 파일를 플레이 하며 5초 이내만 재생이 가능합니다.


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


설치된 Xcode를 실행하면 아래와 같은 화면이 뜹니다.

여기에서 Create a new Xcode Project를 클릭하면 다음과 같은 화면이 뜹니다.

 

 

저의 환경에서는 6종류의 Application을 만들 수 있는 Project Template이 있군요.

그럼 이제 6종류의 Templates에 대하여 살펴 보기로 하지요.

 

A) Navigation-based Application

This temple provides a starting point for an application that uses a navigation controller. It provides a iser interface configured with a navigation controller to display a list items.

네비게이션 컨트롤러를 기반으로 하는 어플, 계층 구조로 더 깊은 단계로 들어갔다가 나올 수 있는 형태의 어플을 만들 수 있다.

Navigation-based Application 템플릿은 아래 그림의 타이틀 모양과 같은 네비게이션 바를 표시할 때 사용한다. 주로 타이틀과 좌우에 간단한 버튼을 표기할 때 사용한다.




템플릿을 선택한 다음 자동으로 생성된 코드를 그냥 빌드 해보면 위의 오른쪽 그림과 같은 형태가 나온다.

Xcode 에서 빌드하기

Xcode 에서 빌드는 아래와 같이 상단의 아이콘을 클릭하거나 단축키 +를 ㄹ누르면 된다.





위의 왼쪽 그림과 같이 setting 형태의 버튼과 타이틀을 넣는 방법은 여러 가지가 있다. 먼저 Xcode SDK의 UI 구성툴인 Interface Builder(IB)를 이용하는 방법을 살펴보자. Xcode 에디터에서 코드를 수정하는 것이 조금은 필요하다. 위 그림에서 처럼 소스 브라우저 창에서 MainWindow.xib 라는 파일을 더블 클릭하면 인터페이스 빌더가 실행된다. *.xib 파일은 IB에서 사용하는 UI의 프로젝트 파일에 해당된다. IB는 크게 4개의 메인폼을 가지고 있다. 아래 그림 첫번째는 IB에서 사용된 각종 콘트롤들을 아이콘 형태로 보여주는 View 윈도우이며(아래그림1), 해당 View의 설정을 위한 UI 디자인창이 있다.(아래그림2) 그리고, Attribute를 설정하는 창과(아래그림3) 각종 라이브러리와 오브젝트들을 모아 놓은 Library 창이 있다. 여기서 Navigation Controller를 선택하고, Navigation item Attribute의 'Title' 항목과 'Back Button'항목을 아래 세번째 그림처럼 설정해준다. 여기서 설정한 내용은 실시간으로 UI 디자인창에 반영된다. 단, Back Button은 코드를 수정하면 볼 수 있다.







이렇게 만들어진 내용을 IB에서 'File | Save'메뉴로 저장하고 나와서 다시 빌드하면 'Wi-Fi Networks'라는 타이틀이 보일것이다. 그리고, 'Settings' 라는 아이템을 추가 하려면 RootViewController.m 파일에서 주석처리 되어 있는 함수를 아래와 같이 수정하면 된다. 각각의 프로퍼티를 변경해서 iPhone에서 사용되는 각종 Navigation 버튼을 구현할 수 있다.


- (void)viewDidLoad { 

[super viewDidLoad]; 

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

}



다음은 Controller란 무엇인가를 알 수 있는 간단한 그림입니다.

 

 

다음은 Navigation Controller가 사용되는 간단한 어플입니다.

 


 

B) OpenGL ES Application

This template provides a starting point for an application that uses an OpenGL ES-baces view. It provides a view into which you render your OpenGL ES scene, and a timer to allow you to animate the view.

게임 등을 게발하기 위해서 3D엔진인 OpenGL ES를 사용할 수 있다. (자세한 것은 다음에 만들어 보면서..)

 iPhone OS는 게임등과 같이 화면 전환이 빠르게 요구되는 어플리케이션들을 위해서 그래픽 라이브러리로 OpenGL ES(Open Graphic Library Embedded System)라는 라이브러리를 기본적으로 지원한다.

OpenGL ES는 Khronos Group(http://www.khronos.org/opengles/)에서

제공하는 Open GL의 임베디드 버전이다. 2D와 3D 데이터를 표현하기 위한 C언어 베이스의 크로스 플랫폼 인터페이스이다. 이 템플릿을 추가하면 기존에 화면(View)을 그리기 위해 사용했던 CoreGraphics.framework 대신에 아래 그림과 같은 2개의 framework이 추가 된다.




역시 아무런 조작이 없이 Xcode 에서 'Build and Run' 버튼으로 동작시켜 보면 아래 그림과 같은 애니메이션 어플리케이션이 실행된다.(박스가 상하로 움직이는 것을 볼 수 있다.)




아래 그림은 Open GL/ES템플릿을 선택했을 경우 프로젝트 화면이다. Navigation 템플릿과달리 여러 가지 리소스들이 포함된 것을 볼 수 있다.





Open GL에 관해서 몇 개의 참조 사이트를 소개하도록 하겠다.

http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_

ProgrammingGuide/Introduction/Introduction.html

: 이곳은 Apple 에서 공식적으로 제공하는 OpenGL/ES 프로그래밍 가이드를 소개하는 페이지이다. iPhone OS 에서 OpenGL ES를 활용한 프로그램과 프레임 버퍼를 이용하는 방법, Vertex Data, Texture Data 등을 활용하여 만든 예제, 퍼포먼스 가이드라인, Texturetool 을 사용하는 방법들을 설명해 준다.

또한 아래와 같은 사이트를 참조하라고 소개하고 있다. OpenGL ES API Registry(http://www.khronos.org/registry/gles/)

OpenGL ES 2.0 Reference Pages (http://www.khronos.org/opengles/sdk/docs/man/)

OpenGL ES Framework Reference 함수 설명 사이트 (http://developer.apple.com/iphone/library/documentation/OpenGLES/Reference/OpenGLES_

Framework/index.html#//apple_ref/doc/uid/TP40007628

)

iPhone용 OpenGL ES 강좌 사이트(영문; http://web.me.com/smaurice/AppleCoder/iPhone_OpenGL/iPhone_OpenGL.html)

Khoronos group 에서 제공하는 OpenGL ES SDK 메뉴얼 사이트(http://www.khronos.org/opengles/sdk/docs/man/)





C) Tab Bar Application

This template provides a starting point for an application that uses a tabbar. It provides a iser interface configured with a tab bar for the first tab bar item.

Tab Bar를 사용하는 어플을 만드는 곳입니다.

Tab Bar는 Application 뷰의 하단에 위치해서 뷰를 전환하는 역할을 하는 버튼들을 모아놓는 곳이다. Navigation Bar와 유사하다. iPhone OS의 기본프로그램에도 많이 쓰여 지고 있다. 아래 그림은 Tab Bar의 여러 가지 유형의 보여주고 있다.

 





아래 그림은 템플릿을 사용한 프로젝트를 만들고 바로 빌드한 모습니다. 2개의 뷰를 Tab Bar를 사용해서 보여주고 있다.




템플릿을 활용하여 위와 같이 2개의 뷰를 전환하는 예제에서는 각각의 뷰가 필요하다. IB에서 탭이 늘어날 때마다 아래와 같이 Tab Bar Controller Attributes 에서 + 를 클릭한 후 탭과 별도의 뷰를 하나씩 늘려가면 된다.





 


D) Utility Application

This template provides a starting point for a utility application that a main view and a flipside view. It sets up an info button to flip the main view to the flipside, and a navigation bar with a Done item to flip back to the main view.

날씨나 증권같이 위젯 형태의 어플을 만들 수 있는 곳. 단순히 보여주기만 할 뿐, 사용자 입력을 받을 필요가 거의 없는 곳에서 사용하면 적합하다고 하는데 다른 템플보다 이쁘군요.

이 템플릿은 info 버튼이 포함된 Main view와 네비게이션 바를 가진 flipside 형태로 전환되는 뷰를 가진 어플리케이션을 만들때 사용되는 템플릿이다. iPhone 어플리케이션에서 설정 화면등을 구성할 때 자주 사용된다. 아무런 수정도 하지 않고 템플릿을 로드하고 'Build and Run' 했을때 아래와 같은 화면을 볼 수 있다.



이 템플릿은 IB로 디자인하기 위해서 FlipsideView.xib, MainView.xib, MainWindow.xib와 같은 2개의 뷰와 1개의 MainWindow를 가진 리소스를 제공한다. 각각의 View에 해당되는 소스와 ViewController 소스가 템플릿으로 제공되어 진다. 그리고, 이들 뷰간의 동작들을 담당하기 위해서 appDelegate가 역시 템플릿으로 제공된다. (아래 그림참조) 이 템플릿은 MainView에 원하는 Application을 동작시키고 설정 항목등을 FlipsideView에 위치시킬때 사용하면 좋을 것이다.





 

E) View-based Application

This template provides a starting point for an application that uses a single view. It provides a biew controller to manage the view, and a nib file that contains the view.

하나의 뷰가 추가된 어플

이 템플릿은 싱글 뷰를 가진 어플리케이션을 만들 경우 사용되는 템플릿이다. 사실 싱글 뷰로 어플리케이션을 만드는 경우는 거의 없을 것이다. 하지만, 뷰를 조작하기 위한 view controller를 제공해 주고 IB를 위한 간단한 nib 파일을 제공해 준다. 이 템플릿의 장점은 뷰가 많은 Application을 제작할 때 일일이 신경 쓰지 않고도 간단히 원하는 view와 view controller를 가진 UI를 빨리

생성해 주어서 작업능률을 올릴 수 있다는 것이다.






F) Window-based Application

This template provids a starting point for any application. It provides just an application delegate and a window.

가장 기본적인 형태도 뷰도 없다. 따라서 스스로 뷰를 추가하여야 한다.

이 템플릿은 하나의 MainWindow와 AppDelegate 만을 제공해 주는 가장 기본적인 템플릿이다. 개인적으로 IB를 사용하여 UI작업을 할 때 가장 자주 사용하는 템플릿이다. 이 템플릿 위에 뷰와 Object 들을 배치시키고 어플리케이션을 만들 수 있다. 버튼을 누르면 팝업창이 뜨는 간단한 어플리케이션을 예제로 만들어 보겠다.


1) 아래 그림과 같이 MainWindow.xib를 클릭해서 IB를 시작한다.




2) 아래 그림과 같이 IB의 Library 창에서 View Object를 Window 창으로 드래그한다. 그 후에 이 뷰를 메인뷰로 사용할 것이기 때문에 Class명을 myView로 수정한다.






3) 이제 Image View Object와 Round Rect Button Object를 가져와서 그림과 같이 배치한다. Object를 뷰에 올리는 방법은 이전 단계에서 했던 것과 마찬가지로 드래그하면 된다. 그리고, image View Attributes 창에서 aimage.png 라는 그림 파일을 불러온다. 이 그림 파일은 처음에 프로젝트를 만든 후에 Finder로 부터 Project tree로 드래그해서 추가해 놓은 것이다.(필자는 Resources 디렉토리에 두었다.)








4) 이제는 myView에 만들어진 Object들의 IBOutlet을 만들고 event 코드를 작성할 차례이다. IBOutlet은 IB를 사용해서 Object를 포함하는 View를 만들었을 경우 각각의 Object를 control 하기 위해서 만들어 준다.

최종 동작은 '누르세요'라는 버튼을 클릭했을 때 info 베너가 동작하도록 하는 것이다.

IB에서 myView 에 해당되는 소스파일을 프로젝트로 넣기 위해서 저장을 하도록 한다. IB의 메뉴에서 'File | Write Class Files' 를 선택한다. 이 때 myView.h myView.m 파일을 프로젝트에 추가할 것인지를 창이 뜬다. 체크 버튼을 체크해 주고 해당 파일을 프로젝트에 'Add' 해 준다.




5) 프로젝트에 IB에서 만든 UI 소스가 포함되고 나서, 먼저 myView.h 파일의 내용을 아래와 같이 고쳐준다.

#import #import

@interface myView : UIView { IBOutlet UIButton *pBtn; //pBtn을 눌렀을때 showInfo가 동작 IBOutlet UIImage *pImg

} -(IBAction)showInfo;

@end

또, 실제 alert 메시지창을 보여주는 함수 내용은 myView.m에서 작성한다.

#import "myView.h"

@implementation myView -(IBAction)showInfo { UIAlertView *baseAlert = [[UIAlertView alloc] initWithTitle:nil


message:@"showInfo 가 실행되었\n 습니다." delegate:self cancelButtonTitle:nil otherButtonTitles:@"확인",nil];show];release];

}

@end




6) '누르세요' 버튼을 터치다운 했을 경우 showInfo() 라는 함수가 실행되도록 만들기 위해서 IB에서 먼저 해주어야 할일이 있다. 아래 그림처럼 버튼 Object에서 마우스 오른쪽 클릭을 한 후에( 원버튼 마우스의 경우; Ctrl+윈쪽클릭) 'Touch Down' 이벤트를 드래그해서 myView로 가져가면 아래 그림과 같이 showInfo 함수를 선택할 수 있도록 활성화 된다.





7) 이제 저장하고 Xcode에서 빌드하면 showInfo()가 아래 그림과 같이 동작하게 된다. 이런식으로 각각의 Object 들과 터치 이벤트등을 연결할 수 있다.







이상으로 6개의 Project Template를 살펴보았습니다.

그럼 자신이 만들고자 하는 어플과 가장 유사한 템플릿을 선택하여 프로젝트를 시작하면 되겠지요!



출처 : http://blog.naver.com/PostView.nhn?blogId=jforyoum&logNo=60117746694
Posted by 오늘마감
[아이폰 앱 개발] 아이폰 어플 개발 Table View 의 기초

Table View Basics
iPhone tables(UITableView) 의 행(Row)수는 제한이 없음.(iPhone OS Memory)
UITableView - 테이블의 Data를 표시하는 뷰 오브젝트.
UITableViewCell - 테이블의 단일 행을 표현.

UITableViewCell 에 복수의 데이터를 추가하기 위해서
1.UITableViewCell 에 subview 를 추가 하거나
2.UITableViewCell 을 상속하는 서브클래스 작성.

Table > Section > Rows...
그룹 테이블(Figure 8-3)에서 각 Section 은 한 그룹을 나타냄.
인덱스 테이블(Figure 8-3)에서 각 Section 은 한 인덱스의 집합.

Implementing a Simple Table
Writing the Controller

  1. // delegate, datasource protocol 선언.  
  2. // datasource 는 테이블 각 행에 대한 데이터 핸들.  
  3. // delegate 는 데이터의 설정(font, user interation...) 핸들.  
  4. @interface SomeUITableView  {  
  5.     // Table Data.  
  6.     NSArray *tableData;  
  7.     ...  
  8. }  
  9.   
  10. #pragma mark -  
  11. #pragma mark Table View Data Source Methods  
  12. // 해당 Section 에 행 수.  
  13. - (NSInteger)tableView:(UITableView *)tableView  
  14.  numberOfRowsInSection:(NSInteger)section {  
  15.     return [self.tableData count];  
  16. }  
  17.   
  18. // 행이 그려질 때 호출되어 현재 표시될 행의 UITableViewCell 를 리턴.  
  19. // NSIndexPath 를 이용해서 해당 Section[indexPath section]과  
  20. // 해당 행[indexPath row]을 알 수 있음.  
  21. // UITableViewCell 는 캐쉬화 되고 시스템 메모리가 부족할 때 자동 메모리 해제됨.  
  22. - (UITableViewCell *)tableView:(UITableView *)tableView  
  23.          cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
  24.     // cache 할 때 구분자.  
  25.     static NSString *SomeID = @"SomeID";  
  26.   
  27.     // cache 에 저장된 UITableViewCell 취득.  
  28.     UITableViewCell *cell = [tableView   
  29.                              dequeueReusableCellWithIdentifier:SomeID];  
  30.   
  31.     if (cell == nil) {  
  32.         cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero  
  33.                  reuseIdentifier:SomeID] autorelease];  
  34.     }  
  35.     ...  
  36. }  


Adding an Image
UITableViewCell 의 기본 옵션으로 각 행의 왼쪽에 이미지를 붙일 수 있음.
  1. // tableview:cellForRowAtIndexPath:  
  2. ...  
  3. UIImage *image = [UIImage imageNamed:@"someImage.png"];  
  4. cell.image = image;  
  5. ...  


Addtional Configurations
Setting the Indent Level
  1. #pragma mark -  
  2. #pragma mark Table View Delegate Methods  
  3. // 각 행의 indent level(NSInteger) 설정.  
  4. - (NSInteger)tableView:(UITableView *)tableView  
  5. indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {  
  6.     ...  
  7.     return indentLevel;  
  8. }  


Handling Row Selection
USER 가 선택한 행의 이벤트 전후로 핸들링이 가능.
  1. - (NSIndexPath *)tableView:(UITableView *)tableView  
  2.   willSelectRowAtIndexPath:(NSIndexPath *)indexPath {  
  3.     // USER 선택에 대한 이벤트 전처리.  
  4.     ....  
  5. }  
  6.   
  7. - (NSIndexPath *)tableView:(UITableView *)tableView  
  8.    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {  
  9.     // USER 선택에 대한 이벤트 후처리.  
  10.     ....  
  11. }  


Changing Font Size and Row Height
  1. // tableview:cellForRowAtIndexPath:  
  2. ...  
  3. cell.font = [UIFont boldSystemFontOfSize:80];  
  4. ...  
  5. // 열의 높이 설정.  
  6. - (CGFloat)tableView:(UITableView *)tableView  
  7. heightForRowAtIndexPath:(NSIndexPath *)indexPath {  
  8.     ....  
  9.     return height;  
  10. }  
Posted by 오늘마감

티스토리 툴바