아이폰어플개발정보2010. 10. 5. 06:03
아이폰에서 오픈소스로 Google API 사용하는 방법 정리

고맙게도 아이폰에서 Google API를 사용하기 위한 라이브러리가 오픈 소스로 있습니다.

Google Data APIs Objective-C Client Library

위 라이브러리를 사용하면, 이렇게 많은 것을 할 수 있습니다.. 대단하죠?

위 라이브러리를 아이폰에 사용하는 샘플 코드도 있습니다.
Example iPhone project showing how to use GData API for Google Docs from Objective-C.

그런데 샘플만 본다고 쉽게 되는게 아니라서..
간단히 방법을 소개 해 보겠습니다.


1. 최근 소스를 다운 받는다.

가장 최근 소스를 원하시는 분들은...
svn export http://gdata-objectivec-client.googlecode.com/svn/trunk/Source gdataSource

터미널에서 이렇게 해서 받습니다.

2. 내 프로젝트 소스 파일을 추가 한다.

xcode에서 새로운 프로젝트를 생성합니다. 
그리고 라이브러리 소스 코드를 내 프로젝트 하위 경로에 복사해 주시고, 프로젝트에 드래그 해서 추가 합니다.

그리고 사용하지 않는 파일을 제거 합니다.


위에 표시된 파일들을 제거해 줍니다. 그리고 Clients에서는 자신이 프로젝트에 사용할 파일을 남기고 제거 합니다.


2. 프로젝트 설정하기.

프로젝트에서 Get Info를 해서 프로젝트 설정을 합니다.

먼저 Configuration에서 All Configurations를 선택합니다.
  • Header Search Paths: /usr/include/libxml2
  • Other Linker Flags: -lxml2
를 각각 입력 합니다.
그리고 Configuration에서 Debug를 선택 합니다.
  • Other C Flags: -DDEBUG=1
를 입력합니다.



3. 빌드 후 사용하기.

빌드 후에 사용 하시면 됩니다.
별거 아닌데.. 전 고생을 해서 -_-;; 이렇게 글로 남깁니다.

그런데 최신 트렁크 빌드에서는 오류가 나지 않지만, 
Example iPhone project showing how to use GData API for Google Docs from Objective-C.
위 샘플에서는 아래와 같은 오류가 발생 합니다.


이건 애플사에서 iPhone 3.0 SDK에서 NSTask를 제거 해서 생긴 문제 입니다.
이 문제를 해결하는 방법은 GDataDefines.h 파일에서 아래를 추가 해 주면 됩니다. 

#define  GDATA_SKIP_LOG_XMLFORMAT 1

참고로 여기까지 해서 빌드한 샘플을 올립니다. 참고 하세요.
코딩은 전혀 없습니다 ^^;; 빌드 까지 입니다..



출처 : http://blog.naver.com/PostList.nhn?blogId=hana_815¤tPage=56
Posted by 오늘마감

댓글을 달아 주세요

아이폰 어플 개발할때 클래스 생성과 사용하는 방법


<순서>
Section 5. 클래스 생성
Section 6. 생성한 클래스 사용


이번 과제에서는 PolygonShape(다각형) 클래스를 생성한후 WhatATool의 메인 함수에서 클래스를 호출하는 함수를 불러본다.


아래와 같은 소스가 추가 될 것이다.


int main (int argc, const char * argv[]) {
    NSAutoreleasepool * pool = [[NSAutoreleasePool alloc] init];

    PrintPathInfo(); // Section 1
PrintProcessInfo(); // Section 2
PrintBookmarkInfo(); // Section 3
PrintIntrospectionInfo(); // Section 4
PrintPolygonInfo(); // Section 6 (section 5는 메인에 함수를 추가하지 않는다)
[pool release];
return 0;
}


Section 5. 클래스 생성

■ 새로운 PolygonShape 라는 클래스 만들기 (다각형 클래스)


Xcode에서
1.File > New File을 선택
2.Mac OS X아래 CoCoa 섹션의 'Objective-C class' 템플렛을 선택한다.
3.PolygonShape.m 으로 생성한다. - 헤더파일을 만들기 위한 체크박스를 체크하는 것을 잊지 말것.


