기타2013. 9. 14. 16:10

 

짜릿한 역전승 즐거운 감상하시기 바랍니다.

'기타' 카테고리의 다른 글

파워디렉터를 이용하여 워터마크 삽입하기  (0) 2015.07.01
마이의 새로운 전략 전술 공개합니다.  (0) 2013.09.14
Mac, ip-time 그리고 VPN  (0) 2013.02.12
상식 상식  (0) 2012.06.15
우리은행 구로점  (0) 2012.05.22
Posted by 다오나무
iOS2013. 7. 10. 15:08

PHP로 혹시 apple push notification service를 구축하려고 하시나요?

아마도 여러분께 이 포스팅이 유용할지도 모르겠네요.



최근 아이폰 어플리케이션을 런칭하면서 php로

apple push notification service를 구축하는 경험을 했습니다.


APNS(Apple Push Notification Service)는 애플 푸시 노티피케이션 서비스입니다.




아이폰에서 흔히 경험할 수 있는

어플리케이션에서 마치 문자메시지처럼 새로운 소식이나 메시지를 알려주는 서비스입니다.



대략적인 작동방식에 대한 설명을 드리자면

애플의 푸시 서버로 특정 애플 기기에 대한 token과 메시지 내용을 전달하면

애플의 푸시서버는 이를 받아 해당 token에 해당하는 기기로

푸시 메시지를 쏩니다.




APNS에 대한 애플의 문서를 번역한 자료입니다. 구축전에 한번 가볍게 읽어보시면 좋을것 같습니다.




자 그럼 이제 PHP버전의 APNS 라이브러리를 소개합니다.



1. Esay APNS




2. APNS-PHP




3. PHP-APNS





PHP의 APNS 라이브러리는 위의 3가지로 크게 나뉩니다.

그중에서도 제가 가장 강추하는 라이브러리는 1번에 소개된 EASY APNS 입니다.


추천하는 이유는 구축하기 가장 쉽고, 메뉴얼도 가장 깔끔합니다.


EASY APNS의 설치는 크게 4단계로 구분됩니다.


1. PHP 소스코드 업로드하기

2. mysql 테이블 생성하기

3. 노티피케이션 전송을 위한 cron job 설정하기

4. 아이폰 어플리케이션 소스코드에 APNS 적용하기



각각의 설치 방법은 웹사이트에 방문하시면 아주 친절하게 소개가 되어있습니다.

EASY APNS는 개발버전과 배포버전을 구분하여 push 보내기가 가능하며

사용자가 해당 어플리케이션을 삭제하였는지 feedback에 대한 처리도 하기 때문에

매우 유용합니다.


다만 이것을 구현하실 여러분들이 조금 더 수고해주셔야 하는부분은


EASY APNS의 매뉴얼대로 구축을 마치고 테스트를 하시면

EASY APNS는 사용자의 push 요청을 "큐"로 쌓아두고 있다가

cron job이 실행될때 이 쌓였던 push에 대한 요청들을 한꺼번에 처리합니다.


즉 cron job 설정을 한시간으로 해놓으면 push 가 매시각 한번씩 보내지는 것이고

1일단위로 설정해놓으셨다면 push가 일단위로 보내집니다.


그래서 혹시 즉시성을 요구하는 푸시 서비스를 구현하실때는

APNS 객체의 _pushMessage 메소드를 직접 호출하셔야 합니다.

이는 아마 소스코드 보시면 왠만한 PHP개발자 분들이라면 알수 있기에 자세한 설명은 넘어가겠습니다.



개발자분들의 칼퇴를 기원하며....


출처 : http://trend21c.tistory.com/1049

'iOS' 카테고리의 다른 글

PHP - cURL 비동기 통신  (0) 2013.12.01
셀 높이 조절  (0) 2013.06.25
앱 정보 가져오기 (앱이름, 버전)  (0) 2013.06.19
스토리보드 커스텀 셀 (공개)  (0) 2013.06.12
유니코드 출력  (0) 2013.02.01
Posted by 다오나무
iOS2013. 6. 25. 18:54

This sample code shows how we can create uitableviewcell height dynamically based on the text it consists.
Let assume we have UILabel in cell which contains some text, and code below  creates the appropriate cell in tableview depending on the label size :

1. Lets define some constants for the program:
      #define FONT_SIZE 14.0f
      #define CELL_CONTENT_WIDTH  305.0f
      #define CELL_CONTENT_MARGIN  8.0f

2. Return the height of each cell depending on its label size : 

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
        NSString *text =@"Read your text for each cell here (from Array or Dictionary)";
         // calculating the size of the text/string
        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
  
         // Calculating the height of cell
              CGFloat height = MAX(size.height, 44.0f);
              return height + (CELL_CONTENT_MARGIN * 2);

}

3.  Now lets create cell having UILabel init:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *CellIdentifier = @"Cell";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
    }
// Below two line code will insure that there will be no overlapping/blurr of custom views created inside cell
    for (UIView * view in cell.contentView.subviews) {
        [view removeFromSuperview];
    }


          NSString *text = @"Read your text for each cell here (from Array or Dictionary)";
          UILabel *descriptionLabel = [[UILabel alloc] initWithFrame: CGRectMake(10, 8, 278, 40)];
          // 40 choose the height of label double of normal label size
           descriptionLabel.adjustsFontSizeToFitWidth = NO;
           descriptionLabel.text = text;
             [cell.contentView addSubview:descriptionLabel];
             [descriptionLabel setNumberOfLines:0];
           CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);
           CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
           [descriptionLabel setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];

 return cell;
    
}

Posted by 다오나무
iOS2013. 6. 19. 17:39

////////////////////////////////////////////////////////////////////////////////////

// 앱 정보 가져오기

NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];


// 앱 버전

NSString *szAppVersion = [ infoDict objectForKey:@"CFBundleShortVersionString"];

// 빌드 버전

NSString *szAppBuildVer = [ infoDict objectForKey:@"CFBundleVersion"];

// 앱 이름

NSString *szAppName= [ infoDict objectForKey:@"CFBundleDisplayName"];

Posted by 다오나무
iOS2013. 6. 12. 16:00

파트 1

http://www.youtube.com/watch?annotation_id=annotation_989047&v=fnzkcV_XUw8&src_vid=0AsChJk422c&feature=iv


파트 2

https://www.youtube.com/watch?v=0AsChJk422c&noredirect=1

'iOS' 카테고리의 다른 글

셀 높이 조절  (0) 2013.06.25
앱 정보 가져오기 (앱이름, 버전)  (0) 2013.06.19
유니코드 출력  (0) 2013.02.01
[iPhone]keychain 을 이용한 id, password 저장  (0) 2013.01.16
[iPhone]keychain 을 이용한 id, password 저장  (0) 2012.12.18
Posted by 다오나무
기타2013. 2. 12. 16:59

VPN : Virtual Private Network..

학생때 부터 많이 들어온 용어. 

보안을 강화해서 가상으로 터널링을 해준다는 식으로

개념만 대~~~충 알고 있던 녀석.


오늘에서야 처음으로 실전에 응용해 보았다.


회사 공유기(ip-time) 가 VPN 서버 기능이 제공되어서 VPN 설정을 했다.

VPN 설정을 하면, 외부에서도 회사 사내망의 네트워크에 연결 된 것과 동일한 조건을 만들어 준다.


즉, 사내망 안에서만 접근할 수 있는 samba 파일 서버라던가, 회사 안에 있는 네트웍 프린터 라던지, 

회사 내에서만 접근 할 수 있는 녀석들에게 외부에서도 접근이 가능해 지는 것!


사실, 프로젝트 이미지 리소스를 공유하기 편리한 방법을 찾느라 시도해 봤다.



여기서 윈도우는 설명이 많이 있지만, 맥 os 는 별로 없고 옛날 것들이라서 

새로이 끄적 거리는 바.



우선...

회사 공유기 설정 (VPN서버 설정)


외부에서 접근할 네트워크에 존재하는 VPN 서버의 설정이다. 여기서는 공유기가 VPN서버 역할을 한다.

공유기의 VPN 설정에서

1. 동작모드 : 실행

2. 암호화 : 없음

으로 적용한 뒤,


외부에서 VPN연결에 사용할 계정을 추가한다.

아래의 예는 계정은 vpn1, 암호, 할당받을 ip 주소는 192.168.0.201 로 설정한 것이다.. 

