| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- requirenativecomponent
- Android
- 리액트 네이티브
- 명시적 정체성
- React-Native
- React Native
- 다가구 전세
- presentationbackgroundinteraction
- HUG보증보험지사
- 구조적 정체성
- 업로드 키 인증서
- react
- 앱 성능 개선
- launch screen
- completion handler
- 안드로이드
- 뷰 정체성
- native
- 뷰 생명주기
- ssot
- 리액트
- SwiftUI
- data driven construct
- 네이티브
- @sendable
- 앱 서명 키 인증서
- panorama view
- ios
- 파노라마 뷰
- 다가구 전세보증보험
- Today
- Total
목록분류 전체보기 (86)
NEON의 이것저것
안녕하세요. 서론 제치고, 본론부터 말씀드리자면 2025년 9월 중순 기준 저는 HF 전세자금대출 + HUG 전세보증보험 조합으로 다가구 주택을 전세거래하였습니다! 요즘 서울의 월세가격이 살벌한데, 전세는 다가구주택 위주 매물밖에 없다보니,,, 다가구주택 전세 거래에 관심있으신 분들에게 조금이나마 도움이 되었으면 합니다. 제 간략한 타임라인은 아래와 같습니다2025.08.06: 가계약금 입금2025.09.12: 잔금 입금 및 전입신고2025.09.12: 전세보증보험지사 방문(하지만, 빠꾸먹음..)2025.09.23: 전세보증보험지사 재방문 및 전세보증금반환보증보험 접수 성공2025.11.06: 44일만에, 심사 통과 및 보증료 납부 이 글을 읽게되실 분들은 모두 아시겠지만, 전세거래하는 데에 있어, 특히..
Android Developers에서는 Hilt를 아래와 같이 설명하고 있습니다.종속 항목 수동 삽입을 실행하는 상용구를 줄이는 Android용 종속 항목 삽입(DI) 라이브러리 Hilt는 안드로이드 컴포넌트(Activity/Fragment/Compose NavHost/ ViewModel 등)의 생명주기에 맞춰 의존성 그래프를 자동 생성하고, Gradle 플러그인 및 Annotation processing을 통해 Factory 코드를 만들어 보일러 플레이트를 줄여줍니다.Annotation Processing: 소스코드 상단의 어노테이션(ex. @Composable)을 컴파일 시점에 스캔하여, 추가 소스/ 클래스/메타 데이터를 자동 생성하는 컴파일 확장 단계. JSR 269 표준(플러그인 API) 위에서 ..
인앱 업데이트 로직을 통해 플레이스토어로 리다이렉트 및 업데이트 시도 시, 아래 팝업과 함께 앱 설치가 불가하다는 문제를 겪었습니다. 이를 해결하고자 먼저, 해당 이슈가 발견된 기기를 연결하여 LogCat를 통해 원인을 파악하였습니다.[414] AU2: Failure History successfully updated for package, attempting to upgrade to version 7 with install reason SINGLE_INSTALL and status_code 6004[410] IQ: start evaluating install requests.[403] com.packageName.projectName is installed but certificate mismatch ..
모바일 앱 사용자 경험을 향상시키는 핵심 요소 중 하나는 적절한 시점에 전달되는 푸시알림입니다.iOS 플랫폼에서 Firebase Cloud Messaging(FCM)을 활용하면 비교적 쉽게 푸시알림 기능을 구축할 수 있지만, 플랫폼 특성상 몇 가지 중요한 환경설정을 반드시 선행해야 합니다. 이 글에서는 iOS 앱에 Firebase 푸시알림 기능을 구현하기 위해 필요한 초기 환경설정을 단계별로 정리해보았습니다. 0. 앱 & 앱 식별자 추가하기가장 먼저 Apple Developer 플랫폼에서 푸시알림을 연결하고자 하는 앱을 추가해줘야 합니다. 이미 앱이 추가되어있는 상황이면 해당 절차를 무시하셔도 됩니다.여기서 법인 개발자의 경우 SKU 필드가 추가로 생성되는데, 이는 Apple 내부적으로 사용되지 않고, ..
1. 구현 목표회원가입 플로우에서 사용자가 화면을 터치하지 않고도 키보드의 "다음" 버튼만으로 모든 정보를 순차적으로 입력할 수 있는 UX를 구현하고자 했습니다. 이 과정에서 일반 텍스트 입력, 그리고 비밀번호 입력이 모두 필요했기에, 평문 입력을 위한 TextField와 입력 내용을 점으로 표기해주는 SecureField 간의 자연스러운 전환이 핵심 요구사항이었습니다. 세부 목표1. TextField와 SecureField 간 전환 시 키보드가 내려가지 않을 것2. 입력 정보 종류에 따라 적절한 키보드 타입(.default, .asciiCapable, .numberPad)이 즉시 적용될 것2. 시행착오 과정1차 시도: 조건부 렌더링if type.isSecure && isPasswordHidden { ..
1. 개요iOS 앱 개발에서 화면 전환 시 탭바의 표시/숨김과 스와이프 백 제스처의 활성화/비활성화는 중요한 UX 요소입니다.SwiftUI를 활용해 앱을 고도화하게 될 경우, 대부분은 SwiftUI 프레임워크에서 기본으로 제공하는 navigationBar 대신 커스텀 제작한 헤더를 통해 화면전환을 제어하게 될 것입니다. 하지만 이의 경우 아래 화면과 같이 SwiftUI의 기본 네비게이션 헤더와 중복되는 상황이 발생하게 됩니다. 이때, .navigationBarBackButtonHidden(true)를 통해 기본 네비게이션 헤더 가리기를 수행하면 1차적으로 위 문제를 해결할 수 있습니다. 하지만, 해당 뷰 수정자를 적용시키면, 화면 좌측 끝에서 우측으로 스와이프할때 이전 화면으로 전환되는 PopGestu..
최근 SwiftUI 프로젝트에서 복잡한 네비게이션 플로우를 구현하면서 Navigation Router 패턴을 도입하게 되었습니다. 기존의 NavigationView/NavigationStack 기반 접근법으로는 다단계 회원가입 플로우와 같은 복잡한 네비게이션을 관리하기 어려웠기 때문입니다. *해당 네비게이션 방식은 iOS 16버전부터 지원되는 방식입니다. 때문에, 최소버전이 15이하일 경우에는 도움이 되지 않을 수 있습니다! 0. 기존 방식의 문제점1. NavigationStack 중첩 문제처음에는 각 View에서 독립적으로 NavigationStack을 관리하고자 했습니다.struct ExampleApp: App { var body: some Scene { WindowGroup { ..
SwiftUI에서는 바텀시트 UI를 위해 .sheet() 뷰 수정자를 제공하고 있습니다. 개발자는 해당 수정자에 SwiftUI 뷰를 클로저 내부에 선언함으로써, 자연스러운 애니메이션 효과와 함께 원하는 뷰를 부모 뷰 상단에 표시할 수 있게 됩니다. 하지만, .sheet 뷰 수정자의 기본형태를 사용할 경우, 바텀시트 표시와 함께 바텀시트 외부 배경또한 어두워지게 됩니다..sheet(isPresented: $isDetailPresent) { ExampleBottomSheet() .presentationBackgroundInteraction(.enabled)}하지만, 부모 뷰에 대한 상호작용 가능여부를 조정하는 위 뷰 수정자를 .enabled로 설정하게 되면, 외부영역에 대한 상호작용이 가능..
기존 Grand CentalDispath에서 사용자가 구독한 뉴스를 URLSession으로 불러와 사용자 뉴스 피드에 보여주고자 할때, 위와 같은 도식의 흐름이 필요했습니다.메인 스레드는 사용자 입력에 대한 반응성을 유지하도록 하고상호배제를 보장하는 직렬큐를 통해 추후 URLSession으로 부터 받는 결과들을 관리함으로써, 데이터 베이스 접근 간 상호 배제를 보장할 수 있습니다.이와 같은 구조에서 네트워크 요청 결과가 도착하면, URLSession의 콜백이 병렬 큐에서 호출되어 UI를 새로 고치게 될 것입니다.중요한 것은 GCD에서 작업이 대기열에 등록되면, 스레드가 새로 생성되어 작업을 처리한다는 것입니다.즉, 모든 여유 CPU 코어를 점유할때까지 시스템은 새로 생성한 스레드들을 할당할 것이며, 네..
클로저는 코드 내에서 전달되거나 사용할 수 있는 독립적인 기능 블록1급 객체이기 때문에 변수, 함수의 인자, 함수의 반환값으로 사용할 수 있습니다.*Kingfisher에서는 중복 다운로드 방지기능 구현을 위해 onCancelledCallback 클로저들을 배열에 보관한 후, 취소 요청이 발생하면, 해당 배열을 순회하며 콜백들을 사용합니다.캡처func makeAdder() -> (Int) -> Int { var base = 10 // [base]는 캡처 리스트로, base의 값을 복사하여 캡처 return { [base] num in return base + num }}func makeAdder() -> (Int) -> Int { var base = 10 ..