[swift] SwiftGen을 이용한 사용자 설정 관리

많은 앱은 사용자 설정을 관리해야 합니다. 예를 들어, 언어 설정, 테마 설정 등을 사용자가 변경할 수 있게 해주는 기능이 많이 있습니다. 이러한 설정을 효율적으로 관리하기 위해, SwiftGen이라는 라이브러리를 사용할 수 있습니다.

SwiftGen이란?

SwiftGen은 iOS 및 macOS 앱의 리소스를 쉽게 관리하기 위한 도구입니다. 리소스 파일을 코드로 접근할 수 있는 형식으로 변환하여, 타이핑 실수나 파일 경로 문제를 예방할 수 있습니다. 각 리소스 유형에 대한 강한 타입과 자동 완성을 제공하므로, 개발자는 안전하게 리소스에 접근할 수 있습니다.

사용자 설정 관리하기

SwiftGen을 사용하여 사용자 설정을 관리하는 예제를 살펴보겠습니다. 이 예제에서는 언어 설정과 테마 설정을 관리하는 기능을 구현합니다.

  1. 먼저, Languages.plist 파일을 생성하고, 아래와 같이 언어 설정 정보를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>en</key>
    <string>English</string>
    <key>ko</key>
    <string>한국어</string>
</dict>
</plist>
  1. Themes.plist 파일을 생성하고, 아래와 같이 테마 설정 정보를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>light</key>
    <string>Light</string>
    <key>dark</key>
    <string>Dark</string>
</dict>
</plist>
  1. SwiftGen.yml 파일을 생성하고, 다음과 같이 설정합니다.
strings:
  inputs: 
    - Resources/Strings
    - Languages.plist
  outputs:
    - templateName: structured-swift4
      output: Resources
      params:
        enumName: Language
        keyColumnName: key
        valueColumnName: value
        tableName: Localizable

xcassets:
  inputs:
    - Resources/Assets.xcassets
  outputs:
    - templateName: swift4
      output: Resources
  1. 프로젝트에 SwiftGen을 추가하고, SwiftGen.yml 파일을 설정에 추가합니다.

  2. 이제, 언어 설정과 테마 설정을 다음과 같이 코드로 접근할 수 있습니다.

// 언어 설정
let currentLanguage = Language.allCases.first { $0.rawValue == UserDefaults.standard.string(forKey: "language") }
let languageName = currentLanguage?.table.localized(for: currentLanguage)

// 테마 설정
let currentTheme = Theme(rawValue: UserDefaults.standard.string(forKey: "theme") ?? "")
let themeName = currentTheme?.rawValue.localized()

위의 코드에서, LanguageSwiftGen을 사용하여 생성된 열거형입니다. 이를 통해 언어 설정 값을 타입 안전하게 가져올 수 있습니다. 마찬가지로, Theme도 열거형으로 정의하여 테마 설정 값을 관리할 수 있습니다.

결론

SwiftGen은 iOS 및 macOS 앱의 리소스 관리를 더 효율적으로 할 수 있도록 도와주는 강력한 도구입니다. 사용자 설정과 같은 리소스를 관리할 때 유용하게 사용할 수 있으며, 타이핑 실수나 경로 문제를 사전에 예방할 수 있습니다. SwiftGen을 사용하여 안전하고 효율적인 앱 개발을 진행해보세요.

참고 자료