이때 공유기의 내부 네트워크 설정에서 자동 할당되는 ip 주소의 범위는 200 을 넘지 않도록 했다.

즉, vpn 연결에 사용할 ip 주소가 내부 자원에 자동 할당되지 않도록 했다.


공유기의 vpn 설정 화면, vpn1 이 접속됨으로 보인다. 

그렇다, 현재 난 집에서 vpn1 계정으로 회사에 연결해, 회사의 공유기에 접근해서 스크린샷을 찍었다.



서버 설정은 이걸로 완료.



다음은...

맥에서의 설정 (VPN 클라이언트 설정)


1. 맥의 환경설정, 네트워크로 들어간다.

2. 네트워크 어댑터 목록이 있는 화면 하단에 보이는 + 버튼을 누르고 아래 그림처럼 설정 한다.


생성을 누르면....

1. 서버주소 : 회사 공유기가 할당받은 공인 ip 주소.

       회사 공유기의 시스템요약정보를 보면 '외부 IP 주소' 라고 보이는 곳에 적힌 ip 주소.

2. 계정이름 : 공유기에 생성한 vpn 계정 이름. 내 경우는 vpn1 이다.

3. 암호화 : 없음

4. 인증설정을 누른 뒤, 암호 칸에 공유기에 생성한 계정의 암호를 입력한다.

그리고, 고급을 눌러 VPN연결을 통해 모든 트래픽 허용을 체크한다.



다시 승인을 누르고, 연결 버튼을 누르면 아래처럼 연결이 된다.


연결된 모습. vpn에서 할당 받은 ip 주소가 보인다. 

'메뉴막대에서 VPN 상태보기'를 체크해 두면 메뉴막대에 연결상태가 표시된다.

 






& 그리고...

뽀나스..


여러분의 한방 솔루션을 위해, 오늘 직접 겪은 삽질을 공유한다. ㅠㅠ


1. VPN 연결이 안되는가??

  - 혹시 회사 내에서 접근을 시도했다면.. 퇴근하고 집에가서 해보자.

  - 혹시 머리를 좀 써서 맥의 사내망 연결을 끊고 와이브로를 연결해 시도했다면,, 기특하지만... 

      vpn 연결이 1초쯤 되었다가 끊기는,   촘 짜증나는 현상을 보게 될것이다.

  - 스마트폰 테더링으로 시도해보자... (엄청난 속도와 3g 데이타용량은 본인 책임)

  - 스마트폰에도 vpn 설정이 있다. 스마트폰에서 vpn 연결이 된다면 공유기의 설정은 잘 된 것이다. 


2. VPN 연결은 성공?

  이제 회사 삼바 서버에 접근해 보자.

  회사 내에서 하는 것과 똑같이 맥 파인더에서 cmd - k 를 눌러서 smb://192.168.0.xx 처럼 입력하고 접근하면 된다.

  어라... 

  그런데 탐색중만 한~참 뜨고 결국 연결이 안된다면,

  현재 인터넷에 연결된 어댑터의 ip 주소를 확인해 보자.


  보통 집에서도 공유기를 쓰니,  집 인터넷 연결도 192.168.0.xxx,  vpn의 ip도 192.168.0.xxx 처럼

  같은 서브넷일 확률이 높다.


  이런 경우라면 어쩔 수 없이 

  집 공유기의 내부 네트워크에 사용되는 서브넷 대역을 변경해라. (예를 들면 192.168.1.xxx 처럼 중복 되지 않도록) 


3. 사족
  위 네트워크 환경 그림처럼, 가상의 네트워크 어댑터가 하나 더 추가되는 개념이다.
  원래 내 네트워크 연결도 게이트웨이가 있어서 외부(일반 인터넷)망으로 나갈 수 있고, 
  VPN 어댑터도 게이트웨이가 생겨서 외부 망으로 나갈 수 있게 되는데,,,
  일반 외부망 연결도 vpn을 타고 회사를 거쳐 외부와 연결 되는건 아닐까? ㅡ.ㅡa
  우선순위 설정이 안보인다. ;;

  어댑터 우선 순위를 설정 해 줄 수 있다.
  네트워크 설정에 어댑터 목록 하단의 톱니바퀴 모양을 눌러 우선순위를 설정 할 수 있다.

