[swift] R.swift를 이용하여 코드 리팩토링하기

안녕하세요! 이번 포스트에서는 Swift 프로젝트에서 코드 리팩토링을 도와주는 R.swift에 대해 알아보겠습니다.

1. R.swift이란?

R.swift는 Swift 프로젝트에서 타입에 안전한 타입 안내와 자동완성을 제공하는 라이브러리입니다. 이 툴은 프로젝트의 리소스 파일에 대한 코드를 자동으로 생성해주어 개발자가 직접 리소스 파일에 접근하지 않고도 코드를 작성할 수 있게 도와줍니다.

R.swift를 이용하면 이미지, 폰트, nib 파일 등의 리소스 파일에 접근하기 위해 문자열로 타이핑하는 것을 방지할 수 있습니다. 타입 안전성을 보장하고 오타로 인한 버그를 줄여줍니다.

2. R.swift 설치하기

R.swift를 사용하기 위해서는 Cocoapods나 Swift Package Manager를 통해 라이브러리를 설치해야 합니다.

2.1 CocoaPods를 사용하는 경우

Podfile에 다음과 같은 코드를 추가합니다.

pod 'R.swift'

그리고 터미널에서 다음 명령어를 실행합니다.

$ pod install

2.2 Swift Package Manager(SPM)를 사용하는 경우

프로젝트의 Package.swift 파일에 다음과 같은 종속성을 추가합니다.

...
dependencies: [
    .package(url: "https://github.com/mac-cain13/R.swift.git", from: "5.3.0")
],
targets: [
    .target(
        name: "YourTarget",
        dependencies: ["Rswift"])
]
...

프로젝트 폴더에서 다음 명령어를 실행합니다.

$ swift build

3. R.swift 사용하기

R.swift를 설치했다면, 이제 사용할 준비가 끝났습니다.

3.1. R.swift 파일 생성하기

프로젝트 탐색기에서 Cmd + N을 눌러 새 파일을 생성합니다. 파일 종류 중에 Swift File을 선택하고 이름을 R.generated.swift로 지정합니다.

3.2. R.swift 코드 작성하기

R.swift 파일에 사용할 리소스 타입들을 import 합니다. 예를 들어, 이미지와 색상을 사용하려면 다음과 같습니다.

import Rswift

extension R.image {}
extension R.color {}

그리고 R.swift를 사용하여 리소스에 접근하고 싶은 경우에는 다음과 같이 사용합니다.

let image = R.image.sampleImage()
let color = R.color.primaryColor()

3.3. R.generated.swift 파일 업데이트

R.swift를 사용하는 경우, 리소스 파일을 추가하거나 삭제하는 등의 변경사항이 있으면 R.generated.swift 파일을 업데이트해야 합니다. 이를 위해 빌드 전에 스크립트를 추가할 수 있습니다.

3.3.1. Xcode 스크립트

프로젝트 설정에서 Build Phases로 이동합니다. 하단의 ‘+’ 버튼을 클릭하여 New Run Script Phase를 추가합니다. 추가한 스크립트를 선택하고 다음과 같이 작성합니다.

"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT"

3.3.2. Swift Package Manager(SPM) 스크립트

Package.swift 파일의 target 섹션에 다음을 추가합니다.

.target(
    name: "YourTarget",
    dependencies: [..., "Rswift"]),
.post(build: TargetReference(stringLiteral: "YourTarget"), path: "<path-to-R.generated.swift>") { _, _ in
    ...
}

<path-to-R.generated.swift> 를 본인 프로젝트의 R.generated.swift 파일의 경로로 변경해주면 됩니다.

4. 결론

이제 R.swift를 사용하여 리소스 파일에 접근하는 데에 문자열을 사용하는 것을 피할 수 있습니다. R.swift의 타입 안정성과 자동완성 기능을 통해 코드 리팩토링을 더욱 효율적으로 수행할 수 있습니다.