전체 글 459

SwiftUI의 새로운 기능 (Explore related documentation, sample code, and more) -wwdc25

SwiftUI의 새로운 기능 (Explore related documentation, sample code, and more) SwiftUI의 저성능 관련 개선사항부터 UI상의 버튼에 이르기까지 시스템 전반에 걸쳐 개선 목차Make the new design shine새로운 모든 시스템 기능 리뷰Framework foundations성능과 애니메이션, 레이아웃 관련 개선사항 공유SwiftUI across the systemApple 플랫폼 전반에 걸쳐 SwiftUI를 사용할 수 있는 새로운 환경 소개Expand SwiftUI views웹 콘텐츠, 리치 텍스트 지원 등 SwiftUI 뷰의 새 기능에 대해 알아볼 것. Make the new design shine네비게이션, 버튼, 탭바, macOS, Pad..

apple/WWDC 2026.05.02

defer로 인해 lock의 범위가 넓어져 발생한 문제 분석

defer로 인해 lock의 범위가 넓어져 발생한 문제 분석 동시성 코드에서 lock은 가장 직관적인 장치 중 하나로 여러 스레드가 같은 상태를 동시에 읽고 쓰면 race condition이 발생할 수 있기 때문에 공유 자원을 보호하기 위해 lock을 사용. 문제는 아래의 코드 패턴은 락의 범위를 함수 끝까지 늘려서 이 경우 후속 로직에서 lock을 다시 잡아야 하는 코드가 존재면 문제가 발생할 수 있음.func foo() { lock.lock() defer { lock.unlock() } // do something} 문제가 발생하는 코드 예시락을 잡은 채 기다리는 구조가 생기면 장기 대기나 데드락으로 이어질 수 있음.특히 코드와 로직이 복잡할수록 원인이 코드 한가운데에 숨어..

기기별 RAM 용량에 따른 이미지 동적 캐시 사이즈 설계

기기별 RAM 용량에 따른 이미지 동적 캐시 사이즈 설계 글로벌 서비스를 운영하다 보면, 여전히 RAM 2GB~3GB 수준의 구형 기기 사용자를 무시할 수 없음.iPhone 8, iPhone SE 1세대, 일부 보급형 기기처럼 메모리 여유가 크지 않은 환경에서는, 캐시 전략 하나만으로도 앱 안정성이 크게 달라질 수 있음. 이미지 캐시는 사용자 경험을 빠르게 만들기 위한 중요한 장치지만, 동시에 메모리를 많이 사용하는 기능이기도 함.그래서 캐시 크기를 고정값으로 두면 다음과 같은 문제가 생김저사양 기기에서는 메모리 압박으로 크래시 위험이 커짐고사양 기기에서는 더 많은 자원을 활용하지 못해 비효율이 발생함기기의 물리적 RAM 용량을 기준으로 이미지 캐시 사이즈를 동적으로 결정하는 방식을 적용 왜 동적 설정이..

HTTPURLResponse.allHeaderFields 파싱 시 NSNumber 헤더 누락 문제

HTTPURLResponse.allHeaderFields 파싱 시 NSNumber 헤더 누락 문제 네트워크 응답 처리 레이어에서 `HTTPURLResponse.allHeaderFields`를 [String: String] 형태로 변환해 상위 모듈에 전달.기존 변환 사용 로직은 Any를 `as? String`으로 캐스팅하는 방식인데, 이 방식이 Swift 타입 시스템과 Foundation의 NSNumber 브리징 동작이 결합되어 일부 헤더를 조용히 누락시키는 현상 코드 예시참고로 헤더에는 동일한 key가 중복을 허용하고 있어서 header는 동일 키 값에 대해서도 여러개 받을 수 있도록 해야함./// ❌ 기존 코드 var responseHeader: [String: String] = [:]for (hea..

빠르게 링크: 빌드 및 실행 시간 개선 (Link fast: Improve build and launch times) - WWDC22

빠르게 링크: 빌드 및 실행 시간 개선 (Link fast: Improve build and launch times) - WWDC22 목차What is static linking?몇 가지 예와 정적 링킹이 무엇인지 정의Recent ld64 improvements애플의 정적 링커인 ld64의 신기능 Sattic linking best practices정적 링킹에 대한 배경시직과 함께 모범 사례에 대해서 설명What is dynamic linking?동적 링킹 과정에서 어떤 일이 발생하는지 다룸Recent dyld improvements올해 dyld의 새로운 기능Dynamic linking best practices동적 링크 시간 성능 개선을 위해 할 수 있는것New tools바이너리에 무엇이 있고, 동적 ..

apple/WWDC 2026.01.02

Xcode 빌드에서의 병렬 처리에 대한 오해 해소(Demystify parallelization in Xcode builds) - WWDC22

Xcode 빌드에서의 병렬 처리에 대한 오해 해소(Demystify parallelization in Xcode builds) - WWDC22 Xcode의 빌드 프로세스에 대해 자세히 정리 목차Core concepts빌드의 핵심 개념 및 빌드 성능 문제를 검토하는데 도움이 되는 Xcode 도구 탐색Build phase타겟 빌드 시 Xcode의 병렬화 증가 방법Corss-Target buildsXcode가 어떻게 많은 타겟으로 구성된 프로젝트를 구축하면서 빌드를 전체적으로 병렬로 처리하는지 Xcode의 빌드 시스템은 전체 프로젝트의 표현으로 호출.모든 source file, assets, build configuration 등 실행 타겟과 같은 기타 구성을 포함. 빌드 시스템은 앱 빌드 방법에 대..

apple/WWDC 2025.12.30

swift rethrows

swift rethrows 함수나 메서드는 rethrows 키워드를 사용하여 선언할 수 있음.이는 함수 매개변수 중 하나가 에러를 던질 경우에만 에러를 던진다는 것을 의미.이러한 함수와 메서드를 rethrowing 함수(rethrowing functions) 또는 rethrowing 메서드(rethrowing methods)라고 부름. func someFunction(callback: () throws -> Void) throws { try callback()} rethrowing 함수와 메서드는 적어도 하나의 throwing 함수 매개변수를 가져야 함.rethrowing 함수나 메서드는 오직 catch 블록 안에서만 throw 문을 포함할 수 있음. 이 규칙을 통해 do-catch 구문 안에서 ..

AVAudioEngine, AVAudioNode 정리

AVAudioEngine, AVAudioNode 정리 AVAudioEngine과 관련한 내용을 모아서 정리 목차AVAudioEngine오디오 렌더링이란?OverviewCreate an Engine for Audio File PlaybackAVAudioNodeOverviewConfiguring an Input Format BusAVAudioNodeBusinputFormat(forBus:)name(forInputBus:)numberOfInputsCreating an Output Format BusoutputFormat(forBus:)name(forOutputBus:)numberOfOutputsInstalling and Removing an Audio TapinstallTap(onBus:bufferSize:..

AVAudioFormat 정리

AVAudioFormat 정리 AVAudioFormat에 대해서 정리하며 연관된 지식도 모두 함께 정리. 목차AVAudioFormatAVAudioFormat의 프로퍼티들Getting the Audio Stream DescriptionstreamDescriptionGetting Audio Format ValuessampleRatechannelCountchannelLayoutformatDescriptionDetermining the Audio FormatisInterleavedisStandardcommonFormatsettingsmagicCookieAVAudioFormat과 AudioStreamBasicDescription의 비교 정리Channel과 ChannelLayout의 차이AVAudioCommonFo..

AudioStreamBasicDescription 정리

AudioStreamBasicDescription 정리 CoreAudioType에 속하는 AudioStreamBasicDescription를 정리. 목차AudioStreamBasicDescription패킷의 지속 시간(Duration) 계산구조체의 모든 필드를 0으로 초기화하는 코드Core Audio에서 사용하는 용어 정의AudioStreamBasicDescription의 Instance PropertymFormatIDmSampleRatemBitsPerChannelmBytesPerPacketmReservedmFramesPerPacketmChannelsPerFramemBytesPerFramemFormatFlags AudioStreamBasicDescription 오디오 스트림을 위한 포맷 명세서. 오..