Swiftpack.co - nearfri/XCResource as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
nearfri/XCResource
A command line tool for generating localizable strings and Swift code for xcassets
.package(url: "https://github.com/nearfri/XCResource.git", from: "0.9.7")

XCResource

Swift

XCResource는 xcassets 리소스 로딩과 다국어 지원을 도와주는 커맨드라인 툴입니다.

이를 이용해 이미지, 컬러, 다국어 문자열을 쉽게 생성할 수 있습니다:

let image = UIImage.named(.settings)
let color = UIColor.named(.coralPink)
let string = String.localized(.done)
let text = String.formatted(.alert_attachTooLargeVideo(maxMinutes: maxMinutes))

제공기능

xcresource는 다음의 하위 커맨드를 가지고 있습니다:

  • xcassets2swift: xcassets을 위한 Swift 코드를 생성합니다.
  • swift2strings: Swift enum으로 strings 파일을 생성합니다.
  • key2form: Swift enum으로 format string 코드를 생성합니다.
  • strings2csv: strings 파일로 CSV 파일을 생성합니다.
  • csv2strings: CSV 파일로 strings 파일을 생성합니다.

설치

Mint로 XCResource를 설치합니다:

mint install nearfri/XCResource

사용 예제

xcassets 이미지 로딩하기

xcresource xcassets2swift를 실행합니다:

xcrun --sdk macosx mint run xcresource xcassets2swift \
    --xcassets-path ../SampleApp/Assets.xcassets \
    --asset-type imageset \
    --swift-path ../SampleApp/ResourceKeys/ImageKey.swift \
    --swift-type-name ImageKey

아래와 같은 코드가 생성됩니다:

struct ImageKey: ExpressibleByStringLiteral, Hashable {
    var rawValue: String
    
    init(_ rawValue: String) {
        self.rawValue = rawValue
    }
    
    init(stringLiteral value: String) {
        self.rawValue = value
    }
}

// MARK: - Assets.xcassets

extension ImageKey {
    // MARK: Places
    static let places_authArrow: ImageKey = "Places/authArrow"
    static let places_authClose: ImageKey = "Places/authClose"
    
    // MARK: Settings
    static let settings: ImageKey = "settings"
    static let settingsAppearance: ImageKey = "settingsAppearance"
    ...

UIImage에 생성자를 추가해줍니다:

extension UIImage {
    static func named(_ key: ImageKey) -> UIImage {
        return UIImage(named: key.rawValue, in: .module, compatibleWith: nil)!
    }
}

이제 자동완성과 함께 이미지를 생성할 수 있습니다:

imageView.image = .named(.settings)

Swift enum으로 strings 파일 만들기

enum 타입의 StringKey를 만들어줍니다:

enum StringKey: String, CaseIterable {
    /// 취소
    case cancel
    
    /// 확인
    case confirm
}

xcresource swift2strings를 실행합니다:

xcrun --sdk macosx mint run xcresource swift2strings \
    --swift-path ../SampleApp/ResourceKeys/StringKey.swift \
    --resources-path ../SampleApp \
    --value-strategy ko:comment \
    --sort-by-key

아래와 같이 strings 파일이 업데이트 됩니다:

/* 취소 */
"cancel" = "취소";

/* 확인 */
"confirm" = "확인";

String에 생성자를 추가해줍니다:

extension String {
    static func localized(_ key: StringKey) -> String {
        return NSLocalizedString(key.rawValue, bundle: .module, comment: "")
    }
}

이제 자동완성과 함께 지역화된 문자열을 생성할 수 있습니다:

label.text = .localized(.cancel)

Swift enum으로 format string 코드 만들기

StringKeycase에 format string 형식의 주석을 추가합니다:

enum StringKey: String, CaseIterable {
    /// 동영상 첨부는 최대 %ld{maxMinutes}분까지 가능합니다.\n다른 파일을 선택해주세요.
    case alert_attachTooLargeVideo
}

xcresource key2form을 실행합니다:

xcrun --sdk macosx mint run xcresource key2form \
    --key-file-path ../SampleApp/ResourceKeys/StringKey.swift \
    --form-file-path ../SampleApp/ResourceKeys/StringForm.swift \
    --form-type-name StringForm \
    --issue-reporter xcode

아래와 같은 코드가 생성됩니다:

struct StringForm {
    var key: String
    var arguments: [CVarArg]
}

extension StringForm {
    /// 동영상 첨부는 최대 %ld{maxMinutes}분까지 가능합니다.\n다른 파일을 선택해주세요.
    static func alert_attachTooLargeVideo(maxMinutes: Int) -> StringForm {
        return StringForm(
            key: StringKey.alert_attachTooLargeVideo.rawValue,
            arguments: [maxMinutes])
    }
}

String에 생성자를 추가해줍니다:

extension String {
    static func formatted(_ form: StringForm) -> String {
        let format = NSLocalizedString(form.key, bundle: .module, comment: "")
        return String(format: format, locale: .current, arguments: form.arguments)
    }
}

이제 자동완성과 함께 지역화된 문자열을 생성할 수 있습니다:

label.text = .formatted(.alert_attachTooLargeVideo(maxMinutes: maxMinutes))

strings 파일로 CSV 파일 만들기

xcresource strings2csv를 실행합니다:

mint run xcresource strings2csv \
    --resources-path ../SampleApp \
    --development-language ko \
    --csv-path ./translation.csv \
    --header-style long-ko \
    --write-bom

아래와 같은 csv 파일이 만들어집니다:

Key Comment 한국어 (ko) 영어 (en)
cancel 취소 취소
confirm 확인 확인

CSV 파일로 strings 파일 만들기

xcresource csv2strings를 실행합니다:

mint run xcresource csv2strings \
    --csv-path ./translation.csv \
    --header-style long-ko \
    --resources-path ../SampleApp

아래와 같이 strings 파일이 만들어집니다:

/* 취소 */
"cancel" = "취소";

/* 확인 */
"confirm" = "확인";

XCResourceSample.xcworkspace에서 적용 예제를 볼 수 있습니다.

라이선스

XCResource는 MIT 라이선스에 따라 배포됩니다. 자세한 내용은 LICENSE를 참조하십시오.

GitHub

link
Stars: 0
Last commit: Yesterday

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Related Packages

Release Notes

29 weeks ago

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics