Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HomeViewController 연결 & 네비게이션 바 구현 & CTFontManagerRegisterFontsForURL로 폰트 적용 #38

Merged
merged 14 commits into from
Nov 9, 2024

Conversation

Kyxxn
Copy link
Collaborator

@Kyxxn Kyxxn commented Nov 9, 2024

#️⃣ 연관된 이슈


📝 작업 내용

  • MHNavgationBar 구현
    • 네비게이션에 아이템들이 추가될 가능성을 고려해 분리함
    • GNB와 같이 사용될 가능성을 고려해 분리함
  • SceneDelegate -> HomeViewController로 연결
  • MHFoundation의 verifier 설정을 No로 변경함
  • CTFontManagerRegisterFontsForURL로 폰트 적용

⚽️ 트러블 슈팅

문제 상황

우리 팀은 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 안 해줘도 된다.

스크린샷 2024-11-10 오후 3 38 51
func CTFontManagerRegisterFontsForURL(
    _ fontURL: CFURL, // Bundle 내의 폰트가 존재하는 URL
    _ scope: CTFontManagerScope, // 수명 정의
    _ error: UnsafeMutablePointer<Unmanaged<CFError>?>? // 에러 처리
) -> Bool

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

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

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

스크린샷 2024-11-10 오후 3 38 56

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

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

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

스크린샷 2024-11-10 오후 3 38 59

해당 메소드를 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


📸 스크린샷

스크린샷 2024-11-10 오후 3 39 07

@Kyxxn Kyxxn added the ✨ Feature 기능 관련 작업 label Nov 9, 2024
@Kyxxn Kyxxn added this to the 0.1 milestone Nov 9, 2024
@Kyxxn Kyxxn self-assigned this Nov 9, 2024
Copy link
Collaborator

@k2645 k2645 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고많으셨습니다 .ᐟ.ᐟ 👍👍👍

아래 리뷰말고도 PR Description에 나와있는 캡쳐화면을 보면 저희 폰트가 잘 적용되어있지 않은 것 같습니다 ㅠㅠ 해당 부분 수정한 후 머지시켜야할 듯 합니다.. ㅠㅠ

final class MHNavigationBar: UIView {
// MARK: - Property
private let titleLabel = UILabel(style: .header)
private let settingImageView = UIImageView(image: .settingLight)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: 해당 ImageView는 설정 버튼을 나타내는 것으로 보입니다. 그렇다면 UIButton이 아닌 UIImageView여야할 이유가 있을까요??

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

인정합니다 !
수정해서 반영하겠습니다

Comment on lines 27 to 28
addSubview(titleLabel)
addSubview(settingImageView)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: 컨벤션 관련 내용인데 제 이전 PR의 경우 addSubView를 configureConstraints 함수에 위치시켰습니다.. 통일하면 더 좋지 않을까요??

추가로 저희가 초반에 정한 컨벤션에선 configureAddSubView라는 함수를 따로 분리하는 것으로 정하긴 했었는데 addSubView가 그렇게 많지 않은 상황에서 함수를 분리하는 것은 오히려 가독성을 해칠 것 같다는 생각으로 일단 전 configureConsratints에 위치시켰습니다...ᐟ.ᐟ (setup에 들어가는게 더 적절한 것 같기도 하네용..)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 회의록에 기록된 컨벤션처럼 configureAddSubView에 subview함수를 넣는 것도 좋아보입니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 영현님 코드보면서 저 부분 고민되더라구요,
윤철님 의견대로 기존에 컨벤션 정한 대로 처리하겠습니다 !!

Comment on lines 32 to 41
titleLabel.setTop(anchor: topAnchor)
titleLabel.setLeading(anchor: leadingAnchor)
titleLabel.setBottom(anchor: bottomAnchor)
titleLabel.setCenterY(view: settingImageView)

settingImageView.setTop(anchor: topAnchor)
settingImageView.setTrailing(anchor: trailingAnchor)
settingImageView.setCenterY(view: self)
settingImageView.setWidth(30)
settingImageView.setHeight(30)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: 현재 코드의 경우 navigationBar 뷰의 양 끝에 딱 붙게 titleLabel과 settingView를 위치시키고 있는데, navigationBar가 view(네비바가 들어가는 view)와 width가 같다고 가정하고 padding을 여기서 넣어주는 방식에 대해선 어떻게 생각하시나요??


public final class HomeViewController: UIViewController {
// MARK: - Property
private let navigationBar = MHNavigationBar(title: "효준")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: 추후 바뀌어야할 임시적인 String 값이니 TODO를 추가해주면 좋을 것 같습니다 .ᐟ.ᐟ

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋습니다 !

Comment on lines +30 to +32
navigationBar.setTop(anchor: view.safeAreaLayoutGuide.topAnchor, constant: 20)
navigationBar.setLeading(anchor: view.leadingAnchor, constant: 24)
navigationBar.setTrailing(anchor: view.trailingAnchor, constant: 24)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: 저희 컨벤션에 따라 magic number는 상단에 constant로 만들어주시면 좋을 것 같습니다 .ᐟ.ᐟ

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: 저희 컨벤션에 따라 magic number는 상단에 constant로 만들어주시면 좋을 것 같습니다 .ᐟ.ᐟ

앗, magic number는 의미상 알아보기 힘들거나 재사용시 변수처리하는 것아니었나요?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: 저희 컨벤션에 따라 magic number는 상단에 constant로 만들어주시면 좋을 것 같습니다 .ᐟ.ᐟ

앗, magic number는 의미상 알아보기 힘들거나 재사용시 변수처리하는 것아니었나요?

엇 다시 확인해보니 그런 것 같네요 ...ᐟ.ᐟ 제가 잘못알고 있었던 것 같습니다 .. 혼동을 드려 죄송합니다 .ᐟ.ᐟ

Copy link
Collaborator

@iceHood iceHood left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다...
image

Comment on lines +30 to +32
navigationBar.setTop(anchor: view.safeAreaLayoutGuide.topAnchor, constant: 20)
navigationBar.setLeading(anchor: view.leadingAnchor, constant: 24)
navigationBar.setTrailing(anchor: view.trailingAnchor, constant: 24)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: 저희 컨벤션에 따라 magic number는 상단에 constant로 만들어주시면 좋을 것 같습니다 .ᐟ.ᐟ

앗, magic number는 의미상 알아보기 힘들거나 재사용시 변수처리하는 것아니었나요?

Copy link
Collaborator

@yuncheol-AHN yuncheol-AHN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨어요. 열정맨🔥

Comment on lines 27 to 28
addSubview(titleLabel)
addSubview(settingImageView)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 회의록에 기록된 컨벤션처럼 configureAddSubView에 subview함수를 넣는 것도 좋아보입니다!


private func setup() {
view.backgroundColor = .baseBackground
view.addSubview(navigationBar)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3
addSubview 관련해서 수정하실 예정이라면 여기도 수정하시면 좋을 것 같아요!

@Kyxxn Kyxxn requested a review from k2645 November 9, 2024 15:47
Copy link
Collaborator

@k2645 k2645 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니당 .ᐟ.ᐟ

@Kyxxn Kyxxn merged commit 07c387d into develop Nov 9, 2024
2 checks passed
@Kyxxn Kyxxn deleted the feature/#36-mhnavigationbar branch November 9, 2024 16:04
@Kyxxn Kyxxn changed the title HomeViewController 연결 & 네비게이션 바 구현 HomeViewController 연결 & 네비게이션 바 구현 & CTFontManagerRegisterFontsForURL로 폰트 적용 Nov 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 관련 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants