분류 전체보기
-
ObservableObjectSwiftUI 2023. 1. 28. 12:44
객체가 변경되기 전에 방출하는 퍼블리셔를 갖는 객체 타입 ObservableObject 는 objectWillChange 퍼블리셔와 동기화되어 있습니다. 이 objectWillChange 퍼블리셔는 @Published 프로퍼티가 변경되기 전에 값을 방출합니다. class Contact: ObservableObject { @Published var name: String @Published var age: Int init(name: String, age: Int) { self.name = name self.age = age } func haveBirthday() -> Int { age += 1 return age } } let john = Contact(name: "John Appleseed", age: ..
-
Swift Package 란Swift 2023. 1. 17. 15:45
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. 번들 소스파일, 바이너리, 리소스 등을 앱에서 사용하기 쉽게 번들로 제공합니다. Xcode 12부터 (swift-tool-version: 5.3 이상) Swift Package Manager 를 사용해 Swift Package 를 만들고 배포하고 추가, 제거 뿐 아니라 의존성 관리도 할 수 있습니다. 참고 https://developer.apple.com/documentation/xcode/swift-packages Apple Developer Documentation developer.apple.com Swift Package M..
-
[PackageDescription] 재사용 가능한 코드를 쉽고 편리하게 관리하자Swift 2023. 1. 17. 15:38
Swift Package 란 재사용 가능한 코드 조각을 의미합니다. Swift, Objective-C, Objective-C++, C, or C++ 코드들이 올 수 있습니다. Swift Package 는 메인 디렉토리에 Package.swift 파일이 필수로 필요합니다. 이 파일 안에서 package manifest 의 PackageDescription 라이브러리를 사용해 의존성, 리소스, 여러 옵션을 관리할 수 있습니다. 예로 SlothCreator: Building DocC Documentation in Xcode 프로젝트의 package.swift 파일은 다음과 같이 생겼습니다. 안에 "SlotCreator" 라이브러리를 갖고 있는 패키지를 정의했고 타켓 정보들도 명시할 수 있습니다. import ..
-
decode vs decodeIfPresentiOS 2022. 12. 14. 16:01
Codable 이후 필드명이나 코딩키만으로 직접 디코딩없이 파싱이 가능해졌지만, 그럼에도 별도의 처리가 필요하다면 여전히 디코더를 통한 생성자를 만들어줘야 할 때가 있습니다. 이때 필요한 decode 와 decodeIfPresent 의 차이는 "해당 필드가 존재하냐" 의 여부로 관점으로 생각해볼 수 있습니다. 다음 JSON 을 파싱하려고 할 때, { title: "woongs", subtitle: "decoding" } 다음과 같이 만들어볼 수 있습니다. 아직 딱히 문제는 없습니다. required init(from: decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.title = t..
-
[iOS] APNs 를 통한 Push 알림 이해하기iOS 2022. 12. 7. 16:04
오늘은 개개인이 갖고 있는 아이폰 디바이스에 푸시 알림이 오는 과정에 대해 알아보려고 합니다. 앱 개발자의 관점에서 살펴봅니다 :) 먼저 푸시가 전송되는 큰 흐름을 간략하게 보고 블라인드로 남아있는 부분을 하나씩 알아보겠습니다. 흐름 이해하기 개별 디바이스에 직접적으로 푸시 알림을 보낼 수 있는 주체는 오직 APNs 뿐입니다. APNs 란 Apple Push Notification server 의 약자로 즉 애플만이 직접적으로 디바이스에 푸시 알림을 보낼 수 있습니다. 따라서 저희는 APNs 에게 우리 앱에 푸시를 보내줘! 라고 요청해야 합니다. 이 요청이 유효한지 보고 APNs 가 푸시를 보낼지 말지를 판단합니다. 이 요청 또한 정해진 규격에 맞게 APNs 와 연결한 후에 가능하고, 이를 위해 APNs..
-
[SwiftUI] Model data 앱 데이터 관리하기SwiftUI 2022. 11. 25. 18:47
아래 문서를 읽고 정리한 글입니다. https://developer.apple.com/documentation/swiftui/model-data Apple Developer Documentation developer.apple.com Overview SwiftUI는 선언적인 UI 접근 방식을 제공합니다. 뷰 계층을 구성할 때 뷰에게 관련된 데이터 의존성을 알려줍니다. 그럼 외부 이벤트나, 사용자 액션으로 데이터가 바뀔 때, SwiftUI 는 자동으로 영향이 미치는 부분을 업데이트 합니다. 결과적으로 SwiftUI 프레임워크는 자동으로 이전에 뷰컨트롤러가 했던 대부분의 일을 수행합니다. SwiftUI 프레임워크는 데이터와 UI를 연결하기 위해 state variables, bindings 같은 도구를 제공..
-
Hello CombineCombine 2022. 10. 1. 16:44
공부한 내용을 바탕으로 생각을 정리한 글입니다. 잘못된 내용이나 수정 보완이 필요한 내용은 댓글로 알려주시면 감사하겠습니다. 핵심 요약 👨🏻💻 Combine 은 비동기 이벤트를 처리하기 위해 declarative Swift API 를 제공하는 프레임워크 입니다. Combine 의 3가지 핵심 개념은 Publisher, Operator, Subscriber 입니다. Publisher 가 이벤트를 방출하면, 그걸 Subscriber 가 받아주고, 중간에서 Operator 들을 사용해 원하는 형태로 이벤트를 전달합니다. Operator는 upstream 을 받아, downstream 을 내보내며, 순서를 건너뛰지 않고 다른 Operator 를 바꿀 수 없습니다. Combine Combine은 비동기 이벤트를..