sookim-1

번호 : 025, 작성일자: 2024-07-22

2024.07.15 ~ 2024.07.21

🌏 JSON 다루기


서버에서 응답받은 JSON의 Codable 모델을 작성했을 때, 키값의 자료형이 다르거나, 없는 키값이 있는 경우 앱이 종료되지 않도록 사전에 설정한 기본값으로 변경해주기 위해 KeyedDecodingContainer의 extension하여 사용할 수 있다.

하지만, 특정 요청에서는 null과 기본값을 구분해주고 싶은 경우에도 기본값으로 변경해주기 때문에 Decoder 객체에 구분할 수 있는 프로퍼티를 추가해주고 해당 프로퍼티값을 바라보면서 상황에 따라 구분할 수 있도록 코드를 수정했다.

해당 코드를 수정할 때 Mock API를 만들기 위해 🔗 Insomnia툴을 사용했는데 매우 간편해서 자주 사용할 것 같다.

자주 사용할 수도 있다고 생각하여 🔗 KeyedDecodingContainer+Extension.swift 관련 코드를 gist에 추가했다.

⚙️ private cocoapod 배포


SwiftUI프로젝트를 진행할 때 DesignSystem을 작성하여 사용하면 편리할 것 같아서 SwiftUI DesignSystem 저장소를 생성했다.

아직은 개인용도로 사용예정이여서 오픈소스로 배포하지 않고 private pod으로 배포하기 위해서 podspec을 수정하고 배포했다.

private pod으로 배포하기 위해서는 Library Repository와 Spec Repository를 2개를 생성해서 코드는 Library Repository에 작성하고 Spec Repository로 접근해서 Pod을 추가하는 원리였다.

공개저장소로 배포는 비공개저장소보다 더 간단했다. cocoaPod에 계정을 등록하고 podspec을 배포만하면 되었다.

적용은 잘되었지만, 아직 Resource파일의 번들을 찾지 못하는 문제들이 있지만, 보완해가면서 CocoaPod외에 SPM도 지원하도록 수정해가야겠다.

🙋🏻‍♂️ 기타 사항


  1. 탭바 아이템 여러개를 동시에 터치했을 때 UITabBarControllerDelegate의 animation 처리하는 메서드에서 이슈가 발생했는데 기본적으로 탭바를 구현할 때 멀티터치를 제한하도록 해야겠다.
  2. WebView 관련 코드리뷰 중 🔗 customAgent와 🔗 applicationNameForUserAgent 2가지를 설정하는 부분이 있어서 2개의 차이에 대해서 알아보았다. userAgent를 customAgent는 통째로 변경하고 applicationNameForUserAgent는 userAgent 끝에 추가하는 방식이였다. 하지만 applicationNameForUserAgent는 웹사이트에 따라서 값이 제대로 설정되지 않을 수 있어서 customAgent로 설정하는 방법이 안전한 방법 같다.
태그: