작년 12월... 집에 가다 아이폰이 있길래 구입해서 쓴지 약 2개월이 되어간다.

아이폰의 배터리 이슈는 1세대부터 재기되어 왔던 문제라... 그냥 겁내 빨리 다네라고만 생각했다.
인터넷과 주변 사람들의 아이폰을 본 후... 내 아이폰의 배터리는 미친듯이 빨리 단다는 걸 알게되었다.

아래 이미지는 어제 기준이다. WIFI와 Bluetooth는 꺼진 상태이고 Push는 Whatsapp만 그리고 LBS는 켜진 상태이다.
잠깐 통화한 시간을 감안에서 9시간에 31%는 좀 심한거 같다.

뭐 이전에는 9시간 정도 되면 40%대였는데... 이상하게 SHOW 매장에 가서 상담을 받은 이후로 배터리 타임이 두배 정도 늘어난 것 같다.
13분 사용에 20시간 대기에 13% 남았으니 말이다.

SHOW 매장가서 A/S관련해서 이야기를 나눴다.
일반 핸드폰의 경우 동일 증상 3회 A/S시 환불이 가능하지만... 아이폰의 경우 1년 이내의 경우에는 회수 제한없이 리퍼만 가능하다. 리퍼 받은게 계속 고장나도 환불이 불가능하다고 한다. 무조건 리퍼 받는거다. -_-; 그러다가 1년 지나면 우후훗 유상수리다. 쇼폰케어인가가 들면 이후에는 어느정도 커버가 되긴하겠지만...
아이폰 임대폰이 없어서 A/S를 맡기면 일반폰을 주는데 우기면 아이폰 임대폰을 받을 때까지 기다려야 한다.
일반폰을 쓰는 동안에 못쓰는 데이터요금에 대해서는 KT쪽에서 요금을 제해준다고 한다.
고장여부 확인은 외부 업체 한군데에 보내서 체크하게 되는데 통상 1주일 정도 걸린다고 하고 리퍼 판정 받으면 2~3주 정도 기다려야 리퍼폰을 받을 수 있다고 한다.

아이폰을 비롯한 애플 제품은 A/S정책이 아주 globalization이여. Apple관련 UI 문서 보면 localization도 꽤 강조해놨던데 A/S정책도 좀 그렇게 해줬으면 좋겠다.
저작자 표시
Posted by 쟤시켜 알바
회사 사람이 스티커를 샀다고 자랑을 하길래 냅다 하나 달라고 했다.
어떤거 줄까 하길래 낼름 캔디를 달라고 했다. 안된다고 하길래 계속 달라고 해서 겟!

인크레더블 실즈가 누리끼리해져서 회사 앞에 있는 SGP 샵가서 케이스를 사왔다.
뭐 고를게 없더라. 흑;

어디다 붙일까 고민하다가 뒷면 중간 하단에 붙였다.

각도에 따라 눈이 보였다 안보였다 하는데... 보이는 각도에서만 찍었다.
내폰은 외로워도 슬퍼도 울지 않는다... 회사 전화 빼고는 오지를 않지.
정말 그런듯 하다-_- 일 빼고는 전화 올 때가  없다. 흑 ㅠ_ㅠ
아 블랙베리 판다고 하니 전화 몇통 왔었구나. 후~

사과와 파란색 원에 포커스를 맞춰서 그냥 찍어봤다.

저작자 표시
Posted by 쟤시켜 알바

MapCard라고 $0.99인가 하는 놈이다. 사진을 찍고 나면 구글맵에 현재 위치를 표시하고 위 이미지처럼 사진과 맵을 합쳐준다. 간단하게 description도 추가할 수 있다.
아이폰이 아닌 아이폰을 기반으로 한 어플들의 가장 큰 장점은 GPS를 이용한 LBS를 실제 사용자들이 쓸 수 있게 해주는 것 같다.(사실 내겐 아이폰 그 자체는 그닥 매력적이지 않다.)

여기서는 부터는 다른 이야기~

GPS 탑재된 모델들이 나온지는 한참 됐지만 왜 아이폰을 제외한 다른 플랫폼에서는 그렇게 많이 나오지 않았던 것일까...
아니 몇년전 부터 나왔었다. 현재 아이폰에 있는 GPS관련된 기능들은 웹서비스로 모바일 어플리케이션으로 아이폰이 나오기 전부터 그리고 나온 후에도 많았었다. 그리고 현재 아이폰 기반 GPS어플들보다 더 많은 기능을 제외하고 UI도 멋지게 구현된 것들이 많았다.

난 이게 참 궁금하다. 컨셉을 잘못 잡지는 않았다. 아이폰 서드파티 어플들 역시 그 전에 내가 봐왔던 어플들보다 기능이나 컨셉이 나아진 것이 아니기 때문이다. 대부분의 LBS 기반 어플들은 수년전이나 지금이나 거의 차이가 없다. 어떻게 보면 지금 어플들은 예전의 한 어플 또는 서비스에서 제공하던 기능을 여러개의 어플로 쪼개놓은 꼴이니까...

운칠기삼이라고 해야하나... 데이터 기반의 서비스는 이통사의 제한으로 인해 일부 국가 또는 일부 지역에서만 됐지만 이제 조금 약간 대중들에게 보편화 되고 있는 시점에 아이폰과 아이폰의 플랫폼이 점점 인기를 끌고 있으니... 때를 잘 만나서 성공하는 것 같다.

내년에부터가 기다려진다. 아이폰은 나온지 3년이 되는 구형(?)이 되고 안드로이드 모델들이 쏟아지고 많은 개발자와 능력자들이 안드로이드 기반의 어플들을 싼가격에 쏟아낸다면 내년부터의 핸드폰 시장은 사용자들에게는 천국과 같은 곳이 될 것이다.

아이폰은 더이상 독보적인 존재가 되지 못할 것이다. 대부분의 메이저 제조사들이 알다시피 안드로이드를 채택한 모델을 대거 출시할 것이다. 우리나라는 마켓이 들어오지 못해 역시나 반쪽짜리가 되고 아이폰과 마찬가지로 외국보다 몇년 늦게 이를 만끽하게 될 것이다. 그리고 많은 개발자들이 아이폰과 동시에 안드로이드 계열에 어플들을 제공할 것이다. 그러다 리소스의 문제로 안드로이드 계열로 넘어갈 가능성이 크다. 사용자 계층은 아이폰보다 안드로이드 계열이 더 가파르게 성장할테니까 말이다.

