sookim-1

번호 : 020, 작성일자: 2024-06-17

2024.06.10 ~ 2024.06.16

⬆️ Firebase 버전 이슈


Build Configuration이 다른 환경에서만 이슈(Release 환경에서만 메인스레드 간섭이 일어나듯이 UI업데이트가 느린 이슈)가 발생하는 경우 각 Build Configuration별로 차이점을 찾아보았다. 지지난주 찾았던 차이점 중 하나는 "API 응답속도에서 차이가 있다."였고 또 발견한 다른 차이점은 로그성 라이브러리들의 차이도 있었다. 로그성 라이브러리들을 하나씩 찾아본 결과 FirebaseAnalytics의 사용여부에 따라 영향도가 있었다.

그래서 확인해본 결과 최근 FirebaseAnalytics 버전을 10.19.0에서 10.27.0으로 업그레이드를 진행했었다.

다시 10.19.0으로 다운그레이드를 하여 테스트한 결과 버전이슈로 판명하고 변경했다.

FirebaseAnalytics는 단독으로 다운그레이드가 되지않기 때문에 의존성을 갖는 제품들도 다운그레이드를 진행했다. 추가로, FireStore를 Binary로 설치시 FireStoreSwift가 같이 설치되지 않을 수 있다.

3rd-party 라이브러리의 버전변경은 항상 주의해야겠다.

🚀 open(_:options:completionHandler:) 메서드


앱에서 링크를 간편하게 이동시키고 싶은 경우 open(_:options:completionHandler:) 메서드를 사용할 수 있는데 외부 URL 이동할 때 앱으로 돌아온 경우 뷰의 터치이벤트를 전달받지 못할 수 있다.

뷰컨트롤러의 생명주기도 호출되지 않기 때문에 해결방법으로 completionHandler의 클로저에서 뷰커트롤러의 appearance 전환을 수동으로 처리했다.

DispatchQueue.main.async {
    if let window = Application.window,
       let rootViewController = window.rootViewController {
        rootViewController.setNeedsLayout()
        rootViewController.layoutIfNeeded()
    }
}
  • beginAppearanceTransition(_:animated:)은 뷰가 화면에 나타나기 시작할 때 호출
  • endAppearanceTransition()은 전환이 완료될 때 호출
    • 이 메서드들을 사용하면 뷰 컨트롤러의 생명 주기 이벤트 (viewWillAppear, viewDidAppear, viewWillDisappear, viewDidDisappear)가 올바르게 호출된다.

🔠 HTML Entities


HTML 문자열을 화면에 표시하기 위해 태그처리를 진행했는데 태그 이외에도 Entities처리도 진행해야 했다.

HTML 문자열을 UILabel에 표시해야 했기 때문에 치환하는 방법을 생각했다.

HTML Entities는 특정 문자를 HTML에서 안전하게 표현하기 위한 코드나 식별자인데 모든 Entities를 치환하는 코드를 작성하려다가 swift-html-entities 라이브러리가 있어서 해당 라이브러리를 사용했다.

🙋🏻‍♂️ 기타 사항


  1. AppStore Connect에서 앱을 여러 버전을 출시대기중이 가능한지 확인해보았는데 이미 제출한 버전과 심사요청할 수 있는 버전 2개 버전만 관리할 수 있다.
태그: