iPhone/팁&태크2009/03/07 09:35

   안녕하세요. 써드파티어플 소개, 그 세 번째 시간입니다. 오늘 소개해 드릴 써드파티어플은 유틸리티가 아닌 게임입니다. 써드파티어플이라고 해서 유틸리티만 있는건 아닙니다. 다양하게 즐길거리가 있는데요. 그 중 하나인 Osu 라는 게임을 소개하도록 하겠습니다. Osu는 닌텐도의 리듬히어로라는 게임을 떠올리게 합니다. 쉬운 게임 조작법으로 처음 사용하는 사람도 쉽게 게임을 즐길 수가 있습니다. 그럼 설치와 함께 게임을 즐겨보도록 하겠습니다.

   다음 그림과 같이 Cydia에서 Osu를 설치합니다.


사용자 삽입 이미지


   Osu를 실행시키면 먼저 게임을 할 노래를 다운로드 받아야 합니다. 게임 안에서 이것을 지원하고 있다는 것을 아래 그림을 통해 확인할 수 있습니다. 단 무선랜이 연결되어 있는 상태에서만 다운로드를 받을 수 있습니다.


사용자 삽입 이미지


   노래를 다운로드 받기 위해 Newest로 이동했습니다. 노래를 찾던 중 낯이 익은 노래제목이 보이길래 확인해보니 Wonder Girls의 So Hot 이었습니다. 노래를 선택해주면 바로 다운로드 받는 것을 확인할 수 있습니다. 아래 그림처럼 다운로드를 받은 후에는 현재 보유중인 노래가 목록으로 보여집니다. 그럼 노래를 실행시켜보겠습니다.


사용자 삽입 이미지


   노래를 선택하면 아래 그림과 같이 난이도에 따라 분류가 되어 있는 것을 볼 수 있습니다. 하나를 선택 후 다시 한 번 터치해주거나 Osu를 터치해주면 게임이 시작됩니다.



사용자 삽입 이미지


   아래는 제가 노래를 끝내고 나서 얻은 점수입니다. 가장 쉬운 난이도의 노래를 했음에도 불구하고 저는 C를 받았습니다. 물론 노래가 다 어려운것만 있는 것은 아닙니다. 적당히 즐길 정도의 난이도를 가진 노래도 많습니다.



사용자 삽입 이미지


   다른 여러가지 노래를 들으면서 게임도 할 수 있어서 재밌는 게임이라고 생각합니다. 다만 단점이 있다면 어느 어플리케이션이나 마찬가지겠지만 무선랜이 연결되어 있는 상태에서만 노래를 다운로드 받을 수 있다는 것입니다. 하지만 다른 여러가지 노래들도 다운로드받아서 즐겨보니 기다리는 시간이나 전철을 타고 이동할 때 등 시간을 때우기에 좋은 게임 같았습니다. 노래의 종류로는 pop, Jpop을 포함해서 보아, 클래지콰이 같은 한국가요도 다수 찾아 볼 수 있었습니다. 저 같은 경우에는 모르는 노래보다 알고 있는 노래로 게임을 하니 더욱 재미있었습니다. 닌텐도의 리듬히어로를 부러워 하는 분들이 계셨다면, 저는 그런분들께 Osu를 추천하고 싶습니다. 감사합니다.
Posted by 뽀뎅

Leave your greetings.

  1. find cheap <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban aviator</strong></a> products on the <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban sunglasses</strong></a> store, then you can see the fashion <a href="http://www.echeapraybansunglasses.com/"><strong>aviator sunglasses</strong></a>, enjor to buy <a href="http://www.echeapraybansunglasses.com/"><strong>raybands</strong></a> gooo.

    2011/10/20 11:41 [ Permalink : Modify/Delete : Reply ]
  2. new style <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban 2140</strong></a> sunglasses and <a href="http://www.echeapraybansunglasses.com/"><strong>ray bans outlet</strong></a> on there, people like cool <a href="http://www.echeapraybansunglasses.com/"><strong>ray ban 3025</strong></a>, no sunlight that buy <a href="http://www.echeapraybansunglasses.com/"><strong>aviator sunglasses for men</strong></a> nice.

    2011/10/20 12:24 [ Permalink : Modify/Delete : Reply ]

iPhone/팁&태크2009/03/05 19:47
아이폰 앱스토어에 자신이 만든 어플리케이션을 올리기 위한 iPhone Developer Program이라고 부르는 개발자 등록 과정에 대해 간단하게 알아보도록 하겠습니다.

http://developer.apple.com/iPhone/program 에 방문하여 Learn More를 클릭하면 곧바로 가입화면을 볼 수 있습니다.
사용자 삽입 이미지
Standard Program과 Enterprise Program 두가지를 보실 수 있는데요, 우리가 알고 있는 일반적인 개발자 프로그램은 Standard Program입니다.

밑의 Enterprise Program의 경우 Adhoc Distribution(예를 들어 택배회사에서 자사의 택배관리 프로그램을 개발하여 아이폰을 전직원들에게 배포할 경우 회사 내부의 배포가 가능해야 겠죠)을 지원하지만 이것이 필요한 회사는 국내실정에선 없을것 같군요.
사용자 삽입 이미지
Standard Program을 선택하더라도 개인(Individual)과 회사(Company)를 선택할 수 있습니다.

회사의 경우 영문 사업자 등록증을 팩스로 보내야 하는 등의 좀더 복잡한 절차가 기다리고 있습니다.