어플 이야기하다가 먼데까지 와버렸네. 트렌드를 본지 꽤 되서 내가 한말이 틀릴 수도 있겠다. 라인업에서 하루살이처럼 살고 있다 보니 예전처럼 이것저것 찾아 보고 이해하는게 쉽지많은 않다.
저작자 표시
Posted by 쟤시켜 알바

Nokia N97

UX/Products 2008/12/15 09:06
Nokia N97과 iPhone 3G를 비교한 글이 하나 올라왔다.(14일자)

  • 발표 시기는 iPhone 3G가 5개월(08년 7월) 빨리
  • 두께는 N97이 조금 더 두껍다.(몇미리 차이인지는 모름) slide open했을 때는 거의 두배
  • 무게는 N97이 150g, iPhone 3G가 133g
  • 지원하는 네트워크는 대충 비슷하나 중요한 이슈가 아니니 그냥 넘어가겠음
  • 둘다 3.5인치이나 N97의 해상도가 640×360으로 iPhone 3G(320×480)보다 큼
  • N97는 slide out 방식의 키보드 제공
  • N97은 Symbian v9.4 3G는 Mac X
  • N97은 Java와 MMS 지원
  • N97 내장 메모리는 32G, iPhone 3G는 8/16G
  • Bluetooth 모두 지원, IR은 지원 안함, Wi-Fi 지원
  • 내장 GPS 탑재, iPhone 3G는 Google map 사용, N97은 Nokia Maps 2.0 사용
  • N97은 5메가 픽셀 카메라, iPhone 3G는 2메가 픽셀 카메라, N97은 오토 포커싱, 플래시 지원
  • N97은 내장 라디오 지원, iPhone 3G은 없음
  • iPhone 3G의 배터리는 확인된 정보가 없음
  • N97은 09년 초 550 유로에 판매 예정
출처 : Gadget Review2U, Nokia N97 vs Apple iPhone 3G

보너스 #1 - 공식 데모 영상(구라빨)


보너스 #2 - 구동하는 동영상

저작자 표시

'UX > Products' 카테고리의 다른 글

HTC의 HD2 사진 몇장  (0) 2010/02/02
LG 쿠키폰  (10) 2009/04/07
Nokia N97  (0) 2008/12/15
딱 마음에 드는 컨셉폰  (0) 2008/12/12
HTC Touch Diamond를 잠시 사용해보고...  (4) 2008/07/28
소니 마일로(Sony mylo)  (8) 2008/04/29
Posted by 쟤시켜 알바
이건 안하느니 못한 거 같다. 회사에서도 더 이사 개발을 안하고 스스로도 개발을 안하는 상황인데 이런 글 읽고 말로 만들려니 나도 무슨 소리를 하고 있는지를 모를 지경이다. 대학 때 잠시 C# 공부하면서 델리게이트 등에 대한 것은 알고는 있지만 말로는 설명할 수준이 아니다 보니 뭐라고 하는 건지...
나중에 다시 한번 보면 좀더 그럴듯하게 써내려 갈 수 있을까 모르겠다...


Object-C 언어는 정교한 객체 지향 프로그래밍을 가능하게 하기 위해 디자인된 심플한 컴퓨터 언어다. Object-C는 클래스, 메소드, 그리고 프로퍼티 정의하기 위한 문법과 클래스의 동적 확장을 활성화하는 생성자들을 제공하여 표준 ANSI C 언어에서 확장하였다. 클래스 문법과 디자인은 대부분 스몰톡 기반이며, 스몰톡은 초기 객체 지향 언어 중 하나이다.
이전에 객체 지향 프로그래밍을 한 적이 있다면 다음 정보를 통해 Object-C의 기본 문법을 배우는 데 도움이 될 것이다. 캡슐화, 상속, 다상성 등과 같은  전통적인 객체 지향 컨셉의 많은 부분이 Object-C에 포함되어 있다. 몇몇 중요한 차이점이 있는데, 이러한 차이점은 이 문서에는 논외로 하고 더 자세하 정보는 필요할 때 찾아 볼 수 있다.
객체 지향 언어를 사용하여 프로그래밍을 한 적이 없다면, 앞으로 진행하기에 앞서 적어도 객체 지향 언어의 컨셉에 대한 기본 이해가 필요하다. 객체와 객체 지향 생성자를 사용하는 것은 iPhone 어플리케이션을 디자인하는 데 기본이다. 객체 지향 컨셉에 대한 개요는 Object-Oriented Programming with Object-C에서 볼 수 있다.
Object-C 언어에 대한 더 자세한 소개는 The Object-C 2.0 Programming Language를 살펴보면 된다.

Object-C: A Superset of C
Object-C는 C 프로그래밍 언어의 ANSI 버전의 슈퍼셋이고 C의 기본 문법을 지원한다. C 코드로 헤더와 소스 파일을 아래 표와 같이 파일 확장자를 사용하여 분리된 공개 선언을 통해 정의할 수 있다.

Extension Source type
.h Header files. Header files contain class, type, function, and constant declarations.
.m Source files. This is the typical extension used for source files and can contain both Objective-C and C code.
.mm Source files. A source file with this extension can contain C++ code in addition to Objective-C and C code. This extension should be used only if you actually refer to C++ classes or features from your Objective-C code.

소스 코드 안에 헤더를 포함하기를 원하면 표준 #include 컴파일러 지시자를 사용할 수 있으나 Object-C는 더 나은 방법을 제공한다. #import 지시자는 #include와 동일하지만 동일한 파일을 한번만 포함하게 한다. Object-C 샘플과 도큐멘테이션은 #import 사용을 선호하며 개발자의 코드에서 #import를 사용해야 한다.