* 새로운 클래스는 디폴트로 NSObject를 계승받는다.


자 이제 새로운 클래스에 속성을 부여해보자.
Objective-C 2.0은 오브젝트의 속성에 접근하는 새로운 메커니즘을 제공한다.
클래스는 "properties"를 정의 할 수 있으며, 이것이 유저가 클래스에 억세스 하는 방법을 제공한다.
properties는 개발자의 단순작업(getter/setter 코딩)을 없애주며 메모리 관리 폴리시와 속성의 사용법을 정의하도록 해준다.
예를 들면, property를 읽기 전용으로 지정하거나 오브젝트의 소유권등을 정의할 수 있다.


■ PolygonShape 클래스에 속성 지정하기


1. 아래의 속성을 지정한다.
• numberOfSides(면의 수) – 정수형
• minimumNumberOfSides(최소 면의 수) – 정수형
• maximumNumberOfSides(최소 면의 수) – 정수형
• angleInDegrees(내각) – 실수형, 읽기전용
• angleInRadians(호도) – 실수형, 읽기전용
• name(이름) – NSString 오브젝트, 읽기전용


2. numberOfSides, minimumNumberOfSides, maximumNumberOfSides의 세가지 속성은
적절한 타입의 인스턴스 변수로 저장될 수 있어야 한다. 이 속성들은 @synthesize 옵션을 이용하면 컴파일러가
자동으로 getter/setter를 생성하여주며, 읽기 전용 속성은 getter만이 생성된다.


3. setter 메소드에 아래와 같은 조건을 부여하라
• numberOfSides – 최소값과 최대값의 사이 값만 가질수 있다.
• minimumNumberOfSides – 2보다 커야 한다.
• maximumNumberOfSides – 12보다 작아야 한다.


maximumNumberOfSides에 5가 설정되어 있는데 numberOfSides에 9를 세팅하려고 한다면 아래와 같은 에러로그를 출력하라.
Invalid number of sides: 9 is greater than the maximum of 5 allowed


4. 아래와 같은 초기화 메소드를 생성하라.
- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;


5. 슈퍼클래스인 NSObject의 init메소드를 오버라이드 하여 아래와 같은 디폴트값을 설정하는 커스텀 init을 생성하라.
numberOfSides – 5, minimumNumberOfSides – 3, maximumNumberOfSides – 10


6. angleInDegrees와 angleInRadians는 @synthesize 옵션을 사용하지 말라.
그리고 인스턴스 변수도 불필요하다. 이 두 속성은 numberOfSides의 값에 의해 결정될 것이다.
여기서는 정규 다각형(regular polygon)만 만들것임으로 각도(angles)의 값은 모두 똑같을 것이다.


7. name속성도 @synthesize 옵션을 사용할 필요가 없다. (인스턴스 변수도 필요없다.)
면의 갯수로부터 다각형의 이름을 출력하게 될 것이다.
<예>
면이 3일 경우: “Triangle”
면이 4일 경우: “Square”


8. PolygonShape 클래스의 -description 메소드를 아래 예와 같이 나오도록 구현하라.
Hello I am a 4-sided polygon (aka a Square) with angles of 90 degrees (1.570796 radians).


9. dealloc메소드를 사용하여 메모리 관리를 하고, dealloc이 불리워졌을때 로그를 출력하도록 하여라.


<힌트>


•다각형의 이름은 위키에서 찾을 수 있다.
•내각(angleInDegrees)을 구하기 위한 식은 다음과 같다. (180 * (numberOfSides - 2) / numberOfSides)
•삼각법(trigonometry): 360° 는 2π(파이) 이다.
•π(파이)의 값은 M_PI에 정의되어 있다.

Section 6. 생성한 클래스 사용

WhatATool.m 파일에 #import "PolygonShape.h" 를 삽입한다.


중요!!! 여기서는 PolygonShape를 생성하기 위해 +alloc과 -init을 사용하도록 한다. 생성된 오브젝트는 배열에 넣도록 하고
사용이 끝난 후엔 메모리 관리 기술을 이용하여 오브젝트를 릴리스 하도록 한다.