우리는 회사입장에서 진행해 보도록 하겠습니다.
사용자 삽입 이미지
조금 싱겁게 등록이 끝나버렸군요. 몇일후에 애플쪽에서 컨텍을 할테니 iPhone Dev Center 에서 개발 연습이나 하고 있으라는 군요.

사용자 삽입 이미지
약 1주일 전후로 위와 같은 메일이 도착합니다. License Agree를 요청하는 메일이죠.

이후에 따로 회사로 연락이 옵니다. 간단한것 몇가지 묻고 사업자 등록증을 팩스로 보내달라고 합니다.

국제 팩스를 보내셔야 합니다. 필요한 경우 등록한 개발자와 통화를 요청할 때도 있습니다.
사용자 삽입 이미지
제가 Development Kit 구매화면을 캡춰하지 못해 구매완료 화면으로 대신합니다.

이후에 구매 가능한 링크의 주소를 보내줍니다. 99$ 결재하시면 됩니다.
사용자 삽입 이미지
구매 완료후에는 위와같이 Activation 코드를 보내옵니다. 해당 코드로 계정을 활성화 할 수 있습니다.
사용자 삽입 이미지
모든 것이 완료된 이후의 환영 메일이군요^^

Posted by 아이

Leave your greetings.

  1. 방문자

    안녕하세요? 작성해주신 글 잘 보았습니다.
    회사 입장에서 개발자 등록 글을 써주셔서 한가지만 물어볼게요.
    제가 다니는 회사에서도 아이폰 개발자 등록을 하려고 하는데요.
    스탠다드 계정 1개(99$)로 회사 전체 개발자가 계정을 사용할 수 있는것일까요?

    2010/03/11 11:46 [ Permalink : Modify/Delete : Reply ]

iPhone/팁&태크2009/03/05 19:47
   *알려드립니다! 이 게시물은 해킹에 성공한 iPod touch에만 적용되는 것이므로 그렇지 않은 iPod touch유저분들의 오해가 없으시기 바라면서 글을 시작하겠습니다.

   오늘부터 써드파티어플(Cydia 어플리케이션)중 한 가지를 선택해서 소개해드리는 시간을 갖도록 하겠습니다. 이번 시간에는 WinterBoard라는 테마변경 써드파티어플을 소개하겠습니다. WinterBoard는 iPod touch의 테마를 변경시켜주는 써드파티어플 입니다. 자기의 입맛대로 테마를 꾸밀 수 있다는 장점이 있어서 많은 iPod touch 해킹 유저들이 애용하는 써드파티어플 중 한가지이기도 합니다. 자 그럼 다 같이 설치를 시작해 볼까요?

   먼저 다음 그림과 같이 Cydia에서 WinterBoard를 설치합니다.


사용자 삽입 이미지
 
   그리고 컴퓨터와 iPod touch를 연결해주시고 아래의 경로에서 다운받은 TouchExplorer를 실행시켜줍니다. 초기 실행화면은 다음 그림과 같습니다. 단, net framework 2.0 이상이 컴퓨터에 설치되어 있지 않다면 응용 프로그램 오류 창이 뜨니 다음의 경로에서 다운로드 받아 설치해주세요.
TouchExplorer :


net framework : http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe


사용자 삽입 이미지

   이제 받아놓은 테마를 해당 경로에 넣을 차례인데요. 아래의 경로로 찾아가봅시다.
   /private/var/stash/Themes.******** (* 표시 되어 있는 부분은 iPod touch마다 다르니 Themes까지 찾아가시면 됩니다.) 받아놓은 테마를 드래그해서 통째로 넣어주시면 됩니다. (만약 압축이 되어 있으면 풀어서 넣어주세요.) 저는 '박보영'씨의 테마를 넣어보았는데요. 아래 그림과 같이 테마가 들어간 걸 보실 수 있습니다. (한글명일 경우 자음과 모음이 분리되지만 신경쓰지 않으셔도 됩니다.)


사용자 삽입 이미지

   '박보영'씨 테마의 폴더로 접근하면 아래와 같이 Icons와 Dock, Wallpaper 3가지로 구성되어 있는 걸 보실 수 있습니다.


사용자 삽입 이미지

   이제 적용을 시켜 볼 차례입니다. Cydia를 통해서 설치한 WinterBoard를 실행시킵니다. 저장한 '박보영'씨 테마를 선택해서 체크해줍니다. 아래 그림까지 되셨다면 Home버튼을 누릅니다.


사용자 삽입 이미지

   Home버튼을 누르고 잠시 대기하면 iPod touch가 새로 Loading되면서 전체적으로 아래 그림처럼 테마가 바뀌어 있는 것을 보실 수 있습니다.


사용자 삽입 이미지

   만약 배경화면을 변경하고 싶으시다면 미리 여러 개의 사진을 넣어둔 뒤에 이름만 Wallpaper로 바꿔주시거나 그때그때 iPod touch를 다시 컴퓨터와 연결하시고 TouchExplorer를 실행시킨뒤에 테마의 경로로 접근하신뒤에 원하는 사진을 넣으시면 됩니다. (jpg사진도 가능하니 참고하세요.)

   지금까지 WinterBoard를 설치하고 테마를 변경하는 과정까지 차례대로 진행해보았습니다. 제가 좋아하는 사람의 사진이나 예쁜 아이콘으로 꾸미니 iPod touch를 더 즐기고 싶은 마음이 들더군요. 갖가지 어플리케이션을 설치해서 써보는 재미도 있구요. 자기만의 iPod touch를 꾸미기 위해 작은 도전을 해보는 것도 좋을 것 같다는 생각이 듭니다. 혹시 진행 과정 중 혼란이 가는 부분이 있다면 추가/수정하도록 하겠습니다. 감사합니다.
