김경록의 앱 개발 여정

[Tuist] Tuist 를 통한 커스텀 폰트 추가 방법 본문

TIL

[Tuist] Tuist 를 통한 커스텀 폰트 추가 방법

Kim Roks 2025. 1. 13. 12:16

Tuist를 통한 커스텀 폰트 추가 방법

Tuist로 폰트를 넣는다면 폰트, 에셋등을 한데 모아 모듈화 하여 사용할 수 있다는 장점이 있다.

  1. 새로운 모듈 정의
    tuist 자세한 사용법에 대해선 서술하지 않음
  2. project.swift 파일에서 타깃을 추가해 주시면 되는데 이때 resources 폴더를 갖도록 만들어주셔야 합니다.
    (저와 다르게 따로 모듈화 하지 않고 리소스를 갖고 있는 프로젝트 자체 내에 넣는다면 그렇게 하셔도 됩니다)
  3. Tuist edit
// Plist에 입력될 폰트이름들 (확장자를 반드시 포함할 것)
let fonts = [
        "Pretendard-Bold.otf",
        "Pretendard-ExtraBold.otf",
        "Pretendard-Medium.otf",
        "Pretendard-SemiBold.otf",
    ]
   
   // Fonts provided by application 키 값에 폰트들를 아이템(밸류)으로 지정
    let infoPlist: [String: Plist.Value] = [
        "Fonts provided by application": .array(fonts.map { .string($0) })
    ]
    
    let sourceTarget = Target(
        name: name,
        platform:
        product: 
        bundleId: 
        deploymentTarget: deploymentTarget,
        // .default -> .extendingDefault
        infoPlist: .extendingDefault(with: infoPlist),
        sources: ["Targets/\(name)/Sources/**"],
        resources: ["Targets/\(name)/Resources/**"],
        dependencies: dependencies,
        settings: .settings(
            base: .init().swiftCompilationMode(.wholemodule)
        )
    )
  • 만약 이렇게 하지 않고 기존 방식처럼 plist에 직접 입력한다면, Tuist 파일에 적용된 방식으로 plist가 계속해서 덮혀져(resources가 없다던가, 폰트 파일이 보이지 않는다던가) 문제가 생김

4. tuist generate 실행

 

 

정상 처리되었다면 자동으로 이런 파일이 생성됩니다.

사용 예시

  • 이런 식으로 사용할 수 있습니다.

조금 더 개선해 본다면..

import UIKit

public enum FontStyle {
    ///weight: 400
    case regular
    ///weight: 500
    case medium
    ///weight: 600
    case bold
    ///weight: 700
    case semiBold
    ///weight: 800
    case extraBold
}

extension UIFont {
    public static func et_pretendard(style: FontStyle, size: CGFloat) -> UIFont {
        switch style {
        case .regular:
            DesignSystemFontFamily.Pretendard.regular.font(size: size)
        case .medium:
            DesignSystemFontFamily.Pretendard.medium.font(size: size)
        case.bold: EveryTipDesignSystemFontFamily.Pretendard.bold.font(size: size)
        case .semiBold:
            DesignSystemFontFamily.Pretendard.semiBold.font(size: size)
        case .extraBold:
            DesignSystemFontFamily.Pretendard.extraBold.font(size: size)
        }
    }
}

 

이런 식으로 quick help를 작성하여 해당 글씨체의 width가 얼마인지도 바로 알아볼 수 있고,
작성자체도 더 간단하게 개선해 볼 수도 있겠습니다.