여튼, 이제 언제 어디서나 사내망에 연결해서 일을 할 수 있게 된거다! -_-;

끝!

'기타' 카테고리의 다른 글

마이의 새로운 전략 전술 공개합니다.  (0) 2013.09.14
모두의 마블 for kakao 프로게이머 미친 주사위 놀음.  (0) 2013.09.14
상식 상식  (0) 2012.06.15
우리은행 구로점  (0) 2012.05.22
국회의사당 멋진 사진  (0) 2012.05.21
Posted by 다오나무
iOS2013. 2. 1. 17:39

아이폰 어플을 개발하다 보면

그냥 키보드로 입력하는 문자이외에 유니코드에 들어있는 특수문자를 출력해야 할 필요가 생깁니다.

그럴 때 사용하는 필자의 방법인데요 별것 아니지만 혹시 생각이 안날까봐 적어둡니다.

1. 코드표를 확인한다.
2. unichar 변수에 코드값을 입력한다.
3. NSString로 변형한다.
4. 출력한다.


그럼 자세히 알아보죠..

1. 코드표를 확인한다.
여러가지 방법이 있겠지만 저같은 경우엔 맥북에서 확인할때 오픈오피스를 주로 사용합니다.


메뉴- 삽입 - 기호/문자표 를 클릭합니다.

필요한 특수문자를 잘 찾아봅니다. 폰트를 잘보시고요 아이폰에 있는 폰트를 선택해서 하셔야 하죠. 없는 폰트에서 고르면...
아이폰에서도 안나오겠죠?

2. unichar 변수에 코드값을 입력한다.

unichar unicode = 0x00A9;//©


3. NSString로 변형한다.

NSString * tmp = [NSString stringWithCharacters: &unicode length:1];


4. 출력한다.

NSLog(@"출력 %@",tmp);



쉽죠?
오늘은 여기까지..

Posted by 다오나무
iOS2013. 1. 16. 15:27

NSUserDefaults 에 사용자 정보를 저장하기에는 그렇고 별도로 암호화/복호화 하기도 번거롭고 해서
중요한 정보인 사용자 id, password를 저장해놓고 사용하기 위해 keychain을 사용하였다.


//애플 래퍼런스 문서 (해당 셈플코드에서 KeychainItemWrapper 클래스 소스를 가져다 쓰기바람 )


// framework 에 Security.framework 추가.

NSString *idKey = @"id";
NSString *pwKey = @"password";

KeychainItemWrapper * idKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:idKey accessGroup:nil];
[idKeychain setObject:idValue forKey:(id)kSecAttrAccount];
KeychainItemWrapper * pwKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:pwKey accessGroup:nil];
[pwKeychain setObject:pwValue forKey:(id)kSecValueData];
//[idKeychain resetKeychainItem];
//[pwKeychain resetKeychainItem];
NSLog(@"id  :  %@",[idKeychain objectForKey:(id)kSecAttrAccount]);
NSLog(@"pw :  %@",[pwKeychain objectForKey:(id)kSecValueData]);
[idKeychain release];
[pwKeychain release];

위와 같이 사용할 경우 id, pw를 저장 할 수 있으며 resetKeychainItem을 사용하여 초기화 시킬 수 도 있다.
해당 key(kSecAttrAccount,kSecValueData) 값당 하나의 데이터 밖에 저장할 수 없는 구조인거 같다.
자세한 내용은 문서와 셈플 코드를 참조...

Posted by 다오나무
우분투2013. 1. 4. 20:27

맨티스 1.1.1 버젼을 사용하다가 이번에 1.1.6 버젼으로 업그레이드를 했습니다. ChangeLog를 살펴보니 1년동안 업그레이드를 착실히 해온 것 같습니다. 새로운 버젼을 설치 하면서 과정과 사용법을 간단히 정리해 보았습니다.

맨티스 설치사양은 아래와 같습니다.

  • MySQL 4.1.1 이상
  • PHP 4.3.0 이상
  • 아파치, IIS등의 웹서버


1. 다운로드 및 설치
1) 다운로드
맨티스 다운로드 페이지나 혹은 프롬프트 상태에서 아래와 같이 맨티스 설치 파일을 다운로드 받은 후에 압축을 풉니다.
 

