적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

초보 iOS 개발자의 일상 138

[iOS] 롤링 배너 노출 트래킹

광고 배너가 도입되면서 배너 노출 및 클릭 트래킹 기능을 구현하게 되었다. 문제는 화면마다 UI 구현 및 작동 방식이 다 다르다는 것.. 😱 [홈 / 커뮤니티 / 전문가 찾기] 이렇게 세가지 탭에 배너가 적용이 되어 있는데, 클릭 수는 명시적이지만 노출 수 감지하는 게 문제였다. 네이버 카카오 등등 보통 광고 배너는 롤링 방식이 아니라 하나만 노출하고 새로고침될 때 다른 배너로 바뀌는 형태가 많던데우리는 롤링을 유지하면서 화면에 배너가 보였을 때 정확한 노출 수 집계를 해야하는 것... 화면마다 배너가 적용된 방식을 먼저 살펴보자면, 1. 홈 배너- SwiftUI의 ScrollView 내에 위치ScrollView { VStack { ... bannerView ..

iOS에서 WebView로 Analytics 사용하기 (feat. AnyCodable)

웹뷰로 만든 앱에서 Firebase logEvent에 purchase 가 제대로 잡히지 않는 이슈가 있었다. 웹에서 받아온대로 firebase 에 전송하도록 되어 있었는데, purchase 의 프로퍼티가 사전 정의된 [String: String] 형태가 아니라 [String: Any] 형태로 보내지고 있었던 것!! Firebase 에서 기본적으로 제공하는 이벤트들이 있다. login, purchase, sign_up 등.. (오래된 문서인것 같지만 여기 참고 👉🏻 [GA4] 추천 이벤트) Firebase 의 logEvent는 [String: Any] 형태로만 보낼 수 있고, nested array 형태를 직접 받을 수는 없지만purchase 같은 기본 제공 이벤트에서는 받을 수 있다. 아니, 그렇게..

전문가 찾기 필터 - 화면 및 데이터 통합 (feat. OrderedSet)

전문가 찾기 필터 리뉴얼 작업단순 UI 개선.. 이 아니라 아예 다 새로 만드는 작업이었다 ^^ 1. 기존에 각 필터 별로 따로 관리되던 바텀시트를 하나로 통합2. 날짜 및 시간 선택을 단일 선택에서 다중 선택으로 변경3. UIKit -> SwiftUI=> 데이터 흐름 구조 개선으로 이후 필터 관련 기능 확장 시 개발 속도 향상 기존 구조의 문제28개의 배열로 서로 타입이 다른 필터 항목들을 각각 관리 하고 있어, 통합 시 하나로 관리하기가 어려웠다.또한 필터 관련 api 와 로직들을 전문가 찾기 화면 ViewModel에서 다 관리하고 있어 뷰모델이 방대해지고 분리에 어려움이 있었다. 통합 전통합 후

AppsFlyer 이벤트 로그 보내는 법 + Test

1. AppsFlyer 이벤트 로그 보내기2. Test Device 등록3. 실시간 이벤트 트래킹 Test 예전에도 했었는데 기억이 가물가물해서 문서로 남겨본다. 1. AppsFlyer 이벤트 로그 보내기AppsFlyer SDK 연동 - 인앱 이벤트 - 이벤트 구조여기서 사전 정의된 이벤트 이름을 확인할 수 있다. 앱스플라이어를 포함해서 meta ads 등 다른 플랫폼에 맵핑되는 이벤트 값들을 함께 확인할 수 있다. AppsFlyer iOS SDK In-app events여기서 로그이벤트 보내는 방법 및 코드를 참고할 수 있다. 다음과 같이 보내주면 됨AppsFlyerLib.shared().logEvent(AFEventAddToWishlist, withValues: [ AFEventParamP..

[재현 불가] 같은 푸시가 동시에 두 개 들어온다구요?

대표님이 직접 스레드에 글을 남겨주셨다. 바로상담 알림 설정했을 때, 푸시가 두 번 연달아 오셨다고.. 한 기기에서 여러 계정으로 로그인 한 이력이 있을 때 푸시가 중복 수신될 수 있는지 확인을 요청해주셨다. 아마도 그럴 가능성은 거의 없지만..원인 파악을 위해 앱에서도 확인을 해보고자 동일 기기에서 계정 두 개로 번갈아 로그인했을 경우, 푸시가 여러개 오는 경우가 있는지 체크를 해보았다.  바로상담 푸시 알림은 하루에 한 번만 오게 되어 있어, 테스트를 위해 개발 db에서 푸시 전송 기록을 지워주었다.좌측 상단에 SQL 누르면 Script 화면이 열리고, 쿼리를 입력해 데이터를 조회할 수 있다.last_push_sent_time 을 NULL 값으로 수정해준 후 Save 하고 바로상담 키면 알림을 계속 ..

DBeaver로 db 수정해보기

바로상담 리뉴얼하면서 기존에 있던 화면이 없어지고, 다른 화면으로 통합되면서 로직이 제대로 작동하는지 테스트가 필요했다.그런데 바로상담은 한 번 진입하면 다른 유저들이 동시에 들어오지 못하도록 5분 간 lock 이 걸리기 때문에, 기능 테스트를 자유롭게 하기 위해서는 테스트할 때마다 개발 db에서 lock 데이터를 지워줘야 했다.  1. Table 조회- 원하는 테이블을 찾아서 열고2. Sort- registered_time column을 ordered by DESC 내림차순으로 설정해 최신순으로 정렬해준다.3. Delete Row- 내가 테스트 중인 user id 값 중 가장 최신 로우를 삭제해준다.4. Save- 하단의 save 버튼을 눌러야 저장이 됨이렇게 하면 lock 을 수동으로 지워주고 마음껏..

DBeaver 설치 및 실행해보기

개발 서버에서 마음껏 테스트 해보려면 db를 조작해야할 일이 종종 생기더라세 달 쯤 전부터 DB 권한을 받고 DBeaver를 조금씩 사용해보고 있다. https://dbeaver.io/ DBeaver Community | Free Universal Database ToolDBeaver Universal Database Tool DBeaver Community is a free cross-platform database tool for developers, database administrators, analysts, and everyone working with data. It supports all popular SQL databases like MySQL, MariaDB, PostgreSQL, SQL..

[SPM] 디자인 패키지 업데이트 되지 않는 이슈 (add package 및 update package error)

디자인 시스템을 spm 패키지로 만들어서 사용하고 있는데, 얼마 전부터 갑자기 Update Package 하면 The repository could not be found. Make sure a valid repository exists at the specified location and try again. 이라는 에러가 뜨면서 업데이트가 되지 않았다.  잘 되다가 갑자기 왜이러는겨? 😳 마찬가지로 디자인 패키지 사용 중인 다른 프로젝트에서도 같은 에러 뜨면서 업데이트가 되지 않더라..아놔.. 쓰기 편할려고 만들어놨더니 더 귀찮게 하네 ~.~ 빠르게 처리해야할 태스크가 있어, 우선 급한대로 업데이트가 필요하거나 새로 추가되는 컴포넌트들은 mock 파일 따로 만들어서 프로젝트 내부에서 만들어주었다. 이..

iOS 18 버튼 터치 이벤트 간헐적으로 씹히는 이슈 (feat. simultaneousGesture)

새로운 기능을 추가하고 심사를 올렸는데,전혀 다른 곳에서 리젝이 났다.  Guideline 2.1 - Performance - App CompletenessBug description: the 'xxx' button was unresponsive 잘 작동되던 버튼이 진짜로 안눌리네;;근데 이상하다. 잘 눌릴 때도 있고 안눌릴 때도 있고, 한 화면이 전체 다 안눌리는 것도 아니고 어떤 건 눌리고 어떤 건 안눌리고 그것도 다 랜덤이고도대체 이게 뭐람 🤷🏻‍♀️ iOS 17 이하 버전에서는 잘 되는 것 같고,iOS 18 이상에서 간헐적으로 발생하는 문제인 것 같은데.. 포럼에도 다음과 같은 이슈가 올라왔더라Button Responsiveness Problems in SwiftUI Apps After Upg..

728x90
반응형