-
Notifications
You must be signed in to change notification settings - Fork 1
[기술공유] 모듈화 환경에서 다른 모듈의 Font를 사용하기
우리 팀은 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
에 등록해줘야 한다!
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