1. alloc/init를 사용하여 mutable array를 생성하라.


2. 아래 값을 사용하여 3개 또는 그 이상의 PolygonShape 오브젝트를 생성하라.

Min number of sides Max number of sides Number of sides
 3  7  4
 5  9  6
 9  12  12

3. 생성한 오브젝트를 배열에 추가하고 description을 이용하여 로그를 출력하라. 최소한 3줄의 로그가 찍여야 한다.

4. polygon 오브젝트의 제약을 테스트 해본다.
루프를 돌며 numberOfSides에 10을 세팅해보라. 위의 테이블을 이용해 만든 오브젝트라면 두줄의 로그가 찍힐것이다.

5. polygon 오브젝트가 메모리로부터 릴리스 되었는지 확인한다.
주어진 규칙대로 생성한 클래스라면 dealloc이 불리면서 3번의 로그가 찍힐 것이다.


<시도>

우선 name의 getter를 구현하기 위해 다각형의 이름을 찾아봤다.

Polygon names

Name Edges
digon 2
triangle (or trigon) 3
quadrilateral (or quadrangle or tetragon) 4
pentagon 5
hexagon 6
heptagon 7
octagon 8
enneagon (or nonagon) 9
decagon 10
hendecagon 11
dodecagon 12

<구현한 소스>

PolygonShape.h +-----+-----+-----+-----+-----+

//

//  PolygonShape.h

//  WhatATool

//

//  Created on 09. 12. 14.

//  Copyright 2009 __MyCompanyName__. All rights reserved.

//

#import

@interface PolygonShape : NSObject {

intnumberOfSides;

intminimumNumberOfSides;

intmaximumNumberOfSides;

}

@propertyintnumberOfSides;

@propertyintminimumNumberOfSides;

@propertyintmaximumNumberOfSides;

@property (readonly) float angleInDegrees;

@property (readonly) float angleInRadians;

@property (readonly) NSString *name;

//헤더에 이 메소드를 추가하는걸 까먹어서 에러가 났었다.

- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max;

@end

PolygonShape.m +-----+-----+-----+-----+-----+

//

//  PolygonShape.m

//  WhatATool

//

//  Created on 09. 12. 14.

//  Copyright 2009 __MyCompanyName__. All rights reserved.

//

#import "PolygonShape.h"

@implementation PolygonShape

@synthesize numberOfSides;

@synthesize minimumNumberOfSides;

@synthesize maximumNumberOfSides;

//synthesize선언한변수지만 setter존재하면 getter생성됨으로마음놓고써도된다.

-(void)setNumberOfSides:(int)newNumberOfSides {

    //numberOfSides최소값과최대값의사이값만가질수있다

    if(newNumberOfSides > maximumNumberOfSides) {

        //maximumNumberOfSides 5설정되어있는데 numberOfSides 9세팅하려고한다면에러로그를출력하라.

        NSLog(@"Invalid number of sides: %d is greater than the maximum of %d allowed", newNumberOfSides, maximumNumberOfSides);

    } elseif (newNumberOfSides < minimumNumberOfSides) {

        NSLog(@"Invalid number of sides: %d is less than the minimum of %d allowed", newNumberOfSides, minimumNumberOfSides);

    } else {

        numberOfSides = newNumberOfSides;

    }

}

//minimumNumberOfSides 2보다커야한다.

-(void)setMinimumNumberOfSides:(int)newMinimumNumberOfSides {

    if (newMinimumNumberOfSides < 2) {

    NSLog(@"Invalid minumum number of sides: %d is less than 2 allowed", newMinimumNumberOfSides);

} else {

    minimumNumberOfSides = newMinimumNumberOfSides;

}

}

//maximumNumberOfSides 12보다작아야한다.

-(void)setMaximumNumberOfSides:(int)newMaximumNumberOfSides {

    if (newMaximumNumberOfSides > 12) {

NSLog(@"Invalid maximum number of sides: %d is greater than 12 allowed", newMaximumNumberOfSides);

} else {

maximumNumberOfSides = newMaximumNumberOfSides;

}

}

//4. 초기화메소드를생성하라.

