apple 216

[WWDC24] SwiftUI 컨테이너 쉽게 이해하기

[WWDC24] SwiftUI 컨테이너 쉽게 이해하기 What's New- ForEach(subviewsOf: )- Group(subviewsOf: )- Sections(subviewsOf: )- ContainerValues- @Entry Intro- Composition- Sections- Customization Composition @ViewBuilder를 사용할 경우 기본적으로 초기화 프로그램이 후행 클로저에 의해 동작.  새로운 API를 통해 업데이트 가능. 해당 API는 단일 뷰를 입력 값으로 받음.그리고 각 하위 뷰를 후행 뷰 빌더로 전달해 다른 종류의 뷰를 반환할 수 있도록 함.  이를 활용하면 UI를 좌측에서 우측처럼 사용 가능함.이는 엄청난 개선이지만 어떻게 동작하는지 제대로 이해하는게..

apple/WWDC 2024.08.02

[WWDC23] Accessibility & Inclusion

[WWDC23] Accessibility & Inclusion Apple에게 접근성은 필수적인 부분.우리가 앱의 접근성을 매우 쉽게 개선할 수 있도록 애플은 여러가지를 개선  Introduce- Accessibility enhancements   - 새로운 API에 탐구- Improve accessibility visual   - SwiftUI에서 접근성 개선- Keep state up-to-date   - UIKit에서 접근성 최신 상태로 유지하는 방법   새로운 접근성 안내 isToggle을 통해 힌트를 제공  알림레이아웃 변경화면 변경페이지 스크롤 알림을Swift에 네이티브 방식을 전송 가능   버튼의 행위에 알림을 달 수 있음.  중요도를 설정할 수도 있음.제 시간에 발음되지 않으면 무시되도 무방..

apple/WWDC 2024.07.31

[WWDC24] Swift의 성능 살펴보기

[WWDC24] Swift의 성능 살펴보기Swift의 Low-level에 대해서 알아볼 예정 Introduce- What is performance?: 성능이란?- Low-level principles: Low-level의 성능을 볼 때 고려해야 할 원칙- Putting it together: Swift의 어떻게 구현되는지, 성능에 어떤 영향에 미치는지 세부 사항을 알아보기 - What is performance?성능을 다차원적이고, 상황에 따라 달라집니다. 일반적으로 우리는 거시적인 문제 때문에 성능에 관심을 갖는다.  UI가 클릭하기 힘들 정도로 버벅이는 등의 문제가 생김. 하향식 방법을 조사많은 경우 코드의 Low-level 수준의 성능에 영향을 주지 않고 알고리즘 개선을 통해 이러한 문제를 해결...

apple/WWDC 2024.07.28

[WWDC24] AVFoundation의 미디어 성능 지표 살펴보기

[WWDC24] AVFoundation의 미디어 성능 지표 살펴보기Introduce- What are events?- Subscribing to events? iOS18에서는 미디어 성능 지표가 이벤트로 표시되고, 앱에서 구독하는 방법에 대해서 알아볼 예정 미디어에서 발생하는 일반적인 문제 1. 처음에 시작하기까지 너무 오랜 시간이 걸리는 점.2. 재생이 중간에 멈추는 점. iOS 18에서는 클라이언트에서 측정할 수 있는 더 많은 정보를 제공해 줌.1. 처음에 시작하기까지 너무 오랜 시간이 걸리는 점.    위 사진을 보면 세그먼트보다 Content Key를 요청하는데 오랜 시간이 걸렸음.이런 경우에는 키 서버 성능을 개선하거나, 재생하기 전 Content Key를 미리 로드된 키를 확인. => 이런 과..

apple/WWDC 2024.07.28

[UIKit] reloadSections에서 애니메이션 없애는 방법

