Programing/iOS

[iOS] R.swift 사용해보기

5주년 2020. 9. 4. 00:43

안녕하세요!! 5anniversary에요~!

 

오늘은 medium을 지나가다 본 재미 있어보이는 라이브러리를 사용해볼까 합니다...

 

R.swift

 

mac-cain13/R.swift

Strong typed, autocompleted resources like images, fonts and segues in Swift projects - mac-cain13/R.swift

github.com

먼저 이 라이브러리를 통해서 저희들이 얻을 수 있는 이점은 무엇이냐....?????

  1. 완전히 타이핑함으로서 캐스팅을 줄이고 어떤 결과를 받아오는지 추측이 가능합니다.
  2. 컴파일...시간이 체크됩니다...(이건 무슨 말인지 모르겠네요?) 런타임에 앱 충돌을 일으키는 잘못된 문자열이 없어집니다
  3. 자동 완성이 됩니다. 이름들을 추측할 필요가 없습니다!!

현재 사용가능한 리소스는 무엇이냐!!

  1. Images
  2. Fonts
  3. Resuource files
  4. Colors
  5. Localized string
  6. Storyboards
  7. Segues
  8. Nibs
  9. Reusable Cells

이렇게 많은 리소스들을 자동화해서 타이핑이 가능하네요!! 이제 전체적인 사용이유와 사용가능한 리소스들을 알아봤으니!!

 

 

자, 사용을 하면서 라이브러리에 대해 하나씩 알아봅시다!!

 

라이브러리는 pod 방식으로 받아올거에요!! 

 

pod 'R.swift'

 

를 사용해 받아주세요!!

 

그리고

Build Phases 탭으로 들어가 New Run Script Phase를 해주세요~~

 

그리고

 

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

이 스크립트를 적어주세요!!

그 다음 Check Pod Manifest.lock 아래에 Compile Sources 위에 Run Script를 드래그해 놓아주도록 합니다.

 

그 다음!! Run Script를 다시 펼쳐서 

 

Input Files에 

$TEMP_DIR/rswift-lastrun

Output Files에

$SRCROOT/R.generated.swift

 

를 넣어주도록 합니다~!

 

이제 빌드를 해볼거에요!!

 

빌드를 해주면 R.generated.swift 파일이 생겨요!!

이 파일을 프로젝트 안으로 가져오는 작업만 해주시면 됩니다...

후... 이제 사용을 해보겠습니다.

 

사용법은 여기에 적혀있습니다!!

 

mac-cain13/R.swift

Strong typed, autocompleted resources like images, fonts and segues in Swift projects - mac-cain13/R.swift

github.com

저는 Color 를 R.swift를 이용해서 간단하게 알아볼게요!!

 

우선

에셋에서 간단하게 보라색을 만들어줬어요

 

그리고

이렇게 코드를 작성해 빌드를 해봤어요!!

 

color는 이렇게 다룰수가 있네요!!!

 

R.generated.swift 파일에 가서 보면 color가 어떻게 돌아가는지 볼 수 있어요

 

  /// This `R.color` struct is generated, and contains static references to 2 colors.
  struct color {
    /// Color `light`.
    static let light = Rswift.ColorResource(bundle: R.hostingBundle, name: "light")
    /// Color `purple`.
    static let purple = Rswift.ColorResource(bundle: R.hostingBundle, name: "purple")

    #if os(iOS) || os(tvOS)
    /// `UIColor(named: "light", bundle: ..., traitCollection: ...)`
    @available(tvOS 11.0, *)
    @available(iOS 11.0, *)
    static func light(compatibleWith traitCollection: UIKit.UITraitCollection? = nil) -> UIKit.UIColor? {
      return UIKit.UIColor(resource: R.color.light, compatibleWith: traitCollection)
    }
    #endif

이렇게 하나씩 정해진 값으로 넣어주네요!!

 

자 사용법을 알아봤으니 R.swift는 왜 만든건지 궁금해졌어요... 이렇게 간단하게 리소스를 사용가능하게 만들어주다니...

 

github.com/mac-cain13/R.swift/blob/master/Documentation/QandA.md#why-was-rswift-created

 

mac-cain13/R.swift

Strong typed, autocompleted resources like images, fonts and segues in Swift projects - mac-cain13/R.swift

github.com

안드로이드에서는 R이라는 클래스를 이용해 모든 리소스를 관리해주는데 이런 클래스의 필요성을 느껴 만들게 되었다고 합니다!! 

 

Github에서 수많은 iOS 라이브러리를 봤지만 이렇게 만들게된 이유까지 적어둔 라이브러리는 처음보는것 같아요...

 

우리가 가진 리소스 전부다 알고 있는 파일이기 때문에 해당 파일이 크지만 관리의 편의성을 위해서는 사용하는게 좋아보이는 라이브러리였습니다!!