Conversation
Logger를 구성합니다.
MLSCore 모듈 초기구성을 진행합니다.
1. 기존 DesignSystem -> MLSDesignSystem 2. BaseFeature의 SharedView 이전 3. 디자인 컴포넌트 + 공용뷰 + 디자인 팩토리 + Utils 4. 각 Feature에서 UI관련하여 해당 모듈을 의존 5. UIImage 직접접근 코드 수정 6. @mainactor 설정
…SDesignSystem-Module
BaseViewController를 Core 모듈로 옮기고 TabbarController 직접참조를 제거하여 DesignSystem의 의존성을 분리
…nto fix/#315-Components # Conflicts: # MLS/MLSDesignSystem/Sources/MLSDesignSystem/Components/Tooltip/TooltipView.swift # MLS/MLSDesignSystem/Sources/MLSDesignSystem/Layouts/Factory/TooltipFactory.swift
…nto fix/#315-Components
추천 기능 UI에 맞게 컴포넌트들을 수정 / 구현합니다.
신규 AuthFeature를 구성합니다.
set-read 제외한 알람관련 API 도메인 주소를 v1->v2로 수정
페이징 시 기존 데이터에 덮어쓰기가 아닌 추가 되고있던 이슈 해결 + 진행중 이벤트 클릭 이슈는 현재 확인 불가능
+ 버전 3.0.0 및 앱 이름 변경
알림 관련 API 도메인을 수정 + 버그 픽스
There was a problem hiding this comment.
Code Review
This pull request transitions the project to a modular architecture by introducing the MLSCore, MLSDesignSystem, MLSAppFeature, and MLSAuthFeature frameworks. It implements core infrastructure including a centralized logging system, a networking layer with interceptor support, an image loading system with two-level caching, and a comprehensive authentication flow supporting Apple and Kakao. Additionally, alarm-related services were migrated to API version 2, updating pagination cursors from strings to integers. Technical feedback highlights critical concurrency risks in the Apple login provider, potential thread blocking in disk storage cleanup, and the need to optimize layout performance by avoiding redundant constraint creation. Other recommendations include replacing print statements with the new logging system, improving error visibility in the App Store service, and enhancing the image loader to support request cancellation for better resource management.
| private var authServiceResponse = PublishSubject<Credential>() | ||
|
|
||
| public func getCredential() -> Observable<Credential> { | ||
| let subject = PublishSubject<Credential>() | ||
| authServiceResponse = subject |
| DispatchQueue.global(qos: .background).async { [weak self] in | ||
| let timer = Timer.scheduledTimer(withTimeInterval: 60, repeats: true) { _ in | ||
| self?.checkCache() | ||
| } | ||
| // 백그라운드에서 실행되는 타이머를 메인 루프에 추가 | ||
| RunLoop.current.add(timer, forMode: .common) | ||
| // 백그라운드 스레드에서 타이머를 계속 실행하기 위해 RunLoop를 유지 | ||
| RunLoop.current.run() | ||
| } |
| snp.makeConstraints { make in | ||
| make.height.equalTo(style.height) | ||
| } |
There was a problem hiding this comment.
| guard let lookupResponse = try? JSONDecoder().decode(AppStoreLookupResponse.self, from: data) else { | ||
| throw AppStoreError.parsingError | ||
| } |
|
|
||
| import RxSwift | ||
|
|
||
| public final class NetworkProviderImpl: NetworkProvider { |
|
|
||
| public func requestData<T: Responsable & Requestable>(endPoint: T, interceptor: Interceptor?) -> Observable<T.Response> { | ||
| return Observable.create { [weak self] observer in | ||
| print("🚀 requestData: 요청 시작 - \(endPoint)") |
| return | ||
| } | ||
|
|
||
| DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { |
| /// - Parameters: | ||
| /// - url: 요청할 URL 객체 | ||
| /// - completion: 요청 완료 후 호출되는 클로저 | ||
| func fetchDataFrom(url: URL, completion: @escaping (Result<Data?, Error>) -> Void) { |
MLSCore
목적
구조
MLSAppFeature
목적
구조
MLSAuthFeature
목적
구조
MLSDesignSystem
목적
구조
기타 수정사항