멀티 프로젝트 모듈화 환경에서 다른 모듈의 Font를 사용하기

2024. 11. 22. 01:08·Xcode

반갑습니다 집주인들 팀원 박효준입니다 !

 

본 편에서는 모듈화가 적용되어 있는 저희 프로젝트에서

다른 모듈의 폰트를 사용하고 싶으면 어떻게 하는 지 알아보도록 하겠습니다!!!

 

그럼 레쯔고 〰️

 

문제 상황

우리 팀은 Multiple Project를 통한 모듈화를 진행하였다.

그리고 앱 내에서 사용되는 폰트는 단 한 가지, “OwnglyphBerry”을 사용하고 있다.

Excutable 모듈인 MHApplication 모듈에서 plist에 적용하면 폰트 적용이 잘 되나, 모듈의 역할 상으로 Presentation에서 하는게 맞다.

그러나, MHPresentation 모듈에서 폰트를 Plist에 넣고 관리하면 모듈마다 Bundle이 다르기 때문에 MHApplication에서 MHPresentation의 번들을 읽을 수 없어 Plist를 가져올 수 없다.

그렇기 때문에 다른 모듈이 갖고 있는 Font를 어떻게 다른 모듈에서 적용하는지 알아보겠다.

 


문제 해결

개요

먼저 MHPresentation에 폰트를 넣어서 저장하고, plist에 다음과 같이 추가한다.

<plist version="1.0">
<dict>
    <key>UIAppFonts</key>
    <array>
        <string>OwnglyphBerry.ttf</string>
    </array>
</dict>
</plist>

MHApplication이 저 폰트를 앱에 등록하여 사용하기 위해 MHPresentation의 Bundle에 찾아가서 폰트가 저장된 URL을 찾아야 한다.

그리고 그 경로를 CTFontManagerRegisterFontsForURL에 등록해줘야 한다!

CTFontManagerRegisterFontsForURL

CoreText 프레임워크,
UIKit 안에 있기 때문에 따로 Import 안 해줘도 된다.

func CTFontManagerRegisterFontsForURL(
    _ fontURL: CFURL, // Bundle 내의 폰트가 존재하는 URL
    _ scope: CTFontManagerScope, // 수명 정의
    _ error: UnsafeMutablePointer<Unmanaged<CFError>?>? // 에러 처리
) -> Bool

폰트 매니저로써 폰트를 등록시켜준다..!

위 메소드를 호출하면 url이 유효한 경우, Bundle에 있는 폰트가 등록되고 정상적으로 사용할 수 있게 된다.

1번만 호출해주면 되는데 AppDelegate 혹은 SceneDelegate에서 호출해주면 될듯 하다.

우리는 MHPresentation에 UIFont를 확장하여 static 메소드를 넣어주었고,

해당 메소드는 HomeViewController 가 있는 곳의 번들을 찾아서 OwnglyphBerry.ttf 폰트를 찾아 URL을 갖는다.

이후 CTFontManagerRegisterFontsForURL에 넣어주어 등록할 수 있게 한다.

해당 메소드를 AppDelegate에서 위 메소드를 호출하여 폰트가 등록되도록 처리하였다.

깔-끔


배운 점

  • Image와 Color 같은 Assets도 비슷한 방법이겠지만, 모듈화 되어있는 상태에서 Bundle을 잘 읽어들이는 것이 중요하다는 것을 알았다.
  • 모듈화된 환경에서 다른 모듈의 폰트 적용을 하려면 어떤 과정을 밟아야 하는지 알게 되었다.
  • CTFontManagerRegisterFontsForURL을 알게되어 폰트 적용을 어떻게 하는지 알았다.

참조 링크

https://developer.apple.com/documentation/coretext/1499468-ctfontmanagerregisterfontsforurl

https://minsone.github.io/ios/mac/ios-register-custom-font

https://nsios.tistory.com/196

'Xcode' 카테고리의 다른 글

협업할 때 인덴션 꿀팁~  (0) 2024.11.28
멀티 프로젝트 모듈화와 SwiftLint 환경에서 빌드 속도 개선  (0) 2024.11.20
[모듈화 3편] 우리의 최종 모듈화 (feat. Multiple Project)  (0) 2024.11.12
[모듈화 2편] Dynamic Library vs Static Library  (0) 2024.11.11
[모듈화 1편] Library vs Framework  (3) 2024.11.10
'Xcode' 카테고리의 다른 글
  • 협업할 때 인덴션 꿀팁~
  • 멀티 프로젝트 모듈화와 SwiftLint 환경에서 빌드 속도 개선
  • [모듈화 3편] 우리의 최종 모듈화 (feat. Multiple Project)
  • [모듈화 2편] Dynamic Library vs Static Library
집주인들의 기술 블로그
집주인들의 기술 블로그
Memorial-House 집주인들의 기술 블로그
  • 집주인들의 기술 블로그
    Memorial House
    집주인들의 기술 블로그
  • 전체
    오늘
    어제
    • 🏠 집주인들 글 모아보기 (30)
      • iOS (5)
      • Combine (0)
      • Swift (7)
      • UIKit (7)
      • Xcode (6)
      • Architecture, Design Patter.. (3)
      • 기획 (1)
      • Github actions (1)
  • 링크

    • Github-Repository
    • Github-Wiki
    • Notion
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
집주인들의 기술 블로그
멀티 프로젝트 모듈화 환경에서 다른 모듈의 Font를 사용하기
상단으로

티스토리툴바