레이블이 Xcode인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Xcode인 게시물을 표시합니다. 모든 게시물 표시

2010년 5월 4일 화요일

PBXProjectWizard 에러처리

링크 참조

딱히 뭣땀시 나는 에러인지는 잘 모르겠습니다만..
저의 경우엔 Window-based Application 템플릿으로 프로젝트 생성할때 갑자기 에러가 나더군요.. SDK를 이거깔았다 저거 깔았다 했더니만..;;

뭐.. 암튼..


일본어로 된 사이트 입니다.
구글자동 번역 이용하시믄 대충이해할 정도는 번역 해 주네요.

인제 별게 다 에러를 내는구만!!  >ㅅ<;

Developer 안에 있는 어플리케이션들은 Xcode 설치하면 자동으로 설치 되는군요..
이것도 모르고 어디서 찾아야 하는지 해메다니..ㅡ..ㅡ;;

2010년 3월 31일 수요일

Xcode에서 커스텀 템플릿 만들기



커스템 템플릿 만드는 방법.

영어 몰라도 대충 이해되는 동영상 ㅋ

직접 해본 결과..

1. /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application 에서 기본 템플릿 중 하나를 복사

2. ~/Library/Application Support/Developer/Shared/Xcode 에 새폴더 생성
 폴더 이름은 Project Templates (이미 존재하면 새로 만들 필요 없음)

3. Project Templates 폴더에 이 폴더 안에 아까 복사한 기본 템플릿을 붙여 넣고 원하는 이름으로 변경한다.
이때 지정하는 폴더 이름이 Xcode에서 템플릿 선택시에 나타날 이름이 된다.

4. 템플릿 폴더 안에 projects 라는 폴더를 하나 생성하고.
 원래 템플릿 폴더 안에 있던 내용들을 projects 폴더 안에 끌어다 놓는다.

5. 기본 템플릿 폴더 안에 보면 예를 들어 Window-based 템플릿이라면 Window-based Application 폴더가 있을 것이다.
그 안에 보면 __PROJECTNAME__.xcodeproj 파일이 있는데, 이것을 열어서 원하는 대로 수정한 후 저장하면 된다.

6. Xcode를 열고 새 프로젝트를 만들어 보자.
방금만든 커스텀 템플릿이 보일 것이다.


내.. 이 쉬운것을.. 몰라가지고..헛지꺼리 했다 이거지..ㅡ_ㅡ;;;

2010년 3월 25일 목요일

Xcode 에서 OpenGL 시작하기

OpenGL SuperBible이라는 책을 보는데..
똑같은 코드가 Xcode에서 돌리면 제대로 안나오데요..

다음은 Xcode에서 OpenGL코드를 작성할 수 있는 방법에 대한 순서 입니다.
물론 개발 플랫폼은 MacOS 겠죠.

[ 프로젝트 생성 ]
1. Xcode에서 File/New Project... 를 선택

2. Mac OS X에 있는 Other를 선택
3. Empty Project 선택
4.Choose 클릭

5. 프로젝트를 저장할 경로 지정
6.Save As :란에 프로젝트 명 지정하고 Save 선택

[ 타겟 추가 ]
1.Groups & Files의 Targets에서 마우스 오른쪽 버튼 클릭

2. Add / New Target... 선택
3. Mac OS X 에서 Cocoa 선택
4. Application 선택 하고 Next 클릭
5. Target Name에 적당한 이름을 주고 Finish 클릭
6. 추가한 타겟의 Info 창이 뜰 것임
7. 맨 아래로 스크롤 하여 GCC_PREFIX_HEADER를 더블 클릭
8. 내용을 삭제한 후 OK 클릭
9. Info 윈도우를 닫음

[ Framework 추가 ]
1. Groups & Files의 Products 폴더에서 마우스 오른쪽 버튼 클릭
2. Add / Existing Frameworks ... 선택
3. 프레임워크 목록에서 커맨드버튼을 누른채로 GLUT.framework 와 OpenGL.framework를 선택한 후 Add 클릭
4. 다이얼로그 박스가 보인다면 그냥 기본설정으로 놔둔채로 Add 클릭

[ File 추가]
1. Products 폴더에서 마우스 오른쪽 버튼 클릭
2. Add / New File ... 선택
3. Mac OS X 에서 C and C++ 선택
4. C File 선택 하고 Next클릭
5. 이름은 main.c 로 한다.
5. Finish 클릭

