(Swift) 폰트의 포스트 스크립트 이름 확인 방법

CATextLayer에서 텍스트의 폰트를 지정해주려면, CTFontRef를 만들어서 넘겨주어야 한다. 이 값은 CTFontCGFont 타입과 브릿징되기 때문에 CTFont를 만들어야 한다. 만약 시스템에 설치된 서드파티 폰트를 사용해서 CTFont 객체를 만들려면 해당 폰트의 포스트 스크립트 이름을 알고 있어야 한다. 즉 CATextLayer에서 커스텀 폰트를 사용하려면 해당 커스텀 폰트의 포스트스크립트 이름이 필요하다는 이야기이다.

macOS에서는 간단하게 서체 관리자에서 해당 폰트를 선택하여 정보보기(cmd + i)를 통해 PostScript Name을 확인해서 이 값을 알 수 있다. 그런데 iOS에서는 서체 관리자가 없기 때문에 이 방법을 쓸 수 없다. 대신에 다음 코드를 사용해서 시스템의 모든 기본 폰트의 포스트 스크립트 이름을 출력할 수 있다.

/// Swift 3.0
for familyName in UIFont.familyNames {
  for fontName in UIFont.fontsNames(forFamilyName: familyName) {
    print("\(family Name) : \(fontName)")
  }
}

만약 폰트를 아직 설치하지 않은 상태라면, TTF, OTF 파일이 있을 때, fc-scan 이라는 명령줄 도구를 사용해서 이를 알 수 있다. fs-scan --format "%{postscriptname}\"을 실행하면 된다. 다음 명령은 현재 디렉토리 내의 모든 ttf, otf 파일에 대해서 포스트 스크립트 이름을 출력하는 예이다.

$ for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\" $file; done