Strings
C의 슈퍼셋으로써의 Object-C는 C와 마찬가지로 문자열을 구체화하기 위한 동일한 변환 방식을 지원한다. 즉, 하나의 문자는 싱글 쿼테이션 마크(‘)로 둘러싸고 여러개의 문자는 더블 쿼테이션 마크(“)로 둘러싼다. 그러나, 대부분의 Object-C 프레임워크는 C스타일의 문자열을 자주 사용하지는 않다. 대신에 대부분의 프레임워크는 문자열을 NSString 객체에 넣는다.
NSString 클래스는 부동형 문자열에 대한 메모리 관리, 유니코드 지원, 프린트 스타일의 포맷 유틸리티 등을 포함한 모든 이점이 있는 객체 랩퍼를 제공한다. 이런 문자열이 일반적으로 사용되기 때문에 Object-C는 상수값으로 이루어진 NSString 객체를 생성하기 위한 약식의 노테이션을 제공한다. 이러한 약식의 방법을 사용하기 위해 해야할 일은 더블 쿼테이션 마크 앞에 @ 심볼을 놓기만 하면 된다. 아래 예제를 참고하면 된다.
NSString*  myString = @"My String\n";
NSString*  anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];
 
// Create an Objective-C string from a C string
NSString*  fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

Classes
다른 객체 지향 언어에서처럼 Object-C의 클래스는 데이터를 처리하는 액션과 데이터를 캡슐화하는 기본 생성자를 제공한다. 객체는 클래스의 런타임 인스턴스이며, 클래스에서 정의된 멤버 변수의 메모리내 복사본과 클래스 메서드의 포인터를 포함한다.
Object-C의 클래스 스펙은 interface와 implementation이라는 두개의 명확히 구분되는 부분들이 필요하다. interface는 클래스 선언과 정의를 포함한다. implementation는 메서드에 대한 실제 코드를 포함한다. 아래 그림은 MyClass 클래스의 정부 부분에 대한 문법을 보여준다. 클래스 선언은 항상 @interface 컴파일러 지시자로 시작되고 @end 지시자로 끝난다. 그 다음에 클래스의 부모 클래스명이 따라 온다. 클래스의 멤버 변수는 중괄호 안의 블럭에서 선언된다. 그 다음에는 클래스에서 선언된 메서드의 리스트가 따라온다. 세미콜론은 각 멤버 변수와 메서드 선언을 의미한다.
사용자 삽입 이미지

아래 그림은 MyClass의 implementation 부분을 보여준다. 클래스 선언과 같이 클래스 implementation은 2개의 컴파일러 지시자로 구분된다 - @implementation과 @end. 이 지시자들은 컴파일러가 클래스에 속한 메서드의 범위를 지정하는데 필요한 정보를 제공한다. 메서드 정의부분은 코드 블럭을 제외한 interface내의 선언부분에 대응한다.
사용자 삽입 이미지

노트 : 이전의 클래스 선언에서는 메서드만 있지만 프로퍼티도 선언할 수 있다. 더 많은 정보는 Properties를 살펴보면 된다.
변수에 객체를 저장할 때는 항상 포인터 타입을 사용해야 한다. Object-C는 객체를 포함하는 변수에 대해 강한 타입과 약한 타입 모두를 지원한다. 강한 타입 포인터는 변수형 선언에서 클래스명을 포함한다. 약한 타입의 포인터는 콜렉션 클래스와 같이 객체의 타입을 정확히 알 수 없는 것에 자주 사용된다. 강한 타입의 언어를 알고 있다면 약한 타입의 변수 사용이 문제를 일으킬 수 있다고 생각할 수 잇지만 실제로 엄청난 유연성을 제공하고 Object-C 프로그램에 생동감을 불어 넣는다.
다음 예제는 강한 타입의 변수 선언과 약한 타입의 변수 선업을 보여준다.
MyClass*  myObject1;    // Strong typing
id        myObject2;    // Weak typing

Methods

Object-C의 클래스는 두가지 타입의 메서드를 선언할 수 있다: 인스턴스 메서드와 클래스 메서드. 인스턴스 메서드는 특정 클래스의 인스턴스에서만 실행이 된다. 즉, 인스턴스 메서드를 호출하기 전에 반드시 클래스의 인스턴스를 생성한 후 인스턴스에서 실제 메서드를 출해야 한다. 반대로 클래스 메서드는 인스턴스를 생성할 필요가 없다.
메서드의 선언은 메서드 타입 식별자, 리턴 타입, 하나 이상의 시그너처 키워드, 그리고 파라미터 타입과 이름 정보로 구성된다. 아래 그림은 insertObject:atIndex: 라는 인스턴스 메서드의 선언 예제다. 선언은 인스턴스 메서드를 나타내는 마이너스(-) 사인이 앞에 온다. 메서드의 실제 이름(insertObject:atIndex:)는 콜론(:)를 포함한 모든 시그너처 키워드를 연결한 것이다. 콜론(:)은 파라미터이 있음을 선언한다. 메서드의 파라미터가 없다면 첫번째 시그너처 키워드 뒤의 콜론을 생략할 수 있다.
사용자 삽입 이미지

메서드를 호출하기 원하면 해당 객체에 메세지를 보내어 호출할 수 있다. 이 경우의 메시지는 메소드 시그너처로 메소드가 필요로하는 파라미터 정보와 함께 간다. 객체에 보내는 모든 메시지는 동적으로 빠르게 처리되며 Object-C의 다상성 행동을 쉽게 해준다. 즉, 서브 클래스가 부모 클래스와 동일한 시그너처인 클래스를 정의하면, 서브 클래스가 먼저 메시지를 받고 부모 클래스에 메시지를 포워딩할 수 있다.
메시지는 꺽쇠괄호([,])로 둘러싸인다. 꺽쇠괄호 안에서 메시지를 받는 객체는 왼쪽 편에 위치하고 메시지는 오른쪽에 위치한다. 예를 들어, insertObject:atIndex: 메시지를 myArray 변수의 객체에 보내기 위해서는 다음과 같은 문법을 따르면 된다.
[myArray insertObject:anObj atIndex:0];
일시적인 결과를 저장하는 다수의 지역변수를 선언하는 것을 피하기 위해, Object-C는 메시지 중첩을 허용한다. 각각의 중첩된 메시지의 리턴값은 파라미터, 타겟, 다른 메시지 등으로 사용된다.  예를 들어, 위의 샘플에서 메시지로 사용된 변수를 값을 받기 위한 메시지로 변경할 수 있다. 배열 객체에 접근할 수 있는 메서드를 가진 myAppObject라는 객체가 있고 배열에 객체를 추가하려면 다음과 같이 예젠 앞부분에 코드를 추가하면 된다.
[[myAppObject getArray] insertObject:[myAppObject getObjectToInsert] atIndex:0];
위의 예제가 클래스 인스턴스에 메세지를 보내는 것이지만 클래스 자신에게도 메시지를 보낼 수 있다. 클래스에 메세지를 보내려면 선택한 메서드는 인스턴스 메서드가 아닌 클래스 메서드로 정의되어야만 한다. C++ 클래스의 정적 멤버와 비슷한 것이라고 생각할 수 있다.(그러나 정확히는 같지 않다.)
일반적으로 클래스 메서드는 새로운 클래스의 인스턴스를 만들거나 클래스와 관련있는 공유 정보에 접속하기 위해 팩토리 메서드로 사용한다. 클래스 메서드 선언의 문법은 인스턴스 메서드와 동일하다. 마이너스(-) 싸인 대신 플러스(+) 싸인을 사용하는 것을 제외하고는.
아래 예제는 클래스 메서드를 클래스에 대한 팩토리 메서드로 사용한 것을 보여준다. 이 예제에서 arrayWithCapacity; 메서드는 NSMutableArray 클래스의 클래스 메서드이며 클래스의 새로운 인스턴서를 할당하고 초기화학 코드로 돌려주는 역할을 한다.
NSMutableArray* myArray = nil; // nil is essentially the same as NULL

