// AppDelegate.swift // ... // ✅ 메시지 수신 extension AppDelegate: UNUserNotificationCenterDelegate { // ... func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { // ✅ notification 의 payload 속 `recordId` 와 `roomId` 를 가지고 화면전화에서 사용할 수 있습니다. let userInfo = response.notification.reque..
아래의 뷰를 만들기 위한 과정 중에서 알게된 SnapKit 사용법을 적어보자. 화면의 y축 중심으로부터 constraint 를 잡고싶다. 너비 대비 높이를 비율로 잡고싶다. 우선 아래와 같은 레이아웃을 잡고싶었다. 그래서 다음과 같이 코드를 작성하였다. // "기본" 이라고 적힌 UIView. basicBackgroundView.snp.makeConstraints { make in // 🚨 inset 이 적용되지 않아서 y축 중심에 위치. make.bottom.equalTo(view.snp.centerY).inset(-63) make.leading.trailing.equalToSuperview().inset(24) // 🚨 multipliedBy 가 적용되지 않아서 뷰에서 보이지 않음. make.heig..
RxCocoa traits RxSwift 문서를 정리 및 요약해보겠습니다. (출처 - RxCocoa Traits) ControlProperty 와 ControlEvent 는 UI 요소의 속성을 나타내는 Observable/ObservableType 의 trait 입니다. 👉 ControlProperty ControlProperty 는 ObservableType 과 ObserverType 을 동시에 채택하는 ControlPropetyType 을 채택합니다. Subject 와 같이 프로퍼티에 새로운 값을 관찰할 수도 방출할 수도 있습니다. public struct ControlProperty : ControlPropertyType { ... } /// Protocol that enables extension..
RxCocoa 에 있는 Traits 에 대해서 알아보자 그 중에서 Driver, Signal 에 대해서 알아보자 Traits? Rx 를 보다 직관적이게 사용할 수 있는 강력한 방법이 있습니다. Traits 는 선택적인 방법일뿐입니다. 핵심은 RxSwift 와 RxCocoa 에서 형변환되지 않은 Observable 시퀀스를 자유롭게 사용할 수 있습니다. 다음과 같이 Traits 의 코드를 살펴보면 단일 읽기 전용 Observable 시퀀스 프로퍼티를 가진 wrapper struct 라는 것을 알 수 있습니다. struct Single { let source: Observable } struct Driver { let source: Observable } ... RxCocoa traits RxSwift 문서..
내용 iOS) 앱 자동 배포를 위한 Fastlane 설정 위의 글에서 Fastlane 을 설정했었습니다. 이때는 cert and sigh 방법을 통해서 code signing 을 작업하였습니다. code signing 은 무엇이 필요하고, match 방법에 대해서 알아보겠습니다. ✅ Code Signing(or Signing) 이란? “Code signing(or signing) an app allows the system to identify who signed the app and to verify that the app has not been modified since it was signed.” 출처 - What is app signing? 코드 서명은 앱에 서명한 사람을 식별하고, 서명된 이후 ..
catch : error 를 새로운 Observable 또는 값으로 처리 retry : 재시도 materialize / dematerialize : sequence 를 제어해서 처리 onError 에서 처리하면 되지 않나요? Error 이벤트는 Observable 을 종료시키게 됩니다. 그래서 종료시키지 않고 다음과 같이 이벤트를 발생키시고 completed 가 발생되도록 error handling 을 하고자 합니다. catch catch RxSwift 6.0 에서 catchError(_:) 이 catch(_:) 로 이름이 바뀌었습니다. 출처 - RxSwift release extension ObservableType { /** Continues an observable sequence that is t..
내용 Widget 이 보여지는 세 가지 시점이 있습니다. placeholder, snapshot, timeline 를 확인해보겠습니다. 언제 보여지는지 UI 를 통해 확인해보자. TimelineProvider 프로토콜은 다음 세 가지 메서드를 요구합니다. struct Provider: TimelineProvider { typealias Entry = SampleEntry func placeholder(in context: Context) -> Entry { // Implementation here... } func getSnapshot(in context: Context, completion: @escaping (Entry) -> ()) { // Implementation here... } func ge..
iOS) Lock Screen Widget 만들기 내용 Lock Screen widget 의 UI 는 모두 불투명하게만 표현되어야 할까? Lock Screen 에 widget 을 만들어보자. Lock Screen 의 위젯은 iOS 16 부터 새롭게 등장한 기술입니다. 아직 지원하는 앱은 많지 않지만 예 gyuios.tistory.com 위 글의 마지막 부분에서 다음의 트러블 슈팅 과정을 거치면서 의도에 맞는 새로운 이미지 에셋을 요청하였습니다. 🚨트러블 슈팅 - vibrant 렌더링을 위해서 사용해야 하는 이미지 이때, 에셋에 서로 다른 밝기의 요소들이 존재해서 계층 구조가 만들어진 듯하게 구현된 것을 볼 수 있었습니다. 디자이너님은 계층이 없는 결과를 원하셨고 다음과 같이 에셋을 전달 받을 수 있었습니..
- YPImagePicker
- Algorithm
- WidgetKit
- APNS
- SwiftUI
- watchOS
- CloneCoding
- RxCocoa
- WWDC
- 서버통신
- WWDC22
- configurable widget
- github
- MVVM
- Widget
- IOS
- 2022 KAKAO TECH INTERNSHIP
- urlsession
- projectsetting
- Objective-C
- Swift
- async/await
- UserDefaults
- Notification
- Firebase
- rxswift
- containerBackground
- MOYA
- OpenSourceLibrary
- Protocol
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Total
- Today
- Yesterday