[swift] Swift에서 키체인을 사용하여 사용자 맞춤 언어 설정하기

언어 설정은 앱의 다국어 지원에 중요한 역할을 합니다. 사용자가 언어를 변경하면 앱은 해당 언어로 콘텐츠를 표시해야 합니다. 이를 위해 Swift에서 키체인을 사용하여 사용자 맞춤 언어 설정을 저장하고 관리하는 방법을 알아보겠습니다.

1. 키체인 라이브러리 가져오기

키체인을 사용하기 위해 Security.framework을 프로젝트에 추가해야 합니다. 프로젝트 네비게이터에서 프로젝트 파일을 선택하고 Build Phases 탭을 선택합니다. 다음으로 Link Binary With Libraries 섹션을 찾아 + 버튼을 클릭한 후 Security.framework을 추가합니다.

2. 키체인에 언어 설정 저장하기

다음은 키체인에 사용자 언어 설정을 저장하는 코드입니다.

import Security

let kLanguageKey = "UserLanguage"

func saveLanguageToKeychain(language: String) {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: kLanguageKey,
        kSecValueData as String: language.data(using: .utf8)!,
    ]
    
    let status = SecItemAdd(query as CFDictionary, nil)
    if status == errSecSuccess {
        print("언어 설정이 성공적으로 저장되었습니다.")
    } else {
        print("언어 설정 저장에 실패했습니다.")
    }
}

이 코드는 SecItemAdd 함수를 사용하여 사용자 언어 설정을 키체인에 저장합니다.

3. 키체인에서 언어 설정 가져오기

다음은 키체인에서 사용자 언어 설정을 가져오는 코드입니다.

func loadLanguageFromKeychain() -> String? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: kLanguageKey,
        kSecMatchLimit as String: kSecMatchLimitOne,
        kSecReturnAttributes as String: true,
        kSecReturnData as String: true,
    ]
    
    var item: CFTypeRef?
    let status = SecItemCopyMatching(query as CFDictionary, &item)
    
    if status == errSecSuccess {
        if let itemDict = item as? [String: Any],
           let data = itemDict[kSecValueData as String] as? Data,
           let language = String(data: data, encoding: .utf8) {
               print("언어 설정을 성공적으로 가져왔습니다.")
               return language
        }
    }
    
    print("언어 설정을 가져오는데 실패했습니다.")
    return nil
}

이 코드는 SecItemCopyMatching 함수를 사용하여 키체인에서 사용자 언어 설정을 가져옵니다.

4. 언어 설정 사용하기

이제 키체인에서 언어 설정을 가져와서 앱에서 사용할 수 있습니다. 아래와 같이 사용자 언어 설정을 가져오고 해당 언어로 앱 내의 콘텐츠를 로드합니다.

if let language = loadLanguageFromKeychain() {
    // 사용자 언어 설정을 가져왔을 때의 처리 로직
    print("사용자 언어 설정: \(language)")
} else {
    // 사용자 언어 설정을 가져오지 못했을 때의 처리 로직
    print("사용자 언어 설정이 없습니다.")
}

정리

이렇게 Swift에서 키체인을 사용하여 사용자 맞춤 언어 설정을 저장하고 관리할 수 있습니다. 이를 통해 앱의 다국어 지원을 개선하고 사용자에게 더 좋은 사용자 경험을 제공할 수 있습니다.

참고 자료