[Xcode] iOS 프로젝트에 별도의 폰트 파일을 추가해서 사용하고 싶을 때

2022. 1. 2. 16:13Developer Basis

프로젝트를 하다 보면, Xcode에 기본으로 있는 폰트 말고도 외부 폰트를 다운받아 사용하고 싶을 때가 있을 거다.
이런 경우, 단순히 프로젝트 파일에 드래그앤드랍 해주는 것 외에도 고려해야 할 추가 사항이 있어 이렇게 별도의 게시글로 정리를 해보고자 한다.

 

1️⃣ 폰트 파일 iOS 프로젝트에 추가해주기


일단 프로젝트에 폰트 파일을 끌어서 넣어주자.

이때, 중요한 점은 target을 프로젝트에 꼭 설정을 해줘야 한다는 점이다!
(참고로 Xcode의 폰트 파일은 .wotf 파일을 제외한 .ttf .otf 파일은 모두 지원 가능하다고 한다! ^__^)

💡 Copy items if needed가 아래 사진 상으로는 체크가 안되어 있지만,
이렇게 되면 파일이 복사되는 것이 아니라 원본의 레퍼런스를 그대로 참조하게 되어 원본 파일이 변경, 삭제되었을 때 파일을 사용할 수 없게 된다.
-> 파일을 추가할 때는 Copy items if needed 옵션을 체크하는 습관을 들이도록 하자! 

 

2️⃣ 그 다음으로 Info.plist에 폰트 파일을 정의해줘야 한다.


💡 Info.plist → Information Property List → Font provided by application에 폰트 추가

Info.plist 파일은 프로젝트의 내용을 요약해 놓은 파일이기 때문에, 어떤 커스텀 폰트가 사용되는지 정의해줘야 한다.

이때, Value값에는 폰트 파일의 이름을 확장자 이름(.otf 혹은 .ttf)까지 꼭 붙여서 추가해줘야 한다!

 

3️⃣ Enum형과 UIFont Extension을 정의해서 폰트를 편하게 사용하자!


이 과정을 모두 거치면, 이제 추가한 폰트를 프로젝트에서 아래와 같이 사용할 수 있긴 하다.

label.font = UIFont(name: "NotoSansCJKkr-BOLD", size: 24)

하지만, 이런 코드는 매번 폰트 이름을 쳐줘야한다는 불편함과 위험성을 갖고 있어 비효율적이라고 볼 수 있는데,
이를 해결하기 위해 Enum형과 UIFont의 Extension을 활용한 개선된 코드를 주로 사용하게 된다.

우선, 위 UIFont(name:) 매개변수에 들어가게 될 폰트 이름, 즉 String값을 반복해서 사용하기 위해 해당 문자열을 열거형으로 정의한다.

enum FontName: String {
    case notoSansCJKkrBOLD = "NotoSansCJKkr-BOLD"
}

이후 UIFont의 Extension에 클래스 메서드를 정의해서 사용할 수 있도록 만들면 된다!

extension UIFont {
    @nonobjc class func notoSansBold(size: CGFloat) -> UIFont {
        return UIFont(name: FontName.notoSansCJKkrBOLD.rawValue, size: size)!
    }
}

// 이렇게 사용!
label.font = .notoSansBold(size: 24)