Posted by 뽀뎅

Leave your greetings.

iPhone/팁&태크2009/03/05 19:47
이번에는 Object-C의 Property에 대해서 이야기를 해볼까 합니다.

어떻게 보면 조금 필요없어 보일수도 있고 어찌보면 MVC(Model, View, Controller)개발 기법과도 밀접한 연관이 있어 보입니다.

하지만 일반적으로 MVC개발에서도 setter/getter로 구성 된 도메인 객체를 따로 두고 있듯이 Object-C에서도 역시 비슷한 구현을 할 수 있는것 같습니다.

Object-C에서 일반적으로 객체의 Property에 접근하기 위해서는 한쌍의 접근자 메서드(getter/setter)를 사용합니다.

이 메서드들을 사용함으로써 객체지향 프로그래밍의 캡슐화(Encapsulation)에 더욱 충실 할 수 있습니다.

관련된 자료는 Object-Oriented Programming with Objective-CMechanism Of Abstraction을 찾아보라고 하는군요.

Property를 정의함으로써 효과적으로 접근자 메서드들을 간략화 시키는 효과를 가져올 수 있습니다.

Property를 사용하기 위해서 일반적으로 @property 지시자와 @synthesize 지시자를 함께 사용합니다.

@property 지시자는 클래스의 @interface 내부에 선언하며 다음과 같은 형식으로 선언합니다.
@property(attributes) type name;

하나의 Property 선언은 두개의 접근자 메서드와 동일한 기능을 갖습니다.
@proprty float value;

위의 선언은 다음과 같이 두가지 메서드를 선언한것과 같은 기능을 하게 됩니다.
- (float)value;
- (void)setValue:(float)newValue;


@property 지시자의 attributes 에는 다음과 같은 정의를 할 수 있습니다.

getter=gettername
기본적으로 Property의 getter 메서드 명은 Property 자신의 이름과 동일 (예 : Property가 foo일 경우 foo)
하지만 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

setter=settername
Property의 setter 메서드 명은 setPropertyName: 입니다. (예 : Property가 foo일 경우 setFoo:)
역시나 이 기본 설정을 내가 원하는 메서드명으로 변경 할 수 있습니다.

readwrite (DEFAULT)
Property의 값을 읽고 쓸 수 있다는 것입니다. 이 설정은 기본 설정입니다.

readonly
Property의 값을 단지 읽기만 할수 있다고 정의하는 속성입니다.
이 속성은 @implementation 블럭 안에서 오로지  getter 메서드만 필요할 경우에 사용합니다.
@synthesize 지시자를 사용하였을 경우에는 역시나 getter 메서드의 역할만을 하게 됩니다.
값을 대입 하려고 할 경우 에러를 출력하게 됩니다.

assign (DEFAULT)
단순하게 값을 대입합니다. 기본설정입니다. 이전에 어떤 객체를 가리키고 있던 Property라면 이로 인해 해당 객체는 미아가 되어 메모리릭의 주범이 될 수 있습니다. 가비지콜렉터를 사용하지 않는다면 사용을 피해야 합니다.

retain
이것은 assign과 비슷하지만 조금 다릅니다. 이전에 가리키고 있던 객체가 있다면 해당 객체를 Release하여 메모리에서 제거 합니다. 가비지콜렉터를 사용한다면 결과적으로 assign과 동일한 결과를 가지겠지만 좀더 명시적으로 사용해 주면 좋을것 같습니다.

copy
객체를 바로 대입하지 않고 해당 객체의 복사 메서드를 Invoke호출합니다.
그리하여 다른 메모리 영역에 복사본을 만든 다음 그것을 반환하게 됩니다. 이전에 가리키고 있던 값은 Release 시킵니다.

nonatomic
이 속성은 접근자 메서드가 Atomic 하지 않게 동작하게 합니다(?). 기본적으로 접근자는 Atomic하게 동작합니다.
Atomic이라는 말은 멀티스레드 등으로 구성된 프로그램이 특정 접근자 메서드를 호출할때 서로 충돌이 나지 않도록(보통 세마포어니 크리티컬섹션이니 하는 말들 들어보셨을겁니다.) 객체 레벨에서 Lock을 걸고 Property에 접근하게 되는데요 매우 좋은 이야기지만 접근할때 마다 Lock을 걸고 다시 푸는 작업이 반복되므로 퍼포먼스를 떨어뜨리는 결과를 가져오게 됩니다.
이런 접근이 필요없다면 이 속성을 사용하여 Non-Atomic하게 동작하도록 만들어 주시는 것이 좋습니다.

이제 Property에 대해 거의 모든것을 알게 된것 같네요. 이제 예제를 한번 볼까요?
@interface MyClass : NSObject {
NSString *value;
}
@property(copy, readwrite) NSString *value;
@end

@implementation MyClass
@synthesize value;
@end

value라는 이름의 Property의 getter 메서드 명은 value이고 setter 명은 setValue입니다.

