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

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. 동작 원리프로그램의 나머지 부분에서 인스턴스 데이터를 격리하고, 해당 인스턴스 데이터에 대..

일반 함수의 경우, completion handler를 통해 작업을 호출하면, 곧바로 스레드 제어권을 다시 함수가 갖게 되지만, async 함수는 작업이 완료되면 스레드를 일시 중단하여 함수가 갖고 있던 스레드 제어권을 시스템에 넘깁니다. 이 과정에서 호출자 즉 함수 역시 일시 중단됩니다. 만일 fetchThumbnail에서 비동기 메서드를 호출하면, 스레드의 제어권을 시스템에 넘겨주고, 시스템에게 URL Session의 data 메서드 작업을 예약해달라고 요청합니다.이 시점에서 시스템이 제어권을 가지게 되기에, 작업이 바로 시작되지 않으며, 다른 작업에 사용될 수 있습니다.설령, 늦게 시작된 다른 작업이 먼저 실행된 이후, data 메서드가 재개될 수 있습니다.이렇게 system에 의해 data 메서드..

위 예제는 비동기 및 동시성 코드를 사용하지만, 이러한 코드 작성을 용이하게 하기 위해 구조적 프로그래밍을 활용하지 못하고 있다즉, 함수가 호출되었을 때 값을 반환하지 않으며, 결과나 오류를 완료 핸들러에 전달하기 때문에, 오류 처리를 위한 구조적 제어 흐름을 사용할 수 없으며, 썸네일 처리를 위한 루프 또한 사용이 불가하다. Task- 프로그램의 실행 컨택스트- 비동기적으로 실행될 코드의 독립적인 단위- Swift 컴파일러는 이러한 태스크들을 스레드에 할당하여 병렬성을 확보- 각 작업는 다른 실행 컨텍스트(Executing Context)와 동시에 실행되며, 안전하고 효율적일 때 자동으로 병렬로 실행되도록 스케줄링됩니다.* async 함수를 호출한다고 해서 호출을 위한 새로운 작업이 생성되지 않으며,..

앱이 실행될 때, 성능에 영향을 주는 요소는 아래와 같이 나열해볼 수 있습니다.AllocationReference CountingMethod Dispatch 0.배경먼저 Swift가 제공하는 Value 타입과 Struct 타입을 먼저 설명드리겠습니다.값 타입 (Value Type)참조 타입 (Reference Type)structClassenumClosure기본 데이터 타입(Int, Double, String, Bool 등)Function컬렉션 타입들(Array, Dictionary, Set) 튜플 이 두 타입은 아래와 같은 차이가 있습니다. 1.1 메모리가 할당되는 위치값 타입: 실제 데이터가 Stack에 저장 참조 타입: 실제 데이터는 Heap에, 8바이트(운영체제 워드길이)길이의 데이터의 주소는 ..

이 글은 SwiftUI 관련 WWDC 세션들의 주요 내용을 기초부터 심화까지 포괄적으로 다루고 있습니다. SwiftUI를 처음 접하시거나, 익숙치 않은 분들에게 도움이 되었으면 합니다. 0. 목차더보기1. SwiftUI 소개1.1 SwiftUI의 핵심 특징1.2 저수준 API1.3 앱 정의에도 사용되는 SwiftUI2. 선언형 UI의 특성2.1 예측 가능한 상태 관리2.2 스레드 안정성2.3 성능 저하 요소 최소화2.4 넓은 범위의 적응성(Adaptivity)3. SwiftUI의 상태 관리3.1 상태 기반 UI 뷰 업데이트 사이클3.2 Property Wrapper와 의존성 관리3.3 Single Source of Truth (SSOT)3.3.1 데이터 모델과 UI(ViewModel)의 분리3.3.2 데..

기본 AnimationwithAnimation 수정자나 animation 수정자를 통해 간단한 애니메이션 구현이 가능합니다.이때 프로그램 상태가 변경되면, SwiftUI는 기존 상태에서 새로운 상태로 보간된 애니메이션을 적용합니다. Apple의 SwiftUI에서는 고급 애니메이션을 위해 Animation Phases와 Keyframes 기능을 제공하고 있습니다. 이는 두 상태 사이의 애니메이팅만이 아닌 일련의 여러 단계를 정의할 수 있습니다. Animation Phases위 기능은 연속된 애니메이션에 적합한 기능으로, phaseAnimator 뷰 수정자를 사용해 구현할 수 있습니다. 해당 뷰 수정자를 통해 각 단계를 정의하는 일련의 상태를 제공하면, SwiftUI는 자동으로 각 상태 사이를 애니메이팅하게..

가장 먼저 Animation의 근간이 되는 뷰 업데이트에 대해 톺아보겠습니다. SwiftUI View는 뷰의 종속항목을 상시 추적합니다. 여기서 종속항목은 @State, @ObservedObject, @Published 등의 프로퍼티 래퍼가 될 수 있는데요.종속항목이 변경되면서 뷰의 상태가 변경되면, 아래의 절차가 연차적으로 수행됩니다. 1. 다운스트림 속성값이 만료되며 기존 View 무효화2. Transaction 생성3. 업스트림 종속성이 변경되며 프레임워크가 View Value을 호출3. Transaction으로 뷰 계층 구조를 순회4. 속성값 모두 업데이트된 후, Transaction 폐기 *여기서 Transaction은 딕셔너리 중 하나로 SwiftUI가 현재 업데이트에 대한 컨텍스트를 암시적..