project 57

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를 컨텍스트에 넣어서 클로저로부터 최종 반환을 처리하는 함수 /..

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..

iOS 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현

iOS 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 멀티캐스트 패턴을 활용해 로그인 기능을 구현 멀티캐스트 딜리게이트 패턴 활용한 로그인 상태 관리 구현 : https://rldd.tistory.com/706Combine을 활용해 로그인 상태 관리 기능 구현 : https://rldd.tistory.com/707   목차배경고려사항데모 샘플 구현 코드멀티캐스트 기능 구현 모듈로그인 기능 구현체이벤트 수신(사용 예제)구현 후 분석 배경 앱 내에서 카카오, 네이버, 페이스북 등 여러 소셜 로그인을 지원하고 있음.로그인이 되지 않은 상태에서도 로그인 페이지가 나타나는 것이 아닌, 각 페이지마다 별도의 정책이 적용되며 다른 UI가 나타남.웹뷰, 웹 등 로그아웃 버튼이 아니더라도 로그아웃 처리시킬 수..

UICollectionView Crashes on iOS 18 with Xcode 16: Troubleshooting Guide

UICollectionView Crashes on iOS 18 with Xcode 16: Troubleshooting Guide 기존 운영중인 코드에서 Xcode 16, iOS 18 에서만 UICollectionView 크래시 발생 크래시 상황 분석상황 분석Xcode 16 + iOS 17.7 ✅ 크래시 미발생Xcode 16 + iOS 18 + ❌ 크래시 발생즉, Xcode 16과 iOS 18 기기 한정해서 발생하는 걸로 보임. 크래시 현상 재현 코드deque를 2회이상 수행하면 크래시가 발생.import UIKitclass ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionV..

Combine ReadOnly Publisher

Combine ReadOnly PublisherCombine을 통해 개발하는데, Read만 가능한 Publiser가 필요한 상황이 생김.Combine과 SwiftUI에서 기본 제공되는 PassthroughSubject, CurrentValueSubject, @Published로는 읽기 전용으로 제한하기에 마땅치 않아서 커스텀하게 만들어서 사용하고자 함. AnyPublisher를 활용하고 Subject에 erase하는게 제일 간편하지만 Combine 전체적인 개념 학습용으로 시도 목차모듈 전체 코드CurrentValueSubject을 통한 구현PassthroughtSubject을 통한 구현 PassthroughSubject를 활용한 구현에서 value를 지원하는 형태간단 사용 예제 모듈 전체 코드구현할 때..