> wget http://downloads.sourceforge.net/mantisbt/mantisbt-1.1.6.tar.gz?modtime=1228833846&big_mirror=0
> tar xvzf mantisbt-1.1.6.tar.gz


2) 링크
mantis로 접근하기 위해 압축이 풀린 디렉토리에 심볼릭링크를 걸어줍니다.

> ln -s ./mantisbt-1.1.6 mantis


3) 설치
웹브라우져에서 http://[YOUR-DOMAIN]/mantis/admin/install.php를 실행하여 설치를 시작합니다. 먼저 아래와 같은 첫화면에서 DB 접속정보를 입력합니다.


MySQL 관리자 권한이 있는 계정을 'Admin Username'과 'Admin Password' 필드에 입력하시면 설정한대로 Database와 계정을 생성합니다. 입력을 완료한 후에 'Install/Upgrade Database' 버튼을 클릭합니다.

다음단계에서는 'Write Configuration File(s)'에 오류가 발생합니다. 이는 mantis 루트에 config_inc.php 파일을 생성할 권한이 없어서 입니다. 아래의 작업으로 해결할 수 있습니다.

4) config_inc.php 설정
기존 샘플 파일(config_inc.php.sample)을 아래와 같이 복사합니다.

> mv config_inc.php.sample ./config_inc.php


config_inc.php 파일을 열어 오류메시지에 있는 내용대로 아래와 같이 DB를 설정합니다.

$g_hostname = 'localhost';
$g_db_type = 'mysql';
$g_database_name = 'bugtracker';
$g_db_username = '[USER-NAME]';
$g_db_password = '[USER-PASSWORD]';


기본 메일계정을 설정합니다.

# --- email variables -------------
$g_administrator_email  = 'admin@YOUR-DOMAIN';
$g_webmaster_email      = 'admin@YOUR-DOMAIN';

# the "From: " field in emails
$g_from_email           = 'noreply@YOUR-DOMAIN';

# the return address for bounced mail
$g_return_path_email    = 'admin@YOUR-DOMAIN';


기본으로 한글사용을 위해 아래와 같이 추가합니다.

$g_default_language = "korean";


* admin 디렉토리 삭제
마지막으로 ./admin 디렉토리를 삭제합니다. admin 디렉토리는 초기설치와 관련된 파일들이 위치해 있어 설치후에는 필요가 없이 권한없이 접근할 수 있기 때문에 삭제합니다. 삭제하지 않으면 로그인 화면에서 오류가 표시됩니다.

> rm -dfr ./admin/


5) 로그인
웹브라우져에서 http://YOUR-DOMAIN/mantis 로 들어 갑니다. 아래와 같이 맨티스 사이트가 나오면 오류없이 설치된 것 입니다.


관리자 아이디인 'administrator'와 초기 기본 패스워드인 'root'를 입력하고 로그인 합니다. 관리자 패스워드는 계정관리로 들어가 반드시 변경해야 합니다.

2. 사용자 계정
'관리/사용자 관리' 메뉴로 들어가 '계정생성' 버튼을 클릭하여 사용자를 추가합니다. 계정 생성후에 상세한 옵션이나 권한을 설정할 수 있습니다.


이메일로 계정등록이 발송되기 때문에 이메일 주소를 정확히 입력하셔야 합니다. 테스트를 하여보니 제 서버에서는 이메일이 발송 되지 않았습니다. 

* 이메일 발송 오류
맨티스 루트디렉토리에 있는 config_defaults_inc.php에서 아래의 g_phpMailer_method를 0으로설정되어 있던 것을 아래와 같이 1로 변경하였더니 이메일이 정상적으로 발송되었습니다.

# select the method to mail by:
# 0 - mail()
# 1 - sendmail
# 2 - SMTP
$g_phpMailer_method     = 1;

 
같은서버에 있던 이전 버젼은 0으로 mail()을 사용해도 발송되었는데 이번 버젼에 문제가 있는 것인지 다른 문제가 있는 것인지 모르겠습니다. 저는 0일 경우에는 발송이 안되고 1과 2일 경우에는 발송이 되었습니다.

3. 프로젝트
1) 프로젝트 생성
'관리/프로젝트 관리' 메뉴로 들어가 새로운 프로젝트를 생성합니다. 역시 등록 후에 아래와 같은 상세한 설정을 할 수 있습니다.


