A. 배포전에 진행사항
1. Distribution Provisioning Profiles 만들기
- 개발사이트 우측 Program portal
- App ID 만들기
: New App ID
: Description -> 어플id
: Bundle Seed ID -> Generate New (그대로)
: Bundle Identifier -> 홈페이지URL을 거꾸로 + 어플ID (예: kr.co.hello.skyworld )
- Provisioning -> Distribution
: New Profile
: (0)App Store -> Profile Name : 보통 어플 ID와 동일하게 입력 -> 위에 입력한 App ID 선택
- Provisioning Profile을 다운로드 받는다.
- Macintosh HD > 사용자 > 홍길동(?) > 라이브러리 > MobileDevice > Provision Profiles에 복사한다.

 

2. Xcode에서 배포파일 만들기
- Xcode project(Groups & Files) Info
: Configurations 탭에서 “Release” 항목을 아래 Duplicate한후 “Distribution”으로 Rename한다.
: Build 탭에서 좌측상단 Configuration을 Distribution으로 변경
: Base SDK를 iPhone Device 2.2.1로 변경한다.(아이폰2세대 지원할 경우)
: 항목중 Code Signing 에서 Any iPhone OS Device내용을 1.에서 만든 Provisioning Profile을 선택한다. (iPhone Distribution : 홍길동)
- Resource 그룹 중에 Info.plist를 열면
: Bundle display name을 입력하고, Bundle identifier를 입력한다.(예:kr.co.hello.skyworld)
: Bundle version은 일반적으로 1.0으로 하고 향후 업뎃할때 1.1로 함

- 배포용 파일 만들기
: 상단 툴바 상태를 [ Device - 2.2.1 | Distribution ]으로 한다. (2.2.1 지원할 경우)
: 메뉴바에서 Build를 선택한 후 [ Build ]를 한다.
: 빌드가 성공하면 Groups & Files의 Products 그룹에 Project name .app가 생성된다.
: .app에 마우스 우클릭하여 Reveal in finder를 선택한다.
: finder폴더 위치가 프로젝트 – build- Distribution iphoneos 로 연결된다.
: 확장자 없는 파일이 배포될 파일이다.
: 확장자 없는 파일을 압축한 후 (.zip) 개발 사이트를 통해 앱스토어에 등록한다.

 

B. AppStore에 등록하기
1. iPhone Developer Program
a. Over view
- iTunes Connect -> Manage Your Applications -> Add New Application
- Does your prodect contain encryption ? 암호화 유무
- Application name : 앱스토어에 나타나는 이름
- Applicaiotn Description : 앱스토에에 나타나는 어플 설명
- Device Requirements : 아이폰, 이이팟 선택
- Primary Category, Secondary Category : 장르 선택
- Copyright : 자작권자
- Version Number : 어플리케이션 버전, Xcode Boundle version (예: 1.0)
- SKU Number : 개발자가 관리하는 관리코드, 본인이 관리하는 어플의 유일코드
- Keywords : 검색어 (주의사항 : 자작권위반, 유명인사이름, 애플관련 단어는 절대 안됨)
- Application URL, Support URL : 개인 블로그나 기타 어플 피드백용 홈페이지
- email…
- Demo : 리뷰어가 어플 테스트시 도움이 되는 설명사항
————————
b. Ratings
- 등급 넣기 : 일반적으로 NONE
————————
c. Upload
- Application : Build한후 zip으로 만든 파일 , Upload 완료후에 iPhone3.0테스트 완료했다는 체크 하기
- Large 512 icon : 512*512 jpg파일 -> 어플의 57*57아이콘과 동일한 이미지로 하기 , 앱스토어에 노출됨
- Primary Screenshot: 어플 화면
- Additional Screenshots : 등록할때 뒷부분 이미지부터 선택할 것 4->3->2->1순으로.
————————
d. pricing
날짜 선택 : in Review 후 Ready For Sale되면 RFS 날짜 기준으로 판매 될 예정, 손 볼 것 없음
가격 선택 : 표를 보고 확인하기.
————————
e. localization : 각 국가별 언어로 해당 언어를 따로 보여 주기
예: korean을 선택후 어플 이름, 설명을 한글로 넣으면 한국앱스토어에선 한글로 나타남
————————
f. Review
위 사항 최종 확인
————————
일단 등록 끝

C. 애플에서의 진행 상태
1) Waiting for Review : 테스트 대기상태
2) In Review : 애플에서 어플 테스트 중
3) Ready for sale : 앱스토어에 판매 대기 및 판매중
4) Reject : 판매 보류, 이후는 어플리케이션 수정후 B.사항부터 할 것 version은 수정하지 않는다.

———————

 

<출처 : http://glove88.cafe24.com/wordpress/?p=33>



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

댓글을 달아 주세요

출처 - http://www.cocoadev.co.kr/183



Xcode3 에서 간단한 코코아 UI 샘플을 만들어 보는 튜토리얼입니다. 아래와 같이 하나의 입력 창과 세개의 버튼을 가진 간단한 어플리케이션 입니다.

각각의 버튼들의 기능은 아래와 같습니다. 라벨의 이동시에는 animator를 이용해 간단한 효과를 주었습니다.

텍스트에 입력된 내용을 상단의 라벨에 출력합니다.

라벨이 원래 있던 좌측의 위치로 이동하도록 합니다.

라벨이 우측 끝으로 이동하도록 합니다.


1. 프로젝트 생성
Xcode를 실행하고 메뉴에서 File/New Project...를 클릭합니다. 좌측에서 Mac OS X/Application을 선택하고 Cocoa Application 템플릿을 선택한 후, Choose... 버튼을 클릭합니다. 

(iPhone SDK 설치되어 있지 않으면 좌측의 메뉴가 조금 다를 수도 있습니다)

프로젝트가 저장될 디렉토리를 선택한 후에 프로젝트명(Control1)을 입력하고 Save 버튼을 클릭합니다.



2. 인터페이스 빌더
1) 인터페이스 빌더 실행
좌측과 같이 Xcode의 Groups & Files/Resources의 MainMenu.xib를 더블클릭하여 인터페이스 빌더를 실행합니다.







2) 라이브러리 윈도우
인터페이스 빌더의 메뉴에서 Tools/Library를 클릭하거나 단축키(Shift+Command+L)를 이용하여 아래와 같은 라이브러리 윈도우를 오픈합니다. 이 윈도우 하단의 아이템중에서 필요한 각종 오브젝트나 컨트롤들을 원하는 위치에 드래그하여 사용할 수 있습니다.



3) 윈도우
라이브러리 윈도에서 아래와 같이 Label, Text Field, Push Button을 드래그 해서 윈도우에 아래와 같이 배치하고 윈도우 크기를 적당하게 조절합니다.


라이브러리 윈도우에서 각 컨트롤의 위치는 아래와 같습니다.

  • Label - Cocoa / Views & Cell / Input & Values
  • Text Field - Cocoa / Views & Cell / Input & Values
  • Puish Button - Cocoa / Views & Cell / Buttons


3. AppController
1) 소스파일 생성
다시 Xcode로 돌아와 Groups & Files에서 Classes를 우클릭을 하거나 단축키(Command+N)를 이용하여 파일생성 창을 오픈합니다.


Mac OS X/Cocoa에서 Objective-C class를 선택하고 Next 버튼을 클릭합니다.

파일명에 AppController.m을 입력하고 Finish 버튼을 클릭합니다.

좌측과 같이 AppController.h와 AppController.m 소스 파일이 Classes 아래에 생성되었습니다.

먼저 AppController.h를 클릭하여 소스를 변경합니다.


2) AppController.h
헤더 파일에서 아래에 푸른색으로 되어 있는 부분을 입력합니다.
#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    IBOutlet NSTextField    *textLabel;
    IBOutlet NSTextField    *inputField;
   
    IBOutlet NSButton    *refreshButton;
    IBOutlet NSButton    *leftButton;
    IBOutlet NSButton    *rightButton;

    NSPoint    originalPoint;
}

- (IBAction)setLabel:(id)sender;
- (IBAction)moveLeft:(id)sender;
- (IBAction)moveRight:(id)sender;

@end

인터페이스 빌더에서 생성한 각각의 컨트롤들을 연결하기 위해 IBOutlet 변수와 버튼을 클릭했을 경우에 처리할 IBAction 메소드를 선언합니다.

3) AppController.m
 소스코드에서 아래에 푸른색으로 되어 있는 부분을 입력합니다.
#import "AppController.h"

@implementation AppController

- (void)awakeFromNib {
   
    // 버튼 이미지를 지정
    NSImage *buttonImage = [NSImage imageNamed:NSImageNameRefreshTemplate];
    [refreshButton setImage:buttonImage];

    buttonImage = [NSImage imageNamed:NSImageNameGoLeftTemplate];
    [leftButton setImage:buttonImage];
   
    buttonImage = [NSImage imageNamed:NSImageNameGoRightTemplate];
    [rightButton setImage:buttonImage];
   
    originalPoint = [textLabel frame].origin;
}

- (IBAction)setLabel:(id)sender {
   
    // 입력한 문자를 라벨에 지정하고 라벨의 크기를 문자열의 길이만큼 변경
    [textLabel setStringValue:[inputField stringValue]];   
    [textLabel sizeToFit];
}

- (IBAction)moveLeft:(id)sender {
   
    // 라벨을 초기 위치로 이동
    [[textLabel animator] setFrameOrigin:originalPoint];
}

- (IBAction)moveRight:(id)sender {
    CGFloat xPos;
   
    // 우측 모서리로 이동하도록 윈도우의 크기에서 라벨의 크기를 뺀 위치로 설정
    xPos = [[[NSApp mainWindow] contentView] bounds].size.width;
    xPos -= [textLabel frame].size.width;
   
    // 에니메이션과 함께 라벨의 위치 변경
    NSPoint targetPoint = NSMakePoint(xPos, originalPoint.y);
    [[textLabel animator] setFrameOrigin:targetPoint];
}

@end


4. 연결
다시 인터페이스 빌더로 돌아 가서 작업을 마무리 합니다

1) AppController 인스턴스 생성
라이브러리 윈도우에서 좌측과 같은 Object를 MainMenu.xib 윈도우로 드래그해서 가져다 놓습니다.

Object는 라이브러리 윈도우에서 Cocoa / Objects & Controllers / Controllers내에 있습니다.

아래와 같이 Object가 생성된 것을 확인하시고 Object가 선택된 상태에서 인터페이스 빌더의 Tools/Inspector 메뉴를 클릭하거나 단축키 (Shift + Command + I)를 이용하여 Inspector 창을 오픈합니다.

Inspector 창에서 좌측과 같이 6번째에 있는 App Controller Identity를 선택합니다. (단축키: Command + 6)

Class메뉴의 콤보박스를 클릭하고 Xcode에서 이전 단계에서 생성한 AppController를 선택합니다.


2) 연결
MainMenu.xib 창에서 App Controller를 선택한 상태에서 마우스 우클릭을 하면 아래와 같이 연결 창이 오픈됩니다.


연결창의 각 항목 좌측에 있는 원 모양의 영역에 마우스를 가져가면 우측과 같이 '+' 모양으로 변경됩니다. 이 상태에서 마우스로 '+'를 클릭한 후에 드래그 하여 각각의 해당 항목들에 연결합니다.

마우스를 클릭한 상태에서 파란색 선을 연결할 컨트롤로 가져가면 아래와 같이 컨트롤의 이름과 함께 선택되었을 때 마우스 클릭을 해제합니다.


이런 방식으로 Outlet과 Action을 각각의 컨트롤들과 연결합니다.

  • Outlets / inputField -> Text Field 
  • Outlets / textLabel -> Label
  • Outlets / refreshButton -> Button (첫번째)
  • Outlets / leftButton -> Button (두번째)
  • Outlets / rightButton -> Button (세번째)

  • Received Actions / setLabel -> 버튼 (첫번째)
  • Received Actions / moveLeft -> 버튼 (두번째)
  • Received Actions / moveRight -> 버튼 (세번째)

작업이 완료되면 아래와 같이 연결되었는지 확인합니다.

 
3) 빌드 및 테스트
이제 모든 작업이 완료되었습니다. 인터페이스 빌더와 Xcode에서 변경된 내용을 저장하고, Xcode에서 좌측의 툴바를 클릭하거나 단축키(command + R)를 이용하여 빌드하고 테스트 해 봅니다.


Xcode를 처음 해보시는 분들도 따라 하실 수 있게 최대한 자세하게 설명을 할려고 했습니다. 하지만 제 생각대로 처음 하시는 분들도 무리없이 하실 수 있을지는 잘 모르겠습니다.

잘 안되시는 분들은 아래의 프로젝트 파일을 다운로드 받아서 비교해 보시기 바랍니다.



출처 : http://blog.naver.com/PostView.nhn?blogId=seogi1004&logNo=110085700437

'아이폰어플개발정보' 카테고리의 다른 글

[펌] 2. 간단한 Core Data 예제  (0) 2011.04.09
애플 앱스토어 등록 Tip  (0) 2011.04.09
[펌] 1. Xcode3 첫 어플리케이션  (0) 2011.04.09
[펌] 1.10 기본 콘트롤 사용법  (0) 2011.04.09
[펌] Delegate  (0) 2011.04.09
아이폰 사운드 재생방법  (0) 2011.04.09
Posted by 오늘마감

댓글을 달아 주세요

[출처] - http://www.cocoadev.co.kr/94





흔히 사용되는 컨트롤들의 간단한 사용법을 알아 보겠습니다.
만들려는 예제의 모습은 좌측과 같습니다. 각 컨트롤들의 설정에 따라서 상단 텍스트 필드의 내용을 변경하여 보여주는 샘플을 작성해 보겠습니다.

이 예제를 따라 해보기 위해서는 인터페이스 빌더의 사용법과  인스턴스 생성, 인스턴스와의 연결 등에 관한 기본 내용을 알고 있어야 합니다. 잘 이해가지 않는 분들은 이전 포스트를 확인해 보신 후에 다시 보시기 바랍니다.



1. AppController 생성

XCode 에서 Cocoa Application으로 새로운 프로젝트를 생성합니다. 다시 New File에서 Objective-C Class를 선택한 후에 AppController란 이름으로 새로운 클래스를 생성합니다.

1) AppController.h 변경
이번 장에서 사용할 컨트롤들은 아래와 같습니다. 아래의 컨트롤들을 인터페이스 빌더에서 연결하기 위해 IBOutlet 변수들을 생성합니다.
NSTextField, NSTableView, NSMatrix, NSComboBox, NSColorWell, NSSlider, NSButton, NSProgressIndicator  

사용자의 조작으로 컨트롤의 상태가 변하는 알림 메시지를 받을 메소드를 생성합니다. 각 메소드는 아래와 같습니다.

- (IBAction)setDisplayText:(id)sender;
- (IBAction)adverbSelecterChanged:(id)sender;
- (IBAction)alignSliderChanged:(id)sender;
- (IBAction)notCheckerChanged:(id)sender;
- (IBAction)subjectMatrixChanged:(id)sender;
- (IBAction)colorWellChanged:(id)sender;

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

@interface AppController : NSObject {
    IBOutlet NSTextField* displayString;
    IBOutlet NSTableView* wordList;
    IBOutlet NSMatrix* subjectMatrix;
    IBOutlet NSComboBox* adverbSelecter;
    IBOutlet NSColorWell* colorWell;
    IBOutlet NSSlider* alignSlider;
    IBOutlet NSButton* notChecker;
    IBOutlet NSProgressIndicator* progressBar;   
}

- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView
    objectValueForTableColumn:(NSTableColumn *)tableColumn
            row:(int)row;

- (IBAction)setDisplayText:(id)sender;
- (IBAction)adverbSelecterChanged:(id)sender;
- (IBAction)alignSliderChanged:(id)sender;
- (IBAction)notCheckerChanged:(id)sender;
- (IBAction)subjectMatrixChanged:(id)sender;
- (IBAction)colorWellChanged:(id)sender;

@end


2) AppController.m 변경

TableView는 좌측과 같이 테이블 형식으로 목록을 보여주는 컨트롤입니다. 각 셀에 데이터를 입력하기 위해서는 데이터를 등록하여 주는 dataSource를 지정해야 합니다.

여기서는  나중에 인터페이스 빌더에서 AppController를 dataSource로 등록하겠습니다. tableView의 dataSource가 되면 데이터를 요구하는 메시지에 응답하기 위해서 아래와 같은 두개의 메소드를 구현해야 합니다.

- (int)numberOfRowsInTableView:(NStableView *)tableView;
목록의 갯수를 반환합니다.

- (id)tableView:(NSTableView *)tableView
    objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row

각 셀의 데이터를 반환합니다. 이 반환된 값들로 각 셀들이 채워집니다. 셀에 데이터를 등록하는 것은 다음 포스팅에서 구현해 보겠습니다.

메시지를 처리하는 각 메소드들은 실제 기능을 구현하기 전에 정확히 동작하는지 확인하기 위해서 NSLog를 추가합니다. 소스파일 전체는 아래와 같습니다.

AppController.m
#import "AppController.h"

@implementation AppController

- (void)awakeFromNib
{
}

- (void)dealloc
{
    [super dealloc];
}

- (IBAction)setDisplayText:(id)sender
{
    NSLog(@"Button colicked");
}

- (IBAction)adverbSelecterChanged:(id)sender
{
    NSLog(@"adverbSelecter changed");
}

- (IBAction)alignSliderChanged:(id)sender
{
    NSLog(@"alignSlider Changed");
}

- (IBAction)notCheckerChanged:(id)sender
{
    NSLog(@"notChecker changed");
}

- (IBAction)subjectMatrixChanged:(id)sender
{
    NSLog(@"subject matix");
}

- (IBAction)colorWellChanged:(id)sender
{
    NSLog(@"colorWell changed");
}

- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
    NSLog(@"tableView getRowCount");
    return 1;
}

- (id)tableView:(NSTableView *)tableView
    objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
    NSLog(@"tableView getColumnValue");
    return nil;
}

@end


2. 인터페이스 빌더에서 작업
 
1) 컨트롤 배치

윈도우에 각 컨트롤들이 배치되어야 할 모습은 아래와 같습니다.


팔레트에서 마우스 포인터를 해당 컨트롤 위에 놓으면 좌측의 빨간 화살표가 가르키는 것과 같이 컨트롤의 종류를 확인할 수 있습니다.

위의 이미지를 참조하여 팔레트에서 각각의 콘트롤들을 드래그로 가지고 와서 배치 합니다.





2) 속성 설정
각각의 콘트롤들의 속성을 변경합니다.

NSTextField
텍스트필드의 옵션을 좌측과 같이 설정합니다. 사용자의 입력은 받지 않기 때문에 Editable, Enabled를 해제합니다.


NSTableView
Attributes에서 Columns를 2로 설정합니다.
NSTableView를 더블클릭하면 좌측과 같이 푸른 테두리가  나타납니다. 이 상태에서 컬럼을 더블클릭하여 입력 모드로 변경되면 이름을 변경할 수 있습니다.

각각 목적어, 동사로 변경합니다.

NSMatrix
Rows 는 1 Cols는 2로 설정하고 Mode가 'Radio'로 되어 있음을 확인합니다.

NSComboBox
좌측과 같이 Visible Items를 4로 입력하고 4개의 항목을 추가합니다.

추가는 하단의 입력필드에서 이름을 입력 후에 [+] 버튼을 클릭합니다. 삭제는 아이템을 선택한 후에 [-]버튼을 클릭합니다.



NSColorWell
변 경없이 기본값을 유지합니다.

NSSlider
좌측과 같이 최소값을 0.0, 최대값을 100.0, 기본값을 50.0으로 설정합니다. 세단계만 선택되게 하기 위해 Number Of Markers를 3으로  Stop on ticks marks only를 체크 합니다.


NSButton
Type이  'CheckBox'로 되어 있음을 확인하고 Title에 '부정어로 만듭니다.'로 입력합니다.

NSProgressIndicator  
MinumRange 는 0.0, MaximumRange는 100.0으로 설정하고 Indeterminate를 체크 합니다.

2) AppControll 인스턴스 생성
AppController.h 를 인터페이스 빌더의 MainMenu.nib 윈도우로 드래그 해 놓습니다. Classes 항목에서 AppController를 우클릭하여 Instantiate AppController를 선택하여 인스턴스를 생성합니다.

이제 아래의 연결된 모습을 참조하여 윈도우의 각 항목들을 AppController의 IBOutlet 변수와 IBAction 메소드로 연결합니다.

각 컨트롤들은 아래의 AppController의 IBAction 메소드와 연결됩니다.
  • adverbSelecterChanged <- NSComboBox
  • alignSliderChanged <- NSSlider
  • notCheckerChanged <-NSButton (Check Box)
  • subjectMatrixChanged <- NSMatrix
  • colorWellChanged <- NSColorWell
  • setDisplayText <- NSButton (적용 Button)
 
마지막으로 위에 설명한 대로 좌측과 같이  TableView의 dataSource를 AppControll로 설정합니다.








이 제 컴파일 하고 실행한 후에 각각의 콘트롤의 값과 상태를 변경하여 봅니다. 그리고 RunLog 창에서 아래와 같이 메시지를 보내고 받는지 확인합니다.

잘 동작하지 않는 분들은 아래의 샘플 파일을 다운로드 받으신 후에 비교해 보시기 바랍니다.





이전 포스트에 이어서 프로그램을 완성해 보겠습니다. 이전의 소스에서 아래의 청색으 로 된 부분을 추가합니다.

1. AppController.h 수정

#import <Cocoa/Cocoa.h>

@interface AppController : NSObject {
    NSMutableString *curString;
    NSString* dataArray[3][2];
   
    IBOutlet NSTextField* displayString;
    IBOutlet NSTableView* wordList;
    IBOutlet NSMatrix* subjectMatrix;
    IBOutlet NSComboBox* adverbSelecter;
    IBOutlet NSColorWell* colorWell;
    IBOutlet NSSlider* alignSlider;
    IBOutlet NSButton* notChecker;
    IBOutlet NSProgressIndicator* progressBar;   
}

- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView
    objectValueForTableColumn:(NSTableColumn *)tableColumn
            row:(int)row;

- (IBAction)setDisplayText:(id)sender;
- (IBAction)adverbSelecterChanged:(id)sender;
- (IBAction)alignSliderChanged:(id)sender;
- (IBAction)notCheckerChanged:(id)sender;
- (IBAction)subjectMatrixChanged:(id)sender;
- (IBAction)colorWellChanged:(id)sender;
- (IBAction)wordListChanged:(id)sender;
@end


2. 인터페이스 빌더에서 수정

변경한 소스를 저장한 후에 변경된 사항을 인터페이스 빌더에 적용하기 위해서 다시 AppController.h 파일아이콘을 드래그 하여 인터페이스 빌더의 MainMenu.nib에 놓습니다.

좌측과 같이 윈도우의 TableView중에 목적어 컬럼을 선택합니다. 속성창을 열어 Identifier 항목을 1로 설정합니다.

이와 동일하게 동사 컬럼의 Identifier는 2로 설정합니다.




AppController에서 새로 추가한 메소드인 wordListChanged르 TableView에 연결합니다.

TableView를 선택하고 Control키를 클릭한 채 마우스로 드래그 하여 AppController 인스턴스에 가져다 놓습니다. 좌측의 속성 화면에서 wordListChanged를 선택하고 연결합니다.

(연결이 어려우신 분들은 이전 포스트를 참조하세요.)


3. AppController.m 수정

#import "AppController.h"

@implementation AppController

- (id)init
{
    self = [super init];
   
    curString = [[NSMutableString alloc] init];

    /* 목적어 데이터 설정 */

    dataArray[0][0] = [[NSString alloc] initWithUTF8String:"철수를"];
    dataArray[1][0] = [[NSString alloc] initWithUTF8String:"영희를"];
    dataArray[2][0] = [[NSString alloc] initWithUTF8String:"바둑이를"];
   
    /* 동사 데이터 설정 */
    dataArray[0][1] = [[NSString alloc] initWithUTF8String:"사랑했다"];

    dataArray[1][1] = [[NSString alloc] initWithUTF8String:"싫어했다"];
    dataArray[2][1] = [[NSString alloc] initWithUTF8String:"때렸다"];
   
    return self;
}

- (void)awakeFromNib
{
}

- (void)dealloc
{
    int i, j;
   
    /* 할당된 오브젝트 해제 */
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 2; j++)
        {
            [dataArray[i][j] dealloc];
        }
    }
   
    [curString dealloc];
    [super dealloc];
}