//주의! numberOfSides를 Max Min보다 먼저 세팅하려고 Max Min값이 0으로 인식되어 조건에서 튕겨나간다.

-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max {

[selfsetMinimumNumberOfSides:min];

[selfsetMaximumNumberOfSides:max];

[selfsetNumberOfSides:sides];

returnself;

}

//5. 슈퍼클래스인 NSObject init메소드를오버라이드하여아래와같은디폴트값을설정하는커스텀 init생성하라.

-(id)init {

if (self = [superinit]) {

    self = [selfinitWithNumberOfSides:5minimumNumberOfSides:3maximumNumberOfSides:10];

}

returnself;

}

//내각

-(float)angleInDegrees {

return (180 * (self.numberOfSides - 2) / self.numberOfSides);

}

//라디안

-(float)angleInRadians {

returnM_PI / 180 * self.angleInDegrees;

}

//7. 면의갯수로부터다각형의이름을출력하게것이다.

-(NSString *)name {

    switch ([selfnumberOfSides]) {

case2: return@"digon"; break;

case3: return@"triangle"; break;

case4: return@"quadrilateral"; break;

case5: return@"pentagon"; break;

case6: return@"hexagon"; break;

case7: return@"heptagon"; break;

case8: return@"octagon"; break;

case9: return@"enneagon"; break;

case10: return@"decagon"; break;

case11: return@"hendecagon"; break;

case12: return@"dodecagon"; break;

default: return@"";

}

}

//8. description오버라이드

//: Hello I am a 4-sided polygon (aka a Square) with angles of 90 degrees (1.570796 radians).

-(NSString *)description {

return [NSStringstringWithFormat: @"Hello I am a %d-sided polygon (aka a %@) with angles of %.0f degrees (%.6f radians)."

self.numberOfSides, self.name, self.angleInDegrees, self.angleInRadians];

}

//9. dealloc메소드를사용하여메모리관리를하고, dealloc불리워졌을때로그를출력하도록하여라.

- (void)dealloc {

NSLog(@"dealloc called");

[superdealloc];

}

@end

WhatATool.m의 함수(Section 6) 부분 +-----+-----+-----+-----+-----+

//#import "PolygonShape.h" 를 잊지말자


//Section 6

void PrintPolygonInfo() {

    NSLog(@"----- Section 6 -----");


    //배열 생성

NSMutableArray *array = [[NSMutableArrayalloc] init];

PolygonShape *polygon1 = [[PolygonShapealloc] initWithNumberOfSides:4minimumNumberOfSides:3maximumNumberOfSides:7];

PolygonShape *polygon2 = [[PolygonShapealloc] initWithNumberOfSides:6minimumNumberOfSides:5maximumNumberOfSides:9];

PolygonShape *polygon3 = [[PolygonShapealloc] initWithNumberOfSides:12minimumNumberOfSides:9maximumNumberOfSides:12];

    //생성한 다각형 정보를 로그에 출력하고 배열에 다각형 오브젝트를 추가한다.

NSLog([polygon1 description]);

[array addObject:polygon1];

NSLog([polygon2 description]);

[array addObject:polygon2];

NSLog([polygon3 description]);

[array addObject:polygon3];

//제약을 테스트하기 위해 numberOfSides에 10을 넣어본다.

for (PolygonShape *polygon in array) {

polygon.numberOfSides = 10;

}

[polygon1 dealloc];

[polygon2 dealloc];

[polygon3 dealloc];

[array dealloc];

}

<결과>

2009-12-17 14:54:31.297 WhatATool[1125:10b] ----- Section 6 -----

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 4-sided polygon (aka a quadrilateral) with angles of 90 degrees (1.570796 radians).

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 6-sided polygon (aka a hexagon) with angles of 120 degrees (2.094395 radians).

2009-12-17 14:54:31.297 WhatATool[1125:10b] Hello I am a 12-sided polygon (aka a dodecagon) with angles of 150 degrees (2.617994 radians).

2009-12-17 14:54:31.298 WhatATool[1125:10b] Invalid number of sides: 10 is greater than the maximum of 7 allowed