2) 서브 프로젝트
연관된 서브프로젝트를 생성하고 관리할 수 있습니다.


3) 버젼
버젼을 등록하고 관리합니다.


3) 분류
이슈등록시 지정할 분류를 관리합니다.


4) 사용자
프로젝트에 관련된 사용자를 추가하고 권한을 설정할 수 있습니다.



4. 이슈 등록 및 확인
1) 사용자 등록
사용자 계정(testID)로 로그인하여 '이슈보고하기' 메뉴를 클릭합니다. 해당 프로젝트를 선택하고 버튼을 클릭하여 필드를 입력하고 등록합니다.


아래는 등록된 이슈목록입니다.


2) 관리자 확인
다시 관리자로 로그인 하면 메인화면에서 새로운 이벤트를 확인할 수 있습니다. 할당되지 않은 이슈에는 담당자를 할당하거나 바로 처리할 수 있습니다.


5. 기타
1) 위키
위키설정은 사실 큰 의미는 없습니다. config_default_inc.php파일에서 g_wiki_enable 속성을 ON으로 하면 메뉴에서 wiki의 링크가 추가됩니다.

#####################
# Wiki Integration
#####################
 
 # Wiki Integration Enabled?
 $g_wiki_enable = ON;

 # Wiki Engine (supported engines: 'dokuwiki', 'mediawiki', 'xwiki')
 $g_wiki_engine = 'dokuwiki';

 # Wiki namespace to be used as root for all pages relating to this mantis installation.
 $g_wiki_root_namespace = 'mantis';

 # URL under which the wiki engine is hosted.  Must be on the same server.
 $g_wiki_engine_url = $t_protocol . '://' . $t_host . '/%wiki_engine%/';


2) 사용자화
웹에서 관리 메뉴와 config_default_inc.php 파일을 변경하여 용도에 맞게 변경할 수 있습니다.

* 커스텀 필드 등록
아래와 같이 사용자 필드를 등록할 수 있습니다. 이외에 권한등 다양한 옵션이 있습니다.


등록된 필드를 프로젝트에 링크하며 해당 프로젝트의 이슈 등록시 사용자 등록필드가 출력됩니다.


* 디자인 변경
core 디렉토리의 html_api.php의 함수들을 수정하여 페이지마다 공통적인 top, bottom과 그외 다른 디자인을 변경할 수 있습니다.

이외에도 공지사항, 문서관리등과 함께 편리하게 이용할 수 있는 기능들이 많이 있습니다. 장단점이 있지만 개인적으로는 Trac보다는 Mantis가 편한 것 같습니다.


 

Posted by 다오나무
iOS2012. 12. 18. 15:37

NSUserDefaults 에 사용자 정보를 저장하기에는 그렇고 별도로 암호화/복호화 하기도 번거롭고 해서
중요한 정보인 사용자 id, password를 저장해놓고 사용하기 위해 keychain을 사용하였다.


//애플 래퍼런스 문서 (해당 셈플코드에서 KeychainItemWrapper 클래스 소스를 가져다 쓰기바람 )


// framework 에 Security.framework 추가.

NSString *idKey = @"id";
NSString *pwKey = @"password";

KeychainItemWrapper * idKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:idKey accessGroup:nil];
[idKeychain setObject:idValue forKey:(id)kSecAttrAccount];
KeychainItemWrapper * pwKeychain = [[KeychainItemWrapper alloc] initWithIdentifier:pwKey accessGroup:nil];
[pwKeychain setObject:pwValue forKey:(id)kSecValueData];
//[idKeychain resetKeychainItem];
//[pwKeychain resetKeychainItem];
NSLog(@"id  :  %@",[idKeychain objectForKey:(id)kSecAttrAccount]);
NSLog(@"pw :  %@",[pwKeychain objectForKey:(id)kSecValueData]);
[idKeychain release];
[pwKeychain release];

위와 같이 사용할 경우 id, pw를 저장 할 수 있으며 resetKeychainItem을 사용하여 초기화 시킬 수 도 있다.
해당 key(kSecAttrAccount,kSecValueData) 값당 하나의 데이터 밖에 저장할 수 없는 구조인거 같다.
자세한 내용은 문서와 셈플 코드를 참조...

Posted by 다오나무