project 60

UNUserNotificationCenter `requestAuthorization`에서 발생하는 희귀한 버그 현상 분석

UNUserNotificationCenter `requestAuthorization`에서 발생하는 희귀한 버그 현상 분석 사내에 2021년에 작성된 코드에서 앱이 멈추는 상황이 발생해서 사례 분석앱 시작 직후가 아닌, 사용자에게 별도 페이지에서 안내 후 버튼 클릭을 통한 권한 요청의 동선 상세한 분석 링크https://github.com/lgvv/unusernotificationcenter-requestauthorization-blocking-simulation GitHub - lgvv/unusernotificationcenter-requestauthorization-blocking-simulation: Investigating Rare Bugs in UNUserNotificationCeInvestiga..

l-value, r-value

l-value, r-value프로젝트 내 C, C++, objective-c, swift 코드가 존재하여 이를 분석하면서 개념 정리. 용어 정리 L-value (locator value)란?메모리상의 위치(location) 를 가리키는 표현식.: 대입의 왼쪽에 올 수 있는 것(항상은 아님). 변수, 배열 원소, 프로퍼티, deref(*p) 등.: 즉, 여기에 값을 저장할 수 있음. R-value (read value / right value)란? 실제 값(리터럴, 계산 결과, 일시적인 임시객체).: 보통 대입의 오른쪽에 오는 것. 임시값이므로 주소를 갖지 않거나 곧 사라짐.: 즉, 이건 읽을 수는 있지만, 직접 이곳에 값을 저장할 수는 없다. ** 참고 ** : 현대 언어는 이분법을 확장.: 예: C++..

Actor에서 Class + OSAllocatedUnfairLock

Actor에서 Class + OSAllocatedUnfairLock 상태 보호를 위해서 actor로 작성된 객체를 class + OSAllocatedUnfairLock으로 변경프로파일링 과정에서 특정 메서드의 호출 빈도가 높아지는 경우 지속적으로 CPU Usage가 높게 잡히는 부분이 있어서 확인 Actor 기반으로 작성한 메서드를 실행했을 때completeTaskClousre로 나타나는 영역에서 Weight를 많이 차지함.해당 메서드의 구현부는 swiftlang / swift에 존재.https://github.com/swiftlang/swift/blob/main/stdlib/public/Concurrency/Task.cpp 간단한 Task를 컨텍스트에 넣어서 클로저로부터 최종 반환을 처리하는 함수 /..

Swift Concurrency Task weak self 실험 정리

Swift Concurrency Task weak self 실험 정리 Task에서 weak self 사용과 관련해서 실험들을 정리.개념에 대한 부분을 따로 생략함. Swift에서 Task를 사용할 때 self를 강하게 캡처하지만, 클로저가 종료될 때 메모리 Swift의 Task는 기본적으로 self를 강하게 캡처하기 때문에, Task의 수명이 self보다 길어질 경우 retain cycle 없이도 self의 deinit 호출이 지연될 수 있음.따라서 Task가 더 오래 살아 있을 가능성이 있다면 [weak self]를 명시하는 것이 안전.반면, Task의 수명이 self보다 짧고 일회성 작업에 그친다면 굳이 [weak self]를 사용할 필요는 없음. 목차example_1Task에 weak self를 명..

Tuist CocoaPod 연동

Tuist CocoaPod 연동 Tuist에서 CocoaPod을 연동하고자 함. 폴더 구조루트 폴더에서 아래와 같은 형태로 Podfile을 생성함.Dailytodo/├── Podfile ✅├── Tuist.swift├── Workspace.swift├── Projects/└── Dailytodo.xcworkspace Podfile 작성프로젝트 구조에 따라 cocoapod 의존성이 필요한 부분에 모두 작성해줌. ```platform :ios, '16.0'use_frameworks!inhibit_all_warnings!workspace 'Dailytodo.xcworkspace'project 'Projects/App/Dailytodo/Dailytodo.xcodeproj'project 'Projects/Co..

iOS 앱 크기 줄이기

iOS 앱 크기 줄이기 예전에 개발했던 앱 사이즈가 너무 커서 앱 용량을 줄이기 위해서 분석.애플 문서를 먼저 정리하고, 후에 실제 앱에 실험해보는 형태로 적용목차Reducing your app’s size (iOS 앱 크기 줄이기)Reducing your app’s size - OverviewCreate the app size reportThis process creates a folder with your app’s artifactsApp Thining Size Report 생성 자동화하기Doing basic optimization to reduce your app’s size (앱 사이즈 최적화하기)Doing basic optimization to reduce your app’s size - Ove..

iOS 캐싱 로직 구현 전 디스크 분석

iOS 캐싱 로직 구현 전 디스크 분석 앱에서 서버를 통해 값을 받아온 후 이 값을 캐싱하고 있다가 사용자가 앱을 종료 후에 다시 접속한 경우 캐싱된 값을 먼저 보여준 후 네트워크 응답이 도착하면 갱신하는 형태로 구현하고자 함. UserDefaults, SwiftData, CoreData, Realm, Filemanager 중에서 어떤걸 선택하는 것이 좋은지 궁금해서 비교해보기로 함.UserDefaults: 간단한 데이터 저장에 유용해 적합하지 않을 것으로 보임.SwiftData: iOS 17이상이라서 현재 현실적으로 사용하기가 어려움.CoreData: Realm이 있어서 굳이 써야하는지 의문이긴 함.Filemanager: 자주 변경되는 데이터라서 성능적으로 적합하지 않을 것 같음.Realm: 12.2..

iOS 빌드 메시지 분석해서 빌드 시간 개선하기

iOS 빌드 메시지 분석해서 빌드 시간 개선하기 프로젝트 빌드 메시지를 분석해서 빌드 시간 개선해보고자 함. 예제 파일목차빌드 메시지 확인하는 방법프로젝트 구조 및 Home Package 확인하기1차 문제 분석 및 개선 방향성 잡기Player Package 확인하기Player Package 개선하기1차 개선 결과2차 문제 분석 및 개선 방향성 잡기문제 코드 영역 확인하기HomeDetail을 HomeDetailInterface 모듈로 분리하기개선한 Home Package2차 개선 결과실행 가능한 앱(데모 앱) 구성하기실행 가능한 앱(데모 앱) 빌드 결과결과 한눈에 확인하기1차 개선2차 개선앱 빌드 빌드 메시지 확인하는 방법좌측 인스펙터에 빨간색 이미지 영역 클릭 빌드 이미지를 보면 순차대로 어떤 것들이 ..

iOS Combine을 활용해 로그인 상태 관리 기능 구현

iOS Combine을 활용해 로그인 상태 관리 기능 구현 멀티캐스트 딜리게이트 패턴을 활용해 구현했던 코드를 개선하고자 함.멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 : https://rldd.tistory.com/706Combine을 활용해 로그인 상태 관리 기능 구현 : https://rldd.tistory.com/707  목차아이디어데모 샘플 구현 코드Combine 기반 기능 모듈 구현로그인 기능 구현체사용 예제구현 후 분석아이디어이전에 키보드 상태를 감지하기 위해서 Combine을 활용한 적이 있었는데, 이번에도 해당 형태로 구현하면 별도의 주입 없이 더 간편하게 사용할 수 있다고 생각  데모 샘플 구현 코드 (Combine 기반 기능 모듈 구현)멀티캐스트 딜리게이트 패턴을 Com..