-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPackage.swift
More file actions
118 lines (114 loc) · 6.54 KB
/
Copy pathPackage.swift
File metadata and controls
118 lines (114 loc) · 6.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// swift-tools-version: 6.2
@preconcurrency import PackageDescription
#if TUIST
@preconcurrency import ProjectDescription
let packageSettings = PackageSettings(
productTypes: [
// 동적 전환: PickeDesignKit(동적)이 이 라이브러리들을 정적 링크하면 앱 바이너리와
// 각각 중복 복사되어 ObjC 클래스가 2벌 등록되고 "spurious casting failures/
// mysterious crashes" + NavigationRequestObserver 다중 갱신을 유발한다.
// 동적이면 앱·프레임워크가 단일 사본을 공유한다.
"ComposableArchitecture": .framework,
"Dependencies": .framework,
"Perception": .framework,
"Sharing": .framework,
"TCAFlow": .framework,
"Alamofire": .framework,
"LogMacro": .framework,
"AppAuth": .framework,
"AppAuthCore": .framework,
"GTMAppAuth": .framework,
"GTMSessionFetcherCore": .framework,
"IssueReporting": .framework,
"XCTestDynamicOverlay": .framework,
"Clocks": .framework,
"ConcurrencyExtras": .framework,
"ReactiveSwift": .framework,
"SDWebImage": .framework,
"SDWebImageSwiftUI": .framework,
"Mixpanel": .framework,
"MixpanelSessionReplay": .framework,
"GoogleMobileAds": .framework,
"Sentry": .framework,
"SentrySwiftUI": .framework,
// Sharing·SQLiteData 는 여러 동적 모듈이 함께 쓰므로 단일 런타임으로 공유한다.
// 버전 마커(Sharing1/2)는 정적으로 링크해 앱이 Sharing1.framework 를 찾지 않게 한다.
// _IssueReporting 은 xctest-dynamic-overlay의 재노출 shim이다. 동적으로 만들면
// 실제 IssueReporting.framework 와 같은 bundle identifier로 앱에 함께 임베드된다.
"_IssueReporting": .staticLibrary,
"_IssueReportingTestSupport": .staticLibrary,
"Sharing1": .staticFramework,
"Sharing2": .staticFramework,
"SQLiteData": .framework,
"GRDB": .framework,
"GRDBSQLite": .framework,
"GRDB_GRDB": .framework,
"StructuredQueries": .framework,
"StructuredQueriesCore": .framework,
"StructuredQueriesSQLite": .framework,
"StructuredQueriesSQLiteCore": .framework,
],
// 외부 SPM 패키지 타깃에도 explicit modules를 적용해 Swift 6.4의 정확한
// 모듈 경로 기반 디버깅과 compilation cache를 사용한다.
// -debug-module-path는 Xcode의 Swift driver가 자동으로 전달한다.
baseSettings: .settings(
base: [
"SWIFT_ENABLE_EXPLICIT_MODULES": "YES",
"CLANG_ENABLE_EXPLICIT_MODULES": "YES",
// Xcode 26 의 XCTest 가 먼저 로드하는 애플 private `Sharing` 모듈과 충돌해
// xctest 부팅이 깨진다. Point-Free 구현은 다른 모듈명으로 빌드하고
// 소스의 `import Sharing` 은 별칭으로 이어 붙인다.
"OTHER_SWIFT_FLAGS": "$(inherited) -module-alias Sharing=PickePointFreeSharing",
],
// 외부 SPM 패키지도 앱과 동일한 커스텀 컨피그(Stage/Prod/Release)를 갖게 한다.
// 이게 없으면 패키지는 기본 [Debug, Release]만 생성 → Stage 빌드 시 리소스 번들이
// Release-iphonesimulator 에만 만들어져 앱의 Stage-iphonesimulator Copy Bundle Resources
// 단계가 lstat 실패(SDWebImage_SDWebImage.bundle 등)로 깨진다.
configurations: [
.debug(name: "Stage"),
.release(name: "Prod"),
.release(name: "Release"),
]
),
targetSettings: [
// 위 module-alias 와 짝. 산출물 이름 자체를 바꿔 시스템 Sharing.framework 를 가리지 않는다.
"Sharing": .settings(base: ["PRODUCT_NAME": "PickePointFreeSharing"]),
// SwiftPM의 .swiftLanguageMode(.v6)를 Tuist가 SWIFT_VERSION과 -swift-version으로
// 중복 변환하면 Xcode 27이 언어 모드 override 경고를 낸다. 언어 모드는
// SWIFT_VERSION=6에 맡기고 TCAFlow가 요구하는 feature flag만 유지한다.
"TCAFlow": .settings(base: [
"OTHER_SWIFT_FLAGS": "$(inherited) -enable-experimental-feature StrictConcurrency -enable-upcoming-feature ExistentialAny",
]),
]
)
#endif
let package = Package(
name: "TimeSpot",
dependencies: [
.package(url: "https://github.com/pointfreeco/swift-composable-architecture", exact: "1.26.2"),
// 1.13+의 traits 조건부 Clocks/CombineSchedulers 의존성이 Tuist에서 누락되는 문제를 피한다.
// 소스 빌드와 바이너리 캐시가 같은 그래프를 쓰도록 마지막 비조건부 버전을 고정한다.
.package(url: "https://github.com/pointfreeco/swift-dependencies", exact: "1.12.0"),
.package(url: "https://github.com/pointfreeco/sqlite-data", exact: "1.11.0"),
// SQLiteData 1.11.0의 section API가 요구하는 Select.From: Table 제약을 유지한다.
.package(url: "https://github.com/pointfreeco/swift-structured-queries", exact: "0.36.0"),
// 1.13부터 swift-issue-reporting 의 IssueReporting 과 제품명이 겹쳐
// tuist cache warm 이 _IssueReporting 순환 의존성으로 실패하므로 1.11 로 고정한다 (1.12 태그 없음).
.package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", .upToNextMinor(from: "1.11.0")),
.package(url: "https://github.com/Roy-wonji/TCAFlow.git", branch: "main"),
.package(url: "https://github.com/google/GoogleSignIn-iOS", from: "9.1.0"),
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.10.2"),
.package(url: "https://github.com/openid/AppAuth-iOS.git", from: "2.0.0"),
.package(url: "https://github.com/ReactiveCocoa/ReactiveSwift.git", from: "6.7.0"),
.package(url: "https://github.com/onevcat/Kingfisher.git", from: "8.2.0"),
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "12.12.0"),
.package(url: "https://github.com/SDWebImage/SDWebImageSwiftUI.git", from: "3.1.4"),
.package(url: "https://github.com/mixpanel/mixpanel-swift.git", from: "5.1.3"),
.package(url: "https://github.com/mixpanel/mixpanel-ios-session-replay-package", exact: "1.4.0"),
.package(url: "https://github.com/googleads/swift-package-manager-google-mobile-ads", from: "12.0.0"),
.package(url: "https://github.com/getsentry/sentry-cocoa", from: "9.21.0"),
// 카카오 AdFit — CocoaPods 지원 종료(3.18.6~)로 SPM 만 제공. 배포물은 binaryTarget(xcframework)
// 하나뿐이라 productTypes 전환 대상이 아니다(이미 DYLIB 로 빌드된 동적 프레임워크).
.package(url: "https://github.com/adfit/adfit-spm.git", exact: "3.21.24"),
]
)