AppleApp/Cocoa Touch2010. 7. 8. 14:50
아이폰 인터페이스는 크게 세 가지로 구성된다.
하나는 UIWindow, 다른 하나는 UIViewController, 마지막으로 UIView이다.

아이폰 어플리케이션에서는 AppDelegate를 통하여(말 그대로 application인스턴스의 일부분을 위임한 것이다.)
하나의 (UIWindow *)window인스턴스만을 가질 수 있다.

이 window인스턴스만으로는 아무것도 할 수가 없으며,
사용자에게 실질적인 내용을 보여주기 위해서는 (UIView *)view가 필요하다.
window인스턴스에 view를 띄우기 위해서는 다음과 같은 코드를 이용하면 된다.
[window addSubview:view];

하지만 이와 같은 방식은 그저 그림 보여주기일 뿐 view에서는 사용자의 이벤트를 처리한다거나 하는 일련의 작업들을 처리할 수 가 없다. (물론 프로그래머에 따라 - 특히 게임 프로그래머 - view에다가 이벤트 처리 메소드를 넣는 경우도 있다.) 이를 위해서 (UIViewController *)viewController를 사용하게 된다.
이를 사용하기 위한 방법은 (UIViewController *)viewController인스턴스에 작성된 view를 연결시키기만 하면 된다. (viewController.view에 (UIView)view인스턴스의 주소값을 복사하면 된다.) 
window인스턴스에 view를 띄우기 위해서는 다음과 같은 코드를 이용하면 된다.
[window addSubview:viewController.view];
이벤트처리까지 하고자 한다면 ViewController.m에 이벤트 처리를 위한 메소드만 추가하면 된다.

UIViewController클래스가 view인스턴스를 하나만 제공하기 때문에 하나의 viewController인스턴스에 하나의 view인스턴스라는 인식이 강하지만, 개발 형태에 따라 하나의 viewController에 여러 (UIView *)인스턴스를 하위로 연결할 수도 있고(view로부터 이벤트를 받아서 다른 view인스턴스로 전환하는 메소드를 실행한다.) viewController에 하위로 다른 (UIViewController *)인스턴스를 연결할 수도 있다.

그래서 이 세 가지 인터페이스 중점 요소에 대하여서는 다음과 같이 이해하면 쉽다.
1. UIWindow: 어플리케이션이 보여지기 위한 창
2. UIView: 어플리케이션이 보여주는 실제 내용물
3. UIViewController: 내용물과 관련한 이벤트 처리기

'AppleApp > Cocoa Touch' 카테고리의 다른 글

아이폰iPhone 어플리케이션Application 실행 구조  (0) 2010.07.08
applicationDidFinishLaunching:  (0) 2010.07.08
Posted by 마이클
AppleApp/Cocoa Touch2010. 7. 8. 14:09
어플리케이션이 시작되면 (UIApplication *)application인스턴스를 생성하고 application이 소유한 메인 NIB(.nib 또는 .xib확장자로 Next Interface Builder의 약자이다.)파일을 찾아서 로드하게 된다. 이 파일은 프로젝트 내의 Info.plist 중 Main nib file base name 항목에 정의된 값을 기준으로 찾아낸다. 이렇게 찾아낸 NIB파일에서 정보를 읽어들여 (UIApplication *)application과 연결된 모든 객체를 불러온다.

1. (UIApplication *)application인스턴스가 Info.plist를 통해서 메인 NIB파일을 찾는다.

2. 메인 NIB파일에서 UIApplication 클래스의 (NSObject *)delegate인스턴스에 연결된 AppDelegate클래스를 찾는다.

3. AppDelegate 클래스에서 (UIWindow *)window인스턴스에 연결된 Window클래스를 찾는다.

4. AppDelegate 클래스에서 (UIViewController *)viewController인스턴스에 연결된 ViewController클래스를 찾는다.

5. ViewController클래스는 view인스턴스(UIViewController에서 상속받는다.)에 연결된 View클래스를 찾는다.

6. 모든 파일 찾기가 끝나면 application인스턴스가 delegate인스턴스에 applicationDidFinishLaunching메서드를 호출한다.
(iPhone SDK 4이후에서는 application:didFinishLaunchingWithOptions:도 호출한다.)

7. 현재 사용중인 viewController인스턴스의 안에 생성된 메서드에 따라 작동한다.