// Create a new array and assign it to the myArray variable.
myArray = [NSMutableArray arrayWithCapacity:0];

Properties
프러퍼티는 접근 메서드를 대체하기 위해 사용된 편리한 표기법이다. 프러퍼티는 새로운 멤버 변수를 만들어내지 않는다. 단순히 기존의 멤버 변수에 접근하는 정의된 메서드에 대한 약기이다. 멤버 변수를 노출하려는 클래스는  get이나 set 메서드를 사용하는 대신 프러퍼티 표기법을 사용할 수 있다. 가상의 멤버 변수를 노출하기 위해서도 프러퍼터를 사용할 수 있다. - 가상의 멤버 변수란 멤버 변수에는 실제로 저장되어 있지 않지만 동적으로 계산된 데이터의 일부분을 뜻한다.
실질적으로 프러퍼티는 짜야할 상당한 량의 코드를 줄여준다. 대부분의 접근 메서드는 비슷한 방식으로 구현이 되기 때문에, 프러퍼티가 각 멤버 변수에 각각 제공되어야 할 get과 set 메서드를 제거해 준다.프러퍼티 정의를 사용하여 원하는 방식으로 행동을 구체화하고 컴파일시 선언에 기반하여 실제의 get과 set 메서드를 합쳐야 한다.
프러퍼티 선언은 실제 메서드 생성에 영향을 미치므로, 클래스 인터페이스에 메서드 선언과 함게 포함해야 한다. 기본 정의는 @property 컴파일러 지시자를 사용하며 그 다음 프러퍼티의 type 정보와 이름이 나온다. 커스텀 옵션을 사용하여 접근 메서드가 어떻게 행동할지에 대해 프러퍼티를 설정할 수 있다. 아래 에제는 간단한 프러퍼티 선언에 대한 것이다.
@property BOOL flag;
@property (copy) NSString* nameObject; // Copy the object during assignment.
@property (readonly) UIView* rootView; // Create only a getter method.
프러퍼티의 또다른 이점은 변수에 접근하려고 할 때 닷(.) 문법을 사용할 수 있다는 것이다. 아래 예제를 보라.
myObject.flag = YES;
CGRect viewFrame = myObject.rootView.frame;
위 예제의 객체와 프러퍼티 이름이 인위적이지만 프러퍼티의 유연성을 잘 보여주고 있다. 닷 문법은 호출할 수 있는 메서드들을 마스킹한다. 각각의 읽을 수 있는 프러퍼티는 동일한 이름의 메서드에 의해 뒤로 빠진다. 각각의 쓸 수 있는 메서드는 setPropertyName의 형식의 추가적인 메서드에 의해 뒤로 빠진다. 프러퍼티 이름의 첫번째 글짜는 대문자여야 한다. 프러퍼티 대신 메서드를 사용하여 이전 코드를 구현하려면 다음과 같이 하면 된다.
[myObject setFlag:YES];
CGRect viewFrame = [[myObject rootView] frame];
프러퍼티 선언하는 법에 대한 정보는 The Object-C 2.0 Programming Language의 Properties를 보면 된다.

Protocols and Delegates
프로토콜은 어떤 클래스든지 구현할 수 있는 메서드를 선언한다. 프로토콜은 클래스가 아닌다. 단순히 객체들과 구현 부분에 대한 인터페이스를 정의할 뿐이다. 개발자가 만든 클래스에서 프로토콜 메서드를 구현한다면 클래스는 이러한 프로토콜에 대해 알아야 한다.
iPhone OS에서 프로토콜은 객체를 델리게이트하기 위해 종종 사용된다. 델리케이트 객체는 다른 객체와 협력하거나 절반처럼 행동하는 객체다. 프로토콜, 델리게이트, 그리고 다른 객체 사이가 어떻게 동작하는지를 살펴볼 수 있는 가장 좋은 방법은 예제를 살펴보는 것이다.
UIApplication 클래스는 어플리케이션의 필요한 행동을 수행한다. 어플리케이션의 현재 상태에 대한 단순한 통지를 받기 위해 UIApplication의 하위 클래스를 사용하는 것 대신에 UIApplication는 할당된 델리게이트 객체의 특정 메서드를 호출하여 통지를 전달한다. UIapplicationDelegate 프로토콜은 이러한 통지를 받고 적절한 응답을 제공한다.
프로토콜의 선언은 클래스 인터페이스와 유사하다. 다만 프로토콜은 부모 클래스를 가지고 있지 않고 멤버 변수를 정의할 수 없다는 것만 다르다. 다음 예제는 간단한 하나의 메서드에 대해 프로토콜 선언에 대한 것이다.
@protocol MyProtocol
- (void)myProtocolMethod;
@end
많은 델리게이트 프로토콜에 대해 프로토콜을 선택하는 것은 프로토콜에 의해 메서드를 정의하는 것이냐의 문제다. 몇몇 프로토콜은 프로노콜을 지원하기 위해 명확하게 기술해야 하지만 현재로써는 메서드를 구현하는 것으로도 충분하다. The Objective-C 2.0 Programming Language의 Protocols를 읽어보면 프로토콜에 대한 것과 어떻게 사용해야 하는지를 알 수 있게 된다.