근데 뭐.. 다 하고 보니깐 딴게 문제가 아니라
아직 OpenGL에 대해서 잘 모르기 때문에 정확히는 모르겠지만..
glutInit 함수를 안써줘서 안나오는 거던데..

잘 돌아가는가 간단히 테스트해 보려면 아래의 코드를 활용하시기바랍니다.
결과는 600x480 사이즈의 그냥 꺼먼 화면만 뜹니다.
 
#include <stdlib.h>

#include <GLUT/glut.h>

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    glutSwapBuffers();
}

void reshape(int width, int height)
{
    glViewport(0, 0, width, height);
}

void idle(void)
{
    glutPostRedisplay();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(640, 480);
    
    glutCreateWindow("GLUT Program");
    
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutIdleFunc(idle);
    
    glutMainLoop();
    return EXIT_SUCCESS;
}




참고 : http://mitchallen.com/iphone/archives/50
main.c 코드 출처 : http://blog.onesadcookie.com/2007/12/xcodeglut-tutorial.html



그럼 OpenGL 열공하시기 바랍니다.

2010년 3월 24일 수요일

탭바와 피커 관련 에러 해결 방법 (NSUnknownKeyException)

시작하세요 아이폰 3 프로그래밍에서 7장 탭바와 피커 에러 관련 해결 방법입니다.
컴파일시 "NSUnknownKeyException" 이 발생하는 경우에 참고하세요.


http://www.iphonedevbook.com/forum/viewtopic.php?f=25&t=1299

결론부터 말하자면.. 인터페이스 빌더에서 연결을 잘못해서 나는거군요..


코드가 이상한가 싶어서 코드만 뚫어져라 보지 말고, 인터페이스 빌더에서 차근차근 해보세요.

여기도 참고..:
http://iphonedevbook.com/forum/viewtopic.php?f=13&t=572

2010년 3월 22일 월요일

Xcode Project Templates

Cocoa dev: Design your own Xcode project templates

http://arstechnica.com/apple/guides/2009/04/cocoa-dev-design-your-own-xcode-project-templates.ars

 

 Carbon Five Community : Custom iPhone Template for iPhone Development

http://blog.carbonfive.com/2009/05/testing/custom-xcode-template-for-iphone-development

Read it!

2010년 2월 23일 화요일

CoreData

  코어 데이터는 코드 작성 없이 애플리 케이션의 데이터 모델을 시각적으로 설계할 수 있도록 해주는 애플의 도구이다.
  애플은 아이폰 SDK 3부터 코어 데이터를 지원하기 시작했다.

[프로젝트 생성]

  • Xcode에서 New Project 창을 연다.
  • Window-based Application 템플릿을 선택하고, 하단에 있는 Use Core Data for storage 옵션을 체크한 후 Choose... 버튼을 클릭한다.
  • 프로젝트명을 쓰고 프로젝트를 생성합니다.

프로젝트를 생성하고 보면, Resources폴더에 *.xcdatamodel이라는 이름의 파일이 있습니다.
이 파일은 데이터 모델 파일이며, 이 파일을 열면 데이터모델 편집기가 실행되는 것을 볼 수 있습니다.
(세부 창 숨기기 shift+command+E)


  코코아에서 데이터 모델을 생성하는 일반적인 방법은 NSObject의 하위클래스를 만들어서 NSCoding과 NSCopying을 따르게 하여 아카이브로 만드는 것입니다.
  하지만 코어 데이터에서는 클래스 대신 데이터 모델 편집기에서 엔티티를 생성하고, 엔티티에서 관리객체를 만드는 코드를 작성합니다.

  엔티티는 속성, 관계, 페치드 프로퍼티, 페치 리쿼스트 총 4개 타입의 프로퍼티로 구성되며, Xcode의 모델 편집기를 통해 정의된다. 페치 리쿼스트는 데이터 모델 편집기나 소스코드에서 미리 정의될 수 있습니다.
  • 속성 : 오브젝티브 C 클래스의 인스턴스 변수에 해당하는 코어 데이터 엔티티의 함수. 데이터 저장에 사용
  • 관계 : 엔티티 사이의 관계를 정의. 관계는 하나 혹은 그 이상일 수 있음.
  • 페치드 프로퍼티 : 관계와 동시에 사용될 수 없다. 즉, 둘중 하나를 선택해 사용해야 함.  관계와의 차이점은 로딩방식이 다르다는 것인데, 관계의 경우 한속성이 로드될때 그와 관계된 다른 속성도 같이 로드되지만, 페치드 프로퍼티는 다른 속성에 접근하지 않는한 연관된 다른속성은 한꺼번에 로드되지 않음.
  • 페치 리퀘스트 : 미리 정의된 쿼리.

