Swift: @dynamicMemberLookup 사용법 및 @Published 와 결합 가능 여부

개요 — @dynamicMemberLookup이란 @dynamicMemberLookup은 **컴파일러에게 “점(.) 접근을 보낼 때 subscript(dynamicMember:)로 재해석해라”**고 지시하는 어노테이션입니다. 즉 obj.foo를 호출하면 컴파일러는 obj[dynamicMember: "foo"] 형태의 서브스크립트 호출로 바꿔줍니다. 주로 내부에 [String: Any] 같은 딕셔너리를 두고 JSON/동적 프로퍼티처럼 보이게 할 때 유용합니다.   간단한 동작 원리 선언: @dynamicMemberLookup을 타입 앞에 붙입니다. 필수: subscript(dynamicMember:) 구현(여러 오버로드 허용). 더보기…

SwiftUI: 목록 행(row) 및 헤더(header) 높이 변경

소개 이 예제는 SwiftUI List에서 행(row)과 헤더(header) 높이를 변경하는 방법을 보여줍니다. 최종 결과는 다음과 같습니다:   설명 defaultMinListRowHeight 라는 EnvironmentValue를 사용해서 기본 최소 행 높이를 설정할 수 있습니다. 마찬가지로 defaultMinListHeaderHeight를 사용하면 섹션 헤더의 높이를 지정할 수 있습니다. 아래 코드는 그룹화된 리스트에서 슬라이더로 두 값을 조절하는 예시입니다: // …SwiftUI View에서 작성… 더보기…

Swift: @retroactive 란?

Retroactive 란? 해당 경고는 Swift에서 retroactive conformance(기존 타입에 프로토콜을 채택시키는 것)를 사용할 때 나타나는 것으로, 나중에 AudioKit 라이브러리 자체에서 NodeParameter에 Hashable을 추가하게 되면 중복 충돌이 발생할 수 있음을 경고합니다. Extension declares a conformance of imported type ‘AVAudioUnitReverbPreset’ to imported protocol ‘CaseIterable’; this will not behave correctly if the owners of 더보기…

[펌/번역] Apple의 Liquid Glass 디자인 베타에 대한 피드백

소개 이번 WWDC25에서 새로운 컨셉의 Liquid Glass 디자인이 발표되었지만, 저는 아무래도 나이가 들어서인지 새로운 디자인이 잘 눈에 들어오지 않고 좋은 디자인이 아닌것 같다고 느꼈습니다. 여러 곳의 반응을 보니, 이렇게 생각하는건 저뿐만은 아니었던것 같습니다. 이번 새로운 디자인 컨셉에 대한 비판글이 여럿 있었고, 그 중 공유해도 좋을 것 같은 글을 가져왔습니다. 저는 더보기…

Swift: some, any 키워드

Swift의 some과 any 키워드 안녕하세요! 오늘은 Swift의 some과 any 키워드에 대해 실무에서 겪을 수 있는 상황들을 포함해 자세히 알아보겠습니다. 이 두 키워드는 프로토콜을 다룰 때 매우 중요한 역할을 하며, 각각 다른 상황에서 사용됩니다.   키워드 도입 역사 먼저 각 키워드가 언제 도입되었는지 살펴보겠습니다: some 키워드: Swift 5.1에서 도입 any 키워드: 더보기…

Claude와 MCP (Figma MCP, 유튜브 요약 정리 MCP) 연동 가이드

소개 Claude와 Figma의 연동 방법을 소개해드리겠습니다. MCP(Model Context Protocol)를 통해 Claude가 Figma 파일에 직접 접근하여 디자인 분석, 코드 생성 등 다양한 작업을 수행할 수 있습니다.   MCP(Model Context Protocol)란? MCP는 AI 모델이 외부 시스템과 안전하게 연결할 수 있도록 해주는 개방형 프로토콜입니다. 이를 통해 Claude는 다양한 도구와 서비스에 접근하여 더욱 강력하고 더보기…

macOS 개발: 내 앱으로 파일 열기 시도 시 실행 불가 문제(“확인되지 않은 개발자가 배포함”) 해결 과정

macOS 앱 노터라이즈(Notarize) 및 실행 불가 문제 해결 과정 1. 문제 개요 macOS에서 포스트잇 플레인 텍스트 앱인 StickyPlainPad을 테스트하는 중, 특정 테스트 파일 “다음으로 열기…”를 통해 실행했을 때 다음과 같은 문제가 발생하였습니다. 앱이 열리지 않음 보안 경고 메시지: “Mac에 손상을 입힐 수 있음” 또는 “확인되지 않은 개발자가 배포함” 이 문제는 더보기…

Swift UIKit: 테이블 뷰에서 UITextView의 컨텐츠에 따라 높이 자동조정

참고 Swift(스위프트): Static cell 모드인 테이블 뷰(UITableView)에서 특정 섹션 감추기 + 특정 행의 크기만 조절   구조 및 제약(Constraints)       1) 텍스트 뷰(UITextView)를 선택한 뒤 Indicator > Scroll View > Scrolling Enabled 해제 또는 코드에서 직접 설정합니다. textView.isScrollEnabled = false   2) 해당 인덱스패스 (IndexPath)의 heightForRowAt을 UITableView.automaticDimension으로 설정 더보기…

Swift UIKit: .translatesAutoresizingMaskIntoConstraints 란 무엇인가?

translatesAutoresizingMaskIntoConstraints UIKit에서 아직도 무슨 의미인지 잘 모르겠는 (View).translatesAutoresizingMaskIntoConstraints에 대해 알아보겠습니다.   한국어 직역 translatesAutoresizingMaskIntoConstraints를 한국어로 직역하면 다음과 같습니다: “Autoresizing 마스크를 제약 조건으로 변환한다” 구체적으로 단어별로 나누어보면: translates: 변환한다, 번역한다 AutoresizingMask: 자동 크기 조절 마스크 (UIKit의 레이아웃 시스템에서 뷰의 크기와 위치를 자동 조절하는 속성) into Constraints: 제약 조건으로 따라서 전체 의미는: 더보기…