일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- iphone
- 네트워크
- toolbarvisibility
- combine
- WWDC
- withAnimation
- GCD
- 최적화
- RxSwift
- view
- Performance
- stateobject
- auth
- ios
- gesture
- dataflow
- Concurrency
- CS
- SwiftUI
- 접근성제어
- UIKit
- Network
- state
- 달력
- Animation
- swift
- firebase
- arkit
- authentication
- avsession
- Today
- Total
목록Home (56)
XLOG

SwiftUI 를 사용하다가 보면 .toolbar 나 .onChange 같은 함수들이 iOS 17.0 을 기준으로 deprecated 되어 분기처리를 해야하는 경우를 마주하게 된다. 하지만 매번 사용하는 곳에서 분기처리 하는 코드를 사용하는 건 비효율적이기에 View 의 extension 을 사용하면 중복된 코드를 줄일 수 있다.먼저 onChange의 변화점에서 공통점을 찾아보자.바뀐점은 17 이상에선 initial 이라는 인자를 받는데 이건 initial 될 때 액션을 발생시킬지를 결정하는 값이다.그리고 두 번째로는 변화값을 받아서 전달해주는 action handler 가 17 이전에는 바뀐 값 하나만을 전달해줬다며, 17 이상부턴 바뀌기 전과 후 모두를 전달해준다. 여기서 공통점은 결국 어떠한 값(..

Accessibility 를 공부하다가 보니 흔하게 사용하는 TextField 에서 음성입력 버튼이 없다는 걸 깨달았다. searchable 로 navigation bar 에 search controller 를 추가하더라도 없었다. 물론 키보드가 올라오면 음성입력할 수 있는 버튼이 있지만, 가장 최하단에 있어서 접근하는 것이 여간 불편한 일이라는 걸 깨달았다.해당 코드는에서는 AVAudioEngine 을 사용할 계획이다. 1. 권한 설정info.plist 에 마이크 사용 및 음성 인식 사용 권한 요청을 추가해 준다.2. STTManager 정의2-1 권한 요청 (Combine 으로 진행)import Foundationimport AVFoundationimport Speechfinal class STTMa..

2022년 애플아카데미에 있을 때 Accessibility 관련 주제에 대해 얘기를 들은 적이 있었다.옛 직장에서 홍보관 리뉴얼을 진행할 때 휠체어를 탄 사람들이 관람하기 어려운 곳이란 판단에 그 부분에 대한 업데이트를 요청한 적이 있었다. 국내 성인이면 누구나 알만한 대기업이 었지만 금액, 효율 등의 이유로 바로 반려당한 적이 있던 나였다.하지만 Apple 은 아카데미를 오픈할 당시 자동문의 사이즈가 휠체어 사용자를 위한 사이즈를 충족하지 못하였기에 오픈을 연기했었다. 그런 기억이 있기에 Accessibility 에 관한 내용을 처음 접했을 때 어떤 유저든 사용편의성을 주기 위한 노력을 하는 기업이구나란 생각을 했고, 나도 앱을 개발하게 되면 그런 노력을 해야겠다고 생각을 했는데....여태 잊고 있다 ..
하다보니 좌표를 전송해야할 필요가 생겼다. 하지만 나한테 주어진 데이터 크기의 제한이 있었다. 그래서 Google Map APi 에서 인코딩된 폴리라인에 관한 내용을 확인하고 적용하려고 했다.구글에서 얘기하는 인코딩된 Polyline해당 알고리즘은 손실이 있는 압축 알고리즘이다. 하지만 그 손실로 발생하는 오차를 최소화 하여 진행된다.좌표값은 위도(Double), 경도(Double) 로 이루어져 있다. 게다가 Polyline 은 이 위도의 배열로 구성되어 있다. 단순한 핵심 Point 뿐만이 아닌 지도상에 도로의 형태에 맞게 각도를 주기 위해 포인트와 포인트 사이에도 많은 좌표가 들어간다.이를 효율적으로(데이터의 오차는 적고, 압축율은 높게) 전달하기 위핸 알고리즘이다.10 진수 값에 1e5를 곱한 다음..

이전 회사에서 혼자 AR 을 담당해서 개발을 했었는데, 바쁘다는 핑계로 제대로 정리를 한적이 없었다....그래서 시작하게 된 AR Posting1. ARKit, RealityKit 은 무엇일까?ARKitAR을 사용하려면 ARKit 을 쓰면된다고 생각하지만 100% 맞다고 할 순 없다. 실제 우리가 App 을 만들때 UI 가 있어야 하지만, ARKit 은 우리가 사용할 수 있는 UI 요소가 존재하지 않는다. ARKit 은 AR 환경을 구축하기 위해 내가 가지고 있는 하드웨어(iPhone, iPad)에 장착되어 있는 센서들을 통해 데이터를 받아와 AR 환경을 만드는데 도움을 주는 프레임워크이다.RealityKitRealityKit 공식 문서 페이지에서 말해주듯이 3D 시뮬레이션 및 렌더링 기능을 제공하는 프..

1. Observation 이란?wwdc 23 에서 발표한 observation 은 프로퍼티의 변화를 추적하는 Swift 기능으로 같은 wwdc 23 에 발표한 swift 5.9에 신기능인 매크로를 사용하여 정의한 데이터 타입을 observable 하게 바꿔주는 기능이다.2. 사용방법정의한 class 에 @observable property wrapper 를 붙여준다.import Foundationimport Observation@Observable class DataModel { var count: Int = 0}이를 View 에서 사용할 땐 @State, @Environment, @Bindable, var 를 사할 수 있다. 여기서의 기준은View의 부분일 경우 @State, 글로벌하게 변수를 사용할..

사이드 프로젝트를 진행하면서 Tree 형태의 데이터 구조를 만들어 사용했다.데이터는 SwiftData 를 사용해서 저장을 했으며 Model 은 Hashable 을 상속시켰다.그런데 데이터를 수정하고 나서 한번씩 Fatal error 가 발생했다.테스트를 더 해보긴 해야겠지만 찾아본 바로 원인은 Hashable을 충족하기 위해서 Equatable 또한 상속시켜야 한다. Hashable 이 Equatable 을 상속해야하는 이유는 HashValue 의 비교를 위해서인데, 여기서 내가 실수한 부분은 == 에 정의할 때 비교 연산을 Hash 함수에 사용한 Propertie 와 달라서 였다.예를 들면class Model { let id: UUID = UUID() let name: String let s..

1. SwiftUI 는 언제 View를 Update 하는가?우리가 SwiftUI 를 사용하며 View 를 정의할 때 @State, @StateObject 와 같은 변수를 정의하게 되면 View 는 Source of truth 를 만들어 관리를 한다. 이때 UI 를 통해 Action 을 발생시켜 Source of truth 의 값의 변화를 준다면 그 값의 변화를 View 에 알리고 View에서는 body 를 다시 compute 를 한다. body를 다시 compute 한다는 것은 body 내부에 코드를 한줄한줄 실행을 해준다는 의미이다.2. 그렇다면 어떻게 Update 를 최소화 하는가?2-1. SubView를 사용하여 View가 의존하는 변수를 최적화한다.위에서 설명을 했지만, View 가 추적하고 있는..

1. StateSingle source of truth 로 View 에서 PropertyWrapper 로 정의 한다. 그로 인해 View 와 따로 독립적으로 SwiftUI 가 데이터를 관리해 주며 생명 주기는 View 의 생명주기와 동일하다. State 값의 변화를 view에 알려주면 View 는 re-render 한다.단 해당 State 가 정의된 View 의 body 내부에 직접적으로 state 값을 활용하여 View 의 내용이 달라지는 요소가 없다면 re-render 하지 않는다.import SwiftUIstruct ParentView: View { @State var count: Int = 0 var body: some View { VStack { ..

1. Environment 란 무엇인가?property wrapper 로 view의 environmentValue 를 읽는데 사용할 수 있다. 그렇다면 EnvironmentValues 는 무엇일까?view 계층을 통해 값을 전달해주는 역할을 한다. 이는 preferenceValue 와 반대되는 개념이다.2. 사용 방법// 정의struct MyEnvironmentKey: EnvironmentKey { static var defaultValue: Bool = false}extension EnvironmentValues { var myEnvironmentValue: Bool { get { self[MyEnvironmentKey.self] } set { self[MyEnvir..