일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- launch screen
- SwiftUI
- 리액트 네이티브
- native
- Android
- 리액트
- presentationbackgroundinteraction
- 네이티브
- 라이브러리 없이
- 구조적 정체성
- React-Native
- 명시적 정체성
- requirenativecomponent
- react-native-fast-image
- React Native
- 스켈레톤 통합
- 360도 뷰어
- 앱 성능 개선
- completion handler
- data driven construct
- 파노라마 뷰
- panorama view
- 360도 이미지 뷰어
- 뷰 생명주기
- @sendable
- ios
- 뷰 정체성
- react
- 360도 이미지
- ssot
- Today
- Total
목록개발지식 정리 (83)
Neoself의 기술 블로그

모바일 앱 사용자 경험을 향상시키는 핵심 요소 중 하나는 적절한 시점에 전달되는 푸시알림입니다.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 ..

1. SwiftUI에서의 포커스 관리 방법FocusState API사용자의 주의력을 유도하기 위해 포커스의 이동을 커스텀할 수 있습니다.여기서 FocusState는 현재 포커스 위치에 따라 변화하는 상태를 의미포커스된 Field의 식별자를 보관하는 데에 사용됩니다.FocusedField 변수는 enum 타입으로 정의되며, 문자열, 정수 또는 해시 가능 값 타입을 사용할 수 있습니다.이 수정자는 포커스의 배치와 관련된 상호연결을 생성합니다.좌측 예시의 경우, 이메일 형식이 올바르지 않으면, focusedField를 .email로 설정하여 이메일 입력 필드로 포커스를 되돌리는 로직이 구현되어있으며, 빨간색 테두리가 표시되는 조건에도 이 focusedField의 상태를 활용합니다.만일 폼 데이터가 모두 유효한..

iOS 17버전 이상부터 사용할 수 있는 Scrollview에 대한 아래 개선사항을 정리하고 있습니다.여백 관리스크롤 타겟 및 위치 제어스크롤 전환 효과LazyVStack(iOS14+)감싸진 내부 콘텐츠는 초기 렌더시 모든 콘텐츠를 적극 evaluate하지 않고, 보일때마다 evaluate하여 성능을 최적화합니다.1. ScrollView와 안전 영역 및 콘텐츠 여백 관리1.1. SafeArea 스크롤 뷰는 SafeArea를 사용해 콘텐츠를 보호하고, 콘텐츠 바깥 여백으로 SafeArea를 분할해, 콘텐츠가 안전 영역 안으로 확실히 들어갈 수 있도록 합니다. 1.4. SafeAreaPadding좌측에 사용된 일반 패딩 수정자와 똑같이 동작하지만, 콘텐츠가 아니라 SafeArea에 패딩을..

1. Actor데이터를 안전하게 보관하는 상자와 같은 개념으로, 공유 mutable 상태를 보호하기 위한 동기화 매커니즘입니다.자체 상태는 프로그램의 다른 영역과 격리되며, 액터 접근을 위해선 액터를 반드시 통과하며 이때, 액터의 동기화 메커니즘은 다른 코드가 액터의 상태에 동시에 접근하지 않도록 보장합니다.속성, 메서드 초기화, 서브스크립트를 가질 수 있으며, 프로토콜을 준수하고 확장으로 보강될 수 있습니다.저레벨에서 제공하는 직렬 DispatchQueue와 NSLock처럼 상호 배제를 제공하지만, 저레벨 동기화 매커니즘과 달리 엄격한 컴파일러 오류를 통해 동기화를 안정적으로 수행할 수 있도록 돕습니다. 1.1. 동작 원리프로그램의 나머지 부분에서 인스턴스 데이터를 격리하고, 해당 인스턴스 데이터에 대..