sookim-1

번호 : 013, 작성일자: 2024-05-02

2024.04.22 ~ 2024.05.01

🤖 AI


우연히 AI 툴중에서 그림판에 그림그리듯이 그림을 그리면 HTML, CSS, JS의 코드를 작성해주는 툴을 보고 더 AI툴들을 공부해야겠다고 생각하고 찾아보았다.

  • UIZard : 프롬프트에 원하는 디자인을 입력하면 디자인을 AI가 작성해주는 툴이다. 400개 뷰 컴포넌트 이하에서는 무료여서 확인해보았는데 사이드프로젝트를 할 때 도움이 많이 될 것 같다.
  • Builder.io : Figma의 플러그인으로 통합하여 Figma의 디자인을 원하는 프로그래밍언어로 작성해준다.
  • GPTs : 챗GPT의 신규기능인데 해당 목적에 맞게 GPT를 커스텀하여 사용할 수 있다. GPTs Builder를 통해 여러 사람이 만든 챗봇을 사용할 수 있다. GPT의 유료버전에서만 사용가능하다.
  • 데빈 : 세계 최초의 AI 소프트웨어 엔지니어, 프롬프트를 입력하면 직접 에러수정을 하면서 코딩을 해주는 프로그램

🚨 ATT(AppTrackingTransparency) - 앱 추적 권한


Reject 사유는 "AppTrackingTransparency프레임워크를 사용하는 경우 앱 추적 권한 요청팝업을 표시하지 않는다"였다.

ATT는 iOS 14.5부터 발표되었는데 사용자의 IDFA(광고주 식별자)에 액세스하고 사용자/기기를 트래킹하도록 도와주는 프레임워크인데 동작하기 위해서는 사용자의 앱추적권한을 동의를 받아야 한다.

그래서 권한요청팝업이 발생하지 않은 이유에 대해서 추론해보았다.

  1. 아이폰 설정 → 개인정보 보호 및 보안 → 추적 → 앱이 추적을 요청하도록 허용 옵션 활성여부를 확인(옵션이 비활성되어있으면 팝업이 발생하지 않는다.)
  2. iOS17에서 발생한 이슈로 추적권한을 요청하는 메서드인 completion메서드에서 이슈
    • ATTrackingManager객체의 open class func requestTrackingAuthorization(completionHandler completion: @escaping (ATTrackingManager.AuthorizationStatus) -> Void) 의 메서드에서 이슈가 발생해서 open class func requestTrackingAuthorization() async -> ATTrackingManager.AuthorizationStatus 로 변경
  1. 권한요청팝업이 연속적으로 발생한 경우 무시될 수 있는 이슈
    • 앱이 모두 로드가 되기 전에 팝업이 발생하면 안되므로 applicationDidBecomeActive에서 권한 요청(애플에서 권장하는 방법)
    • Delay를 주어 팝업처리

해당 이유들을 참고하여 수정해서 앱 심사는 통과되었다.

📆 DateFormatter


우연히 DateFormatter인스턴스를 초기화하는데 비용이 많이 든다는 글을 보았다.

측정한 글을 보았는데 DateFormatter인스턴스 자체의 생성시간은 짧지만 생성을 하면서 계산하는 작업이 함께될 때 시간이 기하급수적으로 늘어났다.

그래서 Date를 다루던 코드들을 전역으로 DateFormatter인스턴스를 생성한 후에 처리하도록 변경하면 비용을 줄일 수 있다.

DateFormatter 분석 해당 블로그글을 참고하였다.

🌈 Carousel Page Scale Banner


사이드프로젝트의 배너를 Carousel 형식으로 만들고 Page를 표시한 후 아이템이 이동할 때 마다 가운데 Scale이 강조되도록 하는 화면을 만들기로 했다.

AdvancedCompositionalLayout의 저장소를 참고했는데 추후 참고하기 좋은 프로젝트여서 나의 코드스타일로 변경하는 작업을 진행했다.

Combine을 RxSwift로 변경하고, UI구성은 SnapKit, Then라이브러리를 사용했다.

  • Carousel 형식은 CompositionalLayout으로 Section을 구성한 후 orthogonalScrollingBehavior를 groupPagingCentered로 설정했다.
  • Page 표시는 visibleItemsInvalidationHandler에서 round(offset.x / self.view.bounds.width)로 해당 page번호를 구했다.
  • Scale 애니메이션처리는 visibleItemsInvalidationHandler에서 가운데 아이템과 아닌 아이템들의 scale을 CGAffineTransform(scaleX: scale, y: scale) 메서드로 변경했다.

🙋🏻‍♂️ 기타 사항


  1. BottomSheet를 구현할 때 iOS15이상 부터는 UISheetPresentationController를 지원해서 편리하게 사용할 수 있다.
  2. App Groups를 이용하면 다른 앱들간의 데이터를 공유할 수 있다.
  3. GPG키 오류가 발생하여 보았는데 새로운 버전부터 GPG키에 대한 비밀번호를 따로 입력하도록 되었다.
  4. rbenv란 ruby버전을 여러개를 선택하여 사용할 수 있도록 하는 패키지다.
태그: