[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple 96

[Concurrency] Task Group의 동시성을 제한하는 방법

참고자료 : WWDC23 Beyond the basics of structured concurrency Task Group의 동시성을 제한하는 방법 chopIngredients는 여러 재료(ingredients)를 받아 그들을 하나씩 써는(chop) 메서드이다. 하지만 정말 하나씩 재료를 썬다면 이는 비효율적일 것이다. 동시에 처리하고 싶다. Task Group을 사용하여 Structed Concurrency를 구성하고 하위 Task를 여러개 추가해 처리한다. 그리고 하위 Task가 모두 완료되었을 때 요청한 chopIngredients Task가 종료된다. 다만 여기서 주의할 점은 파라미터로 제공하는 재료들(ingredients)이 너무 많을 경우 각각에 대해 실행 Context를 생성하고 우리는 모든..

[Concurrency] Explore structured concurrency in Swift

본 게시글은 WWDC21의 Explore structured concurrency in Swift 세션의 내용을 담고 있습니다. https://developer.apple.com/videos/play/wwdc2021/10134/ Explore structured concurrency in Swift - WWDC21 - Videos - Apple Developer When you have code that needs to run at the same time as other code, it's important to choose the right tool for the job. We'll take you... developer.apple.com Structured Programming 컴퓨팅 초기에는 제어..

[SwiftUI] 관찰 중인 데이터를 변경하는 작업을 MainActor 환경에서 해야하는 이유

이미지 소스 및 정보 출처 : WWDC21 Discover concurrency in SwiftUI Run loop SwiftUI에서 View는 위와 같은 방식으로 업데이트된다. 이 때 이를 실현시켜주는 것이 Run Loop이다. Rup Loop는 MainActor에서만 동작한다. MainActor : Main Thread에서의 동작을 보장하는 Actor Example 이러면 Main Thread를 기반으로 작업을 처리하는 MainActor가 fetchPhotos 메서드로 인해 아무런 일도 수행하지 못한다. 그럼 update 함수를 async로 감싸면 괜찮지 않을까? 하지만 이렇게해도 문제가 발생한다. 이전 코드에서는 비록 fetchPhotos 메서드가 Main Thread를 점유하고 있기는 했지만 모든..

🍎 Apple/SwiftUI 2023.10.28

[SwiftUI] Observable macro를 통해 모델 데이터를 만들고 관리하는 방법

본 게시글은 애플 개발자 문서의 Managing model data in your app 아티클을 의역하여 작성되었습니다. Managing model data in your app SwiftUI 앱은 사용자가 인터페이스를 통해 수정할 수 있는 Data를 화면에 표시해준다. 이 데이터를 다루기 위해, 앱은 Data Model을 생성하고 사용한다. 이들은 데이터를 표시하기 위한 일종의 커스텀 타입이다. Data Model은 데이터와 상호작용하는 View와 데이터 자체에 대한 분리를 가능하게 한다. 이 분리는 모듈화에 기여하며, 테스트 용이성도 증대하고, 앱의 작동방식을 더 쉽게 추론하도록 도와준다. (helps make it easier to reason about how the app works.) 데이터..

🍎 Apple/SwiftUI 2023.10.28

[Swfit] resolvedColor(with:) / UITraitCollection.current

resolvedColor(with:) UIColor의 Instance Method인 resolvedColor는 주어진 trait을 기반으로 UIColor를 resolve합니다. 해당 UIColor가 다크모드를 지원하는 Dynamic Color일 경우 현재 다크모드 스타일에 맞는 Color를 반환합니다. Core Graphics의 Color 요소인 CGColor는 Dynamic Color를 지원하지 않습니다. 이러한 특징때문에 CGColor를 필요로하는 요소에서는 다크모드가 자동으로 적용되지 않습니다. let black = UIColor.myBlack.cgColor 이 과정에서 resolve가 일어납니다. cgColor는 Dynamic Color를 지원하지 않기때문에 현재의 trait에 맞춰 resolve..

🍎 Apple/Swift 2023.10.27

[Combine] Publishing 타이밍 조절하기 (Connectable Publishers)

Controlling Publishing with Connectable Publishers(https://developer.apple.com/documentation/combine/controlling-publishing-with-connectable-publishers)를 의역한 글입니다. Connectable Publishers Publisher가 Subscriber에게 Element를 보내기 시작하는 시기를 조정하는 방법 Overview Publisher가 특정한 동작에 영향을 미치는 속성을 보유하는 경우 Publisher가 Element 생성을 시작하기 전에 Publisher를 구성하려 할 수 있다. 근데 흔히 쓰는 Subscriber인 sink(receiveValue 는 즉시 무제한의 Eleme..

[SwiftUI] SwiftUI의 신비를 풀어보자 (Demystify SwiftUI)

본 포스팅은 WWDC21 : Demystify SwiftUI 세션을 기반으로 작성되었습니다. (Demystify = 신비를 풀다) https://developer.apple.com/videos/play/wwdc2021/10022/ SwiftUI가 우리 코드를 바라볼 때 이들을 어떤 것을 중점적으로 살펴보고 있을까? 답은 3개이다. Identity : 어떻게 특정 요소를 동일한 것 혹은 다른 것으로 파악하는지 Lifetime : 어떻게 뷰와 데이터의 존재 여부를 시간에 따라 추적하는지 Dependency : 어떻게 인터페이스를 업데이트할 타이밍과 그 이유를 이해하는지 SwiftUI에서는 이 세가지 개념을 통해 “언제, 무엇을, 어떻게” 변화시켜야하는지 파악한다. Identity 먼저 '어떻게 특정 요소를 ..

🍎 Apple/SwiftUI 2023.09.16

[VisionOS] 공간컴퓨팅 앱 개발 시작하기

본 포스팅은 WWDC23의 Get started with building apps for spatial computing를 요약하여 정리한 것입니다. Get started with building apps for spatial computing 공간컴퓨팅 앱을 구축하는 방법에 대해서 알아보자. Fundamentals 공간컴퓨팅 앱을 구성하는 기본적인 요소 및 개념들에 대해 알아보자. Shared Space 기본적으로 앱은 ‘Shared Space’라는 공간에서 실행된다. 이 공간에서 다양한 앱들이 실행되며, 이는 Mac에서 여러 앱이 동시에 실행되는 것과 같다고 볼 수 있다. 사람들은 Passthrough를 통해 주변과의 연결성을 유지한다. Window 각 앱에는 하나 이상의 Window가 있다. 이는 ..

🍎 Apple/VisionOS 2023.08.15

[SwiftData] ModelContainer, ModelContext

본 게시글은 WWDC 2023의 Dive deeper into SwiftData 세션의 내용을 정리한 것입니다. https://developer.apple.com/videos/play/wwdc2023/10196 @Model 을 통해 생성된 모델은 ModelContainer에 의해 실질적 스키마로서 동작하게 되며, 이를 기반으로 영구 저장 데이터가 생성되게 된다. 코드에서 Model 클래스의 인스턴스로 작업을 하게되면 해당 인스턴스는 메모리에서 해당 상태를 추적하고 관리하는 ModelContext에 연결된다. ModelContainer 스키마와 영구 저장 데이터간의 bridge 역할을 한다. 객체가 메모리에 저장될지, 디스크에 저장될지 등 객체의 저장 방식에 대한 설명이 포함된다. Versioning, M..