본문 바로가기
IOS App Programming/트러블 슈팅

[iOS/ UIKit] UIFont Custom - Variable Font와 마주친 문제

by B_Tori 2024. 7. 3.

프로젝트를 진행하면서 디자이너 분께 디자인 시스템을 전달받았고, 

그중에는 타이포그래피를 정리해 둔 폰트 시스템이 있었다.

 

폰트파일을 불러와서 커스텀 폰트를 사용한 것이 처음이 아니었기에 쉽게 생각하고 진행하였는데

예상치 못한 오류를 발견하였다.

 

계속해서 폰트를 찾지 못하는 오류를 가져왔다.

분명 나는 파일을 추가하고, 타겟을 설정하고, 인포 파일 설정까지 끝마쳤는데 왜 오류가 뜨는지 알 수 없었다..

 

추가 과정에는 문제가 없었다ㅠ 디자인에 대해 얄팍한 지식을 가지고 있어서 마주친 문제였...

 

혹시라도 같은 상황을 마주친 사람들이 있다면 힌트를 주고자 정리를 해보았다.

 

우선 내가 마주친 상황은 커스텀 폰트 생성 시 폰트를 찾을 수 없다는 오류였는데

보통 이러한 오류는 인포파일 설정, 혹은 타깃 설정, 파일을 제대로 추가하지 않았거나, 폰트 이름과 파일 이름이 다를 시 생겨나는 오류이다.

 

즉 추가 과정에서 나처럼 빼먹은 것이 없다면 이름을 확인해봐야 한다.

 

하지만 이름도 그대로 파일 이름을 복사해 왔기에 틀릴 이유가 없었다. 그럼에도 불구하고 오류가 떠서 폰트패밀리를 모두 출력하여 제대로 추가되었는지 확인해 보았다.

저장된 폰트 확인하기

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        for fontFamily in UIFont.familyNames {
            for fontName in UIFont.fontNames(forFamilyName: fontFamily) {
                print(fontName)
            }
        }
        .... (기타 코드)

    }

씬 델리게이트에 다음과 같은 코드를 작성하여 가지고 있는 모든 폰트를 출력하도록 하였다.

 

출력 결과

출력 결과는 아주 충격적이었다..

내가 추가한 폰트는 PretendardVariable.ttf 폰트 파일 하나였다.

 

베리어블 폰트는 가변 폰트로 직접 굵기 등을 세세하게 조정할 수 있는 폰트라고 알고 있었다.

하지만 하나는 알고 둘은 모르는 상황이었다.

여기에 더하여 한 개에 파일에 모든 폰트패밀리를 포함하고 있는 폰트 파일이라고도 할 수 있다.

 

예를 들어 9종의 굵기로 이루어져 있는 폰트 패밀리를 하나의 파일 사용할 수 있고, 9종 사이사이의 굵기까지 세세하게 커스터마이징 할 수 있다. 그래서 폰트를 출력했을 때 추가한 폰트는 Pretendard Variable.ttf 파일 한 개지만 여러 굵기의 폰트 파일이 추가되어 있어서 코드로 호출할 때는 해당 이름을 맞춰서 호출해야 했다.

 

나는 가변 폰트라는 사실을 알았지만, 여러 개의 폰트 파일을 포함하고 있어 xcode에 넣을 시 해당 폰트들이 다 개인적으로 등록될 수 있다는 것을 처음 알았다.

 

나는 그것도 모르고 불러올 때 폰트명을 PretendardVariable이라고 작성했으니 당연히 못 찾을 수밖에 없었다.

 

그래서 수정 전과 수정 후 코드를 비교해 보면 다음과 같다.

수정 전 오류 코드
수정 후 코드

폰트 Weight을 enum으로 선언하여 rawValue로 폰트명을 저장해 두고 입력받은 weight에 맞는 폰트 파일을 불러오도록 설정하였다.

 

댓글