- (IBAction)setDisplayText:(id)sender
{
    int pos = [wordList selectedRow]; // 테이블뷰에서 현재 선택된 열
    if(pos == -1) // 없으면 실행하지 않는다
        return;
   
    /** 조건에 따른 문자열 설정 */
    if([[subjectMatrix selectedCell] tag] == 0)
        [curString setString:[NSString stringWithUTF8String:"나는 "]];
    else
        [curString setString:[NSString stringWithUTF8String:"너는 "]];
   
    [curString appendString:dataArray[pos][0]];
    [curString appendString:@" "];
    [curString appendString: [adverbSelecter stringValue]];
       
    if([notChecker state] == NSOnState)
        [curString appendString:[NSString stringWithUTF8String:" 안 "]];
   
    [curString appendString:dataArray[pos][1]];
   
    /* 색상 설정 */
    [displayString setTextColor:[colorWell color]];
   
    /* 정렬 설정 */
    int align = [alignSlider intValue];

    if(align == 0)
        [displayString setAlignment:NSLeftTextAlignment];
    else if(align == 50)
        [displayString setAlignment:NSCenterTextAlignment];
    else
        [displayString setAlignment:NSRightTextAlignment];
   
    /* 텍스트 출력 */
    [displayString setStringValue:curString];
   
    /* 진행 상태바 에니메이션 중지 */
    [progressBar stopAnimation:self];

}

- (IBAction)adverbSelecterChanged:(id)sender
{
    /* 변경시 진행 상태바 에니메이션 시작 */
    [progressBar startAnimation:self];
}

- (IBAction)alignSliderChanged:(id)sender
{
    [progressBar startAnimation:self];
}

- (IBAction)notCheckerChanged:(id)sender
{
    [progressBar startAnimation:self];
}

- (IBAction)subjectMatrixChanged:(id)sender
{
    [progressBar startAnimation:self];
}

- (IBAction)colorWellChanged:(id)sender
{
    [progressBar startAnimation:self];
}

- (IBAction)wordListChanged:(id)sender
{
    [progressBar startAnimation:self];
}

- (int)numberOfRowsInTableView:(NSTableView *)tableView
{
    /* 테이블 열 갯수 3 반환 */
    return 3;

}

- (id)tableView:(NSTableView *)tableView
    objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
{
    int pos;

    /** 현재 설정되어야 할 TableView의 컬럼을 반환한다. */
    if([[tableColumn identifier] characterAtIndex:0] == '1')
        pos = 0;
    else
        pos = 1;
   
    return dataArray[row][pos];
}

@end


이제 빌드를 하고 실행 하시면 좌측과 같이 어플리케이션이 실행됩니다. 각각의 옵션을 선택하고 [적용] 버튼을 클릭하면 선택된 옵션에 맞추어 상단에 텍스트가 출력됩니다.

옵션에 변동이 일어나면 하단의 바가 에니메이션되며 [적용] 버튼을 클릭하여 적용이 완료되면 진행 상태바의 에니메이션이 중지 됩니다.

전체 프로젝트 소스파일은 아래를 클릭해서 다운로드 받이스면 됩니다.











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

댓글을 달아 주세요

Objecive-C를 좀 보고, Xcode 좀 봐보고 Interface Builder 좀 보고 Hello, World 같은 거 한 번 만들어보고...

슬슬 깊이 들여다보려고 하면 많이 눈에 띄는 것들이 있다.
어쩌구View, 어쩌구Controller 그리고 어쩌구Delegate 이런것들이다.
그 중에 오늘은 delegate에 대해서 한 번 알아보자. 이건 맥/아이폰/팟용 어플을 개발하는데 꼭 알고 넘어가야 할 부분이다.

뭔가 낯설은 단어 delegate. 그치만 단어 그 자체로 받아들이면 된다. 대리인.
delegate을 처음 접한다면 아직 뭔소린지 잘 감이 오질 않을것이다. 그치만 이 글을 다 읽고 나면, 아! delegate 대리인!이 머리속에 자리잡힐 것이다.

우선 기존 개발을 하시던 분이라면,
서브클래싱, 혹은 클래스를 상속받아서 새로운 클래스를 만들어서 사용하는 것
또는 델파이/C++Builder 쪽에서 보면 Event 같은 것이라고 볼 수 있다.

자 그럼 본격적으로.....
UITextField 클래스를 예로 들어보자. UITextField는 사용자에게 텍스트를 입력받는 기능을 하는 클래스이다.
이 클래스의 인스턴스를 하나 만들고 사용을 하면, text 속성을 통해서 입력받은 텍스트를 알아낼 수 있고 textColor 속성으로 글자의 색을 변경할 수 있는 등의 작업을 할 수 있다.

그런데, 만일 이 TextField에서 사용자가 키보드 입력을 시작했을 때 특정한 일을 하게 하고 싶으면 어떻게 할까?
(델파이/C++Builder 사용하는 개발자라면, Edit1->OnChange=Edit1Change; 로 이벤트 연결을 시켜주면 될 것이다.)
Cocoa에서는 TextField에 delegate(대리인)을 지정해주고 그 delegate(대리인)이 지정된 함수를 만들고 그 안에서 하고자 하는 일을 하면 된다.

// <UITextFieldDelegate>라고 입력해서 MyController가 UITextField의 delegate 역할을 할것임을 알려준다.
@interface MyController: NSObject <UITextFieldDelegate> {
UITextField *textField;
}
@end

@implement MyController
-(id)init {
if(self = [super init]) {
textField = [[UITextField alloc] init];
textField.delegate = self; // MyController를 textField의 delegate(대리인)으로 지정한다.
// MyController가 textField에서 지정된 역할을 처리할 수 있게 되었다는 의미이다. 
}
return self;
}
// UITextFieldDelegate의 Method 구현
// UITextFieldDelegate를 도움말에서 찾으면 어떤 Method들이 있는지 확인해볼 수 있고,
// 거기서 필요한 것들을 구현해주면 된다.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
// 이곳에 textField에서 사용자가 무언가 입력을 시작할 때 
// 처리하고 싶은 일을 처리하면 된다.
}
@end

UITextField의 Instance인 textField는 사용자가 텍스트 입력을 시작하면, delegate가 지정되어 있다면 delegate에게 "야! 사용자가 입력시작했다. 뭐 처리할 것 있으면 해!"라고 알려준다. 그럼 delegate(대리인, 위 예에서는 MyController)는 지정된 함수를 구현하고 있으면 되는 것이다.

필수로 구현해야하는 것들도 있고, 옵션으로 필요한 경우에만 구현해도 되는 것들이 있으니 도움말을 참고해서 필요한 것들을 구현해주면 된다.


