[swift] SwiftGen을 활용한 내비게이션 처리 방법

소개

iOS 앱 개발에서 내비게이션 처리는 매우 중요한 부분이다. 사용자가 앱 내에서 쉽게 이동하고 찾기를 할 수 있도록 하는 것은 좋은 사용자 경험을 제공하기 위함이기 때문이다. 이번 포스트에서는 SwiftGen이라는 도구를 활용하여 내비게이션 처리를 어떻게 좀 더 효율적으로 할 수 있는지 알아보도록 하겠다.

SwiftGen이란

SwiftGen은 Xcode 프로젝트에서 asset 파일, 로컬라이징 문자열, 색상들과 같은 리소스들을 코드로 자동 생성해주는 도구이다. 이를 통해 문자열이나 이미지의 이름이 변경되더라도 코드를 수정할 필요 없이 자동으로 업데이트된 코드를 사용할 수 있다. SwiftGen은 CocoaPods나 Swift Package Manager를 통해 사용할 수 있다.

내비게이션 처리

내비게이션은 주로 UINavigationController를 사용하여 구현된다. 기존에는 화면 전환을 위해 직접 문자열이나 이미지의 이름을 사용하였지만, SwiftGen을 사용하면 이를 컴파일 타임에 안전하게 처리할 수 있다.

1. SwiftGen 설치하기

SwiftGen을 사용하기 위해서는 먼저 CocoaPods를 설치해야 한다. 프로젝트 폴더에서 다음 명령어를 실행하여 CocoaPods를 설치한다.

$ sudo gem install cocoapods

그리고 프로젝트 폴더에 Podfile을 생성하여 다음과 같이 SwiftGen을 추가한다.

platform :ios, '12.0'
use_frameworks!

target 'MyApp' do
  # 다른 팟들...

  # SwiftGen 추가
  pod 'SwiftGen'
end

설정이 끝나면 터미널에서 다음 명령어를 실행하여 SwiftGen을 설치한다.

$ pod install

2. 리소스 정의하기

SwiftGen을 사용하기 위해 먼저 리소스를 정의해야 한다. 이 예시에서는 내비게이션 바에 사용할 이미지 리소스와 문자열 리소스를 정의하겠다.

이미지 리소스

Assets.xcassets에서 이미지를 정의한다. 이미지들을 그룹으로 나누는 것이 좋다.

Image Assets.xcassets

문자열 리소스

Localizable.strings 파일에 문자열 리소스를 정의한다. 내비게이션 바의 타이틀과 버튼의 타이틀을 예시로 들겠다.

"navigation_title" = "내비게이션 바";
"button_back" = "뒤로";
"button_next" = "다음";

3. SwiftGen 사용하기

SwiftGen을 사용하려면 먼저 Resources 폴더를 생성하고, swiftgen.yml 파일을 만들어야 한다.

Sources
  - Paths: Sources/Generated
    TemplateName: swift5
    TemplatePath: ...
    Definitions:
      AssetCatalogs: [Assets.xcassets]
      Strings: [Localizable.strings]

그리고 터미널에서 다음 명령어를 실행하여 SwiftGen을 실행한다.

$ swiftgen

SwiftGen은 Resources/Generated 폴더에 생성된 코드를 저장한다.

4. 내비게이션 처리하기

이제 SwiftGen이 생성한 코드를 활용하여 내비게이션을 처리할 수 있다. 다음은 내비게이션 바의 타이틀과 버튼을 설정하는 코드 예시이다.

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 내비게이션 바 타이틀 설정
        navigationItem.title = L10n.navigationTitle

        // 내비게이션 바 버튼 설정
        let backButton = UIBarButtonItem(title: L10n.buttonBack, style: .plain, target: nil, action: nil)
        let nextButton = UIBarButtonItem(title: L10n.buttonNext, style: .plain, target: nil, action: nil)
        navigationItem.leftBarButtonItem = backButton
        navigationItem.rightBarButtonItem = nextButton
    }
}

위 코드에서 L10n은 SwiftGen이 생성한 파일로, 이를 통해 리소스의 이름을 타입 안전하게 사용할 수 있다.

결론

SwiftGen을 활용하여 내비게이션 처리를 간편하고 안전하게 할 수 있다. 리소스의 변경이나 추가가 있을 때도 코드 수정을 최소화할 수 있어 개발 효율성을 높일 수 있다. SwiftGen은 다양한 리소스들을 지원하므로 프로젝트에 적용해보는 것을 추천한다.

참고 자료