[관리객체 가져오기]

  저장소에서 관리객체를 가져오려면 페치 리쿼스트를 하나 만들고 객체의 엔티티나 가져오길 원하는 객체를 명시한 NSEntityDescription을 사용하여 요청해야 합니다.

예]
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescr = [NSEntityDescription entityForName:@"EntityName"
                                                          inManagedObjectContext:context];
[request setEntity:entityDescr];

  필요하다면 NSPredicate를 사용한 페치 리퀘스트의 조건을 명시할 수 있습니다.
  NSPredicate는 페치 리퀘스트의 실행 결과를 만들기 위해 필요한 기준을 정의하기 위해 사용되며 SQL문과 유사합니다.

예]
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(name = %@)",nameString];
[request setPredicate:pred];

  첫줄에 생성한 NSPredicate는 페치 리퀘스트에 명시된 엔티티의 모든 객체를 가져오는 대신 name 프로퍼티에 nameString 값이 저장되어 있는 객체만을 가져오게 합니다.

  엔티티 디스크립션과 함께 페치 리퀘스트를 생성하고 나면 NSManagedObjectContext:인스턴스 메서드를 사용하여 패치 리퀘스트를 실행합니다.

예]
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if(objects == nil){
  //handle error
}

  executeFetchRequest:error:는 저장소로부터 특정 객체를 불러올 것이며 배열을 통해 객체를 반환할 것입니다.
  만일 에러가 발생하면 배열 대신 nil값을 반환받게 될 것이고 인자로 사용한 error 포인터는 에러의 내용이 담긴 NSError 객체를 가리키게 될 것입니다.
  에러가 발생하지 않으면 명시된 기준과 일치하는 데이터가 없어서 아무런 값을 담고 있지 않더라도 제대로 된 배열을 받환받게 될 것입니다.
  배열을 받환받는 시점부터 배열 안의 관리객체에 대한 모든 변경 내용은 관리객체 컨텍스트에 의해 기록될 것이며 컨텍스트에 save:메시지를 보내면 저장될 것입니다.


2010년 2월 12일 금요일

XCode 에 iPhone(Device) 연결하기


사용환경
Macintosh 환경
Snow leopard
iPhone OS 3.1.2 (iPhone 3GS)
Xcode 3.2.1(1613)

VMWare 환경
iDeneb Mac OS X 10.5.7
VMWare Workstation 7
iPhone OS 3.1.2 (iPhone 3GS)
Xcode 3.1.4

※ 아래에 소개하는 방법은 합법적인 방법은 아니며.. 어디까지나 스터디 용으로 활용하시기 바랍니다. Hello World나 찍어보자고 Apple에 매해 99달러를 지불하긴 너무 불합리하니까요.

Xcode에 iPhone을 연결하는 과정은 다음과 같습니다 :
인증서 생성 > info.plist 내용 수정 > 빌드
해킹은 된 상태라고 가정하고 설명합니다.
(아이폰 해킹이 안되어 있다면, 해킹 먼저 하고 오세요.)



인증서 생성

- Spotlight에 keychain을 입력하시면 나오는 "키체인 접근"이라는 응용프로그램을 실행하세요.
- 아래와 같이 선택하세요


- 인증서 생성 창에서 아래와 같이 설정합니다.
(1) 이름 : iPhone Developer
      기본값 덮어쓰기 - 체크
(2) 인증정보 - 계속
(3) 인증정보 - 개인정보는 아무거나 입력해도 상관없습니다 - 계속
(4) 키페어 정보 - 계속
(5) 키 사용 확장자 - 계속
(5) 확장된 키 사용 확장자 - 기능에서 코드 서명만 체크하고 계속
(6) 기본제한 확장자 - 계속
(7) 제목 대체 이름 확장자 - 계속
(8) 인증서에 대한 위치 지정 - 계속
(9) 완료
(10)아래의 그림과 같이 인증서가 생성된 것을 볼 수 있습니다.
     이 목록에서  iPhone Developer 라고 쓰여 있는 것 중, 종류가 인증서 인것을 더블 클릭합니다.