reloadSections에서 애니메이션 없애는 방법 UITableView 혹은 UICollectionView를 사용할 때 reloadData()가 아니라 특정 섹션만 업데이트하는 reloadSections()를 사용할 수 있음. 특정 섹션만 업데이트 하는 것은 이점도 존재하나, 애니메이션이 들어가게 되어서 원하는 UX 결과물이 아니거나, 방송 실시간 채팅처럼 매우 빠른 속도로 데이터가 들어와 UI를 업데이트가 진행되는 경우 UI가 블락되거나, 심지어는 크래시가 발생하기도 함. Task { @MainActor [weak self] in guard let self else { return } UIView.performWithoutAnimation { self.reloadSections(in..

[Swift] JSON 형태로 바꾸는 방법

JSON 형태로 바꾸는 방법 서버에서 JSON으로 만들어서 올려달라고 해서, 구조체를 특정 키 값을 지정해서 올리기 위해 학습한 부분  아래는 JSON으로 바꾸는 코드extension Encodable { /// 인코딩 가능한 문자열을 JSON 직렬화 var jsonSerialized: String? { let jsonEncoder = JSONEncoder() do { jsonEncoder.outputFormatting = .withoutEscapingSlashes let jsonData = try jsonEncoder.encode(self) return String(data: jsonData, encoding..

CloudKit(iCloud) 정리 환경세팅 #1

CloudKit(iCloud) 정리 환경세팅 #1  CloudKit 정리 환경설정 #1https://rldd.tistory.com/607CloudKit 정리 이론 #2https://rldd.tistory.com/619CloudKit 정리 코드 예제 #3https://rldd.tistory.com/631 1. XCode에서 iCloud를 사용할 수 있도록 추가. 2. Apple Developer 사이트에서 해당하는 앱에 App Regiser에서 iCloud 체크 3. 체크 후 configure 눌러서 해당 앱 번들에 컨테이너 등록 4. 컨테이너 등록이 정상적으로 수행되었다면 위처럼 추가되어 있음. 5. 이미지 캡션란 링크를 누르면 대시보드 활성화 된 상태- https://icloud.developer.ap..

[iOS] infinite carousel DiffableDataSource + CompositionalLayout

[iOS] infinite carousel DiffableDataSource + CompositionalLayout UIKit에서 DiffableDataSource과 compositonalLayout을 사용하여 구현해보자. 전체 소스코드와 해당 코드에 대한 주석을 포스팅 제일 하단에 전부 넣어두었음. 예제 영상 무한히 회전하는 스크롤 뷰에 대한 구현 아이디어는 이미 많이 존재하나, 해당 포스팅에서는 diffableDataSource의 특성에 맞게끔 적용 (구현 방식) [앞에 붙는 id만 다른 원본] + [원본] + [뒤에 붙는 id만 다른 원본]을 먼저 구성한 후 한번에 apply diffable의 경우에는 데이터가 변경되었을 때, snapshot을 수정하는게 아닌 다시 찍음. 해당 부분은 iOS 13,..

[Swift] New access modifier: package

New access modifier: package Introduction 현재 다른 모듈에서 특정 심볼에 접근하기 위해서는 public으로 정의되어야 함. public 패키지 내외부 모두에서 접근 가능하기에 바람직하지 않음. 따라서 새로운 접근제어자를 만들어 심볼의 범위를 더 명확하게 하고자 함. Swift 5.9에서 도입 Motivation Module Engine in gamePkg: public struct MainEngine { public init() { ... } // `public`으로 의도된 프로퍼티 public var stats: String { ... } // 동일한 패키지의 `Game`에서만 접근할 수 있는 `run` 함수 public func run() { ... } } Modul..

[Natural Language] 텍스트 간 유사점 찾기

[Natural Language] 텍스트 간 유사점 찾기 Swift 언어를 사용해 단어 또는 문장 사이의 의미적 거리를 계산 단어나 문장 간의 의미적 유사성을 찾으면 앱의 사용자 환경을 개선하는 데 도움이 될 수 있음. 예를 들어, 검색어 '구름'이 '하늘'이라는 단어와 관련이 있다는 것을 알고 검색어를 확장하여 더 관련성 높은 결과를 표시함으로써 특정 사진을 검색하는 경험을 개선가능. 자연어 텍스트 사이의 유사점을 찾으려면 텍스트 임베딩을 사용. 임베딩은 단어 또는 문장과 같은 문자열을 벡터 공간에 매핑하는 것으로, 의미적으로 유사한 문자열은 벡터가 유사하므로 벡터 공간에서 서로 더 가까움. - 즉, 0에 가까울수록 유사함. 임베딩은 다음과 같은 작업에 사용 예를 들어, 검색 쿼리를 확장하기 위해 주어..