자, 그럼 이번에는 내가 만드는 클래스에서도 delegate를 한 번 만들어 사용해보자.
//-------------------------------------- MyTestDelegate interface
@interface NSObject (MyTestDelegate)
-(void) testDidBeginSomething:(UIMyClass*)myClass;
-(void) testDidEndSomething;(UIMyClass*)myClass withArgument:(int)arg;
@end
//-------------------------------------- MyTestClass interface
@interface MyTestClass{
id delegate;
...
}
@property (nonatomic, assign) id delegate;
-(void) myMethod1;
-(void) myMethod2;
...
@end;
//-------------------------------------- MyTestClass implementation
@implement MyTestClass
@synthesize delegate;
-(void) myMethod1 {
...
if(delegate && [delegate respondsToSelector:@selector(testDidBeginSomething:)])
[delegate testDidBeginSomething:self];
...
}
-(void) myMethod2 {
...
if(delegate && [delegate respondsToSelector:@selector(testDidEndSomething:withArgument:)])
[delegate testDidEndSomething:self withArgument:100];
...
}
@end
//-------------------------------------- MyTestController interface
@interface MyTestController {
MyTestClass *test;
...
}
...
@end
//-------------------------------------- MyTestController implementation
@implementation MyTestController
-(id)init {
if(self = [super init]) {
test = [[MyTestClass alloc] init];
test.delegate = self; // MyTestController를 test의 delegate로 지정
}
return self;
}
// MyTestClass의 delegate로써 처리할 method들 구현
-(void)testDidBeginSomething:(MyTestClass*)testClass {
// 이곳에 처리할 일들을 처리하면 됨.
// 처리해야할 것이 없으면 이 Method 자체를 구현 안해도 됨.
}
-(void)testDidEndSomething:(MyTestClass*)testClass withArgument:arg1 {
// 이곳에서도 처리할 일들을 처리하면 됨.
// 처리해야할 것이 없으면 이 Method 자체를 구현 안해도 됨.
}
@end

delegate interface를 선언하는 방법은 위처럼 NSObject (Delegate이름) 을 이용해서 선언할 수도 있고, protocol 을 사용할 수도 있는데, protocol을 사용하는 방법은 다음번에 기회가 되면 설명하도록 하겠다.
혹 지금 당장 궁금하다면, 구글링을 하러 고고! (대략 delegate가 어떤 것인지 감이 잡혔다면 금방 이해가 될 것이다.)

아이폰/팟 어플리케이션에서는 UITableView를 이용하는 경우가 많은데, delegate에 대해 감을 잡고 있으면 쉽게 사용할 수 있다. 도움말에서 UITableView와 UITableViewDelegate를 한 번 찾아서 살펴보면 음..이렇게 구성되어 있구나..라고 생각하면 된다.


갑자기 엉뚱한 소리지만, Cocoa를 공부하면서 다시 한 번 C++Builder(델파이) 사용자로서....C++Builder/델파이가 참 초직관적으로 잘 만들어져있다는 생각이 든다......Visual Studio에서 MFC사용하는 것에 비해서는 두말할 나위도 없이...
다 나름대로의 장단점들이 있겠지만, 직관성에 있어서는 C++Builder/델파이가 압승!


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

댓글을 달아 주세요

버튼을 클릭하면 사운드를 플레이 하는 방법입니다.

1. xcode 를 실행합니다.
  가. 맥킨토시 하드를 클릭합니다.
  나. Develper - Application - Xcode 를 클릭합니다.

2. 새로운 프로젝트를 생성합니다.
  가. File - New Project 를 클릭합니다.
  나. iPhone OS - Application 을 선택합니다.
  다. View-Based Application을 선택합니다.
  라. SoundTest 란 이름을 선택하고 저장을 합니다.

3. 프레임워크를 등록합니다.
  가. Group & Files 에서 Frameworks 를 선택합니다.
  나. 오늘쪽 버튼을 클릭하여 Add - Existing Frameworks 를 선택합니다.
  다. AudioTool...framework 를 선택합니다.
  라. AudioToolbox.framework 가 프레임워크 폴더에 추가되었는지 확인 합니다.

4. 헤더파일을 수정합니다.
  가. SoundTestViewController.h 파일을 클레스 폴더에서 찾아 클릭합니다.
  나. #import <AudionToolbox/AudionToolbox.h> 를 임포트 시킵니다.
  다. SystemSoundID 변수를 선언합니다.

#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface SoundTestViewController : UIViewController {
SystemSoundID ssid;
}

5. SoundTestViewController.m 파일을 수정합니다.
  가. viewDidLoad 를 수정합니다.
    -(void)viewDidLoad {
        [super viewDidLoad];
        // 사운드 파일을 생성합니다.
        NSString *sndPath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"wav" inDirectory:@"/"];
        // URL을 생성합니다
        CFURLRef sndURL = (CFURLRef)[[NSURL alloc] initFileURLWithPath:sndPth];
        // 사운드 아이디를 생성합니다.
        AudionServicesCreateSystemSoundID(sndURL, &ssid);
    }
  나. sound.wav 파일을 프로젝트 디렉토리에 복사한 다음 그 파일을 Xcode - Resource 폴더로 드래그하여 추가합니다.
  다. 이제 터치이벤트가 발생하면 플레이 되도록 이벤트를 생성합니다.
    -(void)touchesBagan:(NSSet *)touches withEvent:(UIEvent *)event {
      AudioServicesPlaySystemSound(ssid);
    }
  라. dealloc 에서 사운드를 제거합니다.
    -(void)dealloc {
      AudionServicesDisposeSystemSoundID(ssid);
      [super dealloc];
    }
    마. 이제 Build&Go 를 클릭하여 실행하여 봅니다.

오디오툴박스는 웨이브 파일를 플레이 하며 5초 이내만 재생이 가능합니다.


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

댓글을 달아 주세요

역시 ... 아직 회원분들이 많이 안계신 관계로 저부터 썰을 풀기로 했습니다 ㅋㅋㅋ


사례1. 아... 아이폰 어플개발을 할랴는데 맥북이 필요하다는데 맥북부터 질르자.
개발자 전모씨는 일단 성급한 마음에 맥북이랑 아이폰 책을 질러버렸다.
그 없는돈에도..ㅠㅠ

아..한 100 깨지니까 정신이 혼미하네..
큰맘먹고산 맥북을 열고 xcode 도 깔았는데...
아이폰 책은 따라하기 식이긴한데..
문법을 몰르니 ..쩝.. 접어야지

