iOS

    concurrency-in-swift-chapter2

    Chapter 2: Getting Started Pre-async/await asynchrony async/await 이전에는 어떻게 쓰고 있었나 돌아보기 completion closure 열심히 사용함 func viewDidAppear() { api.fetchServerStatus { [weak viewModel] status in guard let viewModel = viewModel else { return } viewModel.serverStatus = status } } 언뜻 보기엔 간단함 위험성이 있음: completion 호출을 빼먹을 수 있고, 에러 처리를 안하고 갈 수도 있음 기존에는 GCD 기반이라서, swift에 긴밀하게 통합하진 못했음 컴파일러 입장에서 completion은 언제,..

    [WWDC21] What's new in Swift

    이걸 제일 먼저 했어야 했는데! 역시 각 잡고 정리하는 시간이 필요하긴하네요. https://developer.apple.com/videos/play/wwdc2021/10192/ What‘s new in Swift - WWDC21 - Videos - Apple Developer Join us for an update on Swift. Discover the latest language advancements that make your code easier to read and write. Explore the... developer.apple.com Update on Swift packages Swift Package Collection 패키지를 검색해서 찾기 쉬움 CocoaPods Specs 같은 느낌..

    [WWDC21] Ultimate application performance survival guide

    https://developer.apple.com/videos/play/wwdc2021/10181/ 툴이 되게 많음 자 이렇게 따라가 봅시다 Battery usage 배터리 관리를 잘해줘야 앱도 오래 머물 수 있음 CPU, Networking, Location, GPU, Audio, Bluetooth 신경 써야함 스프레이 버튼 > Energy Impact 들어가서 Energy Impact 확인할 수 있음 MetricKit 원격 측정 프레임워크. 릴리즈된 앱을 측정하는데 도움이 될 수 있음 class AppMetrics: MXMetricManagerSubscriber { init() { let shared = MXMetricManager.shared shared.add(self) } deinit { let..

    [WWDC21] Detect and diagnose memory issues

    https://developer.apple.com/videos/play/wwdc2021/10180/ 1. Impact of memory footprint 1-1. 왜 memory footprint를 신경써야하나? 사용자 경험을 극대화하기 위해서! 빠른 앱 활성화 빠른 반응 복잡한 기능 제공 오래된 디바이스도 지원 1-2. Memory footprint 근데 이건 도대체 뭘까?! Dirty + Compressed memory!! Dirty: 앱에서 사용된 메모리, 모든 heap allocations, Decoded image buffers, Frameworks Compreesed: 최근 access 되지 않은 dirty memory를 압축해둔 페이지. access 하면 압축이 풀림. (macOS에 적용) ..

    [WWDC21] ARC in Swift: Basics and beyond

    ARC in Swift: Basics and beyond - WWDC21 - Videos - Apple Developer ARC가 어떻게 동작하는지 살펴보는 시간 Object lifetimes and ARC Object lifetime은 init() 에서 시작, 마지막 사용에서 끝 ARC는 object의 lifetime이 끝날때 deallocate 해줌 ARC는 reference count로 object의 lifetime을 추적 ARC는 Swift 컴파일러 주도로 이루어짐. 컴파일러가 retain/release operation을 넣음 런타임에 retain은 reference count를 증가시키고, release는 감소시킴. reference count 가 0이 되었을때 object는 deallacte..

    iPad Slide-over 키보드 높이 계산 이슈 해결

    카페앱에 이번 버전 부터 iPad slide over를 지원하게 되었는데요. sldie over가 뭐냐면 패드에서 한켠에 둥둥 띄워서 쓸 수 있는 기능입니다. 그러면서 생각지도 못했던 이슈가 발생했습니다. 키보드 높이 계산이 잘못되어서 하단에 떠있는 만큼 키보드가 위로 더 들려있는 현상이 발생했습니다ㅠ 알고보니 기존에는 앱이 Screen을 세로로 꽉채우는 개념으로 되어 있어서 이슈가 안생기고 있었습니다. 아래와 같은 개념이라서 Screen.height - Keyboard.minY를 빼주면 키보드 높이를 구할 수 있었습니다. 그런데 이제는 앱이 둥둥 떠있게 되면서 고려해줘야하는게 늘었습니다. Screen.height - keyboard.minY - 하단 떠있는 높이 = 키보드 높이 가 됩니다. 그러면 하단..

    Main Thread 무한 루프 문제해결 과정

    안녕하세요 코찐 입니다. 요즘 학습할 거리들이 넘쳐나고 있는데요. SwiftUI, 새로 추가된 WWDC 21 세션들, 개인앱 작업, 모듈 관리 등 많은 열정적인 개발자 분들이 자료를 공유해주고 계십니다. 저는 자료가 넘쳐나는 시즌에는 열등감이 넘쳐났다가 다음 WWDC 직전때에 자만심이 넘치는 주기를 반복하는 것 같아요ㅋㅋ 열등감이 커지면 학습 열정을 자극하기 보다는 집중력이 흩어지고 오히려 학습을 방해하는 느낌을 받습니다. 다음에 이것 관련해서 글을 좀 정리해보려고 합니다. 무튼!!!! 분위기를 다시 전환해서 오늘의 문제를 정리해볼게요. 제가 해결한 것은 아니지만 앞으로 디버깅 할 때 참고하고자 기록합니다. 저희팀에서 만난 문제입니다. 아이패드에서 키보드를 floating으로 전환할 수 있는데요. 이상하..

    [Mastering SwiftUI] 메모 앱 만들기 2~4강 정리

    #2 모델 클래스 개념정의 Identifiable: 데이터 목록을 테이블뷰나 컬렉션뷰에 쉽게 바인딩할 수 있음 ObservableObject: 반응형 UI를 구현하기 위해 필요함 @Published: 새로운 값이 저장될 때 마다 바인딩된 UI가 자동으로 업데이트 됨 #3. 메모 목록 화면 Scene에 EnvironmentObject를 주입하는 방식이 특이하다고 생각되는데요. 이렇게 외부에서 주입해주고 뷰가 생성되는 시점에 공유데이터(?) 목록을 확인하고 동일한 타입이 있다면 주입해주게 됩니다. SwiftUI에서는 이런 방식을 통해서 하나의 데이터를 여러 뷰에서 사용합니다. 객체를 주입해주는 메소드가 없기 때문에 프로그래머가 주의해서 주입을 해줘야한다는게 좀 이상했습니다. 실수할 가능성이 있는 부분으로 생..