위의 내용은 사실 프로젝트 파일 내에서 보이는 대략적인 개괄만을 늘어놓은 것이다. 실제로 프로그램이 돌아갈 때에는 눈에 보이지 않는 많은 절차들이 지나가며, 이 절차들은 Xcode에서 Debug Console을 열면 확인할 수 있다.
Posted by 마이클
AppleApp/Cocoa Touch2010. 7. 8. 12:59
iPhone SDK4로 넘어오면서 코드가 조금 바뀐 것이 있다. 바로 ProjectNameAppDelegate.m에서 활용도가 높았던 applicationDidFinishLaunching이 그 주인공이다. 어떻게 바뀌었는지 살펴보자.
구 버전의 SDK같은 경우는 새로 프로젝트를 생성하게 되면 다음과 같은 메소드를 제공할 것이다.
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//Override point for customization after app launch
[window makeKeyAndVisible];
}
다른 메소드(viewDidLoad, viewWillAppear)들과 비교했을 때 일관성 있는 작명 방식이다.

하지만 iPhone SDK 4에서는 다음과 같은 메소드 형태를 제공한다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//Override point for customization after app launch
[window makeKeyAndVisible];

return YES;
}
메소드가 application:didFinishLaunchingWithOptions:로 바뀌었다. 또 다른 특징은 리턴return 값 형식이 void에서 BOOL로 바뀌었다는 것이다. 그래서 이번에 바뀐 메소드에는 return YES;가 추가되었다.

물론 기존 코드도 잘 작동하는 것으로 봐서는 현재 어플리케이션 실행이 끝나면 두 메서드 모두를 호출하는 것으로 판단된다. 하지만 앞으로는 아래 방식을 애플에서 장려하는 듯 하므로, 아래 형식의 메소드를 활용해야 하겠다.







Posted by 마이클
AppleApp/Objective-C2010. 7. 7. 23:53
객체 인스턴스를 해제하는 방법에는 두 가지가 있다.
하나는 인스턴스에 nil값을 대입하는 것이고, 다른 하나는 객체에 release메시지를 보내는 것이다.
코드로는 다음과 같이 표현한다.
//nil
Instance = nil
//release
[Instance release]
타 언어에서는 해제된 인스턴스에 대하여 메시지를 보내면 오류를 발생하지만,
Objective-C에서는 해제된 인스턴스에 메시지를 보내면 단순히 무시할 뿐 오류를 발생하지는 않는다.
이 부분은 개발자 지향적인 모습이라고 하겠다.

'AppleApp > Objective-C' 카테고리의 다른 글

Objective-C 또는 Objective-C++ 코딩 가이드라인  (0) 2010.07.06
Posted by 마이클
AppleApp/Xcode2010. 7. 7. 23:02
Xcode는 애플 개발자 사이트에서 쉽게, 무료로 받을 수 있다.
(가끔씩 리퍼러에 "Xcode 가격"이라는 검색 키워드가 걸리는데, Xcode는 맥 사용자에게 공짜로 제공된다.)

1. 우선 다운로드를 받기전에 개발자 사이트에 계정을 만들어야 한다.
개발자 계정은 무료와 유료가 나뉘어 있는데, 단순히 Xcode와 iPhoneSDK만 다운로드 받고 싶다면 무료 계정만 만들면 된다.

부가적인 부분을 원한다면 유료 프로그램을 구매하여 유료 계정으로 전환하면 된다.
아이폰 어플리케이션을 개발뿐만 아니라 직접 기기에 테스트하고 앱스토어에 게시까지 하고 싶다면 개발자 유료 회원권이 필요하며 매년 $99달러가 필요하다. (대한민국 애플 스토어 가격으로는 ₩105,000이다.)
맥 오에스 텐Mac OS X 기반 어플리케이션을 개발하는데 애플로부터 기술적 지원을 받고 싶다면, 아이폰 개발자 유료 회원권과 마찬가지로 연간 $99달러가 필요하다. 하지만 아이폰과 달리 어플리케이션 개발, 테스트 및 배포에 제한이 없으므로 기술적 지원을 받고자 하는 사람이 아니면 권장하지 아니한다. (대한민국 애플 스토어 가격으로 동일하게 ₩105,000이다.)
맥 오에스 텐 개발자는 요즘에도 가입선물을 주는지는 잘 모르겠지만, 과거 ADC(Apple Developer Connection) 멤버쉽 시절에는 애플로고가 박힌 티셔츠와 최신 맥 오에스 텐이 동봉된 박스가 보내져왔으며, 매달 Developer DVD Series라고 해서 SDK를 포함한 DVD가 배송되어왔고, 애플 제품 할인 혜택이 있었다.(과거 ADC 멤버쉽이 현재 iPhone Developer Program과 Mac Developer Program으로 나뉘었다.)