사례2. 맥북을 열긴열었는데.. 복사는 어케하는거야? 'End'키는 어디있는거야.
개발자 전모씨는 프로그램 개발에 앞서서 매킨토시 사용법부터 익히기로했다.
아이폰 어플개발은.. 저기..멀리 날아가나..

ㅎㅎ 음. 뭔가 사례를 들라고했는데 재미가없군요.
눈치채셨다시피..개발자 전모씨는 접니다 -.-;

일단 아이폰 어플개발하기전에 Objective-C 언어를 익혀야되는데요.
제가 경험한 바로는 Objective-C 기초를 익히는 단계에선 아직 맥북이
필요 없다는겁니다.

첨부터 괜히 질른거죠.
Window 환경에서 Objective-C를 먼저 익히고 그담에 맥으로 넘어갑시다.

윈도우 환경설정 시작합니당.~~

1. 필요한 파일을 다운받읍시당
GNUstep System  0.24.0
 -
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-system-0.24.0-setup.exe
GNUstep Core 0.23.1
-
http://ftpmain.gnustep.org/pub/gnustep/binaries/windows/gnustep-core-0.23.1-setup.exe

dev c++
- 파일첨부 확인(http://www.appsnext.com/work_data/devcpp-4.9.9.2_nomingw_setup.exe)

2. 파일을 설치합니다
GNUstep System  ->GNUstep Core  ->dev c++  순서로 설치하심다.

1. GNUstep System  설치1 -걍 agree


2. GNUstep System  설치2-걍 next 후 설치 화면 지지지직~~



3. GNUstep System  설치3-완료



4. GNUstep Core 설치1-역시 계속 next



5. GNUstep Core 설치2-또...지지지직~~



6. GNUstep Core 설치3- 완료



7.Dev-C++ 설치 첫번째..
얼레..이상한게 뜨네요... 그래도 걍 Go~~



8.Dev-C++ 설치 두번째.. -뭐가있는 지 살펴볼려다가 역시 귀차니즘.. 다음~



9.Dev-C++ 설치 세번째.. -완료

자....다음장에서 계속 이어짐다~~ ^^;


http://www.junapps.com/bbs/board.php?bo_table=03_5&wr_id=3


*<본 강좌는 AppsNext에서 제공되는 강좌입니다. 블로그에 퍼가시거나 카페에 퍼가셔도 좋으나, 반드시 하단에 출처에 AppsNext 를 명시해주시고. 링크도 걸어주셔요>



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

댓글을 달아 주세요

*-info.plist 파일은 App마다 가지고 하나씩 존재하는 파일이며, 해당 App과 관련된 정보를 설정 및 저장하는 프로퍼티 리스트다.

Xcode에는 프로퍼티 리스트를 편집할 수 있는 편집기가 내장되어 있다.

 

 

위 그림 처럼 "key"와 "value"로 구성되어 있다.

 

=== 프로퍼티 key에 대한 설명



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

댓글을 달아 주세요

이번에는 Xcode에 개발자 프로파일을 추가한다.

Xcode는 애플의 개발환경이며, Apple Iphone SDK를 설치하면 자동으로 함께 설치된다.
실행하기 위해서는 데스크탑(바탕화면)의 자신의 하드디스크 (예: Macintosh HD)에 Developer > Applications 디렉토리에 위치한 Xcode를 실행시키면 된다.
 
1. Xcode를 실행한다.

2. 처음 실행하면 위와 같은 화면이 뜨는데, 여기서 보지 말고 메뉴의 Window > Organizer 를 실행시킨다.

 

3. 개발용으로 사용할 아이팟터치(아이폰)을 연결시킨다. 
연결시키면 다음과 같이 인식을 하게 되는데, "Use for Development"를 클릭하면 "Organizer"에 개발용 기기로 등록된다.

4. 다음과 같이 등록되었으면, "Identifider"에 씌여있는 40자리 문자를 복사한다.

5. 다시 "Program Portal"로 돌아가서 좌측 메뉴의 "Devices"를 선택하고, 상단의 "Add Device"를 클릭하여 자신의 기기를 등록한다.

6. "Device Name"은 원하는대로 적고, "Device ID"는 방금 복사했던 "Identifier" 값을 붙여넣기 한다.
그리고 "+"를 눌러 추가하고 "Submit"버튼을 클릭하면 기기가 등록된다.

7. 좌측 메뉴의 "App IDs"를 클릭하고, 오른쪽의 "Add ID"를 클릭하여 ID를 등록한다.

google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);

8. "Apple ID Name"과 "App ID"를 등록한다. 개발자용이므로 아무거나 적어도 된다. 역시나 "+"와 "Submit"버튼을 클릭하여 추가한다.

9. 좌측 메뉴의 "Provisioning"으로 가서 "Add Profile"을 클릭하여 프로파일을 생성한다. (Development탭에서 진행한다.)

10. "Profile Name"을 자신이 원하는대로 적고 "Cetificates", "App ID", "Devices"를 자신이 등록했던 대로 선택하고, "Submit"버튼을 눌러 프로파일을 생성한다.

11. "Action"에 "Download"버튼을 클릭하여 프로파일 파일을 다운로드 받는다. "Download"버튼이 생기기 까지 시간이 좀 걸릴 수 있으므로 "Download"버튼이 없으면, 새로고침을 한다.

12. "Xcode"의 "Organizer"로 돌아와서, 방금 다운로드 받은 프로파일 파일을 "PROVISIONING PROFILES"에 끌어다 놓는다. 그럼 아래처럼 프로파일이 등록될 것이다.

이로써 기기연결을 위한 모든 준비를 마쳤다. 



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

댓글을 달아 주세요

1. 개발 준비
   - 개발을 할 수 있는 맥 컴퓨터 준비 (Mac OS X 설치되어 있어야 함)
   - 실제 개발한 프로그램을 올려서 테스트 해볼 수 있는 아이팟/아이폰 준비

2. 애플 개발자 등록
   - 회사의 경우 사업자 등록증 등을 팩스로 보내고, 확인 전화를 받아서 확인을 한 후 등록 가능
      (99 달러 (약 10만원)의 등록비용이 필요함)

3. 개발환경 구축
   - Xcode, SDK 다운로드 및 설치 (모두 무료)

4. 프로그램 개발
   - 일단은 아이폰 시뮬레이터로 테스트 가능 (5번을 동시에 진행 가능)

