project 50

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로는 읽기 전용으로 제한하기에 마땅치 않아서 커스텀하게 만들어서 사용하고자 함. 목차 모듈 전체 코드 CurrentValueSubject을 통한 구현 PassthroughtSubject을 통한 구현 PassthroughSubject를 활용한 구현에서 value를 지원하는 형태 간단 사용 예제 모듈 전체 코드구현할 때 고려했던 것들Swift Package를 활용해서 모듈 형태로 구현해서 접근제어자 활용...

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제 문제 상황로컬에서 모든 작업자가 빌드가 잘 되지만,  Github Action에서만 빌드가 실패하는 문제가 발생Process completed with exit code 65.문제 분석에러 파일이 길어서 콘솔에는 나타나지 않아 에러 파일을 다운 받아 분석패키지 의존성에 문제가 있는지 점검테스트 코드 통과하지 못한 영역이 있는지 점검최근 작업한 영역에서 빌드에 영향을 줄 수 있는 부분이 있는지 점검당시 Translation 프레임워크를 도입 iOS 17, 18에서 지원하는 사용할 수 있는 API 가 다름 (18에서 확장됨)Xcode 15와 Xcode 16에 따라 iOS 타겟 범위가 다름 (15는 17버전, 16은 18버전 지..

We do not provide support for this pre-release version.

We do not provide support for this pre-release version. Issue with `tuist graph` after updating to macOS After upgrading to macOS 15, I encountered the following error when running the tuist graph command ProblemThe 'brew' command exited with error code 1 and message:Warning: You are using macOS 15.We do not provide support for this pre-release version.It is expected behaviour that some formulae..

SwiftUI로 Placeholder가 존재하는 TextField 설계 팁 (UIKit호환)

SwiftUI로 Placeholder가 존재하는 TextField 설계 팁 (UIKit호환) 최근에는 SwiftUI와 UIKit을 정말 많이 혼용해서 사용하고 있음.특히 몇몇 컴포넌트들은 SwiftUI로 작성한 것들을 UIKit에서 가져다가 사용하는 컴포넌트들이 많은데, 서로 손쉽게 사용할 수 있도록 설계.  글의 순서구현 결과 스크린샷구현 예시 코드SwiftUI UsageUIKit Usage 구현 결과 스크린샷  구현 예시 코드구현 포인트 @State, @Binding을 외부에 직접 노출시키는 것이 아닌 Delegate를 통해 이벤트를 전달함.장점: UIKit에서 공통된 코드 규칙으로 편리하게 사용할 수 있음.  import SwiftUI/// 리스트에서 사용하는 검색 필드struct Search..

Dependency Container 만들기

Dependency Container 만들기 의존성 주입해줘야 하는데, 매번 의존성 주입을 위해 반복되는 작업을 하는게 불편함.SwiftUI에서 @EnvironmentOjbect를 활용한 처음 작성한 코드를 새롭게 바꿔보고자 함. 글의 순서environmentObjcet를 활용한 초기 개발주입할 것들을 구조체로 분리하여 정의주입할 객체 생성하기UI구성하는 Builder에 주입하기 environmentObjcet를 활용한 초기 개발 모듈화 전 해당 부분을 처리할 때 SwiftUI에 environmentObject를 활용하고자 함.사유: App Root 영역에서 container를 작성해두면 모든 하위 뷰에서 사용할 수 있기 때문개선하기로 한 이유UIKit과 혼용해서 사용할 때 보라색 이슈가 발생하며,..

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기

SwiftUI 하위뷰에서 상위뷰로 DelegatePattern을 활용해 이벤트 전달하기  글의 순서상황어떻게 처리할까?코드 적용 예시마무리 상황홈 화면에서 프로필 리스트가 있는 네비게이션 방식으로 화면을 전환하고, 해당 화면에서 프로필을 전환하고 pop 혹은 dismiss로 홈 화면으로 돌아왔을 때, 프로필이 전환되어야 함. 즉, 하위 뷰가 상위 뷰로 프로필이 전환되었음(이벤트)을 알려야 함. 어떻게 처리할까?우선 UIKit에서라면 여러가지 방법이 있겠지만, 단순하게는 Delegate Pattern이 있음.SwiftUI에서는 Environment, preferenceKey를 활용할 수 있고, @State, @Binding을 활용해 하위 뷰와 연결할 수도 있음. SwiftUI에서 제안된 방법들은 사용..