값을 대입할때 복사가 일어나고 읽고 쓰기를 할 수 있습니다. 또한 nonatomic 속성이 없으니 atomic하게 동작하겠군요.

마지막으로 Property를 사용할때 주의사항이 한가지 있습니다.

객체가 제거 될때 소멸자로 dealloc이 호출되는데 Property들이 자동으로 소거되지 않아 명시적으로 제거해 주셔야 합니다.
- (void)dealloc {
[property release];
[super dealloc];
}


이글은 http://theeye.pe.kr/entry/iPhone-Object-C-Declared-Properties 에서도 볼 수 있습니다.
Posted by 아이

Leave your greetings.

iPhone/팁&태크2009/03/05 19:08
Object-C 2.0에 들어 열거형 변수를 좀더 효과적이고 안전하게 사용하기 위해 for 문법이 업그레이드 되었습니다.

이것을 보고 이름하여 Fast Enumeration 이라고 부르는군요. PHP나 Ruby등에서 볼수 있는 foreach와 같은 기능입니다.

일반적인 C에서의 구현에 비해서 매우 편리하게 반복문을 작성할 수 있습니다. 문법은 다음과 같습니다.
// one
for ( Type newVariable in expression ) { statements }

// two
Type existingItem;
for ( existingItem in expression ) { statements }

사용 예제를 보시면 바로 이해가 되실 것입니다. 예제를 보실까요.

NSArray
NSArray *array = [NSArray arrayWithObjects:@"One", @"Two", @"Three", @"Four", nil];
for (NSString *element in array) {
NSLog(@"element: %@", element);
}
// element: One
// element: Two
// element: Three
// element: Four

NSDictionary
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];
NSString *key;
for (key in dictionary) {
NSLog(@"English: %@, Latin: %@", key, [dictionary valueForKey:key]);
}
// English: four, Latin: quattuor
// English: five, Latin: quinque
// English: six, Latin: sex

NSArray - nextObject
NSArray *array = [NSArray arrayWithObjects:@"One", @"Two", @"Three", @"Four", nil];
NSEnumerator *enumerator = [array reverseObjectEnumerator];
for (NSString *element in enumerator) {
if ([element isEqualToString:@"Three"]) {
break;
}
}
NSString *next = [enumerator nextObject];
// next = "Two"

안타깝게도 인덱스가 필요하다면 따로 제공하는것이 없어 다음과 같이 사용하셔야 합니다.
NSArray *array = /* assume this exists */;
NSUInteger index = 0;
for (id element in array) {
NSLog(@"Element at index %u is: %@", element);
index++;
}


예제만으로도 충분히 만족감을 주는 간단한 내용이었습니다.

이글은 http://theeye.pe.kr/entry/Object-C-Fast-Enumeration 에서도 볼 수 있습니다.
Posted by 아이

Leave your greetings.

iPhone/팁&태크2009/03/05 19:08

개발자 프로그램에 등록하였다면 이제 자신의 아이폰(아이팟 터치)에 자신이 만든 어플을 올릴 수 있게 됩니다.

그런데 저는 무언가 간단한 작업이라고 생각했었는데 정말 복잡한 문제더군요.

우선 iPhone Dev Center에 방문하여 로그인을 해봅시다. 예전과는 조금 다른 화면을 보실 수 있습니다.

사용자 삽입 이미지
Apple Developer Forums이라는게 보이는군요. 중요한 Program Portal이라는 것이 오른쪽에 보입니다.

그곳이 아이폰 개발관련 포털 서비스를 제공하는 곳입니다.

1. 개발자 추가 등록

그곳에서 바로 다른 개발자를 등록해 보도록 하겠습니다. Team이라는 메뉴로 들어갑니다.
사용자 삽입 이미지
오른쪽의 Add Member를 클릭하면 사용자를 추가하는 창이 뜨게 됩니다.
사용자 삽입 이미지
이름을 입력하고 Email에는 실제로 초대장이 날라갈 이메일 주소를 적어주시면 됩니다. Role에는 일반 멤버와 관리자를 정할 수 있습니다.

2. 인증서 등록

이번에는 인증서 등록을 위해 Certificates 메뉴로 들어가 봅시다. 아래의 그림에서 표시한 download now를 클릭하여 Apple Worldwide Developer Relations Certification Authority를 설치합시다.
사용자 삽입 이미지
설치시에는 위의 그림과 같이 3가지 모두다 체크를 해줍시다.
사용자 삽입 이미지
이제 개인 키페어를 생성하기 위해 유틸리티 - 키체인 접근 메뉴에 들어갑니다.
사용자 삽입 이미지
키체인 접근 - 인증 지원 - 인증기관에서 인증서 요청
메뉴에 들어갑니다.
사용자 삽입 이미지
위와 같이 체크를 하여줍니다. 사용자 이메일 주소에는 Apple Developer Connection에 등록한 이메일을 공통 이름에는 맥의 내 계정에 등록한 이름으로 동일하게 작성해 줍니다.

CA 이메일 주소는 아무것도 쓰지 않습니다.
사용자 삽입 이미지
키페어 정보는 위와같이 하시면 됩니다. 기본적으로 위와 같이 설정됩니다.
사용자 삽입 이미지
위와 같이 하면 인증서 파일(공개키)이 생성됩니다. 이것을 Certificates 메뉴의 Request Certificate를 눌러 위와같은 화면이 뜨면 파일을 선택하여 등록하여 줍니다.
사용자 삽입 이미지
등록이 되면 ActionApprove가 뜹니다. 그것을 눌러줍니다.
사용자 삽입 이미지
위의 그림과 같이 Download버튼이 생겨납니다. 해당 버튼을 누르면 생성된 나만을 위한 인증서를 다운받을 수 있습니다.
사용자 삽입 이미지
다운받은 인증서를 추가합니다. 키체인에는 로그인만 있으면 됩니다.
사용자 삽입 이미지
잘 추가되었군요. iPhone Developer : 이름이 추가되어있으면 정상적으로 된것입니다.

3. Device 등록

이제 XCode에서 Windows - Organizer를 띄웁니다. 연결했던 나의 아이팟 정보가 뜨게 됩니다. 선택해 봅시다.
사용자 삽입 이미지
위와 같이 Identifier에 40자리의 Hex 코드가 있습니다. 그것을 복사합니다.
사용자 삽입 이미지
Device 메뉴에 들어가서 Add Devices를 클릭합니다. 위와 같은 화면에서 디바이스의 명칭을 정하고 Device ID에는 아까 복사한 40자리 코드를 붙여넣기 합니다.

4. App ID 등록

이제 App ID를 등록할 차례입니다. 이곳에서 많은 분들이 헤매시고, 저역시고 헤매었고; 어려운 부분입니다.
사용자 삽입 이미지
App ID Name
에는 그냥 Program Portal에서 사용하는 식별자라고 생각하시면 됩니다. 별 의미 없으니 뒤의 Identifier에 지정할 내용의 별칭을 지정해 주시면 됩니다.

뒤의 App ID가 조금 중요한 부분인데, Bundle Seed IDBundle Identifier를 합쳐서 App ID가 되게 됩니다.

Bundle Seed ID는 자동 생성 되는것이므로 신경 쓰지 마시고 Bundle Identifier가 중요한데요.

보통은 도메인을 뒤집어 사용합니다. apple.com의 경우 com.apple.*을 사용하게 됩니다.

이는 com.apple 이하의 모든 Bundle Identifier를 허가한다는 뜻입니다. 이런 설정이 귀찮으시다면 *하나만 달랑 써주시면 어떤 경로던지 허가가 되게 됩니다.
사용자 삽입 이미지
등록이 완료된 모습입니다. ID에 보면 XXXXXX.com.apple.* 과 같이 등록된 것을 알 수 있습니다.

여기서 중요한것은 어플리케이션을 만들때 앞의 XXXXXX부분의 코드를 사용하지 않는다는 것입니다.

5. Provisioning 등록
이제 Provisioning을 설정할 때입니다. 공급쯤으로 이해하면 될까요?
사용자 삽입 이미지
Profile Name
을 정하고 자신에게 해당하는 인증서와 생성해둔 App ID 및 등록했던 Device를 선택합니다.
사용자 삽입 이미지
이제 거의 마무리 단계군요. 이제 지금까지 생성했던 나의 계정 + 인증서 + 디바이스 + App ID가 모두 짬뽕된 Provisioning Profile을 다운 받을 수 있습니다.
사용자 삽입 이미지
이 다운 받은 파일을 Organizer 창의 Provisioning 부분에 드래그하여 끌어다 놓습니다.

6. 내 아이폰(아이팟 터치)에 프로그램 올려보기

사용자 삽입 이미지
XCode에서 보시다 시피 왼쪽 위의 창을 Device로 바꿔 줍니다. 그리고 Group&Files창의 프로젝트명을 선택한 상태에서 오른쪽 위의 Info를 클릭합니다.
사용자 삽입 이미지
Build
탭에서 Code Signing Identity의 하위 메뉴인 Any iPhone OS Device에서 내가 등록한 Provisioning Profile을 선택합니다.
사용자 삽입 이미지
Info.plist
파일을 열어 Bundle identifier부분을 App ID에서 등록했던 내용으로 수정하여 줍니다.

App IDXXXXXX.com.apple.* 이었다면 com.apple로 시작하는 어떤 값의 Identifier도 가능하다는 뜻입니다.

위의 값으로는 com.apple.${PRODUCT_NAME:identifier} 로 하면 자동으로 com.apple.HelloWorld(프로젝트명) 가 사용되게 됩니다.
사용자 삽입 이미지
참고로 위의 창을 띄우기 위해서는 Targets안의 내 프로젝트 명을 더블 클릭하여도 됩니다.

이제 마지막으로 실행을 위해 Build&Go를 클릭하면 내 디바이스에 업로드 되어 실행되는 것을 볼 수 있습니다.

* 마치며

위와 같은 과정을 거쳤음에도 인증 문제를 만나는 경우가 있었습니다.

보통은 App ID와 프로젝트의 Bundle Identifier가 불일치 해서 오는 문제였으며 이 문제는 인증서 부분과 App ID등록 부분을 잘 해보면 해결이 되는 문제입니다.

하지만 모든것이 완벽하여 XCode상에서 에러가 발생하지 않지만 인증 문제를 내뱉는 경우가 있습니다.

이때는 공장초기화를 해주고 아이튠즈에 다시 싱크를 해주니 잘 되더군요. 최악의 경우에는 초기화를 해보시기 바랍니다.

새로운 개발자를 등록하였다면 어떻게 해야 할까요?

위의 과정에서 1, 2, 3, 5를 반복하여 Provisioning Profile을 생성해 주면 됩니다.