5. 디바이스에 올려서 테스트
   - 아이폰을 연결 후 Xcode를 실행하고 Window > Organizer 실행
   - 왼쪽 기기 목록에서 연결한 폰을 선택하고 'Use for development' 버튼만 누르면, 
     알아서 아래 과정들을 모두 진행해줍니다. (아래는 흐리게 처리한 것은 예전에 하던 방식)
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      (각 항목마다 How To 페이지가 있으니 잘 보고 따라하면 됨)
      a. 팀원으로 등록 (개인인 경우 패스)
      b. Development Certificate 받아서 설치
      c. 기기 등록 (100대까지 기기 등록을 할 수 있음)
      d. App ID 생성
      e. Development Provisioning Profile 생성 후 다운로드, 설치
   - 빌드 할 때, Build Info 에서 Provisioning Profile 선택 및 Target을 Device로 설정해서 Build
   => 실제 기기에서 돌아가게 하면서 디버깅 할 수 있음

6. 앱스토어에 등록할 배포용 빌드하기
   - iPhone Developer Program Portal에서 아래 과정을 진행해줘야 함.
      a. 위 5.b에서 한것처럼 Distribution Certificate 받아서 설치
      b. 위 5.e에서 한것처럼 Distribution Provisioning Profile을 생성 후 다운로드해서 설치
      c. Distribution 용 Build Target을 만들고, 
          Build Info에서 설치한 Provisioning Profile을 선택하고, 프로그램 버전 정보, 이름 등 지정 후 빌드.

7. 앱스토어에 등록하기
   - iPhone Dev Center > iTunes Connect > Manage Your Applications
      에 들어가서 Add New Application.
      등록할 때 아래 것들이 준비되어 있어야 함.
      a. 6번에서 만든 배포용 빌드한 바이너리 -> zip 으로 압축한 zip 파일
      b. 512x512 짜리 큰 아이콘 이미지
      c. 스크린샷 (Status Bar를 없앤 320x460 사이즈의 스크린샷 파일)
      d. 프로그램을 설명하는 글
      => 이것들이 준비되어 있으면,  요구하는 정보들을 잘 입력해주면 됨.

8. 등록 심사/대기
    - 7번 과정으로 추가를 하면 애플쪽에서 심사를 한 후 등록 또는 거절 될 수 있음.
       심사 과정은 대략 1주~3주까지도 걸리는 듯함. 
       아주 간단한것이 아니고는 2주 정도 예상하고 있으면 될듯함.
       * 혹 거절되면 다시 수정을 하던해서 다시 등록을 하고, 또 기다려야 함.

9. Bank Info, Tax Info 등록
    - 유료로 파는 것을 등록한다면 이 과정을 처리해줘야 함. (어플 등록 전 해도 되고 등록 후에 해도 됨)
       : iPhone Dev Center > iTunes Connect > Contracts, Tax & Banking Information
         에 들어가서 정보들을 입력

10. 등록 완료
    - 등록완료되면 메일이 오고, 이제 홍보 시작!
       Promotional Codes를 받아서, 사람들에게 나눠줘서 무료로 받아보게 할 수 있음(유료어플의 경우)
       어플리케이션별로 50개씩 받아서 뿌릴 수 있음 (대신, iTunes 미국 AppStore 계정이 있어야 함;;;)
       (iPhone Dev Center > iTunes Connect > Request Promotional Codes)       

11. 내 어플은 몇 개나 다운되었나?
    - iPhone Dev Center > iTunes Connect > Sales/Trend Reports
       에 들어가면, 일/주/월 단위로 어느 지역에서 얼만큼 다운되었는지 볼 수 있음.


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

댓글을 달아 주세요

Cocoa tutorial – linking and using libmysqlclient in your application

Here’s a little tutorial on how to use libmysqlclient in a Cocoa application.

First of all you need to create a new Xcode project; suppose to create it in the directory: /path/to/your/project/.

Then you need to retrieve the libmysqlclient.aand libmysqlclient_r.afiles located in the /usr/local/mysql/lib/default directory. To do this you can, for example, start a new Terminal session and type the following commands:

cp/usr/local/mysql/lib/libmysqlclient.a /path/to/your/project/cp/usr/local/mysql/lib/libmysqlclient_r.a /path/to/your/project/

Now go to Xcode and select “Project” -> “Edit Project Settings” in the main menu. Now select the “Build” tab and make the following changes to all your configurations (Debug and Release):

  • “Architectures”: the same of your libmysqlclient architecture;
  • “Valid Architectures”: architectures compatibles with your libmysqlclient architecture(s);
  • “C/C++ Compiler Version”: GCC 4.2;
  • uncheck “Prebinding”;
  • turn on (if desired) the “Objective-C Grabage Collection”;
  • “C Language Dialect”: C99 [-std=c99];
  • check “Mismatched Return Type”;
  • check “Unused Variables”.

Note that not all of these flags are strictly required for the correct use of libmysqclient.aand libmysqlclient_r.a; you can test them and see what happens when you change some of them.

Now you need to import the libraries. To do so, right click on the group “Frameworks” located in the “Groups & Files” tree in Xcode and select “Add” -> “Existing Frameworks…”. Locate the libmysqlclient.afile and click the Add button. Repeat the operation with the libmysqlclient_r.afile.

Now you need to tell Xcode to copy the two libraries in the bundle directory. To do so, you must create a new copy build phase in your target and put the libraries in it:

  • Expand the “Targets” group in the “Groups & Files” tree;
  • right click on your application and select: “Add” -> “New Build Phase” -> “New Copy Files Build Phase”;
  • in the new window select “Frameworks” in the Destination popup menu;
  • close the window;
  • drag and drop the libmysqlclient.aand libmysqlclient_r.afiles from the Frameworks group to the new “Copy Files” group.

Now you need to copy all the MySQL C API headers in your project directory. To do so you can, for example, do something like this:

cp-R/usr/local/mysql/include//path/to/your/project/mysql_include/

That’s all. To access any MySQL API function, you only need to import the mysql.hand unistd.h

Here’s a short example on how to use the API in a .m file:

... #include "mysql.h"#include "unistd.h"  @implementationAppController   ...   -(void)connect {MYSQL conn; mysql_init(amp;conn);   if(!mysql_real_connect(amp;conn, "127.0.0.1", "", "", "", 0, NULL, 0))NSLog(@"%s", [NSStringstringWithUTF8String:mysql_error(amp;conn)]); elseNSLog(@"Connected"); }@end

Download the test project.



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

댓글을 달아 주세요