-
안녕하세요. 그린입니다🟢
오늘 포스팅은 R.swift라는 라이브러리에 대해서 알아보려합니다🙌
R.swift?
R.swift가 뭘까요?
이름만 들어도 아예 감이 오지 않고 생소하죠.
공식 리드미에서는 Swift 프로젝트에서 이미지, 폰트, 컬러와 같은 유형의 자동 완성 리소스를 생성해 사용할 수 있다라고 장점이 어필되면서 설명을 하고 있습니다.
즉 필요한 에셋 등의 리소스를 직접 복잡하게 사용하는것이 아닌 자동 완성과 강한 타입을 통해 편하게 사용할 수 있는겁니다.
R.swift 적용 예시
예를들어 기존에 프로젝트서 파일에 이미지, 폰트, 컬러, 뷰, 문자열 등을 넣고 사용할때는 아래처럼 사용하셨을거에요.
let icon = UIImage(named: "settings-icon") let font = UIFont(name: "San Francisco", size: 42) let color = UIColor(named: "indicator highlight") let viewController = CustomViewController(nibName: "CustomView", bundle: nil) let string = String(format: NSLocalizedString("welcome.withName", comment: ""), locale: NSLocale.current, "Arthur Dent")
그런데 이 R.swift를 통해 리소스를 생성하면 코드처럼 자동 완성도 시켜주고 아래와 같이 편하게 사용할 수 있어요.
let icon = R.image.settingsIcon() let font = R.font.sanFrancisco(size: 42) let color = R.color.indicatorHighlight() let viewController = CustomViewController(nib: R.nib.customView) let string = R.string.localizable.welcomeWithName("Arthur Dent")
자 아주 쉽죠?
그럼 왜 R.swift가 어떤 장점을 가졌을까요?
R.swift 장점
우선 장점들의 공통점은 리소스를 사용해 코드를 만드는것입니다.
이 특성으로 크게 아래 3가지 장점들이 생깁니다.
1. 완전한 형식화를 통해 캐스팅을 줄이고 반환할 항목을 추측할 수 있습니다.
2. 컴파일때 유효한지 체크하기때문에 런타임 시 앱 크래쉬를 유발하지 않습니다.
3. 자동 완성을 시켜줌으로써 파일명을 찾을 필요 없고 또한 오탈자 방지가 되어 실수를 줄여줍니다.
R.swift에서 사용할 수 있는 리소스
아래 대표적으로 9개 리소스에 대해 자동화 사용이 가능합니다.
1. Image
2. Font
3. Color
4. Resource file
6. Localized String
7. Nib
8. Segue
9. Reusable Cell
R.swift 라이브러리 설치
4가지로 선택해 해당 라이브러리를 설치할 수 있습니다.
- 코코아팟, 민트, 홈브류, SPM
이중에서도 공식적으로는 코코아팟을 권장하고 있네요!🙌
R.swift 적용하기
그럼 저희도 권장하는 코코아팟으로 적용시켜보시죠!
1. Podfile 추가 및 설치
pod 'R.swift'
팟 파일에 R.swift를 추가하고 pod install 해줍니다.
2. New Run Script Phase 생성
프로젝트의 Build Phases로 이동해 좌측 상단 + 버튼을 눌러 New Run Script Phase를 클릭해줍니다.
새로운 런스크립트를 생성해주는것이죠.
새로운 스크립트가 생성되면 아래와 같이 쉘 스크립트 코드를 넣어줍니다.
"$PODS_ROOT/R.swift/rswift" generate "$SRCROOT/R.generated.swift"
해당 코드는 팟 루트에 있는 해당 라이브러리 경로를 통해 실행시켜주는 코드입니다.
또한 Output Files에는 아래 경로를 지정해줍니다.
$SRCROOT/R.generated.swift
R.swift 6.0 버전 이전에는 Input Files도 넣어줘야 했었는데 아래 6.0 버전부터 바뀐게 있습니다.
https://github.com/mac-cain13/R.swift/blob/master/Documentation/Migration.md
여길 보시면 Input Files 지정을 제거해줘야됩니다.
3. 해당 스크립트 위치 지정
위에서 열심히 만들어준 스크립트의 경로는 [CP] Check Pods Manifest.lock 스크립트 밑에 위치해야하며
또한 Compiles Sources 스크립트 위에 위치해야합니다.
즉 팟을 체크하고 나서 실행되야하며 컴파일 전에 실행되야하니 위치가 그렇게 조정 되어야합니다.
또한 만약 SwiftLint와 같은 라이브러리를 사용하고 있고 해당 컨벤션 룰이 R.swift 파일에도 적용시키고 싶다면 그 이전에 위치시키면 됩니다.
전체 스크립트 흐름은 아래와 같습니다.
4. 빌드 > R.generated.swift 파일 생성 확인
이렇게 스크립트를 생성하고 빌드를 시켜주면 프로젝트 폴더에 해당 R.generated.swift 파일이 생성됩니다.
5. R.generated.swift 파일 프로젝트로 가져오기
이제 해당 파일을 끌어와 프로젝트로 가져오면 됩니다.
여기서 Copy items if needed 체크는 해제해줍니다.
자 끝입니다! 아주 쉽죠?
이제 위에서 사용하는 방법처럼 아주 간단히 사용해주면 됩니다.마무리
R.swift 아주 편하네요.
그런데 SwiftGen도 더 편하다는 사람들도 있어 다음번엔 한번 해당 라이브러리로 포스팅하지 않을까 싶어요..!
그래도 자동완성되고 실수를 방지해주고.. 아주 마음에 드네요ㅎㅎ
다만 매번 에셋 등의 추가 후 빌드 시 해당 R.generated 파일의 크기가 커지는건 당연한 결과지만요.
즉 빌드 시 마다 R.swift가 실행된다고 보면 될것 같아요🥲
그럼 매번 프로젝트 파일을 체크해서 모든 리소스를 체크하고 생성하는 꼴인데 점점 커지면 컴파일 타임에 영향이 있을것 같은데
찾아봐야겠습니다🙌
[참고자료]
'Library' 카테고리의 다른 글
SkeletonUI (0) 2022.07.25 코코아팟 배포 타겟 관련 컴파일 오류 해결하기 (2) 2022.07.05 NukeUI (0) 2022.06.02 SwiftLint (0) 2022.05.30 FlexLayout (7) (0) 2022.05.26