2013년 10월 14일 월요일

[iOS] 자동 Sleep 모드로 안 가도록 만드는 방법

예전 버전에서 부터 간단하게 설정하던 것인데, 여기 적어 둡니다.

[UIApplication sharedApplication].idleTimerDisabled = NO;

위와 같이 설정을 하면, 자동으로 idle로 넘어가지 않습니다.


2013년 10월 12일 토요일

[iOS7] 국가별 프로그램명 적용하기.

이건 iOS7에만 해당 되는 것이 아니고, 이전 지역화와 다 관련이 있지만, 일단 iOS7으로 테스트하니, iOS7으로 올립니다.

프로그램의 이름은 InfoPlist.strings의 Bundle display name과 관련이 있습니다.
이 내용은 InfoPlist.strings에 추가하면 됩니다.

위에 파일의 내용을 아래와 같이 추가합니다.


그리고, 실행을 하면, 한글의 경우, 프로그램이름이 지역화 테스트로 표시가 됩니다.





2013년 10월 11일 금요일

[iOS7] 다국어 스트링 지원하기.

iOS App에서 다국어를 지원하는 부분은 크게 3가지로 구성이 된다.
  • 다국어 스트링 적용하기
  • 다국어 리소스 적용하기
  • 국가별 프로그램 명 적용하기
이번 포스트에서는 다국어 스트링 적용만 알아보자.

다국어 스트링 적용하기 위해서, 신규파일로 Localizable.strings 파일을 생성한다.


위와 같이 New > File > iOS Resource > Strings File 선택하고, 이름을 Localizable로 입력한다.

파일이 추가 되었으면, 추가된 Localizable.strings를 선택하고, File Inspector를 통해서 Localize.. 시킨다. 현재 파일을 base로 만든다.
(Xcode 5 기준으로 위와 같이 생성되고, Xcode 4에서는 언어를 선택하게 되어 있다.)

Localize..를 하면, 아래와 같이 Based와 English를 생성이 된다. 

추가 언어를 넣기 위해서는 Project에서 Localization에 언어를 추가하면 된다.

그러면, 소스 코드에서 아래와 같이 사용하면 된다.

    NSLog(@"Name: %@", NSLocalizedString(@"Name", @"Name"));
    NSLog(@"Name: %@", NSLocalizedString(@"Text", @"Text"));
    NSLog(@"MyName: %@", NSLocalizedString(@"MyName", @"Name"));
    NSLog(@"MyText: %@", NSLocalizedString(@"MyText", @"Text"));

위와 같이 사용하면, Default로 Localizable.strings 파일에서 키("Name", "Text", "MyName", "MyText")에 대한 String을 찾아서 표시하게 된다.
만약, Localizable.strings외에 추가로 MyLocalizable.strings를 추가했을 경우, 거기에서 읽어 올 수 있는 방법이 있는가?
 기본적으로  NSLocalizedString은 NSBundle의

- (NSString *) localizedStringForKey: value: table:; 함수를 호출해서 읽어 오는데, table에 전달되는 것이 nil 이거나 파일이 없을 경우, Localizable.strings 파일에서 찾게 되는 것이다.
아래와 같이 직접 NSBundle을 이용해서 MyLocalizable을 넣어 주면, MyLocalizable.strings에서 찾아서 표시하게 된다.











위 코드의 결과를 아래와 같이 볼 수 있다.











여기서, Localizable.strings(Base) 에는
"Name" = "Name";
"Text" = "Text";
만 있고, Localizable.strings(English) 에는
"Name" = "이름 (en)";
"Text" = "텍스트 (en)";
이 있어서, "MyName", "MyText"에 대해서는 Default값이 표시가 된다.

여기서, MyLocalizable.strings(Base) 에는
"MyName" = "MyName";
"MyText" = "MyText";
만 있고, MyLocalizable.strings(English) 에는
"NyName" = "My 이름 (en)";
"MyText" = "My 텍스트 (en)";
이 있어서 "Name"과 "Text"에 대해서, Value로 전달되는 값이 표시된다.