전체 글
-
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은 비동기 이벤트를..
-
[git] revert 할 수 없을 때, commit revert is a merge but no -m option was given.git 2022. 8. 29. 00:42
커밋을 revert 시킬 때 아래 명령어를 사용할 수 있습니다. git revert {commit hash} 하지만 브랜치가 여러 개 있을 경우, 아래 에러 메시지가 나오며 불가능할 때가 있습니다. commit { } is a merge but no -m option was given. merge 한 커밋을 revert 하려고 하는데, 누구를 revert 할지가 애매해서 하기 때문에 -m(merge) 사용해 옵션을 어떤 머지를 revert 할 지 명확하게 지정해달라는 의미입니다. 아래 과정으로 처리해줄 수 있습니다. git cat-file -p {hash} 로 tree 확인가능 tree 의 두 부모 중 하나를 정해줘야함. m1 면 머지된 tree m2 면 머지시킨 tree git revert {comm..
-
Xcode 여러 버전 설치 후 git 문제iOS 2022. 5. 13. 14:16
아래와 같은 에러가 나온다면, git에서 제대로 된 Xcode 경로를 찾지못해 발생하는 에러입니다. xcrun: error: active developer path ("/Users/~~~/Xcode13.2.app/Contents/Developer") does not exist Use `sudo xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools, or use `xcode-select --install` to install the standalone command line developer tools. See `man xcode-select` for m..
-
4장 주석독서_dev/Clean Code 2022. 1. 14. 22:35
있으나 마나 한 주석을 달려는 유혹에서 벗어나 코드를 정리하라. 더 낫고, 행복한 프로그래머가 되는 지름길이다. 함수나 변수로 표현할 수 있다면 주석을 달지 마라 주석은 나쁜 코드를 보완하지 못한다 코드로 의도를 표현하라! // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) 위 코드보단 if (employee.isEligibleForFullBenefits()) 좋은 주석 법적인 주석 정보를 제공하는 주석 의도를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석 TODO 주석 중요성을 강조하는 주석 하지만 코드로 설명할 수 있다면 그것이 베스트 위치를 표시하는 주석 반드시 필요할 ..