For Mor information
위의 정보는 Object-C 언어의 기본으로 이 글을 읽는 사람에게 친숙함을 제공하기 위한 의도로 만드러졌다. 나머지 문서를 읽는 동안 가장 많이 직면할 언어의 특징들을 반영한 것들이다. 언어의 특징들은 이뿐만이 아니며 The Object-C 2.0 Programming Lanugage를 보고 언어에 대해 더 많은 것을 얻을 수 있다.

원본 : iPhone Dev Center, Learning Objective-C: A Primer

'Apple > Documentation' 카테고리의 다른 글

Learning Object-C: A Primer  (2) 2008/03/16
Tools for iPhone OS Development  (0) 2008/03/10
iPhone OS Overview  (0) 2008/03/09
Posted by 쟤시켜 알바
TAG guide, iphone
iPhone OS를 위한 어플리케이션을 개발하기 위해서는 Xcode tools을 실행할 Mac OS X 컴퓨터가 필요하다. Xcode는 프로젝트 관리, 코드 편집, 실행파일 빌드, 소스레벨 디버깅, 소스코드 관리, 성능 튜닝 등에 대한 지원을 제공하는 Apple의 개발 툴 모음이다. 이 모음 중앙에는 기본 소스코드 개발 환경을 제공하는 Xcode 어플리케이션이 있다. Xcode만이 사용 가능한 툴은 아니다. 다음 섹션에서 iPhone 어플리케이션을 만들기 위해필요한 어플리케이션에 대한 소개를 한다.

Xcode
개발자의 개발 경험의 중심은 Xcode 어플리케이션이다. Xcode는 iPhone 프로젝트와 소스 파일을 실행하고, 소스 코드를 시랭 파일로 빌드하고, 그리고 iPhone 시뮬레이터나 기기에서 소스코드를 실행하고 디버그하는 데 필요한 통합 개발 환경(IDE)이다.
새로운 iPhone 어플리케이션을 만들기 위해서는 Xcode의 New Project로 시작해야 한다. 프로젝트는 소스파일, 빌드 설정, 모든 조각들을 한데로 모을 규칙들을 포함하여 어플리케이션에 맞는 모든 정보를 관리한다. 모든 Xcode 프로젝트의 심장부는 프로젝트 윈도우로 아래 그림에서 볼 수 있다. 이 윈도우는 어플리케이션의 모든 핵심 요소를 빠르게 접근할 수 있는 방법을 제공한다. Groups과 Files list는 소스 파일과 소스파일에서 생성한 빌드 타겟을 포함한 프로젝트에 있는 파일들을 관리한다. Toolbar는 일반적으로 사용되는 툴과 명령에 대한 접근을 제공하며 details pane은 프로젝트에서 사용할 수 있는 설정 가능한 공간을 제공한다. 다른 프로젝트 윈도우는 프로젝트에 대한 문맥 정보를 제공한다.
사용자 삽입 이미지

Xcode는 코드 완성, 문법 컬러링, 코드 접기, 에러에 대한 인라인 주석, 경고, 노트와 같은 feature를 지원하는 고급 텍스트 에디터가 있다. Xcode의 빌드 시스템은 적합한 기본 설정과 중요한 컨텐트에 대한 환경을 설정할 수 있는 기능을 모두 제공한다. 도큐멘테이션 가 필요하다면 리서치 어시스턴트가 문맥에 맞는 도큐멘테이션 를 제공하며 Xcode 도큐멘테이션 윈도우는 개발자가 정보를 브라우징하고 검색할 수 있게 해준다.
Xcode에서 어플리케이션을 빌드할 때 iPhone 시뮬레이터 또는 기기에서 빌드할 수 있다. 시뮬레이터는 개발자가 원하는 방식으로 동일하게 행동하는지에 대해 어플리케이션을 테스트 해볼 수 있는 로컬 환경을 제공한다.  어플리케이션이 제대로 돌아가는지 Xcode의 시뮬레이터로 확인 한 후 컴퓨터에 연결된 iPhone이나 iPod touch에 어플리케이션을 빌드하고 실행해 볼 수 있다. 기기에서 실행하는 것은 궁극적인 테스트 환경을 제공하는 것이고 Xcode는 기기에서 실행하는 코드에 대한 기본 디버거를 제공한다.
사용자 삽입 이미지

iPhone OS의 프로젝트를 빌드하고 실행하는 방법에 대해서는 iPhone OS Programming Guide의 Development Environment파트를 보기 바란다.

Interface Builder
Interface Builder는 어플리케이션의 사용자 인터페이스를 시각적으로 조립(?)하는데 사용할 수 있다. Interface Builder를 사용하면 개발자는 이미 만들어진 컴퍼넌트를 drag&drop하여 어플리케이션의 윈도우를 만들 수 있다. 컴퍼넌트는 스위치, 텍스트 필드, 버튼, 그리고 어플리케이션의 뷰를 제공하는 커스텀 뷰와 같은 표준 시스템 컨트롤을 포함한다. 윈도우 표면에 컴퍼넌트를 놓은 후에 아이템을 drag하여 위치를 변경하고, 인스펙터를 이용하여 속성을 설정하고, 객체와 코드 사이의 관계를 설정할 수 있다. 개발자가 원하는 식으로 인터페이스가 보이면 컨텐트를 커스텀 리소스 파일 포맷인 nib 파일로 저장한다.
Interface Builder에서 만든 nib 파일은 UI Kit에 실행시 필요한 어플리케이션에서 다시 만들 동일한 객체에 대한 모든 정보를 포함한다. nib 파일의 로딩은 파일에 저장된 모든 객체의 런타임 버전을 생성하고, Interface Builder에 있던 것과 동일하게 만들어진다. 새로 만들어진 객체와 기존의 객체 사이의 연결 정보를 정립하기 위해 구체화한 연결 정보를 사용한다. 이러한 연결은 코드에 nib-file 객체에 포인터를 제공하고 객체가 코드에서 수행되는 액션과 커뮤니케이션하는데 필요한 정보도 제공한다.
전반적으로, Interface Builder를 사용하면 어플리케이션의 사용자 인터페이스를 만들 때 아주 많은 시간을 절약하게 된다. Interface Builder는 생성하고, 설정하고, 객체의 위치를 잡는데 필요한 커스텀 코드를 제거한다. 비쥬얼 에디터가 있기 때문에 실행시에 보이는 것과 동일한 인터페이스를 확인할 수 있다.
노트 : Interface Builder는 iPhone SDK의 초기 베타판이 아닌 최종 릴리스에서 유용하다.