App ID를 아무래도 같은 팀이라면 공유하는게 좋겠죠.

Posted by 아이

Leave your greetings.

iPhone/팁&태크2009/02/27 20:57

   안녕하세요. 써드파티어플 소개, 그 두 번째 시간입니다. 오늘 소개해 드릴 써드파티어플은 MxTube입니다. Mxtube는 유튜브 동영상을 검색해서 실시간으로 볼수 있고 원하는 동영상을 터치 내로 다운로드 할 수 있는 기능을 가진 어플리케이션입니다. 그럼 지금부터 설치를 시작해보도록 하겠습니다.

   다음 그림과 같이 Cydia에서 MxTube를 설치합니다.


사용자 삽입 이미지

   MxTube를 실행하면 다음과 같은 화면을 볼 수 있습니다.


사용자 삽입 이미지

   이제 Search로 들어가서 원하는 동영상을 찾아보겠습니다. 전 요즘 소녀시대의 태연씨가 귀여워 보여서 '태연'으로 검색해보았습니다. 다음 그림과 같이 여러가지 동영상이 검색되는 걸 확인할 수 있습니다.


사용자 삽입 이미지

   검색된 결과 중에서 하나를 선택하면 위의 그림에서 보는 것과 같이 Stream을 할 것인지 Download를 할 것인지 묻는 창이 나옵니다. 전 바로 Download를 선택해 보겠습니다. 아래 그림에서 보는 것처럼 여러가지 선택사항들이 보입니다. 전 이중에서 High(Wifi)를 선택해서 다운로드를 받아보겠습니다. 선택을 하게되면 아래 그림처럼Downloads에 빨간색으로 1이라는 숫자가 표시되는 것을 볼 수 있습니다. 현재 다운로드 하고 있는 항목이 1개 있다는 것을 말해줍니다. Downloads에 들어가면 현재 다운로드중인 동영상을 볼 수 있습니다.


사용자 삽입 이미지

   다운로드가 완료되면 아래 그림처럼 Videos에 저장된 동영상이 나열되어 있는 것을 볼 수 있습니다. 이 동영상이 저장되는 경로는 private/var/mobile/media/mxtube/ 이니 컴퓨터에 저장하고 싶다면 이 경로로 찾아가서 복사를 해주시면 되겠죠?

     
사용자 삽입 이미지


   이 어플리케이션은 소장하고 계속 보고 싶은 동영상을 쉽게 iPod touch에 저장하고 무선랜이 되지 않는 곳에서도 저장해놓은 동영상을 볼 수 있다는 장점이 있습니다. 또 이 어플리케이션을 이용하여 동기화과정이 필요한 아이튠즈를 쓰지 않고 MxTube 동영상이 저장되는 경로에 바로 보고 싶은 동영상을 집어넣어서 볼 수도 있습니다. 저 같은 경우는 춤을 배우고 싶을 때 이 어플리케이션을 유용하게 쓰고 있답니다. 요즘 예뻐보이는 소녀시대 태연씨의 노래를 제 iPod touch에 넣어두고 자주 듣고 볼 수 있으니 여간 좋은게 아닌 것 같네요. 여러분들도 한 번 써보시길 권장합니다. 감사합니다.
Posted by 뽀뎅

Leave your greetings.

iPhone/팁&태크2009/02/14 16:17

   2월초부터 iPod touch 2G 해킹 Lite version의 등장으로 인해 각 커뮤니티 사이트들이 들썩였습니다. 실시간 접속자수는 평소의 수 배에 달할 정도였고, 올라온 강좌를 보며 해킹을 시도하는 사람들로 커뮤니티 사이트는 북새통을 이루었습니다. 왜 사람들이 해킹에 이렇게 관심을 보이는지, 그 이유와 현재 나와 있는 몇 가지의 해킹 방법을 소개하겠습니다.

   2007년 6월 무렵 iPhone 2G가 출시되었고, 2007년 9월 무렵 iPod touch 1G가 출시되었습니다. (앞으로는 부르기 쉽게 iPhone은 아이폰으로 iPod touch는 터치로 부르겠습니다.) 그 당시에는 현재와 같은 App Store가 존재하지 않았기 때문에 원하는 어플리케이션을 설치할 수 없었습니다. 버전이 업그레이드 되면서 몇 가지의 어플리케이션이 추가되었습니다만 아이폰 사용자는 무료로 사용할 수 있었던것에 반해 터치 사용자는 새로 나온 어플리케이션을 9.99달러를 주고 사야만 했습니다. 또 사용자가 원하는 기능이 충분히 제공되지 않았고, 사용자들은 이런 훌륭한 하드웨어에서 다양한 소프트웨어를 사용하지 못하는 것을 안타깝게 여겼습니다. 이런 이유들로 인해서 그때 당시의 해킹을 통해 다양한 소프트웨어를 설치하려는 시도를 하게 됩니다. 터치 2G(2.0 버전)이 나오기 전에는 한글 입력이 지원 되지 않아서 해킹을 통해서 한글 입력이 가능하도록 만들기도 했습니다. 이것은 한국 사용자들에게는 더욱 더 절실했었습니다.

   이런 사용자들의 큰 니즈에 따라, 해커라 불리우는 사람들과 프로그래머들은 '자일 브레이크'(소위 말하는 해킹)를 통해서 아이튠즈 외의 방법을 통해서는 접근이 불가능한 메모리 영역의 접근이 가능하게 했습니다. 해킹후에는 Installer나 Cydia라는 특수한 어플리케이션을 설치할 수 있었습니다.


   하지만 이러한 해킹 추세에도 큰 변수가 찾아왔습니다. 2008년 6월 무렵 아이폰 3G와 터치 2G(2.0 버전)이 출시된것과, App Store의 시작입니다. App Store의 출시로 인해 해킹없이도 좋은 퀄리티의 게임과 어플리케이션의 설치가 가능해졌습니다.



사용자 삽입 이미지


   이제 해킹을 하지 않아도 수많은 어플리케이션을 설치할 수 있게 해준 App Store의 등장은 해킹의 의미 자체에 영향을 주었습니다. 단순히 App Store 출시 허가를 받지 못한 어플리케이션을 깔기 위한 수단이 되었고, 크랙된 불법 어플리케이션을 사용하기 위한 경로로 그리고 정상적인 방법으로는 할 수 없는 바탕화면 바꾸기라던가, 테마 적용 등을 위해 해킹을 시도하고 있습니다.

다음은 해킹을 통해 바탕화면의 테마를 바꾼 모습입니다. 정상적인 방법으로는 이런 것을 할 수 없습니다.

사용자 삽입 이미지

폴더 기능도 기본적으로 제공되지 않지만, 해킹을 통해서는 가능합니다.

사용자 삽입 이미지


   그럼 이번에는 많은 해킹 방법 중, 잘 설명되고 초보자도 조금만 이해하고 숙지하면 해킹할 수 있는 두 가지의 해킹 방법을 제공하는 사이트를 정리해보겠습니다.


1. EasyHacker2.0 쉽게 해킹&부팅 하기 코드삽입필요없음 (2.1패치!!필요!!)(xp전용)
[출처] EasyHacker2.0 쉽게 해킹&부팅 하기 코드삽입필요없음 (2.1패치!!필요!!) (아이팟터치 유저들의 공간) | 작성자 생명의힘(queenyjina) | http://cafe.naver.com/appletouch.cafe?iframe_url=/ArticleSearchList.nhn%3Fsearch.clubid=14817810%26search.searchtype=1%26search.query=해킹%20이유%26search.articlemedia=0%26search.sortby=date%26search.searchdate=all%26search.page=5


사용자 삽입 이미지

사이트 특징
ㄱ. 각각의 절차에 대한 사진과 설명을 착실하게 담았다.
ㄴ. 사용자의 조작을 최소화했다.
ㄷ. 동영상 강의를 이용하여 혼란이 갈 수 있는 부분에 대해 쉽게 설명했다.


2. redsn0w GUI 버전
[출처] redsn0w GUI 버전(아이팟터치 유저들의 공간) | 작성자 조리뽕(misoro_) | http://cafe.naver.com/appletouch.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=229320




사용자 삽입 이미지


특징
ㄱ. 콘솔창이 아닌 그래픽을 가지고 설명함으로써 사용자의 이해를 도왔다
ㄴ. 사용자의 조작을 최소화했다.
ㄷ. 한국어버전이 아니라는 점이 아쉽다. 하지만 해킹에 관심이 있다면 각각의 메뉴가 무엇인지는 한 눈에 알아볼 수 있다. 또, 1번 방법과는 다르게 DFU모드로의 진입에 대한 설명이 조금 부족하다.


마치는 글.
   자일 브레이크(해킹)는 불법이 아닙니다. (배포와 하는 행위 모두) 하지만 크랙 어플리케이션을 쓰는 것은 불법입니다. 아직도 많은 곳에서는 자신만의 아이폰/터치를 만들어서 사용하기를 원하는 순수한 사용자들이 많고 App Store에서는 접할 수 없는 갖가지 기능의 어플리케이션이 존재하기 때문에 해킹이 무조건 나쁘다고 할 수는 없을 것 같습니다. 하루 빨리 Apple에서 어플리케이션에 대한 개발자들의 '창작의 자유'를 무한으로 확장 시켜주어 사용자들의 선택의 범위를 넓혀주었으면 좋겠습니다. 하지만 해킹은 시스템 고장의 큰 원인이 될 수 있기 때문에 가급적이면 크랙 어플리케이션의 사용은 자제하고 정상적인 사용을 해야 할 것입니다.
   다음에는 써드파티어플을 소개해드리도록 하겠습니다. 감사합니다.

ps. 네이버 '아이팟터치 유저들의 공간' 카페의 별빛속에(339kio)님의 글에서 상당부분 발췌했습니다. 감사드립니다.

Posted by 뽀뎅

Leave your greetings.

iPhone/팁&태크2009/02/14 04:16


Object-C 에서의 메서드 구현에는 정확히 딱 두가지가 있는것 같습니다.

바로 Class Method와 Instance Method인데요. 이 두가지 메서드는 Java로 따져보면 static 메서드와 일반 메서드로 구분될 수 있겠다고 생각합니다.

우선 테스트 코드를 작성하기 위해 Mac OS X이하의 Command Line UtilityFoundation Tool 프로젝트를 생성합니다.

보통 C++하실때 보는 콘솔 어플리케이션쯤으로 생각하시면 되겠네요.

우선 MethodTest라는 Object-C 클래스를 추가합니다.

MethodTest.h
#import <Cocoa/Cocoa.h>

@interface MethodTest : NSObject {

}
+ (void)printWithClassMethod;
- (void)printWithInstanceMethod;

@end

MethodTest.m
#import "MethodTest.h"

@implementation MethodTest

+ (void)printWithClassMethod {
NSLog(@"Running with class method");
}
- (void)printWithInstanceMethod {
NSLog(@"Running with instance method");
}

@end

이제 main 함수에 다음과 같이 기록해 봅시다.
#import <Foundation/Foundation.h>
#import "MethodTest.h"

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

// insert code here...
[MethodTest printWithClassMethod];
MethodTest *mt = [MethodTest alloc];
[mt printWithInstanceMethod];

[pool drain];
return 0;
}

감이 오시나요? printWithClassMethod는 클래스를 인스턴스화 하지 않고도 호출할 수 있는 메서드입니다.

하지만 printWithInstanceMethod는 꼭 초기화 된 상태에서 호출해야만 하죠.

이를 자바로 한번 풀어보면 다음과 같겠죠.
class MethodTest {
public static void printWithClassMethod() {
System.out.println("Running with class method");
}
public void printWithClassMethod() {
System.out.println("Running with instance method");
}
}

Class Method와 Instance Method의 차이 이해 되시죠? ^^

Posted by 아이

Leave your greetings.

iPhone/팁&태크2009/02/14 04:14






 

Object-C의 특별한 문법 때문에 처음 접근이 어려우신 분들을 위해 간단하게 문법을 비교하여 보았습니다.

Messages
일반적으로 객체의 메서드를 호출하는 것을 Object-C에서는 메세지라고 표현합니다.

특정 객체의 메서드를 호출하는데 Java나 C++에서는 다음과 같이 표현합니다.

// Java
obj.method(parameter);

// C++
obj->method(parameter);

하지만 Object-C에서는 다음과 같이 표현합니다.
// Object-C
[obj method:parameter];

처음 볼때는 정말 어색했는데 자꾸 보다 보니깐 이제 좀 괜찮은거 같습니다. 오히려 소스코드를 볼때 메서드라고 확 튀어 보이니 더 좋은것 같기도 하네요.

Interface
Object-C에서 말하는 Interface 지시자는 Java나 C++에서 말하는 Class를 뜻합니다. 정확히는 선언부분만이라고 말해야겠군요.

좀더 정확히 말해보자면 메서드의 시그네이쳐를 선언해 둔다는 관점에서 Java에서 말하는 Interface와 비슷할 수도 있겠네요.

C++에서는 헤더파일안에 클래스의 선언부분과 같을 수 있겠고요. 구현부분은 .m 파일에서 합니다.

그렇다면 마찬가지로 Java와 C++의 예제 소스 코드를 보도록 할까요?
// Java
class classname extends superclassname {
// instance variables
int memberValue;

// member methods
return_type method1(param1_type param1, param2_type param2) { ... }
return_type method1(param1_type param1, param2_type param2) { ... }
}

// C++
class classname : superclassname {
// instance variables
int memberValue;

// member methods
return_type method1(param1_type param1, param2_type param2);
return_type method1(param1_type param1, param2_type param2);
}

Java의 예는 클래스의 구현부분이 클래스에 포함됩니다. Java의 Interface와 비교를 해볼려니 억지같고 추상클래스를 만들자니 또 억지 같아서 그냥 저렇게 써두었습니다.

그럼 Object-C의 구현 부분을 한번 볼까요?
// Object-C
@interface classname : superclassname {
// instance variables
int memberValue;
}

// member methods
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2;
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2;
@end

어떤가요? 이해가 되시나요? 그렇다면 이제 클래스의 구현부를 보도록 하겠습니다.

Implementation
Java의 경우에는 클래스 내부에서 그냥 메서드가 구현되었다고 치고 C++의 예를 한번 살펴 보겠습니다.
// C++
return_type classname::method1(param1_type param1, param2_type param2) {
...
}

return_type classname::method1(param1_type param1, param2_type param2) {
...
}

Object-C의 문법도 한번 볼 차례군요.
// Object-C
@implementation classname
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2 {
...
}
- (return_type)method1:(param1_type)param1 param2_varName:(param2_type)param2 {
...
}
@end


Instantiation
Object-C 에서는 객체를 생성하는 방법또한 독특한 느낌을 가지고 있습니다. 마찬가지로 비교를 한번 해볼까요?
// Java
MyObject obj = new MyObject();
obj.init();

// C++
MyObject *obj = new MyObject();
obj->init();

자 그렇다면 Object-C에서는 어떻게 하는지 알아볼까요?
// Object-C
MyObject *obj = [MyObject alloc];
[obj init];

혹은 다음과 같이 한줄로 사용할 수도 있습니다.
// Object-C
MyObject *obj = [[MyObject alloc] init];

어떤가요? 굉장히 색다른 느낌인가요?

지금까지 제 생각에 일반 프로그래밍 언어와 가장많이 다른 부분을 정리해 보았습니다. 이정도면 처음 Object-C를 봤을때의 혼란을 줄어들지 않을까 싶네요.

더 공부해 보고 싶으신 분은 [이곳]을 참고해 보시면 애플에서 잘 정리한 문서를 제공하고 있으니 참고하시면 되겠네요.

이글은 http://theeye.pe.kr/entry/compare_object_c_with_java_and_c 에서도 볼 수 있습니다.
Posted by 아이

Leave your greetings.