[iOS] 로컬라이즈 텍스트 하기 (Localized String)

앱을 만들 때 이제는 국제화를 고려하지 않을 수 없는 시대가 되었다. 앱에서 사용되는 텍스트를 국제화하기 위해 애플에서는 Localization과 Internationalization을 제공하는데 이 블로그를 통해 Localization하는 방법을 간단히 알아본다.

 

A. 세팅하기.
1. 새 파일 추가한다. iOS->Resource->String File. 파일명은 ‘Localizable.strings’ 설정.
2. 추가하고 싶은 언어를 Project->Info->Localization에서 선택한다. (사진참조)
Screen Shot 2015-01-26 at 10.58.28 AM

3. Localizable.strings 파일을 선택하고, File Inspector 창을 열어서 Localize 버튼을 클릭한다. 그리고 나서 Drop down UI에서 ‘English’를 선택한다. (사진참조)

Screen Shot 2015-01-26 at 11.02.36 AM

4. 추가를 하면 오른쪽에 위치한 File Inspector의 Localization 항목에 English가 선택되어 있을 것이다. 새로 추가한 언어도 클릭하여 추가한다. (사진참조)

Screen Shot 2015-01-26 at 11.06.38 AM

 

5. 왼쪽 새로 추가된 Localizable.strings(Spanish)를 클릭하여 Key/Value형식으로 파일을 작성하면 세팅은 끝이다.

Screen Shot 2015-01-26 at 11.08.04 AM

 

B. 사용하기.
1. 파일 안에 형식은 “KEY” = “CONTENT”; 형식으로 한다.
2. 코드안에서 사용할 때는 ‘NSLocalizedString(@”"), nil)’ 메크로를 호출하여 사용한다.

[iOS] Keychain 기본 개념과 Wrapper Class 제공

Keychain은 무엇인가?

Keychain은 Mac OS X, iOS의 다양한 응용 프로그램에서 사용되는 비밀번호를 저장하는 암호화 되어 있는 저장소이다. 그런데 이것이 왜 필요한가 궁금해 할지 모른다. 예를 들어보자면, 맥북 사용자 혹은 iOS 기기 사용자는 여러가지 앱들을 사용한다. 메세지 앱, 소셜 앱, 유틸 앱, 금융 앱 등등. 각 앱마다 혹은 각 서비스를 사용하기 위해서는 ‘사용자 인증’ 과정이 필요하다. 본인임을 인증하는 과정은 현재 2015년 1월까지도 대부분이 ID & Password 방식으로 인증하는 방식을 사용하고 있다. 그렇기 때문에 각각의 비밀번호를 외우고 있어야하는 번거러움이 생긴다. 모든 서비스에 같은 비밀 번호를 설정하든지, 혹은 각 서비스 별로 사용하는 비밀번호를 안전한 곳에다가 적어두고 사용할 때마다 꺼내 보든지 해야하는데, 이러한 번거러움을 해결하고자 만들어진 것이 바로 Keychain이다. Macbook 사용자들은 Keychain에 저장되어 있는 비밀번호를 사용하기 위해서 컴퓨터 root 권한의 비밀번호를 치기만 하면 각각 앱, 혹은 서비스에서 Keychain에 저장한 오래되어 기억나지 않는 비밀번호를 사용할 수 있다. iOS 같은 경우에 Keychain은 각 앱에서 저장한 정보를  가지고 올 수 있는데, Provisioning profile 별로 사용경로가 구분이 된다. 쉽게 말하자면 같은 앱이라 할찌라도 만약 개발 단계에서 Profile이 바뀐다면 그전에 Keychain에 저장해 둔 정보를 빼올 수 없을 것이다.

 

언제 Keychain을 사용할 것인가?

앱 개발자 입장에서 생각해보자. 기기에 데이터를 저장을 할 수 있는 여러가지 방법이 존재한다. 각자의 경험에 따라 떠오르는 것이 다르겠지만,  기본적으로는 데이터베이스 혹은 Core Data, NSDefaultUser, Keychain, .plist 파일 등등. 저장할 방법도 다양하며 각각마다 만들어진 목적이 다르다. 그럼 Keychain은 언제 사용할 것인가? Keychain의 가장 큰 장점은 ‘보안’이다. 그렇기 때문에 사용자의 소중한 정보를 저장하고자 한다면 Keychain을 사용하는 것이 옳다. (분명 다른 매체를 통해서 데이터 저장이 가능하다. 분명히 해둘 것은 불가능한 것이 아니라 비밀번호, 혹은 각종 서비스의 API를 사용할 때 사용되는  secret Key, 혹은 Access Token 같은 보안이 중요한 데이터는 암호화를 하여 저장 관리하는 Keychain에 다가 저장하는 것이 옳은 방법이라는 것이다.)

 

어떻게 Keychain 서비스를 사용하는가?

애플에서는 Keychain 서비스 사용방법을 설명하기 위해 샘플소스를 공개하고 있다. Stack Overflow에 관련 질문에 대한 도 있으니 한번 살펴보기 바란다. 그리고 개인 Github에 Swift용과 Objective-C용으로 올려놓았으니 한번 사용해보기 바란다. 헤더 파일은 아래와 같이 간단하다. 저장하고자 하는 정보가 있다면 key와 함께 NSData 형식으로 넘기면 된다.

  1. @interface KeychainHelper : NSObject
  2.  
  3. + (BOOL)saveWithKey:(NSString *)key andData:(NSData *)data;
  4. + (NSData *)loadWithKey:(NSString *)key;
  5. + (BOOL)deleteWithKey:(NSString *)key;
  6. + (BOOL)clear;
  7.  
  8. @end