Instruments
소프트웨어에 최고의 사용자 경험을 전달하기 위해서는 Instrument 환경을 통해 시뮬레이터나 기기에서 실행되는 iPhone 어플리케이션의 성능에 대한 분석을 해야 한다.
Instrument는 실행 중인 어플리케이션에서 데이터를 모으고 timeline이라 불리는 그래픽적인 디스플레이에 데이터를 나타낸다. 어플리케이션의 메모리 사용 현황, 디스크 활동, 네트워크 활동, 그리고 그래픽 성능에 대한 데이터를 모을 수 있다. Timeline 뷰는 모든 종류의 정보를 나란히 디스플레이하여 특정 영역의 행동 뿐 아니라 어플리케이션의 전반적인 행동에 대한 관련성을 제공한다. Instruments에 대한 자세한 샘플에서 얻을 수 있다.
사용자 삽입 이미지

Timeline 뷰의 제공과 더블어 Instrument는 어플리케이션의 행동을 분석하는데 도움이 되는 툴을 제공한다. 예를 들어, Instrument 윈도우는 동시에 여러개로 실행되는 어플리케이션의 데이터를 저장하여 어플리케이션의 행동이 실제로 향상이 되었는지 아니면 아직 작업이 더 필요한지를 알 수 있도록 해준다. 이러한 데이터는 Instrument 도큐먼트에서 언제든지 저장 및 불러오기가 가능하다.
iPhone 어플리케이션에서 Instrument 사용 방법에 대한 자세한 정보는 iPhone OS Programming Guide의 Development Environment에서 살펴볼 수 있다. Instrument 사용 방법에 대한 일반적인 정보는 Instruments User Guide에서 볼 수 있다.

원본 : iPhone Dev Center, Tools for iPhone OS Development

'Apple > Documentation' 카테고리의 다른 글

Learning Object-C: A Primer  (2) 2008/03/16
Tools for iPhone OS Development  (0) 2008/03/10
iPhone OS Overview  (0) 2008/03/09
Posted by 쟤시켜 알바
오역과 의역이 난무한 개판 5분 후 번역본이니 읽어보시려면 관대한 마음으로 읽어주길...
아이폰 어플리케이션 개발하기 전에 개념 탑재를 위해 몇몇 문서는 이렇게 개판 5분후 한글화를 할 예정-_-;


iPhone OS는 iPhone과 iPod touch에서 사용 가능한 어플리케이션을 사용하는 데 필요한 기술과 운영체제로 구성되어 있다. Mac OS X의 기본 기술과 일반적인 전통을 공유하지만, iPhone OS는 미묘하게 다른 모바일 환경의 사용자 needs에 충족되도록 디자인되었다. 기존의 Mac OS X 개발자는 많은 유사한 기술을 보게 될 것이지만, 멀티터치 인터페이스와 가속 기능 지원과 같은 iPhone OS에서만 볼 수 있는 기술 역시 보게 될 것이다.
사용자 삽입 이미지

iPhone SDK는 개발, 테스트, 실행, 디버그, iPhone OS에 맞게 어플리케이션 튜닝에 필요한 코드, 정보, 그리고 도구를 포함한다. Xcode tool는 iPhone OS 개발에 맞게 업데이트되었다. Xcode는 기본 에디팅, 컴파일, 디버깅 환경을 제공할 뿐만 아니라, iPhone과 iPod touch에서 실행될 어플리케이션을 테스트하기 위한 launching 포인트 역시 제공한다. 또한, 개발자의 맥 컴퓨터에서 기본적인 iPhone OS 환경을 흉내낸 플랫폼인 iPhone simulator에서 어플리케이션을 실행해볼 수 있도록 제공한다.

이 문서는 개발자가 플랫폼에 적응할 수 있도록 돕기 위해 iPhone OS에서 볼 수 있는 기본적인 feature에 대한 상급 개요를 제공한다. iPhone Dev Center에서 iPhone 어플리케이션을 만들기 위한 기본 프로세스를 이해하는 데 도움을 주고 빠르게 속도를 높일 수 있도록 도움을 주는 문서를 찾을 수 있다.

iPhone OS Technology Layers
사용자 삽입 이미지
iPhone OS의 기본 시스템 아키텍처와 많은 기술은 Mac OS X와 유사하다. iPhone OS의 커널은 Mac OS X의 기본 Mach 커널의 변형이다. 커널의 최상위는 플랫폼에서 어플리케이션 구현에 사용된 서비스 레이어이다. 우츨에 있는 그림은 이 레이어의 상급 개요이다.
이 레이어는 구현할 때 개발자가 선택할 수 있다. 예를 들어, Core OS와 Core Services 레이어는 파일 접근, low-level 데이터형(built-in), bonjour 서비스(네트워크 관련), 네트워크 소켓 등과 같은 iPhone OS를 위한 기본 인터페이스를 포함하고 있다. 이러한 인터페이슨 대부분은 C기반이고 Core Foundation, CFNetwork, SQLite과 같은 기술을 포함하고 POSIX 쓰레드와 UNIX 소켓에 접근할 수 있다.
상위 레이어로 이동하면, C 기반과 Object-C 기반의 인터페이스가 혼합된 좀더 진보된 기술을 볼 수 있다. 예를 들어, Media 레이어는 2D와 3D drawing, audio, 그리고 video를 지원하는 기본 기술을 포함한다. 이 레이어는 C기반의 OpenGL ES, Quartz, 그리고 Core Audio 테크놀러지를 포함한다. 또한, 진보된 Object-C 기반의 애니메이션 엔진인 Core Animation을 포함한다.
Cocoa Touch 레이어의 대부분 기술은 대부분 Object-C를 사용한다. 이러한 레이어의 프레임워크는 어플리케이션에서 사용할 기본 인프라를 제공한다. 예를 들어, Foundation 프레임워크는 객체 기반의 collection, 파일 관리, 네트워크 오퍼레이션 등과 같은 기술을 지원한다. UIKit 프레임워크는 윈도우, 뷰, 컨트롤, 그리고 이러한 객체를 관리하는 컨트롤을 위한 클래스를 포함한 시각적 인프라를 제공한다. 이 레벨의 다른 프레임워크는 사용자의 연락처와 사진 정보 그리고 가속 센서 그리고 다른 하드웨어의 feature에 접근할 수 있게 해준다.
새 프로젝트의 시작점은 Cocoa Touch 레이어이며 그 중에서 UIKit 프레임워크다. 사용할 추가적인 기술을 결정했다면 상위 레벨의 레이어에 있는 프레임워크를 사용하고 필요할 때 하위 레이어에 있는 프레임워크로 내려갈 것을 추천한다. 상위 레이어의 프레이워크는 표준 시스템 행동에 대한 지원을 최소한의 노력으로 더 쉽게 해준다. 하위 레벨 프레임워크로 내려가야할 때는 상위 레벨에서 제공하지 않는 커스텀 행동을 구현해야할 때 뿐이다.
더 자세한 개요는 iPhone OS Programming Guide를 보기 바란다.