(11) iPhone Developer 인증서 창이 뜨면 [신뢰] 부분 삼각형을 클릭하여 확장한 후
       이 인증 사용시 : 항상신뢰로 변경해 주고 창을 닫습니다.

※ VMWare 에서는 항상신뢰가 안먹힐 수 있습니다.
    VMWare 사용시에는 일단 인증서만 만들어 주세요.



Info.plist 내용 수정

(1) 터미널 창을 열어주세요 (터미널을 못찾겠으면 Spotlight에서 Terminal을 검색해도 나옵니다)

(2) 현재 경로는 상관없습니다. 아래의 명령어를 입력해 주세요.
      vi /Developer/Platforms/iPhoneOS.platform/Info.plist


(3) vi 에디터에서 Info.plist파일을 열어줄 것입니다.   여기에서  46, 79번째줄에 있는
     XCiPhoneOSCodeSignContextXCCodeSignContext로 변경합니다.
     (참고로 vi 에디터에서 esc키를 누른 후 :LineNumber 를 쓰면 해당 줄로 이동합니다.)

※ VMWare 인 경우
    PROVISIONING_PROFILE_ALLOWEDPROVISIONING_PROFILE_REQUIED 를 찾아서
    아래에 있는 String 값들을 NO로 변경하고 저장합니다.
    (:wq 를 입력하면 저장하고 나갑니다)

Build
다 끝났습니다. 말 그대로 빌드 하시면 됩니다.


Xcode에서 프로젝트 만드는 법은 아시죠?
시험적으로 대충 만들어 보시구요. Xcode 창 좌측 상단에 보이는 타겟 선택하는 부분에서
Device를 선택하시고 Build and Run 하시면 됩니다.

VMWare 사용자일 경우.
     빌드할때 Keychain 관련 팝업이 뜰 수 있습니다.
     항상 신뢰(승인?)로 선택하시고.
     Targets 에 있는 빌드 타겟을 선택한 후
     Command+i 를 누르면 나오는 Target Info 창에서 Build 탭을 선택하고,
     Code Signing IdentityAny iPhone OS DeviceiPhone Developer로 되어있는지 확인 한후 
     Build & Run 하시면 됩니다.


됩니다.


될까요?


뭐.. os 버전이 minimum 어쩌구 저쩌구 하면서 안되시는 분은.. 
Device 버전을 바꿔줘야 합니다.
Xcode 와 iPhone os가 버전업 되면서 안되는 경우가 있거든요.




전 iPhone os 3.1.2 버전을 사용하는데.. XCode는 3.1.3 버전만 나타내 주면서
버전이 안맞으니 배째라 합니다.


이럴때는 Xcode 화면 좌측에 보면 Groups & Files가 있습니다.
여기있는 파일 목록들 중에 
Targets라고 빨간 동그라미모양의 아이콘이 있는 부분이 있습니다.
그 안에 보면 타겟에 대한 내용이 들어가 있는 파일이 있습니다. 더블클릭해서 열어 주세요.
(기본적으로 프로젝트 이름이랑 같네요)


Target "TestProj" Info 라는 창이 뜹니다.(여기서 TestProj는 제가 만든 프로젝트 명입니다.)
- Build탭을 선택하고
- Base SDK 와 iPhone OS Deployment Target 을 iPhone OS 3.1.2 로 변경합니다.
- 타겟 정보 창을 닫은 후에 타겟을 Device - 3.1.2... 로 바꿔 선택하고 Build & Run 합니다.


이제 되나요?
안될 경우
- 프로젝트의 파일 중 ...Info.plist 로 끝나는 파일이 있습니다.
- InfoDictionary version을 5.0으로 바꿉니다.
- 다시 Build & Run 합니다.


이제 되나요?


이 글을 쓰면서 다시 설정을 바꿔서 컴파일 해봤는데,  처음에 성공한 이후로 InfoDictionary version을 다시 6.0으로 변경하고, Device를 다시 3.1.3으로 변경해도 문제없이 빌드 되네요.






아.. HelloWorld 한번 찍기 참 복잡하네요 그죠?
자 그럼.. 모두 열공하시고.. 즐거운 개발 되시기 바랍니다  ^^


몇몇단계가 빠져있을지도 모릅니다. 다 하고 나서 생각나는대로 쓴거라..





참고 : How to deploy an iPhone application without an IDP Membership 

내 블로그 목록

팔로어