2. 로그인Sign-in을 한 후에,

3-1. 아이폰 SDK가 포함된 Xcode를 원한다면 http://developer.apple.com/iphone/에 가서 받거나,
3-2. 단순히 맥 개발만을 원하는 경우 http://developer.apple.com/mac/에서 Xcode를 받으면 된다.

4. 이전 버전(구, 옛날 버전)의 Xcode를 원하는 경우
다음 주소를 방문하여 Developer Tools를 클릭하면 옛날 버전의 Xcode를 찾아 볼 수 있다.
http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/downloads

사실 여러분이 가진 맥에서 돌아갈 수 있는 가장 낮은 버전의 Xcode는 맥 오에스 텐 설치 디스크에 있다.
만약 맥 오에스 텐을 구입하여 설치한 경우 그 맥 오에스 텐 디스크를 삽입하면 Xcode 폴더가 보일 것이다.
별도로 맥 오에스 텐을 구입하지 않은 경우라면, 맥 구입시 동봉된 1번 번들 DVD가 맥 오에스 텐 설치 디스크이므로 그것을 넣어서 확인하면 된다. (참고로 2번 디스크는 iLife의 설치를 위한 디스크이다.)

'AppleApp > Xcode' 카테고리의 다른 글

Base SDK Missing  (0) 2010.07.04
Posted by 마이클
AppleApp/Instruction2010. 7. 6. 02:12

애플 플랫폼Apple Platform - 맥Mac, 아이폰iPhone, 아이패드iPad - 에서 개발하기 위해서 몇 가지 알아두어야 할 사항들이 있다. 개발 도구와 개발 언어 그리고 프레임워크이다.

1. 개발 도구: Xcode & Interface Builder
Xcode는 Visual Studio같은 하나의 개발 툴이며, 애플 플랫폼에서의 응용프로그램은 Xcode에서 개발할 수 있다. 그리고 별도로 Interface Builder라는 프로그램을 제공하는데 Visual Basic의 디자인 모드가 분리되었다고 생각하면 될 것이다.

2. 개발 언어: Objective-C
Apple에서는 이 Objective-C를 어플리케이션 개발을 위한 기본 언어로 제안한다. 이는 C를 확장한 언어(C를 상속한 언어)로써 한 프로젝트 및 파일 내에서 Objective-C의 문법과 C의 문법을 혼합하여 사용할 수 있다. Objective-C++라고 하여 Objective-C의 문법과 C++의 문법을 한 프로젝트 및 파일 내에서 혼용할 수도 있다. Java가 이 언어에서 영향을 받아 개발된 것으로 유명하며, Objective-J라는 별도의 언어도 존재한다.

3. 프레임워크: Cocoa
코코아는 윈도우의 .NET과 같은 프레임워크이다. 일종의 부품이라고 이해하면 더 쉽다. 레고에 비유하자면 조립에 필요한 블럭(객체)를 가져와서 City시리즈 같은 시리즈(프로그램) 또는 사람이나 자동차(객체)을 만들어 내는 셈이다. Mac OS X에 사용되는 프레임워크는 Cocoa라고 부르며 아이폰에 사용되는 코코아는 Cocoa Touch라고 부른다. 이름이 비슷하지만, 프레임워크 내에 정의된 클래스가 사뭇 달라서 Mac OS X에서 개발하던 사람이라면 개발툴인 Xcode와 Interface Builder나 그 언어인 Objective-C에 대해서는 다시 공부할 필요가 없겠지만, Cocoa에 대해서라면 한 번쯤 다시 훑어볼 필요가 있을 것이다. 보통 Cocoa에서 정의된 클래스에는 NS라는 접두사가 붙는데, 이는 Next가 Apple에 인수되기 전 개발하던 운영체제인 Next Step(현재 Mac OS X)의 약자이다.
Posted by 마이클
AppleApp/Objective-C2010. 7. 6. 01:30
공동 프로젝트로 코딩을 하다보면 서로 서로 코드를 쉽게 보거나,
클래스, 변수 및 함수명의 충돌을 최소한으로 방지하기 위해  몇 가지 방침들을 정하게 된다.