Writing Code for iPhone OS
iPhone SDK는 iPhone OS에서 실행되도록 고안된 그래픽 위주의 어플리케이션 개발을 지원한다. 개발자가 만든 어플리케이션은 Photos, Weather, 그리고 Clock과 같은 시스템 어플리케이션과 함께 사용자의 홈 스크린에 놓을 수 있다. 실행 후에는 커널과 몇몇 하위 레벨의 데몬을 제외하고 시스템에서 실행되는 어플리케이션 중 하나가 된다. 실행 중에는 어플리케이션은 화면 전체를 차지하고 사용자의 주의를 갖게 된다. 그리고 사용자가 홈 버튼을 누르면, 어플리케이션은 종료되고 시스템은 홈스크린 화면으로 되돌린다. 시스템을 특정 어플리케이션에 넘기는 것은 기본 시스템 리소스에 대한 완전한 접근이 가능하기 때문에 편리하다. 개발자는 가속 센서, 카메라, 그래픽 하드웨어와 같은 내장 하드웨어를 사용할 수 있다.
사용자가 iPhone과 iPod touch와 상호작용하는 방법은 기본적으로 Mac OS X에서의 그것과 다르고 어플리케이션을 디자인 하는 방법 역시 다르다. iPhone 어플리케이션에는 컨텐트를 표시하기 위해 분리된 도큐먼트 윈도우라는 컨셉이 없다. 대신에 모든 어플리케이션의 데이터는 하나의 윈도우에 표시된다. 이로인해 개발자가 어플리케이션의 데이터를 조직화된 방식으로 표시할 수 있도록 새로운 뷰와 컨트롤을 만들어야 했다. 또한, 많은 표준 뷰와 컨트롤은 Mac OS X의 그것과 조금 다르게 행동해야 한다. 이러한 변화의 대부분은 명백하지만 몇몇은 데이터를 조직화하고 표시하는 방법에 대해 다시 한번 생각해야 한다.
iPhone OS의 이벤트 핸들링 모델은 기존 데스크탑 어플리케이션과 상당히 다르다. 기존의 마우스와 키보드 이벤트 대신에 iPhone OS는 터치 이벤트의 아이디어를 가져왔다. 터치 이벤트는 언제나 발생하고 하나 이상의 터치 이벤트가 혼합되어 발생할 수 있다. 터치는 아이템을 선택하거나 드래그하는 것과 같은 컨텐트와 간단하게 상호작용하는 것을 감지해내거나 swipe이나 pinch open/close 제스처와 같은 복자한 제스처와 인터랙션(예로, Photos에서 Zoom in/out)을 감지하는 데 사용될 수 있다.
어플리케이션의 기본 구조를 고려하는 것 이상으로, 사용자가 어떻게 실제로 사용할지에 대해 생각해야만 한다. iPhone 어플리케이션은 깨끗하고 사용자가 원하는 것에 즉시 집중할 수 있도록 해줘야 한다. 뭔가를 하고 있는 사용자는 정보를 빠르게 얻고 몇개의 화면을 거쳐 정보를 찾는데 시간을 소비하기를 원하지 않는다는 것을 명심해야 한다. 사용자가 원하는 키 정보를 하이라이트하는 단순한 레이어를 제공하는 것은 중요하다. 게임과 다른 재미 위주의 어플리케이션에서 개발자나는 사용자가 어플리케이션과 어떻게 상호작용하기를 원하지와 가속 센서나 카메라와 가은 기술을 사용하는 것에 대해 고려해야만 한다.
개발을 시작하면서 처음으로 사용하고 싶은 프레임워크는 Foundation과 UIKit 프레임워크다. 이 프레임워크는 모든 iPhone 어플리케이션에서 사용되는 키 서비스를 제공한다. 어플리케이션을 개량하면서 제공되는 서비스를 알아내기 위해 다른 프레임워크에 대한 투자를 해야 한다. 각 프레임워크에 대한 문서는 프레임워크를 배우고 사용하는 방법에 대한 관련된 컨셉 자료에 대한 ㄹ이크를 제공한다.
Foundation과 UIKit 프레임워크에 대한 정보는 Foundation Framework Reference와 UIKit Framework REference에서 볼 수 있다.

