본문 바로가기

iOS/학습정리

(19)
SwiftUI) Widget - (4) TimelineProvider 이번 글은 iOS 14부터 추가된 Widget과 관련된 시리즈 글 중 네 번째 글입니다. • SwiftUI) Widget - (1) Meet Widget • SwiftUI) Widget - (2) How Widget Works • SwiftUI) Widget - (3) Timeline 같은 시리즈의 다른 글도 읽어보시길 추천드립니다. 글에 오류가 있거나 궁금한 점이 있으시면 언제든 댓글 남겨주세요. 감사합니다:) TimelineProvider 위젯의 화면을 언제 갱신할지 WidgetKit에 알려주는 타입 protocol TimelineProvider WidgetKit은 provider에게 timeline을 요청하는 경우가 많습니다. Timeline은 TimelineEntry를 따르는 객체의 배열입니다. ..
SwiftUI) Widget - (3) Timeline 이번 글은 iOS 14부터 추가된 Widget과 관련된 시리즈 글 중 세 번째 글입니다. • SwiftUI) Widget - (1) Meet Widget • SwiftUI) Widget - (2) How Widget Works 같은 시리즈의 다른 글도 읽어보시길 추천드립니다. 글에 오류가 있거나 궁금한 점이 있으시면 언제든 댓글 남겨주세요. 감사합니다:) Timeline WidgetKit이 위젯 뷰를 업데이트하도록 date를 구체화하는 객체 struct Timeline where EntryType : TimelineEntry 위젯 뷰를 언제 업데이트할지 WidgetKit에 알리기 위해 TimelineProvider가 타임라인을 생성합니다. 타임라인은 TimelineEntry 객체 배열과 업데이트 정책을 ..
iOS) Intents Intent(Android) 안드로이드 운영체제의 Intent는 사용자가 작업을 수행하기 위해 다양한 function을 조정할 수 있도록 하는 메커니즘입니다. Intent는 안드로이드 개발 환경에서 서로 다른 애플리케이션의 코드간에 late runtime binding을 하기 위한 기능을 제공하는 메세징 객체입니다. Intent의 핵심은 Inter-Application Messaging System 제공 입니다. 애플리케이션 간에 콜라보하고 컴포넌트를 재사용할 수 있도록 하는 메세징 시스템을 제공합니다. Intents 애플의 경우 app bundle과 sandbox 개념으로 각각의 애플리케이션은 독립적으로 구성되어 있습니다. 서로 다른 앱끼리의 통신이 완전히 막혀있는 것은 아니지만 권장하지는 않습니다. ..
SwiftUI) Widget - (2) How Widget Works 이번 글은 iOS 14부터 추가된 Widget과 관련된 시리즈 글 중 두 번째 글입니다. 앞의 SwiftUI) Widget - (1) Meet Widget도 읽어보시길 추천드립니다. 글에 오류가 있거나 궁금한 점이 있으시면 언제든 댓글 남겨주세요. 감사합니다:) SwiftUI와 Widget 위젯의 목표 중 하나는 멀티플랫폼 지원을 하면서, 개발자들이 쉽게 iOS, iPadOS, macOS의 여러 플랫폼을 쉽게 다룰 수 있도록 하는 것 입니다. 이를 위해 위젯의 유저 인터페이스와 WidgetKit은 SiwftUI에 내장되어있습니다. SwiftUI의 엄청난 강점 중 하나는 Dynamic Type과 Dark Mode와 같은 기능을 거의 자동으로 지원해준다는 것입니다. Home Screen과 Widget 위젯을..
SwiftUI) Widget - (1) Meet Widget 이번 글은 iOS 14부터 추가된 Widget과 관련된 시리즈 글 중 첫 번째 글입니다. 제목에서도 알 수 있듯이 WWDC 2020 - Meet WidgetKit을 바탕으로 작성하였습니다. 글에 오류가 있거나 궁금한 점이 있으시면 언제든 댓글 남겨주세요. 감사합니다:) WidgetKit Show relevant, glanceable content from your app on the iOS Home screen or macOS Notification Center. Apple Developer - WidgetKit iOS 14 부터 새롭게 나온 위젯은 더 dynamic하고 personalized합니다. 또한 bold하고 glanceable하게 디자인 됩니다. 이전에는 위젯이 화면의 가장 왼쪽에 위치한 To..
iOS) UIResponder와 Responder Chain UIResponder ➤ 이벤트에 응답하고 처리하기 위해 추상화된 인터페이스 class UIResponder : NSObject UIResponder가 익숙하다면 UIView가 상속받는 객체이기 때문일 것이다. class UIView : UIResponder Responder 객체는 UIResponder에서 상속된 클래스들의 인스턴스이며, 이벤트 핸들링을 위한 인터페이스와 responder들의 기본행위를 정의한다. UIApplication, UIViewController, UIView, UIWindow 등 많은 객체들이 채택하고 있으며, 모든 UIView 객체의 상위 클래스에 해당한다. 이벤트 핸들링 Responder 객체가 이벤트를 핸들링하는 방식은 크게 두 가지로 나뉜다. 전달 받은 이벤트를 처리하거..
iOS) Core Data 단일 장치에서 데이터를 유지•캐싱하고 변경 사항을 되돌릴 수 있도록 한다. 코어 데이터를 사용하여 오프라인에서의 사용을 위해 데이터를 영구적으로 저장할 수 있고 임시 데이터를 캐싱할 수 있다. 코어 데이터의 데이터 모델 에디터를 통해 데이터의 타입과 관계를 정의하고 각 클래스의 정의를 생성할 수 있다. 코어 데이터는 런타임에 개체 인스턴스를 관리하여 다음의 기능을 제공할 수 있다. 전반적인 기능 소개 Persistence 코어 데이터는 저장소에 각 객체를 매핑하는 세부적인 내용을 추상화하여 직접적으로 DB를 관리할 필요 없이 Swift나 Object-C를 통해 데이터를 저장할 수 있도록 한다. Undo and Redo of Individual or Batched Changes 코어 데이터의 실행 취소 매..
iOS) Dispatch (GCD) Dispatch [Framework] 멀티코어 하드웨어에서 코드를 동시에(concurrently) 실행시키도록 도와주는 프레임워크 Grand Central Dispatch(GCD)로 알려졌으며, 시스템 수준에서 관리되는 dispatch queues를 이용한다. 하나의 애플리케이션이 멀티코어를 효과적으로 사용하기는 어렵다. GCD는 시스템 레벨에서 작동하므로 모든 작동중인 애플리케이션에 대해 이용 가능한 시스템 자원을 적절하게 연결시켜줄 수 있다. DispatchQueue [Class] 작업을 실행할 때 맵의 메인 스레드나 백그라운드 스레드에서 순차적(serial) 또는 동시적(concurrent)으로 실행하도록 관리하는 객체 DispatchQueue는 FIFO Queue이다. 작업은 block objec..
iOS) Scene-Based Life-Cycle 애플 공식 문서 Managing Your App's Life Cycle를 기반으로 작성합니다. Scene 기반 앱 생명주기 앱은 Foreground나 Background에 있을 때 시스템 알림에 응답하고 다른 중요한 시스템 관련 이벤트를 처리한다. 앱의 현재 상태에 따라 할 수 있는 것과 없는 것이 결정되는데, 예를 들어 foreground 앱은 사용자와 상호작용 하므로 CPU를 포함한 시스템 리소스에 대해 우선권을 갖는다. 반대로 background 앱은 화면 밖에 있기 때문에 가능한 적은 일을 하고 가급적 아무 일도 안해야 한다. 앱의 상태가 바뀜에 따라 그에 맞춰 동작을 조정해야 한다. 앱의 상태가 변하면 UIKit은 그에 맞는 delegate 객체의 메소드를 호출하여 알려준다. UISceneDel..
iOS) RxSwift 가볍게 훑어보기 (3) just, of, from Observable 생성 연산자 just 하나의 항목을 방출하는 Observable 생성 ObservableType 프로토콜의 Type Method이다. just로 생성한 Observable은 파라미터로 전달한 요소를 그대로 방출한다. let disposeBag = DisposeBag() let element = "🌝" Observable.just(element) .subscribe { event in print(event) } .disposed(by: disposeBag) Observable.just([1, 2, 3]) .subscribe { event in print(event) } .disposed(by: disposeBag) 위 코드를 실행하면 다음과 같이 나온다. next(🌝) completed..