Objective-C 또는 Objective-C++를 코딩함에 있어서도 Apple에서 정한 방침들이 있다.
애플에서 발행한 공식문서는 다음과 같다.(영문)
http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

중점 요소는 다음과 같다.
1. 클래스명과 함수명은 무조건 대문자로 시작한다. 그 외의 변수나 메서드명은 소문자로 시작한다.
인스턴스 생성을 비롯한 기타 사용시에 쉽게 알아보기 위함이다.

2. 함수는 선언부분 다음줄에서 중괄호를 열고, 나머지는 선언부분에서 중괄호를 연다.
함수(메서드) 정의는 그 다음에 중괄호를 열고 닫는다.
- (void) thisIsSample: (NSString *) string
{
NSLog(@"HelloWorld");
}
그 외의 경우(@interface, if문, for문 등..)에는 문장 표현이 있는 있는 줄에서 중괄호를 연다.
@interface refrigerator: NSObject {
NSInteger *temperatureInside;
NSInteger *temperatureOutside;
}
- (void) thisIsSample: (NSString *) string;
- (void) cool:
@end
이렇게 코딩하는 까닭은, C와 달리 Objective-C의 문법상 함수 인자가 늘어날수록 서두가 매우 길어지는 현상 때문이다.
예를 들어 C에서는 다음과 같이 표현하는 것을,
void helloworld(chr1, chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10) {
printf(chr1, chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10);
}
Objective-C에서는 다음과 같이 표현한다.
(현재 메서드 형태로 구현했는데, 그 까닭은 Objective-C가 C를 상속하기 때문에 메서드가 아닌 일반 함수는 C의 문법을 따르기 때문이다. - 이는 Objective-C가 문법상 일관성이 없다는 비판을 받기도 하는 이유이기도 한데, 이렇게 문법이 작성된 까닭은 최대한 C의 형태를 피함으로써 C와 Objective-C로 작성된 구간을 구분할 수 있도록 하기 위함이다.)
- (void) helloworld: (NSString *)chr1 second: chr2 third: chr3 forth: chr4 fifth: chr5 sixth: chr6 seventh: chr7 eighth: chr8 ninth:chr9 tenth:chr10
{
NSLog(@"%@%@%@%@%@%@%@%@%@%@", chr1, chr2, chr3, chr4, chr5, chr6, chr7, chr8, chr9, chr10);
}

위의 두 가지 사항만 명심하고 작성해도 프로젝트를 진행함에 있어서 큰 껄끄러움은 줄어들 것이라고 생각한다.

C 코딩시 적용하던 상식은 여기서도 당연히 적용한다.
1. 상수는 대문자로 표시한다.

'AppleApp > Objective-C' 카테고리의 다른 글

Objective-C에서의 객체 인스턴스 해제  (0) 2010.07.07
Posted by 마이클
AppleApp/Xcode2010. 7. 4. 01:07
Base SDK Missing 메시지는 옛날 SDK로 만든 프로젝트를 최신 SDK만 있는 Xcode에서 열 때 발생한다.
과거 프로젝트를 만들 때 사용했던 SDK가 현재 존재하지 않는다는 의미로,
오류가 발생하는 프로젝트가 최신 SDK를 참조하도록 설정하면 된다.

이를 조정하기 위한 방법은 다음과 같다.
1. Base SDK Missing 오류가 발생하는 프로젝트를 연다.

2. 메뉴바 > Project > Edit Project Settings을 클릭한다.

3. 프로젝트 정보창이 나타나면 Build 탭을 클릭한다.

4. Base SDK를 현존하는 SDK로 선택한다.(missing표시가 없는 것으로)

5. iPhone OS Deployment Target에서도 버전을 선택한다.(옵션 - 3.0기반 개발하는 경우 선택한다.)

'AppleApp > Xcode' 카테고리의 다른 글

Xcode 다운로드 및 설치  (0) 2010.07.07
Posted by 마이클