Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
fa4253c
refator: Module
Jul 30, 2026
343a5fd
fix(signing): 새 App Store Connect 팀으로 코드 서명 설정 이관
Aug 13, 2026
7f6382b
feat(data): AppUpdate 를 독립 데이터 모듈로 추가
Aug 19, 2026
76e1762
feat(network): 세션 레지스트리와 요청 텔레메트리를 NetworkModule 로 분리
Aug 19, 2026
82fc4f5
refactor(data): Repository 모듈을 제거하고 NetworkModule 의존으로 대체
Aug 19, 2026
2bee674
refactor(module): 실제로 쓰지 않는 모듈 간 의존성 정리
Aug 19, 2026
2f69da3
feat(app): 이미지 다운로드에도 네트워크 텔레메트리 수집
Aug 19, 2026
f8a664d
refactor(di): DiRegister 를 걷어내고 AppDependencyFactory 로 주입 일원화
Aug 19, 2026
394d0e3
style(app): 앱 테스트 코드 들여쓰기·개행 정리
Aug 19, 2026
3aaa637
chore: 모듈 의존성 그래프 이미지 갱신
Aug 19, 2026
57d75d6
chore(tuist): 매니페스트 로딩 시 찍히던 프로젝트 이름 로그 제거
Aug 28, 2026
9d4ae07
chore(tuist): 새 파일에 공통 헤더가 자동으로 붙도록 fileHeaderTemplate 주입
Roy-wonji Sep 6, 2026
b17696c
refactor(di): Attendance 의 live 등록을 구현 소유 모듈로 옮기고 Interface 를 계약만 남긴다
Roy-wonji Sep 6, 2026
156eb31
refactor(di): live 등록을 구현 소유 모듈로 옮기고 Interface 를 계약만 남긴다
Roy-wonji Sep 6, 2026
fdba649
refactor(feature): Presentation 레이어를 Feature 로 바꾸고 엄브렐러를 FeatureAssem…
Roy-wonji Sep 6, 2026
2e553db
refactor(assembly): Domain·Data 엄브렐러를 DomainAssembly·DataAssembly 로 바꾼다
Roy-wonji Sep 6, 2026
86d4a78
refactor(assembly): CoreAssembly·ServiceAssembly 를 만들고 App 의 Core·Ser…
Roy-wonji Sep 6, 2026
c764f32
refactor(assembly): App 의 개별 Domain·Data 의존을 조립 경계로 흡수한다
Roy-wonji Sep 6, 2026
04da064
refactor(tuist): 모듈 프로젝트 옵션과 Demo 스킴 분리를 DDD 템플릿에 맞춘다
Roy-wonji Sep 6, 2026
50fc3a0
refactor(service): 서버 계약 모듈 API 를 Data 에서 Service 레이어로 옮긴다
Roy-wonji Sep 6, 2026
7991063
refactor(service): 도메인별 API 경로 enum 을 Service/API 로 모은다
Roy-wonji Sep 6, 2026
6337099
refactor(service): Data/Remote 를 Service/APIEndpoint 로 옮긴다
Roy-wonji Sep 6, 2026
cc6acb5
refactor(service): 도메인별 서버 요청 정의를 APIEndpoint 로 모은다
Roy-wonji Sep 6, 2026
a71f332
refactor(domain): Common 도메인을 해체하고 각 타입을 소유 도메인으로 옮긴다
Roy-wonji Sep 6, 2026
1116660
refactor(core): PickeFoundation 을 PickeCoreUtility 로 이름을 바꾼다
Roy-wonji Sep 6, 2026
02e3a72
chore(tuist): 파일 헤더 템플릿에 저작권 줄을 추가해 DDD 형식과 맞춘다
Roy-wonji Sep 6, 2026
7774978
refactor(core): PickeCore 를 PickeThirdParty 로 바꾸고 FeatureFlag 을 CoreU…
Roy-wonji Sep 6, 2026
0fd5898
refactor(tuist): 모듈 카탈로그 케이스와 의존성 DSL 을 lowerCamelCase 로 바꾼다
Roy-wonji Sep 6, 2026
55b1dea
refactor(tuist): Data·Domain 레거시 접근자를 없애고 카탈로그를 하나로 모은다
Roy-wonji Sep 6, 2026
d0b24ba
feat(core): os.Logger 기반 PickeCoreLogger 모듈을 추가한다
Roy-wonji Sep 6, 2026
353fb3a
refactor(tuist): 모듈 카탈로그를 DDD 와 같은 3파일 구조로 재편한다
Roy-wonji Sep 6, 2026
7d1a07b
chore(tuist): 참조가 끊긴 레이어 단위 Testing 모듈을 지운다
Roy-wonji Sep 6, 2026
0be037a
refactor(domain): Data 피처 모듈을 대응 Domain 모듈로 흡수한다
Roy-wonji Sep 6, 2026
1d57200
refactor(core): Network 5모듈을 Core/PickeNetwork 하나로 합친다
Roy-wonji Sep 6, 2026
bd3e819
refactor(tuist): 모듈 product 를 DDD 규칙에 맞춘다
Roy-wonji Sep 6, 2026
454b604
refactor(domain): 공용 DTO 모듈 Model 을 해체하고 Data 레이어를 없앤다
Roy-wonji Sep 6, 2026
51f90f3
refactor(tuist): PickeThirdParty 도 DDD 처럼 정적 프레임워크로 둔다
Roy-wonji Sep 6, 2026
0fb3518
refactor(ad): AdService 를 Feature 레이어의 Ad 로 옮긴다
Roy-wonji Sep 6, 2026
dafbd57
refactor(tuist): UI 레이어용 DSL 을 카탈로그에 추가한다
Roy-wonji Sep 6, 2026
f2af961
refactor(core): 토큰을 모르는 순수 UI 확장을 PickeCoreUI 로 내린다
Roy-wonji Sep 6, 2026
4ca5051
refactor(ui): DesignSystem 을 UI 레이어 세 모듈로 쪼갠다
Roy-wonji Sep 6, 2026
a609966
refactor(ui): 스켈레톤 시머 구현 네 벌을 하나로 합친다
Roy-wonji Sep 6, 2026
d3714e9
refactor(ui): 원격 이미지 로딩을 PickeRemoteImage 뒤로 감춘다
Roy-wonji Sep 7, 2026
031738c
refactor(core): 날짜 포맷을 AppDateFormat 타입으로 통일한다
Roy-wonji Sep 7, 2026
fa183bc
refactor(network): PickeNetwork 를 Attendance 네트워크 구조로 이식한다
Roy-wonji Sep 7, 2026
3674db5
refactor(domain): 엔드포인트·레포지토리를 새 네트워크 계약으로 옮긴다
Roy-wonji Sep 7, 2026
a7cc1f8
feat(auth): PickeAuth 서비스 모듈을 추가하고 조립을 한곳으로 모은다
Roy-wonji Sep 7, 2026
28e31d1
refactor(service): AnalyticsService 를 PickeAnalytics 로 리네임한다
Roy-wonji Sep 7, 2026
bfcaa12
refactor(core): PickeStorage 를 Secure/Shared/Database 계약으로 나눈다
Roy-wonji Sep 7, 2026
5129b76
feat(core): PickeCoreUI 에 LazyView·생명주기·크기 측정 유틸을 추가한다
Roy-wonji Sep 7, 2026
8c16223
refactor(ui): 공용 UI 컴포넌트를 PickeSharedUI 로 정리한다
Roy-wonji Sep 7, 2026
65a7b09
refactor(feature): 화면 레이어를 새 모듈 경계에 맞춘다
Roy-wonji Sep 7, 2026
0059cc0
chore(tuist): 모듈 카탈로그와 패키지 의존성을 갱신한다
Roy-wonji Sep 7, 2026
27f45ba
refactor(analytics): PickeAnalytics 구현을 새 모듈 이름에 맞춘다
Roy-wonji Sep 7, 2026
2d4a16b
chore(tuist): PickeAnalytics·AuthDomain 모듈 의존성을 구현에 맞춘다
Roy-wonji Sep 7, 2026
e51f19e
test: 테스트가 없던 모듈에 테스트 타깃과 테스트를 추가한다
Roy-wonji Sep 7, 2026
232f41c
test(storage): 테스트를 SecureStorage 구조에 맞춘다
Roy-wonji Sep 7, 2026
3ebd204
refactor(network): Alamofire 재노출을 끊고 사용처가 직접 import 하게 한다
Roy-wonji Sep 7, 2026
c58fb0e
refactor(di): WeaveDI 를 걷어내고 swift-dependencies 로 일원화한다
Roy-wonji Sep 7, 2026
252dcf9
refactor(di): WeaveDI 제거 후속으로 남은 사용처를 swift-dependencies 로 정리한다
Roy-wonji Sep 7, 2026
189526e
refactor(tuist): TuistTool 을 참조 프로젝트 구조로 재작성하고 1146줄을 551줄로 줄인다
Roy-wonji Sep 7, 2026
c3d0863
refactor(storage): appleUserName 을 appStorage 에서 영속 저장소로 옮긴다
Roy-wonji Sep 7, 2026
4adfbe7
refactor(structure): 모듈 배치와 의존성 표기를 참조 프로젝트에 맞춘다
Roy-wonji Sep 7, 2026
f6bfc31
refactor(tuist): Feature·Domain 의존 기본값을 Interface 로 뒤집는다
Roy-wonji Sep 7, 2026
09ebf74
refactor(logger): LogMacro 를 걷어내고 PickeCoreLogger 로 일원화한다
Roy-wonji Sep 7, 2026
81f1b11
refactor(tuist): 모듈 템플릿을 참조 프로젝트의 makeModule 로 통일한다
Roy-wonji Sep 7, 2026
998b735
style(comment): Interface·UseCase 문서 주석을 한 줄로 줄이고 군더더기를 지운다
Roy-wonji Sep 7, 2026
b687bee
refactor(structure): Splash 를 App 으로 올리고 피처 공유 UI 를 분리한다
Roy-wonji Sep 7, 2026
5556bcc
refactor(feature): 로딩 여부를 Bool 대신 ViewState 로 표현한다
Roy-wonji Sep 7, 2026
1a6cceb
fix(logger): Log 직접 호출과 로거 의존 누락을 바로잡는다
Roy-wonji Sep 7, 2026
4ae73c1
fix(build): 리팩터링 중 유실된 의존성과 타입을 되살린다
Roy-wonji Sep 7, 2026
99f671f
refactor(app): App 레이어를 참조 프로젝트 구조에 맞춘다
Roy-wonji Sep 9, 2026
5e5ed55
refactor(app): 푸시와 SDK 초기화의 의존 경계를 명확히 한다
Roy-wonji Sep 10, 2026
2dd7765
refactor(ad): 광고 진단을 공통 로거로 모은다
Roy-wonji Sep 10, 2026
ce24d37
fix(build): 앱 소스 지정과 폰트 등록 방식을 일치시킨다
Roy-wonji Sep 10, 2026
33153e3
chore(release): 다음 배포 버전을 1.0.8로 준비한다
Roy-wonji Sep 10, 2026
f690d16
chore: 최신 TCA 호환성과 로컬 Tuist 개발 환경을 맞춘다
Roy-wonji Sep 10, 2026
2e497e7
merge: develop의 광고와 공유 수정을 모듈 개편 후에도 유지한다
Roy-wonji Sep 10, 2026
d7bfd81
fix: 모듈 개편 후 테스트와 빈 리캡 동작을 유지한다
Roy-wonji Sep 10, 2026
3137989
refactor: 알림 화면 전환을 앱에서 일관되게 조립한다
Roy-wonji Sep 10, 2026
4f11ac6
fix: 상세 콘텐츠의 긴 제목을 끝까지 읽을 수 있게 한다
Roy-wonji Sep 10, 2026
a9df2e3
chore: 로컬 개발에서 Tuist 연결과 캐시를 자동 준비한다
Roy-wonji Sep 10, 2026
2b4cc8d
fix: Xcode 26.5에서도 로컬 모듈 캐시를 저장할 수 있게 한다
Roy-wonji Sep 10, 2026
4b44619
docs: 현재 모듈 구조를 Attendance처럼 찾아볼 수 있게 한다
Roy-wonji Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@ public extension TargetDependency.SPM {

static let composableArchitecture = TargetDependency.external(name: "ComposableArchitecture", condition: .none)
static let dependencies = TargetDependency.external(name: "Dependencies", condition: .none)
static let sharing = TargetDependency.external(name: "Sharing", condition: .none)
static let sqliteData = TargetDependency.external(name: "SQLiteData", condition: .none)
static let identifiedCollections = TargetDependency.external(name: "IdentifiedCollections", condition: .none)
static let tcaFlow = TargetDependency.external(name: "TCAFlow", condition: .none)
static let concurrencyExtras = TargetDependency.external(name: "ConcurrencyExtras", condition: .none)
static let sdwebImageCore = TargetDependency.external(name: "SDWebImage", condition: .none)
static let sdwebImage = TargetDependency.external(name: "SDWebImageSwiftUI", condition: .none)
static let kingfisher = TargetDependency.external(name: "Kingfisher", condition: .none)
static let weaveDI = TargetDependency.external(name: "WeaveDI", condition: .none)

static let googleSignIn = TargetDependency.external(name: "GoogleSignIn", condition: .none)
static let appAuth: TargetDependency = .external(name: "AppAuth")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,71 +2,88 @@
// Modules.swift
// Plugins
//
// Created by 서원지 on 2/21/24.
// 레이어별 모듈 카탈로그(단일 출처).
// 모듈 추가 = case 한 줄. rawValue 가 실제 타깃명이자 디렉토리명이라 오타로 깨지지 않는다.
//

import Foundation
import ProjectDescription

public enum ModulePath {
case Network(Networks)
case Domain(Domains)
case Data(Datas)
case Shared(Shareds)
}
public enum FeatureModule: String, CaseIterable {
case auth = "Auth"
case home = "Home"
case chat = "Chat"
case hifi = "Hifi"
case web = "Web"
case battle = "Battle"
case profile = "Profile"
case notification = "Notification"
case ad = "Ad"
case featureSharedUI = "FeatureSharedUI"

// MARK: - CoreDomainModule
/// Projects/Feature/<name>
var path: Path {
return .relativeToFeature(rawValue)
}
}

public extension ModulePath {
enum Networks: String, CaseIterable {
case NetworkModule
case Networking
case NetworkToken
case NetworkHeader
case ThirdPartys
public enum CoreModule: String, CaseIterable {
case assembly = "CoreAssembly"
case logger = "PickeCoreLogger"
case network = "PickeNetwork"
case storage = "PickeStorage"
case coreUI = "PickeCoreUI"
case coreUtility = "PickeCoreUtility"
case thirdParty = "PickeThirdParty"

public static let name: String = "Network"
/// Projects/Core/<name>
var path: Path {
return .relativeToCore(rawValue)
}
}

// MARK: - CoreMoudule
public enum ServiceModule: String, CaseIterable {
case assembly = "ServiceAssembly"
case api = "API"
case apiEndpoint = "APIEndpoint"
case analytics = "PickeAnalytics"
case config = "PickeConfig"
case audioPlayer = "AudioPlayerService"
case device = "DeviceService"
case auth = "PickeAuth"

public extension ModulePath {
enum Datas: String, CaseIterable {
case Model
case Data
case Repository
case API
case Service
case DataTesting

public static let name: String = "Data"
/// Projects/Service/<name>
var path: Path {
return .relativeToService(rawValue)
}
}

// MARK: - CoreMoudule

public extension ModulePath {
enum Domains: String, CaseIterable {
case Entity
case UseCase
case Domain
case DomainInterface
case DomainTesting
public enum DomainModule: String, CaseIterable {
case assembly = "DomainAssembly"
case appUpdate = "AppUpdateDomain"
case attendance = "AttendanceDomain"
case auth = "AuthDomain"
case battle = "BattleDomain"
case comment = "CommentDomain"
case home = "HomeDomain"
case notification = "NotificationDomain"
case perspective = "PerspectiveDomain"
case profile = "ProfileDomain"
case search = "SearchDomain"

public static let name: String = "Domain"
/// Projects/Domain/<name>
var path: Path {
return .relativeToDomain(rawValue)
}
}

public extension ModulePath {
enum Shareds: String, CaseIterable {
case Shared
case PickeDesignKit
case Utill
/// 광고 SDK(AdFit) 전용 모듈. 디자인 시스템과 분리해, 광고를 노출하는 화면만 명시적으로 의존한다.
case AdKit
public enum UIModule: String, CaseIterable {
case animation = "PickeAnimation"
case designKit = "PickeDesignKit"
case sharedUI = "PickeSharedUI"

public static let name: String = "Shared"
case ThirdParty
/// Projects/UI/<name>
var path: Path {
return .relativeToUI(rawValue)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,52 +2,30 @@
// Path+Modules.swift
// Plugins
//
// Created by 서원지 on 2/21/24.
// 레이어 루트 경로. 카탈로그가 rawValue 만 넘겨 재사용한다.
//

import Foundation
import ProjectDescription

// MARK: ProjectDescription.Path + PickeDesignKit
public extension ProjectDescription.Path {
static var Shared: Self {
return .relativeToRoot("Projects/\(ModulePath.Shareds.name)")
static func relativeToFeature(_ name: String) -> Self {
return .relativeToRoot("Projects/Feature/\(name)")
}

static func Shared(implementation module: ModulePath.Shareds) -> Self {
return .relativeToRoot("Projects/\(ModulePath.Shareds .name)/\(module.rawValue)")
}
}

// MARK: - Network
public extension ProjectDescription.Path {
static var Networking: Self {
return .relativeToRoot("Projects/\(ModulePath.Networks.name)")
}

static func Network(implementation module: ModulePath.Networks) -> Self {
return .relativeToRoot("Projects/\(ModulePath.Networks.name)/\(module.rawValue)")
}
}

// MARK: - Domain
public extension ProjectDescription.Path {
static var Domain: Self {
return .relativeToRoot("Projects/\(ModulePath.Domains.name)")
static func relativeToCore(_ name: String) -> Self {
return .relativeToRoot("Projects/Core/\(name)")
}

static func Domain(implementation module: ModulePath.Domains) -> Self {
return .relativeToRoot("Projects/\(ModulePath.Domains.name)/\(module.rawValue)")
static func relativeToService(_ name: String) -> Self {
return .relativeToRoot("Projects/Service/\(name)")
}
}

// MARK: - Data
public extension ProjectDescription.Path {
static var Data: Self {
return .relativeToRoot("Projects/\(ModulePath.Datas.name)")
static func relativeToDomain(_ name: String) -> Self {
return .relativeToRoot("Projects/Domain/\(name)")
}

static func Data(implementation module: ModulePath.Datas) -> Self {
return .relativeToRoot("Projects/\(ModulePath.Datas.name)/\(module.rawValue)")
static func relativeToUI(_ name: String) -> Self {
return .relativeToRoot("Projects/UI/\(name)")
}
}
Loading
Loading