부제: 나보다 훨씬 똑똑하다고 믿었던 모델이 전원 버튼 하나에 막혔다. 그 시행착오를 줄여 측정을 자동화하기까지 서두 windowinsets.info를 만들고 있다. Android 기기별 상태 표시줄, 내비게이션 바, 제스처 영역, 화면 잘림과 폴더블 힌지 정보를 그림으로 보여 주어, 앱의 콘텐츠가 기기마다 어느 영역까지 안전하게 표시되는지 살펴볼 수 있다
서두 신나는 라이브러리들 버전들 최신화 작업 중에 빌드 테스트 과정에서 warning 문구를 발견했다. 'fun add(element: Long): PersistentSet' is deprecated. Use adding() instead. For more details, read the documentation for this function. ??? \
서두 QA팀에서 특정 기기에 한해서 앱 내 사진을 업로드하기 위해 카메라 촬영 에 진입할 경우, 촬영 완료 후 앱 복귀 시 앱이 재시작 되어 사진을 앱에 업로드할 수 없는 이슈를 제보해주셨다. 이번 글에선 해당 이슈에 대한 트러블 슈팅 경험을 다뤄보고자 한다. 본론 문제의 원인 파악 Crashlytics 확인하기 가장 먼저 확인한 건 역시 Crashlyti
서두 요새 회사에서 하고있는 여러 시도들 중에 하나는 WebView Bridge용 Swagger UI를 만드는 것이다. 예시 이미지) 이전 회고글에서 언급했듯(본문 발췌) 현재 웹뷰 브릿지 스펙은 엑셀 기반의 Google Sheet로 관리하고 있는데(노션을 못씀ㅠㅠ), 문서화 목적으로 쓰기에 나쁜 도구는 아니지만 클라이언트 개발자로서 어딘가 아쉬움이 있었다
서두 최근에 출퇴근 시간이 아깝다는 생각이 들어 이동 시간동안 책을 틈틈히 읽어보고 있다. 이번에 읽은 책은 새로 발간된 '코틀린 코루틴 리액티브 프로그래밍: Flow와 Channel'이며 코루틴을 다룬 책들은 많지만 코루틴의 Flow와 Channel을 중점적으로 다룬 책은 많지 않았기에 출간 소식을 듣자마자 바로 예약 구매를 하여 배송 받은 책이다. 따라
부제: Android PhotoPicker가 반환하는 URI(content://)는 무엇일까? 서두 PhotoPicker를 통해 갤러리에서 사진을 선택하면 콜백으로 아래와 같은 사진의 URI를 받을 수 있다. 얼핏봐도 서버에 저장되는 네트워크 이미지 URL(https://...)의 형태와는 다른 것을 확인할 수 있다. 그런데 Coil 같은 이미지 로딩 라이
부제: 음악 플레이어를 WebView에 맡기면 안 되는 이유 서두 사내 서비스 중 하나는 네이티브 앱 안에 WebView를 띄워 React 기반 웹을 올린 WebView 기반 하이브리드 앱이다. 어느 날 기획에서 요구사항이 하나 들어왔다. "명상 콘텐츠 재생을 위한 음악 플레이어 기능 추가해주세요." 다만, 다른 콘텐츠들과 다르게 명상 콘텐츠이므로 백그라운
서론 Modifier.clickable { } 은 컴포넌트에 클릭 이벤트를 부여하는 용도로 가장 자주 쓰이지만,\ 빈 람다 ({ })를 넘겨 하위 컴포넌트로의 클릭 전파를 차단 하는 용도로도 종종 사용하곤 했다.\ (ex. 로딩 컴포넌트를 전체 화면으로 구성 및 clickable { }를 추가하여 로딩이 화면에 노출되는 동안 다른 컴포넌트들을 클릭할 수 없
서두 사내 프로젝트에 Claude Code skill을 통해 로컬 자동 배포 환경을 구축하면서 각 Phase 별 로그를 확인하던 도중, uploadCrashlyticsMappingFile라는 Phase의 존재를 확인할 수 있었다. 클로드에게 물어보니 'R8 난독화 역추적용 매핑 파일을 Firebase에 올리는 단계' 라고 하는데, 문득 'Crashlytic
서두 웹뷰 브릿지 디버깅을 위한 라이브러리인 Dari 를 배포한 이후, 이를 실제 운영중인 서비스에 도입해보면서 있으면 편리할 것 같은 기능들을 하나씩 추가해봤다. 이번 글에서는 Dari의 새롭게 추가된 기능들을 소개하고, 기능들을 추가하면서 느꼈던 점들을 기록해보려고 한다. 각 버전별 변경 사항은 Dari Github Release Note 에서 확인할
서론 GoF(Gang of Four) 는 객체지향 설계에서 반복적으로 등장하는 문제들과 그 해법을 23개 패턴 으로 정리했다. 이번 글에선 그 중 Android 개발에서 자주 마주치는 핵심 패턴들을 예시 코드들과 함께 살펴보고, 나머지는 간략히 표로 정리해보도록 하겠다. 왜 갑자기 디자인 패턴을? 코드를 짜다 보면 처음엔 괜찮다가도 점점 기능이 추가되면서
서두 skydoves 님께서 출제하신 Dove Letter Kotlin Developer Quiz 를 풀고나서 그럭저럭 괜찮은 점수를 받긴했지만 소거법 등 객관식 문제 풀이 스킬에 의존한 부분이 적지않았다. 오답 노트 작성 겸 전 문항의 해설을 작성해보며 알고 있다고 생각했던 내용까지 한번 더 정리해보고자 한다. 저번과 마찬가지로 해설을 읽기 전에, 미리
서두 이번 글에선 skydoves 님께서 새로 출시하신 Compose HotSwan에 대해 알아보고 직접 사용해보며 느낀 장점과 한계점에 대해 정리해보고자 한다. 본론 Compose HotSwan 이란? Compose HotSwan 은 Jetpack Compose를 위한 Android 전용 Hot Reload를 지원하는 JetBrains IDE 플러그인 이
서두 최근 DI 프레임워크들이 KSP 대신 Kotlin Compiler Plugin 을 선택하기 시작했다. Metro: 기존 DI 프레임워크들의 장점을 취합하여, 처음부터 Kotlin Compiler Plugin 기반으로 설계 Koin: KSP 기반 코드 생성 방식에서 Kotlin Compiler Plugin으로 전환을 발표 따라서 이번 글에서는 Kotli
서두 목록화면 -> 상세화면 -> 수정화면 -> 수정완료 -> 상세화면 복귀 상황에서,\ 상세 조회 API 호출을 통해 수정된 데이터에 대한 갱신을 구현하는게 다소 비효율적이란 생각이 들었다. 수정 화면내에서 수정 성공시 이미 서버에 반영된 데이터를 갖고 있기 때문이다! 따라서 이번 글에선 Navigation3 을 사용할 때, 화면 간 결과를 어떻게 전달할
서두 Android에서 WebView 기반 하이브리드 앱을 개발할 때, 네이티브와 웹 간의 통신은 JavaScript Bridge를 통해 이루어진다. 이 브릿지 통신은 앱의 핵심 기능을 담당하는 경우가 많지만, 디버깅 환경은 HTTP 통신에 비해 상당히 열악한 것이 현실이다. HTTP 통신의 경우, Chucker와 같은 도구가 OkHttp Intercept
서두 이전 글에서 BLE의 연결(Connection)과 연동(Bonding)의 개념적 차이를 살펴봤다.\ 이번 글에서는 BLE 기기 연동, 측정 데이터 동기화, 연동 해제까지의 전체 구현 흐름을 정리해보도록 하겠다. 구현 대상은 혈당계와 혈압계로, Bluetooth SIG(Bluetooth 표준을 관리하는 단체)에서 정의한 Glucose Profile과 B
서두 skydoves 님께서 출제하신 Dove Letter Quiz 를 풀고나서 충격적인 점수를 받게되어 오답 노트 작성의 필요성을 느꼈고, 오답 노트 작성 겸 전 문항의 해설을 작성해보며 알았던 내용도 다시 복습을 해보고자 한다. 해설을 읽기 전에, 미리 위의 문제를 풀어보는 것 추천한다. 10문제라 금방 품 본론 Android Q1. Activity가
서두 삼성 헬스 Data SDK를 통한 건강 데이터 연동 작업을 하면서 알게된 내용들을 복습 차원에서 정리해보려고 한다. 본론 왜 헬스커넥트 대신 삼성 헬스 SDK? "Android 공식 API인 헬스커넥트가 있는데 굳이?" 싶을 수 있지만, 국내 시장처럼 삼성 기기 점유율이 압도적인 환경에서는 오히려 삼성 헬스 SDK가 더 실용적인 선택일 수 있다. vs
출처) 서두 개발 중인 앱 내에 혈압계와 혈당계와 같은 BLE 기기 연동 작업을 진행하던 도중, BLE기기와 앱을 '연결' 하는 코드와 '연동(페어링)' 하는 코드의 결이 너무 다르다고 느껴졌다. BLE 연결을 판단하는 예시 코드 관련 문서 BluetoothGattCallback BluetoothProfile BLE 연동(페어링)을 판단하는 예시 코드 관련