아이폰어플개발정보2010. 9. 12. 21:18
아이폰 어플 개발에서 TableView 넣는 방법 간단 정리

1. UIView 밑에 TableView 생성


2. TableView 클릭 + 컨트롤키누르고 file's owner로 드래그 datasource,delegate 2개 클릭


3. 필수함수인 2개를 코딩



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *cIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cIdentifier];

if(cell == nil){

cell = [[[UITableViewCellalloc]

initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cIdentifier]

autorelease];

}

cell.textLabel.text = @"table";

return cell;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return5;

}




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

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 19. 15:22
아이폰 어플 개발에서 카메라로 동영상 찍을때 kUTTypeMovie 에러 해결법
출처 : http://cafe.naver.com/mcbugi


카메라를 동영상을 찍기 위해서 다음과 같은 코드가 많이 나옵니다.
--------------------------------------------------

- (IBAction)getCameraPicture:(id)sender {

UIImagePickerController *picker = [[UIImagePickerControllerallocinit];

picker.delegate = self;

picker.allowsEditing = YES;

picker.sourceType = UIImagePickerControllerSourceTypeCamera;

picker.mediaTypes = [NSArrayarrayWithObject:(NSString *)kUTTypeMovie];

[selfpresentModalViewController:picker animated:YES];

[picker release];

}

--------------------------------------------------
위 소스는 오픈 소스나, 레퍼러나 책에서 많이 나오는 형식인데요.
저는 버튼 누르면 실행하라고 할려고 IBAction 으로 만들었습니다.
대충 설명하자면 UIImagePickerController 에 변수 할당을 하고
거기에 각 속성값을 지정을 해 준거데
동영상을 찍기 위해서는 sourceType 과 mediaTypes 를 위 코드 같이 설정을 해 주어야 하는 것이죠.
근데 요것이 위 코드대로 하면 바로 에러가 뜹니다.
picker.mediaTypes = [NSArrayarrayWithObject:(NSString *)kUTTypeMovie];
이 부분에서 kUTTypeMovie 요것 때문에 에랴가 뜹니다.

보통 kUTTypeMovie 이 변수는 헤더 파일에서 선언을 해 주어야 하는 건데요.
헤더 파일에 어떻게 선언을 하라는 말이 쉽게 나와 있는데가 거의 없더라고요.
구글링을 통해 어찌어찌해서 알게된 내용이 
kUTTypeMovie 이 변수는 MobileCoreServices.framework 에서 사용되는 거라고 하더군요.

그래서 헤더파일에 다음과 같은 코드를 삽입해 주셔야 합니다.

#import 

그럼 일단 코드상에서는 에러가 없는 것으로 나옵니다.

그런데 이렇게 하게 되면 빌드 상에 에러가 2 개 표시가 됩니다.

이게 사람 미치게 하더군요.

구글검색 전 페이지 다 해보고 레퍼런스 사이트 다 뒤져봐도 해결법이 안 나오더라고요.

그러다가 우연찮게 확인된 사실이 아주 중요한 포인트가 되었죠.

프레임 워크는 프로젝트에서 기본적으로 가지고 있는데

거기에 위에서 사용되는 MobileCoreServices.framework 를 추가를 해 주어야 하는 것이였습니다.

Xcode 에 Groups & Files 보시면 Frameworks 폴더가 보이실 겁니다.

그 폴더를 선택하고 오른쪽 클릭을 하게 되면

Add 가 있고 그 다음에 Existing Frameworks... 메뉴가 있습니다.

여기서 MobileCoreServices.framework 프레임웍을 추가를 해 주어야 모든게 정상적으로 돌아가게 됩니다.

질문도 올려보고 검색도 해 봤지만 제가 지금 정리한 내용은 없더라고요.(외국 유명 아이폰 개발 사이트 포함)

이 내용이 다른 분들에게 큰 도움이 되었으면 합니다.



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

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 13. 14:27
아이폰 개발에서 iphone Device 테스트 순서 완벽 정리

원문 : http://tory45.egloos.com/5230002

iPhone 개발자 등록 및 라이센스를 받았다면 이제 간단한 App를 만들어 에물레이트와 iPhoneDevice( iPhone 3GS, iPod )에 올려서 테스트 해보자..

iPhone App를 테스트 하는 방법에는 크게 iPhone SDK 시뮬레이트와 실제 장치인 iPhone이나 iPod에서 테스트 하는 방법이 있다 
iPhone SDK 시뮬레이트 데스트는 큰 제약사항없이 사용할수 있지만(무료) 실제 장치에서 테스트를 하기 위해서는 반드시 라이센스( 유료 )를 받아야 한다...

라이센스를 받게 되면 라이센스를 받을 때 등록한 등록자가 최고 레벨인 "Agent" 레벨을 받게 된다.


Agent는 Team이 존재할경우 Team별 "Team Admin", "Team Member"을 초청, 허락 할수 있고 "Team Admin"은 자신의 "Team Member"를 초청, 허락 할수 있다.

Team이 없을 경우 Admin과 Member를 초청, 허락할수 있고 1명의 개발자만 존재할 경우 Admin이나 Member를 별도로 구성할 필요는 없이 Agent로 모든것을 처리 할수 있다 

단, 구성하고자하는 Admin 과 Member는 iPhone 개발자로 등록되어 있어야 한다. 

메일 남기시면 iphone_developer_program_user_guide( pdf )문서 보내 드리겠습니다. 


Agent 역할 : 
     iPhone Distribute Certification 획득 
     Digital Certificates 요청
     Admin 또는 Member를 초청 , 허락
     테스트 Device 등록
     App ID 생성
     Provisioning Profile 생성
     Push Notification service 사용
     SSL Certification 생성

Admin 역할 :
     새로운 Admin 초청
     Digital Certificates 요청
     Member 초청, 허락
     테스트 Device 등록
     Provisioning Profile 생성


Member 역할
     Digital Certificates 요청
     Provisioning Profile 다운로드


이렇게 팀 구성이 완료 되면 
     1. iPhone Development Certificate 요청 및 인가   : 권한 ( Admin, Agent, Member )
     2. iPhone Device 등록(지정)                             : 권한 ( Admin, Agent )
     3. 개발(테스트) 프로그램에 대한 App ID 생성       : 권한 ( Admin, Agent )
     4. Development Provisioning Profile 생성 및 다운로드 : 권한 ( Admin, Agent, Member )
     5. Xcode에 Provisioning Profile 적용                  : 권한 ( Admin, Agent, Member )
     
순으로 진행해야 한다.


1. iPhone Development Certificate 요청 및 인가


개발 PC(Mac)에 대해 개인용 인증 Key를 생성하고 생성된 Key에 대해 Agent나 Admin에게 인가를 획득하는 단계
Application folder --> Utilities--> KeyChain Access 실행       
KeyChain Access --> Certificate Assistant --> Request a Certificate From a Certificate Authority 클릭

   - Saved to disk 에 체크
  
  - 2048bite 선택
  - RSA 선택 후 Continue를 클릭하게 되면 바탕하면에 인증요청서( CSR File )가 만들어진다

요청자의 id로 http://developer.apple.com/에 접속하여 오른쪽 상단 "iPhone Developer Program Portal"로 들어가
Certificates->Development의 "Request Certificate" 버튼을 누른다
   

 왼쪽 하단의 "ChooseFile"을 선택해서 바탕화면에 저장된 인증요청서를 선택하고 "Submit"을 누르면
 자신의 Admin으로 인증요청 안내 메일이 발송된다. 
   

요청을 받은 Admin이 http://developer.apple.com/에 Admin 계정으로 접속하여 "iPhone Developer Program Portal"로 들어가
Certificates->Development으로 가서 요청한 인증서에 대해 "Approved"나 "Rejected"를 선택한다   

 
Admin이 요청한 인증서에 대해 "Approved"나 "Rejected"를 하게 되면 요청자는 위 페이지에서 인증서를 다운로드 받을 수  있다. 


 다운로드 된 인증서 파일을 더블 클릭하게 되면 Keychain Access프로그램에 의해 자동으로 설치 된다. 

2. iPhone Device 등록(지정)
Admin이나 Agent는 테스트 할 iPhone Device를 등록해야 하는데 iPhone Device를 PC에 꽂는 순간 iTuns와 Xcode의 Organizer가 인식하는데 만약 iTuns가 실행중이면 iThus를 종료하고 Xcode의 Organizer에서 처리 하도록 하자 

Xcode->Window->Organizer 클릭해서 idenfier를 복사 한다 


다시 Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "Device"메뉴로 들어가 "Add Device"를 클릭하여
간단한 Device 설명과 함께 Organizer에서 복사한 identifier를 복사한 뒤 "submit"를 클릭한다 

등록된 Device는 아래와 같이 표시된다.


3. 개발(테스트) 프로그램에 대한 App ID 생성
   - 간단한 Sample 프로그램을 xcode에서 하나 만든다. 여기서는 "Sample"라는 프로제트를 만들었다고 과정을 한다
Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "App IDs" 메뉴로 이동하여 "New App ID"를 클릭한다.
간단한 App 정보를 입력하고 App ID를 입력한뒤 Submit을 요청한다. 

여기서 주의할것은 App ID를 만들 때  iPhone이 권장하는 포맷으로  입력해야하는데 여기서는 "com.enustech.sample"이라는 
Explicit App IDs 포맷으로 생성하도록 했다. Wildcard App IDs 포맷은 직접 Searching 해 보기 바란다. 

등록된 AppID는 아래와 같이 표시 된다
4. Development Provisioning Profile 생성 및 다운로드
   - 이제 Device도 등록했고 AppID도 등록했으니 실제 Xcode의 Sample 프로젝트에 등록할 Provisioning Profile 을 생성해 보자 
역시 Admin이나 Agent는 Admin 또는 Agent는  http://developer.apple.com/로 접속하여 "Provisioning" 메뉴로 들어가 "New Profile"를 선택한다 

간단한 Provisioning 설명을 적고 사용할 AppID를 선택하고 사용할 Device를 선택한다. 
생성된 Provisioning Profile는 아래와 같이 표시된다 

Sample 프로젝트를 테스트 하기 위해 Sample Provisoning Profile을 "다운로드" 버튼을 클릭하여 다운로드 하자..KeyAccess 프로그램이 자동으로 보관하게 될것이다 

5. Xcode에 Provisioning Profile 적용
Xcode에서 iPhoe Device로 직접 테스트 하기 위해서는 "Set Active SDK"를 아이폰 시뮬레이터에서 iPhone Deivce로 변경해주어야 한다.

그리고 Xcode Sample프로젝트에서 Target 아래의 Sample에 마우스를 데고 오르쪽 버튼을 눌러 Get Info 또는 Command + I를 눌러 "Properties" 메뉴를 클리하자 
identifier에서 "com.yourcompany."을  이전에 등록한 "AppID"인 "com.enustech.sample."으로 변경하자 


정보보기 Tab의 "Build"로 이동하여 "Code Signing" 센션을 보면 Code Signing Identity 의 Any iPhone OS Device 부분이 애플리케이션 인식자가 정상적으로 설정되어 있다면 아래와 같이 보이면 된다. 

Active SDK가 iPhone Device로 선택되어 있는지 확인하고 Build and Go를 해보자...

이제 iPhone에서 남은건 해킹이다...

iPhone 개발자 등록 및 iPhone 개발자 라이센스 획득 절차 강좌 바로 가기
iPhone Sim Unlock & iPhone jailbreak 강좌 바로가기



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

댓글을 달아 주세요

아이폰어플개발정보2010. 8. 12. 16:41
아이폰 어플 개발에서 Window 와 View의 차이점을 깔끔하게 정리

Window 와 View 의 관계는 아래의 그림을 보시면 쉽게 이해할 수 있습니다.

(출처 : iPhone Application Programming Guide)

iPhone 애플리케이션은 한개의 Window 와 여러개의 View를 갖습니다. 그리고 그 View 들은 또 다른 View들을 가지고 있습니다.

Layout of views (출처 : iPhone Application Programming Guide)

참고로 Window 의 크기는 iPhone 기준 320x480 의 크기를 갖고 있으며, Status Bar는 20x480,Navigation Bar와 Tab Bar는 44x480 의 크기를 갖고 있습니다. 상황에 따라 View 를 구성하시는데참고하시기 바랍니다.

UIWindow

Window는 UIWindow 클래스로 구현되어 있습니다. iPhone 애플리케이션은 구동시에 UIWindow 객체를 생성하여 사용자에게 화면을 보여주게 됩니다.

UIWindow 를 이용한 iPhone 애플리케이션을 작성하려면 단순히 Xcode 에서 iPhone 탭의 Window-Based 애플리케이션 프로젝트로 생성을 하면 됩니다.

실제로 Window-Based 애플리케이션으로 프로젝트를 생성하여 코드를 살펴보면, UIWindow 클래스의 인스턴스를 생성하는 부분이 없습니다.

인터페이스 빌더의 MainWindow.xib 파일에서 UIWindow 인스턴스가 정의되어 있기 때문에 따로 생성하지 않아도 아울렛이나 딜리게이터를 통해 사용이 가능합니다.

인터페이스 빌더를 사용하지 않고, UIWindow 를 생성하려면 UIApplication의 딜리게이터의applicationDidFinishLaunching 메소드에 다음과 같은 코드를 추가하여야 할 것입니다.(initWithFrame 메시지를 보내어 화면 크기만큼의 크기로 생성합니다.)

  1. UIWindow* aWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

UIWindow의 인스턴스를 생성하였으면, 이제 Window 에 View를 추가할 차례입니다.

  1. UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
  2. [view setBackgroundColor:[UIColor redColor]];
  3. [window addSubview:view];

위의 코드를 수행하면 빨간 화면의 View가 Window에 추가되어서 보여지게 됩니다. 코드를 살펴보면, UIWindow와 같이 initWithFrame 으로 생성하는데 mainScreen이 아닌 applicationFrame 로 생성을 합니다.

이렇게 생성하면, statusBar 와 같은 Window 프로퍼티로 인한 크기를 제외한 실제 보여지는 화면 크기만큼으로 생성을 하게 됩니다.

View-Based Application
  1. Xcode 를 실행하고, iPhone 탭의 View-Based Application 를 선택하야 프로젝트를 생성합니다.
  2. 프로젝트의 왼쪽 Groups & Files 의 Resources 폴더를 살펴보면, xib 파일이 2개 존재 합니다.
  3. MainWindow.xib 는 UIWindow 를 구성하는 인터페이스 빌더 파일이고, 나머지 하나는{프로젝트이름}ViewController.xib 파일입니다. 이 파일은 UIWindow 에 추가되는 서브뷰의 인터페이스 빌더파일입니다.
  4. 이 파일을 더블클릭하여 인터페이스 빌더를 실행하고 Library 창에서 컨트롤을 드래그앤드랍 하여 다음과 같이 뷰를 구성합니다.
  5. 구성이 완료 되면 저장을 하고 Xcode 로 돌아와 {프로젝트이름}ViewController.h 파일과 {프로젝트이름}ViewController.m 파일을 다음과 같이 편집합니다.

    1. // ViewController.h 파일의 클래스 선언을 다음과 같이 수정
      @interface ViewBasedViewController : UIViewController {
      IBOutlet UITextField *textField;
      }

      - (IBAction)test:(id)sender;

      @property (nonatomic, retain) IBOutlet UITextField *textField;

      @end

      // ViewController.m 파일에 다음의 메소드를 추가
      - (IBAction)test:(id)sender
      {
      textField.text = @"test";
      }
  6. 편집이 완료 되었으면 다시 {프로젝트이름}ViewController.xib 파일을 열어서 인터페이스 빌더로 돌아갑니다.
  7. 버튼 영역 위에서 마우스 오른쪽 버튼을 누른 채로 File's Owner 로 드래그앤드랍 합니다.
  8. 해당 이벤트 메소드(여기서는 test: )를 선택하여, 액션을 연결합니다.
  9. 이번에는 File's Owner 위에서 텍스트 필드로 오른쪽 버튼을 누른 채로 드래그앤드랍을 하고, 해당 아울렛(여기서는 textField) 을 선택하여 아울렛을 연결합니다.
  10. 위의 연결 작업을 마치고 File's Owner 위에서 오른쪽 버튼을 누르면 다음과 같은 참조 상태를 확인 할 수 있습니다.
  11. 빌드 대상을 시뮬레이터로 전환하고 Build and Go 를 수행하면 다음과 같은 실행 결과를 확인 할 수 있습니다.

UIView

UIView 는 iPhone 애플리케이션 구조에서 MVC 모델 중 View 역할을 담당하고 아래와 같은 일들을 처리합니다.

  1. 화면을 그리거나 애니메이션 효과를 연출
  2. 레이아웃을 구성하거나 서브뷰들을 관리
  3. 터치 이벤트를 처리

단순히 iPhone SDK 에서 제공해주는 컨트롤들을 사용하여 애플리케이션을 구성한다면, 인터페이스 빌더를 이용하여 UIView 에 원하는 컨트롤을 추가하고, 아울렛을 연결하는 정도 만으로도 충분히 구현가능합니다.

하지만, 복잡한 UI 구성이나 퍼포먼스 개선을 위해서는 iPhone 애플리케이션의 드로잉 메카니즘을 이해하고 적절히 구현하여야 합니다.

iPhone 애플리케이션이 화면을 구성하는 Drawing Cycle 을 살펴보도록 하겠습니다.

UIView 객체가 화면 업데이트 요청을 받으면 UIView 객체는 drawRect: 메소드를 호출합니다.

이 때 인자로 갱신해야할 영역이 CGRect 구조체를 참고하여 해당 영역을 업데이트 합니다.

drawRect: 메소드는 다음과 같은 경우에 호출 되어집니다.

  1. 비활성화 영역이 생겼을 때
  2. UIView 의 hidden 프로퍼티가 YES에서 NO로 토글 되었을 때
  3. 스크롤에 의해 화면에 보여질 영역이 변경 되었을 때
  4. UIView 의 setNeedsDisplay: 메소드와 setNeedsDisplayInRect: 메소드가 호출 되었을 때

이런 경우에 drawRect: 메소드가 호출되므로 커스텀 뷰를 개발 할때에는 drawRect: 메소드를 호출 하는 횟수를 줄이고 내용을 최소화하여 퍼포먼스를 개선해야 합니다.

개선 방법은 iPhone SDK 문서에 상세히 써있으므로 생략합니다.

다음으로 iPhone 애플리케이션의 주 이벤트인 터치 이벤트 처리를 살펴보도록 하겠습니다. 터치 이벤트는 크게 4종류로 전달 됩니다.

  1. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    : 화면에 터치가 발생하였을 때에 발생
  2. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    : 화면에 터치가 발생한 상태에서 이동하였을 때에 발생
  3. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    : 터치가 떨어졌을 때에 발생
  4. - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
    : 터치 이벤트가 시스템에 의해 취소되었을 때 발생 (예를들면 전화가 왔을때)

A multi-touch sequence and touch phases (출처 : iPhone Application Programming Guide)

터치이벤트는 touches 인자로 전달되며, NSSet 형태로 전달되어 싱글터치 및 멀티터치 처리가 가능합니다.

(싱글터치가 아닌 멀티터치를 처리하려면 multipleTouchEnabled 프로퍼티를 YES로 설정하거나, isMultipleTouchEnabled 메소드를 오버라이드 하여 YES 를 return 해주면 처리가 가능합니다.)

4가지의 이벤트는 Responder 에게 전달되며, 전달 규칙은 Responder Chain 에 의해서 전달 됩니다. 일반적으로는 UIView 가 이벤트를 가장 먼저 받게 됩니다.(First Responder)

Responder가 터치 이벤트를 처리하지 않았을때는, Next Responder 에게 이벤트를 보냅니다. UIView 경우에는 super view 에게 해당 이벤트를 보냅니다.

이런식으로 체인이 이루어지고 최종적으로 UIWindow가 이 이벤트를 받게되고, UIWindow는UIApplication으로 이벤트를 보냅니다. 이와같은 방식은 Chain of Responsibility 패턴을 참고하시기바랍니다.

애니메이션과 레이아웃에 관해서는 이번 튜토리얼에서는 생략하겠습니다. (추후 추가 예정)

UIViewController

UIView 에서 MVC 모델의 View 역할을 담당했다면, UIViewController 는 Controller 부분을 담당합니다.

UIView 에서는 UI적인 측면만 처리하고, UIViewController는 여러 Model 로부터 데이터를 불러오거나, 시스템으로부터 오는 여러 메시지들을 처리합니다.

loadView, viewDidAppear, viewDidDisappear, viewDidLoad,viewWillDisappear 등은 뷰의 상태에 따라 시스템으로부터 오는 메시지들입니다. 이런 메시지들을 처리하려면 해당메소드를 오버라이드 하여 처리하면 됩니다.

UIViewController의 view 프로퍼티에 원하는 커스텀 뷰를 설정하거나, 생성한 뷰를 설정하면 해당 뷰의 컨트롤러로 설정이 가능합니다.

특히, initWithNibName 이라는 초기화 메소드를 지원하여 인터페이스 빌더와 연동하여 개발을 할때에 주로 사용됩니다.

UIViewController의 sub class 로는 UITabBarController,UITableViewController, UINavigationController 가 있어서 각각 TabBar,TableView, NavigationBar 를 사용할때에 사용되어 집니다.

UIViewController은 여기서 상세히 설명하기 보다, 다음 챕터인 TableView에서 어떤식으로 사용되어지는지 살펴보도록 하겠습니다.

원본은 http://jweb.springnote.com/pages/2354736.xhtml 에서 작성되었고, 향후 수정시에 원본은 가장 최신 상태로 업데이트 됩니다.

 출처 : http://cafe.naver.com/mcbugi



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

댓글을 달아 주세요