Where to Start
iPhone OS에서 실행되는 단순한 어플리케이션은 Xcode에서 제공하는 기본 프로젝트 템플릿을 사용하여 비교적 쉽게 만들 수 있으나 유용하고 멋져 보이는 어플리케이션을 만들기 위해서는 문서들을 읽는데 시간을 들여야한다. 최소한, iPhone Dev Center에 있는 도구 사용과 어플리케이션 생성 프로세스에 대한 정보가 있는 오리엔테이션 문서를 읽는데 시간을 들여야만 한다.
iPhone OS와 Mac OS X에 대해 아무것도 모른다면, 기본 디자인 패턴과 iPhone OS의 일반적인 규정을 이해하는데 시간을 들이는 것은 플랫폼에 맞는 코드를 작성하는데 매우 중요하다. 프레임워크가 제공하는 파워를 사용할 때 최고로 잘 돌아간다. 기본 프레임워크 행동을 피해가기 위해 노력하는데 시간을 쓴다면 어플리케이션을 만드는 것이 기본 디자인 패턴을 단순히 배우는 것보다 훨씬 어렵다는 것을 알게 될 것이다. Cocoa Fundamentals Guide에는 iPhone 개발자가 알아야할 모든 기본 정보가 있다. 이 문서는 Object-C 언어와 프로그램 관례 그리고 UIKit과 다른 시스템 프레임워크에서 사용되는 디자인 패턴을 포함하고 있다.
iPhone 어플리케이션을 만들기 위한 기본 관례를 이해하면 개발 프로세스에서 특정 부분을 상세히 알기 위해 iPhone OS Programming Guide를 참조할 수 있다. 이 문서는 사용자 인터페이스를 표현하는 예제, 이벤트 핸들링, 핵심 iPhone OS feature 사용을 포함한 아이폰 어플리케이션을 작성하는 방법에 대한 핵심 개념과 태스크 기반의 정보를 제공한다. 또한 전반적인 개발 프로세스를 기술하고 어플리케이션을 빌드하고 실행하는데 Xcode를 사용하는 방법에 대해 설명하고 있다.
iPhone OS Programming Guide뿐 아니라, 샘플 코드도 살펴봐야 한다. iPhone OS에는 실제 사용할 수 있는 어플리케이션을 만들 수 있는 어플리케이션을 사용하는 방법을 보여주는 모든 feature가 다 포함된 많은 샘플이 들어있다. 이러한 샘플을 자신만의 어플리케이션을 만드는 시작점으로 사용하거나 특정 feature를 사용하는 방법을 배우기 위해 살펴 볼 수 있다.

원본 : iPhone DevCenter, iPhone OS Overview

'Apple > Documentation' 카테고리의 다른 글

Learning Object-C: A Primer  (2) 2008/03/16
Tools for iPhone OS Development  (0) 2008/03/10
iPhone OS Overview  (0) 2008/03/09
Posted by 쟤시켜 알바
1. Mic(아이팟 터치 전용)
사용자 삽입 이미지
가격 : 45$/30$(완성품/DIY)
현재 판매중이나 어떻게 구입하는지 모르겠음;
출처 : http://cooing.kr/711

2. 스타일러스펜(pogo)
사용자 삽입 이미지
가격 : $24.95
출처 : http://blog.naver.com/likeraser/20044544899

3. GPS모듈
사용자 삽입 이미지
가격 : $89
2008년 2월 출시 예정
출처 : http://www.alonecrow.com/443

Mic은 사겠지만 GPS나 Stylus는 그다지 큰 필요가 없는 듯 하다.

아이팟 터치나 아이폰용으로 나온 전용 모듈이나 액서세리는 이게 다 인 것 같다. 나중에 더 찾아보고 있으면 추가해야지.(스킨 같은 것은 제외~)
Posted by 쟤시켜 알바
아이팟 터치 처음 구입했을 때는 자주 갔었는데 지금은 그다지 별로 가고 있지 않다.
내가 알고 있는 사이트는 아래 두 곳인데 320by480이 좀더 배경화면이 더 많고 보기에 편하게 되어있다.

320by480.com : http://www.320by480.com/
사용자 삽입 이미지

클릭하면 크게 볼 수 있다!


ThemeMyPhone : http://www.thememyphone.com/
사용자 삽입 이미지

클릭하면 크게 볼 수 있다!


Posted by 쟤시켜 알바
우리나라에서는 쓸일이 없긴 하지만 꽤 잘만든 것 같아서 소개해본다.

우리나라 지형에서는 길찾기 등의 기능을 사용할 수 없어서 미국의 지역을 활용해봤다.

지역명(여기서는 샌프란시스코)를 입력하면 아래와 같은 화면을 보여준다.
사용자 삽입 이미지

California St San Francisco... 말풍선을 클릭하면 아래와 같은 상세 정보가 나온다. 아래 이미지에는 나오지 않지만 마지막은 기존 주소록에 있는 사용자의 주소로 대치할 수 있는 메뉴가 있다.
사용자 삽입 이미지

기존 메뉴를 클릭하면 아래 화면과 같이 주소록에 등록된 사용자가 나온다.
사용자 삽입 이미지

사용자의 주소에 처음 화면에 있는 위치가 지정이 된다. 여기서 알 수 있는 것은 주소는 하나 이상 지정이 가능하다는 것이다.
사용자 삽입 이미지

특정 지역이 사용자에게 등록되면 아래와 같이 지역명이 아닌 사용자명으로 변경이 된다.
사용자 삽입 이미지

말풍선을 다시 클릭하여 두번째 화면의 direction 설정과 관련한 버튼을 클릭하면 아래와 같이 길찾기 기능이 제공된다. 이 예제 화면에서는 도착지역을 주소값으로 하고 출발지역을 직접 검색하였다.
사용자 삽입 이미지

검색을 하면 아래와 같은 형식으로 나타난다. 이는 웹상의 구글맵이나 야후맵과 동일하다.  아참, iPod touch와 iPhone에서 제공되는 맵은 야후! 맵이다. MacGeek Pro님께서 잘못된 부분을 바로 잡아주셨다. Google 맵이다.

사용자 삽입 이미지


위 화면의 우측 상단의 Start버튼을 클릭하면 아래와 같이  상세한 화면을 보여준다. 확인은 하지 못했는데 아래 화면의 우측 하단에 있는 자동차 그림은 아마 사람이 다닐 수 있는 길과 자동차가 다닐 수 있는 길을 구분하여 길찾기를 제공해주는 옵션이 아닌가 한다.(스크린샷을 찍으면서 확인했을 때는 길이 단순해서인지 둘다 동일한 루트를 제공했다.) 이부분도 잘못된 정보였는데 MacGeek Pro님께서  이 부분은 차량 정보량을 표시해주는 것이라고 바로잡아주셨다.
사용자 삽입 이미지

아래 동영상은 마지막 길찾기가 어떻게 진행되는지를 보여준다. 이미지로만 보여주면 설명이 잘 안되서 추가를 했다. 화질이 그다지 좋지 않지만 이해하는데는 지장이 없다.
Posted by 쟤시켜 알바