-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProject.swift
104 lines (94 loc) · 3.61 KB
/
Project.swift
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
import ProjectDescription
import ProjectDescriptionHelpers
protocol ProjectFactory {
var projectName: String { get }
var dependencies: [TargetDependency] { get }
func generateTarget() -> [Target]
func generateConfigurations() -> Settings
}
class BaseProjectFactory: ProjectFactory {
let projectName: String = "Footprint-iOS"
var dependencies: [TargetDependency] = [
.external(name: "Moya"),
.external(name: "SnapKit"),
.external(name: "RxSwift"),
.external(name: "Then"),
.external(name: "ReactorKit"),
.external(name: "RxCocoa"),
.external(name: "RxDataSources"),
.external(name: "RxGesture"),
.external(name: "KakaoSDKCommon"),
.external(name: "KakaoSDKAuth"),
.external(name: "KakaoSDKUser"),
.external(name: "NMapsMap"),
.external(name: "SwiftKeychainWrapper")
]
let infoPlist: [String: InfoPlist.Value] = [
"CFBundleVersion": "1",
"UILaunchStoryboardName": "LaunchScreen",
"UIApplicationSceneManifest": [
"UIApplicationSupportsMultipleScenes": false,
"UISceneConfigurations": [
"UIWindowSceneSessionRoleApplication": [
[
"UISceneConfigurationName": "Default Configuration",
"UISceneDelegateClassName": "$(PRODUCT_MODULE_NAME).SceneDelegate"
],
]
]
],
"NSLocationAlwaysAndWhenInUseUsageDescription": "사용자의 위치를 받습니다.",
"NSLocationWhenInUseUsageDescription": "사용자의 위치를 받습니다.",
"NSLocationUsageDescription": "사용자의 위치를 받습니다.",
"UIUserInterfaceStyle": "Light",
"API_BASE_URL": "$(ROOT_URL)",
"KAKAO_APP_KEY": "$(KAKAO_APP_KEY)",
"LSApplicationQueriesSchemes": ["kakaokompassauth", "kakaolink"],
"CFBundleURLTypes": [
[
"CFBundleTypeRole": "Editor",
"CFBundleURLSchemes": ["kakao$(KAKAO_APP_KEY)"]
]
],
"NMFClientId": "$(NAVER_CLIENT_ID)"
]
func generateTarget() -> [Target] {
[
Target(
name: projectName,
platform: .iOS,
product: .app,
bundleId: "com.\(projectName)",
infoPlist: .extendingDefault(with: infoPlist),
sources: ["FootprintIOS/FootprintIOS/Sources/**"],
resources: ["FootprintIOS/FootprintIOS/Resources/**"],
dependencies: dependencies
),
Target(
name: "\(projectName)Tests",
platform: .iOS,
product: .unitTests,
bundleId: "com.\(projectName)Tests",
infoPlist: .default,
sources: ["FootprintIOS/FootprintIOS/Tests/**"],
dependencies: [
.target(name: projectName)
]
)
]
}
func generateConfigurations() -> Settings {
Settings.settings(configurations: [
.debug(name: "Develop", xcconfig: .relativeToRoot("FootprintIOS/FootprintIOS/Sources/Config/Develop.xcconfig")),
.release(name: "Production", xcconfig: .relativeToRoot("FootprintIOS/FootprintIOS/Sources/Config/Production.xcconfig")),
])
}
}
// MARK: - project
let factory = BaseProjectFactory()
let project: Project = .init(
name: factory.projectName,
organizationName: factory.projectName,
settings: factory.generateConfigurations(),
targets: factory.generateTarget()
)