2009-12-17 14:54:31.298 WhatATool[1125:10b] Invalid number of sides: 10 is greater than the maximum of 9 allowed

2009-12-17 14:54:31.298 WhatATool[1125:10b] dealloc called

2009-12-17 14:54:31.299 WhatATool[1125:10b] dealloc called

2009-12-17 14:54:31.299 WhatATool[1125:10b] dealloc called

The Debugger has exited with status 0.



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

댓글을 달아 주세요

아이폰어플개발정보2010. 6. 24. 08:00
iPhone 시뮬레이터를 실제 사용하는 것 처럼!
아이폰 개발을 하기 위해 필요한것은 개발 도구와, 개발한 애플리케이션을 실행해 볼 수 있는 아이폰이나, 아이팟 터치일 것이다. 하지만, 아이폰/아이팟 터치가 없다면?? 컴퓨터는 누구나가 다 가지고 있기 때문에 해킨토시를 하던, VMware를 통해 설치하는 등의 방법을 통해 설치 할 수 있지만, 없는것을 만들어 낼 수는 없는 노릇이다. 그리고 매번 동기화 시켜서 테스트 할 수도 없는것이고... 다른 개발 툴들도 마찬가지겠지만, 아이폰 SDK에는 실제 실행환경과 매우 유사한 iPhone simulator 가 준비되어 있다.



아이폰 시뮬레이터 실행하기.
Xcode 로 애플리케이션을 작성하고 'Run and Build' 버튼을 누르면 소스코드가 빌드되고, 자동으로 아이폰 시뮬레이터가 실행이 된다. 그리고 지금 개발중인 애플리케이션이 실행한 상태의 화면이 나타나게 된다. 애플리케이션은 실행하지 않은채로 아이폰 시뮬레이터만 실행해 보고 싶다면 HardDisk -> Developer -> Platforms -> iPhoneSimulator.platform -> Developer -> Applications 의 순서로 폴더를 따라가다 보면 'iPhone Simulator' 실행 파일을 만날 수 있다. 이 파일을 더블 클릭하면 아이폰 시뮬레이터가 실행된다.


손가락이 없다면 마우스로...
아이폰을 가장 잘 활용하기 위한 도구는 우리 모두가 가지고 있는 손가락이다. 하지만 아쉽게도 컴퓨터에는 손가락이 없다. 대신에 마우스라는 친근한 도구가 우리에게 있다. 마우스와 마우스의 버튼은 우리가 손가락으로 아이폰에 입력할 수 있는 대부분의 입력을 충분히 입력할 수 있도록 해준다.


그림1. 아이폰 시뮬레이터의 입력

Mouse Click : 마우스를 원하는 곳에 이동한 후 클릭하는 것을 손을 아이폰의 화면에 대는 것과 같다고 할 수 있다. 무엇인가를 선택할 때 사용되고, 버튼 형식의 객체를 컨트롤 할 수 있다.
Mouse double Click : 마우스를 더블클릭하는 것은 손가락으로 빠르게 두번을 탭하는 것과 같다. 취소를 하거나, 화면 전환을 할 때, 탭 이외의 추가적인 입력이 필요할 때 사용 할 수 있다.
Mouse Click & Drag : 마우스를 클릭한 상태에서 드래그를 하는 것은 손가락을 아이폰의 화면에 대고 끄는것과 같은 역할을 하게 된다. 매우 큰 화면을 볼 때 이리저리 움직일 때 사용하거나, 화면 전환에 유용하게 쓰이는 제스쳐이다.
'option' + Mouse Click & Drag : 'option' 키를 누른 상태에서 마우스를 클릭하면 위의 화면과 같이 두개의 원이 생기게 되는데 이것은 두개의 손가락을 의미한다. 이것을 드래그하면 손가락의 간격을 줄이거나 늘이거나 할 수 있는데, 화면을 확대하거나 축소할때 손쉽게 사용하는 제스쳐이다.


아이폰 흔들기.
아이폰의 주요 특징의 하나는 위치와 방향에 대한 감각이 뛰어나다는 것이다. 아이폰을 ‡뗌隔킬


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

댓글을 달아 주세요