From 552c50271ec7a493ef0aede1b08316aba1c4e90e Mon Sep 17 00:00:00 2001 From: Roy-wonji Date: Sun, 17 Dec 2023 16:03:30 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8[feat]:=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=20scaffold=20=20=EC=B6=94=EA=B0=80=20=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * scaffold 추가 * module path 추가 * stencill 추기 --- BeatCounter/.tuist-version | 1 + BeatCounter/Makefile | 31 ++++ .../Extension+TargetDependency.swift | 16 ++ .../Project+Templates.swift | 67 --------- .../Project+Templete/Project+Templates.swift | 139 ++++++++++++++++++ .../ResourceFileElements+Templete.swift | 14 ++ .../SourceFilesList+Template.swift | 13 ++ .../TargetDependency+Module/Modules.swift | 65 ++++++++ .../Path+Modules.swift | 66 +++++++++ .../TargetDependency+Modules.swift | 52 +++++++ .../App/BeatCounterTests/Sources/test.swift | 0 BeatCounter/Projects/App/Project.swift | 4 +- .../AuthorizationTests/Sources/test.swift | 0 .../Projects/Core/Authorization/Project.swift | 8 +- .../NetworkingTests/Sources/test.swift | 0 .../Projects/Core/Networking/Project.swift | 3 +- .../DesignSystemTests/Sources/Test.swift | 8 + .../Shared/DesignSystem/Project.swift | 16 ++ .../Shared/DesignSystem/Sources/Base.swift | 22 +++ BeatCounter/README.md | 103 +++++++++++++ BeatCounter/Tuist/Dependencies.swift | 18 +++ .../Tuist/Templates/Module/Module.swift | 75 ++++++++++ .../Tuist/Templates/Module/Project.stencil | 16 ++ .../Tuist/Templates/Module/base.stencil | 22 +++ .../Tuist/Templates/Module/test.stencil | 8 + BeatCounter/WorkSpace.swift | 18 ++- 26 files changed, 705 insertions(+), 80 deletions(-) create mode 100644 BeatCounter/.tuist-version create mode 100644 BeatCounter/Makefile create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift delete mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templates.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/Project+Templates.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift create mode 100644 BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift create mode 100644 BeatCounter/Projects/App/BeatCounterTests/Sources/test.swift create mode 100644 BeatCounter/Projects/Core/Authorization/AuthorizationTests/Sources/test.swift create mode 100644 BeatCounter/Projects/Core/Networking/NetworkingTests/Sources/test.swift create mode 100644 BeatCounter/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift create mode 100644 BeatCounter/Projects/Shared/DesignSystem/Project.swift create mode 100644 BeatCounter/Projects/Shared/DesignSystem/Sources/Base.swift create mode 100644 BeatCounter/README.md create mode 100644 BeatCounter/Tuist/Dependencies.swift create mode 100644 BeatCounter/Tuist/Templates/Module/Module.swift create mode 100644 BeatCounter/Tuist/Templates/Module/Project.stencil create mode 100644 BeatCounter/Tuist/Templates/Module/base.stencil create mode 100644 BeatCounter/Tuist/Templates/Module/test.stencil diff --git a/BeatCounter/.tuist-version b/BeatCounter/.tuist-version new file mode 100644 index 0000000..ddd7c8a --- /dev/null +++ b/BeatCounter/.tuist-version @@ -0,0 +1 @@ +3.33.3 diff --git a/BeatCounter/Makefile b/BeatCounter/Makefile new file mode 100644 index 0000000..96970e0 --- /dev/null +++ b/BeatCounter/Makefile @@ -0,0 +1,31 @@ +GENERATE = tuist generate +FETCH = tuist fetch +BUILD = tuist build +CLEAN = tuist clean +CURRENT_DATE = $(shell run scripts/current_date.swift) + +# Define your targets and dependencies + +.PHONY: generate +generate: + TUIST_ROOT_DIR=${PWD} $(GENERATE) + +.PHONY: build +build: $(CLEAN) $(FETCH) $(FETCH) TUIST_ROOT_DIR=${PWD} $(GENERATE) + +.PHONY: clean +clean: + $(CLEAN) + +.PHONY: fetch +fetch: + $(FETCH) + +module: + tuist scaffold Module \ + --layer ${layer} \ + --name ${name} \ + --author "서원지" + + +# Additional targets can be added as needed diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift new file mode 100644 index 0000000..e965c9a --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift @@ -0,0 +1,16 @@ +// +// Extension+TargetDependency.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import ProjectDescription + +public extension TargetDependency { + enum SPM {} +} + +public extension TargetDependency.SPM { + +} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templates.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templates.swift deleted file mode 100644 index 727fa83..0000000 --- a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templates.swift +++ /dev/null @@ -1,67 +0,0 @@ -// -// Project+Template.swift -// MyPlugin -// -// Created by Gordon Choi on 12/10/23. -// - -import ProjectDescription - -public extension Project { - public enum Environment { - public static let appName = "BeatCounter" - public static let organizationName = "" // and so on - public static let deploymentTarget = DeploymentTarget.iOS(targetVersion: "17.0", devices: [.iphone, .ipad]) - public static let bundlePrefix = "com." // and so on - public static let appVersion = "1.0.0" - public static let mainBundleId = "com.BeatCounter" - } -} - -public extension Project { - static func makeAppModule( - name: String = Environment.appName, - bundleId: String, - platform: Platform = .iOS, - product: Product, - organizationName: String = Environment.organizationName, - packages: [Package] = [], - deploymentTarget: DeploymentTarget = Environment.deploymentTarget, - settings: Settings, - dependencies: [TargetDependency] = [], - sources: SourceFilesList = .sources, - resources: ResourceFileElements? = nil, - infoPlist: InfoPlist = .default, - entitlements: Entitlements? = nil, - schemes: [Scheme] = [] - ) -> Project { - let appTarget = Target( - name: name, - platform: platform, - product: product, - bundleId: bundleId, - deploymentTarget: deploymentTarget, - infoPlist: infoPlist, - sources: sources, - resources: resources, - entitlements: entitlements, - scripts: [], - dependencies: dependencies - ) - - let targets = [appTarget] - - return Project( - name: name, - organizationName: organizationName, - packages: packages, - settings: settings, - targets: targets, - schemes: schemes - ) - } -} - -public extension SourceFilesList { - static let sources: SourceFilesList = "Sources/**" -} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/Project+Templates.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/Project+Templates.swift new file mode 100644 index 0000000..7113fdd --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/Project+Templates.swift @@ -0,0 +1,139 @@ +// +// Project+Template.swift +// MyPlugin +// +// Created by Gordon Choi on 12/10/23. +// + +import ProjectDescription + +public extension Project { + public enum Environment { + public static let appName = "BeatCounter" + public static let organizationName = "" // and so on + public static let deploymentTarget = DeploymentTarget.iOS(targetVersion: "17.0", devices: [.iphone, .ipad]) + public static let bundlePrefix = "com." // and so on + public static let appVersion = "1.0.0" + public static let mainBundleId = "com.BeatCounter" + } +} + +public extension Project { + static func makeAppModule( + name: String = Environment.appName, + bundleId: String, + platform: Platform = .iOS, + product: Product, + organizationName: String = Environment.organizationName, + packages: [Package] = [], + deploymentTarget: DeploymentTarget = Environment.deploymentTarget, + settings: Settings, + dependencies: [TargetDependency] = [], + sources: SourceFilesList = .sources, + resources: ResourceFileElements? = nil, + infoPlist: InfoPlist = .default, + entitlements: Entitlements? = nil, + schemes: [Scheme] = [] + ) -> Project { + let appTarget = Target( + name: name, + platform: platform, + product: product, + bundleId: bundleId, + deploymentTarget: deploymentTarget, + infoPlist: infoPlist, + sources: sources, + resources: resources, + entitlements: entitlements, + scripts: [], + dependencies: dependencies + ) + + let appDevTarget = Target( + name: "\(name)-Dev", + platform: .iOS, + product: product, + bundleId: "\(bundleId)", + deploymentTarget: deploymentTarget, + infoPlist: infoPlist, + sources: sources, + resources: resources, + entitlements: entitlements, + scripts: [], + dependencies: dependencies + + ) + + let appTestTarget = Target( + name: "\(name)Tests", + platform: platform, + product: .unitTests, + bundleId: "\(bundleId).\(name)Tests", + deploymentTarget: deploymentTarget, + infoPlist: .default, + sources: ["\(name)Tests/Sources/**"], + dependencies: [.target(name: name)] + ) + + let targets = [appTarget, appDevTarget, appTestTarget] + + return Project( + name: name, + organizationName: organizationName, + packages: packages, + settings: settings, + targets: targets, + schemes: schemes + ) + } +} + + +extension Scheme { + public static func makeScheme(target: ConfigurationName, name: String) -> Scheme { + return Scheme( + name: name, + shared: true, + buildAction: .buildAction(targets: ["\(name)"]), + testAction: .targets( + ["\(name)Tests"], + configuration: target, + options: .options(coverage: true, codeCoverageTargets: ["\(name)"]) + ), + runAction: .runAction(configuration: target), + archiveAction: .archiveAction(configuration: target), + profileAction: .profileAction(configuration: target), + analyzeAction: .analyzeAction(configuration: target) + ) + } + +} + + +extension String { + public static func appVersion() -> String { + let version: String = "1.0.0" + return version + } + + public static func watchAppVersion() -> String { + let version: String = "1.0.0" + return version + } + + public static func appBuildVersion() -> String { + let buildVersion: String = "10" + return buildVersion + } + + public static func mainBundleID() -> String { + let bundleID = "com.BeatCounter" + return bundleID + } + + public static func appBundleID(name: String) -> String { + let bundleID = "com.BeatCounter\(name)" + return bundleID+name + } + +} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift new file mode 100644 index 0000000..74e0268 --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift @@ -0,0 +1,14 @@ +// +// ResourceFileElements+Templete.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + + +public extension ResourceFileElements { + static let resources: ResourceFileElements = "Resources/**" +} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift new file mode 100644 index 0000000..34526c9 --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift @@ -0,0 +1,13 @@ +// +// SourceFilesList+Template.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + +public extension SourceFilesList { + static let sources: SourceFilesList = "Sources/**" +} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift new file mode 100644 index 0000000..b88ad0e --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift @@ -0,0 +1,65 @@ +// +// Modules.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + +public enum ModulePath { + case Feature(Features) + case Core(Cores) + case Networking(Networkings) + case Shared(Shareds) +} + +//MARK: - 앱 모듈 +public extension ModulePath { + enum App: String, CaseIterable { + case iOS + case iPad + + public static let name: String = "App" + } +} + +// MARK: FeatureModule +public extension ModulePath { + enum Features: String, CaseIterable { + case Auth + + public static let name: String = "Feature" + } +} + +//MARK: - CoreMoudule +public extension ModulePath { + enum Cores: String, CaseIterable { + case Core + case Authorization + case Station + + public static let name: String = "Core" + } +} + +//MARK: - CoreDomainModule +public extension ModulePath { + enum Networkings: String, CaseIterable { + case Model + case Service + public static let name: String = "Networking" + } +} + +public extension ModulePath { + enum Shareds: String, CaseIterable { + case DesignSystem + case Constants + case ThirdParty + + public static let name: String = "Shared" + } +} diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift new file mode 100644 index 0000000..a15f7f6 --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift @@ -0,0 +1,66 @@ +// +// Path+Modules.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + +// MARK: ProjectDescription.Path + App +public extension ProjectDescription.Path { + static var app: Self { + return .relativeToRoot("Projects/\(ModulePath.App.name)") + } +} + + +// MARK: ProjectDescription.Path + Feature +public extension ProjectDescription.Path { + static var Feature: Self { + return .relativeToRoot("Projects/\(ModulePath.Features.name)") + } + + static func Feature(implementation module: ModulePath.Features) -> Self { + return .relativeToRoot("Projects/\(ModulePath.Features.name)/\(module.rawValue)") + } +} + +// MARK: ProjectDescription.Path + Core +public extension ProjectDescription.Path { + static var Core: Self { + return .relativeToRoot("Projects/\(ModulePath.Cores.name)") + } + + static func Core(implementation module: ModulePath.Cores) -> Self { + return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(module.rawValue)") + } +} + + +// MARK: ProjectDescription.Path + DesignSystem + +public extension ProjectDescription.Path { + static var Shared: Self { + return .relativeToRoot("Projects/\(ModulePath.Shareds.name)") + } + + static func Shared(implementation module: ModulePath.Shareds) -> Self { + return .relativeToRoot("Projects/\(module.rawValue)") + } +} + +// MARK: ProjectDescription.Path + Domain + +public extension ProjectDescription.Path { + static var Networking: Self { + return .relativeToRoot("Projects/\(ModulePath.Networkings.name)/\(ModulePath.Networkings.name)") + } + + static func Networking(implementation module: ModulePath.Networkings) -> Self { + return .relativeToRoot("Projects/\(ModulePath.Networkings.name)/\(ModulePath.Networkings.name)/\(module.rawValue)") + } +} + + diff --git a/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift new file mode 100644 index 0000000..d037dd1 --- /dev/null +++ b/BeatCounter/Plugins/BeatCounter/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift @@ -0,0 +1,52 @@ +// +// TargetDependency+Modules.swift +// MyPlugin +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + +// MARK: TargetDependency + App + +public extension TargetDependency { + static var app: Self { + return .project(target: ModulePath.App.name, path: .app) + } + + static func app(implements module: ModulePath.App) -> Self { + return .target(name: ModulePath.App.name + module.rawValue) + } +} + +// MARK: TargetDependency + Feature +public extension TargetDependency { + static func Feature(implements module: ModulePath.Features) -> Self { + return .project(target: module.rawValue, path: .Feature(implementation: module)) + } +} + +// MARK: TargetDependency + Design +public extension TargetDependency { + static func Shared(implements module: ModulePath.Shareds) -> Self { + return .project(target: module.rawValue, path: .Shared(implementation: module)) + } +} + +// MARK: TargetDependency + Core +public extension TargetDependency { + static func Core(implements module: ModulePath.Cores) -> Self { + return .project(target: module.rawValue, path: .Core(implementation: module)) + } +} + + +// MARK: TargetDependency + Domain + +public extension TargetDependency { + static func Networking(implements module: ModulePath.Networkings) -> Self { + return .project(target: module.rawValue, path: .Networking(implementation: module)) + } +} + diff --git a/BeatCounter/Projects/App/BeatCounterTests/Sources/test.swift b/BeatCounter/Projects/App/BeatCounterTests/Sources/test.swift new file mode 100644 index 0000000..e69de29 diff --git a/BeatCounter/Projects/App/Project.swift b/BeatCounter/Projects/App/Project.swift index f68dc21..909d786 100644 --- a/BeatCounter/Projects/App/Project.swift +++ b/BeatCounter/Projects/App/Project.swift @@ -8,5 +8,7 @@ let localHelper = LocalHelper(name: "MyPlugin") let project = Project.makeAppModule( bundleId: Project.Environment.appName, product: .app, - settings: .settings() + packages: [], + settings: .settings(), + dependencies: [] ) diff --git a/BeatCounter/Projects/Core/Authorization/AuthorizationTests/Sources/test.swift b/BeatCounter/Projects/Core/Authorization/AuthorizationTests/Sources/test.swift new file mode 100644 index 0000000..e69de29 diff --git a/BeatCounter/Projects/Core/Authorization/Project.swift b/BeatCounter/Projects/Core/Authorization/Project.swift index 79f59dd..f13264f 100644 --- a/BeatCounter/Projects/Core/Authorization/Project.swift +++ b/BeatCounter/Projects/Core/Authorization/Project.swift @@ -2,10 +2,12 @@ import ProjectDescription import MyPlugin // Local plugin loaded - +let localHelper = LocalHelper(name: "MyPlugin") // Creates our project using a helper function defined in ProjectDescriptionHelpers let project = Project.makeAppModule( - bundleId: "Authorization", + name: "Authorization", + bundleId: ".Authorization", product: .staticFramework, - settings: .settings() + settings: .settings(), + dependencies: [] ) diff --git a/BeatCounter/Projects/Core/Networking/NetworkingTests/Sources/test.swift b/BeatCounter/Projects/Core/Networking/NetworkingTests/Sources/test.swift new file mode 100644 index 0000000..e69de29 diff --git a/BeatCounter/Projects/Core/Networking/Project.swift b/BeatCounter/Projects/Core/Networking/Project.swift index 90747da..caee728 100644 --- a/BeatCounter/Projects/Core/Networking/Project.swift +++ b/BeatCounter/Projects/Core/Networking/Project.swift @@ -6,7 +6,8 @@ let localHelper = LocalHelper(name: "MyPlugin") // Creates our project using a helper function defined in ProjectDescriptionHelpers let project = Project.makeAppModule( - bundleId: "Networking", + name: "Networking", + bundleId: ".Networking", product: .staticFramework, settings: .settings(), dependencies: [] diff --git a/BeatCounter/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift b/BeatCounter/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift new file mode 100644 index 0000000..061b928 --- /dev/null +++ b/BeatCounter/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift @@ -0,0 +1,8 @@ +// +// base.swift +// ChaeviUS +// +// Created by 서원지 on 2023/12/17 +// Copyright © 2023 Team.hae.jo , Ltd. All rights reserved. +// + diff --git a/BeatCounter/Projects/Shared/DesignSystem/Project.swift b/BeatCounter/Projects/Shared/DesignSystem/Project.swift new file mode 100644 index 0000000..dfeb314 --- /dev/null +++ b/BeatCounter/Projects/Shared/DesignSystem/Project.swift @@ -0,0 +1,16 @@ +import Foundation +import ProjectDescription +import MyPlugin + +let localHelper = LocalHelper(name: "MyPlugin") + +let project = Project.makeAppModule( +name: "DesignSystem", +bundleId: .appBundleID(name: "DesignSystem"), +product: .staticFramework, +settings: .settings(), +dependencies: [ + +], +sources: ["Sources/**"] +) diff --git a/BeatCounter/Projects/Shared/DesignSystem/Sources/Base.swift b/BeatCounter/Projects/Shared/DesignSystem/Sources/Base.swift new file mode 100644 index 0000000..e18f270 --- /dev/null +++ b/BeatCounter/Projects/Shared/DesignSystem/Sources/Base.swift @@ -0,0 +1,22 @@ +// +// base.swift +// ChaeviUS +// +// Created by 서원지 on 2023/12/17 +// Copyright © 2023 Team.hae.jo, All rights reserved. +// + +import SwiftUI + +struct BaseView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + } + .padding() + } +} + diff --git a/BeatCounter/README.md b/BeatCounter/README.md new file mode 100644 index 0000000..c073b5f --- /dev/null +++ b/BeatCounter/README.md @@ -0,0 +1,103 @@ +## Tuist Usage +1. Install tuist + +```swift +curl -Ls https://install.tuist.io | bash +``` +2. Generate project + +```swift +tuist clean // optional +tuist fetch // optional +tuist generate +``` + +## 🌟 Team +|Team mentor|Developer|Designer|Designer|Developer|Developer| +|:---:|:---:|:---:|:---:|:---:|:---:| + + +## 기술 스택 +- iOS + + + + + + + + +- Communication + + + +- VCS + + + +## 🐈‍⬛ Git + +### 1️⃣ Git branching Strategy + +- Origin(main branch) +- Origin(dev branch) +- Local(feature branch) + +- Branch +- Main +- Dev +- Feature +- Fix + +- 방법 +- 1. Pull the **Dev** branch of the Origin +- 2. Make a **Feature** branch in the Local area +- 3. Developed by **Feature** branch +- 4. Push the **Feature** from Local to Origin +- 5. Send a pull request from the origin's **Feature** to the Origin's **Dev** +- 6. In Origin **Dev**, resolve conflict and merge +- 7. Fetch and rebase Origin **Dev** from Local **Dev** + + + + + +## Commit 규칙 +> 커밋 제목은 최대 50자 입력
+본문은 한 줄 최대 72자 입력
+Commit 메세지
+ +🪛[chore]: 코드 수정, 내부 파일 수정.
+✨[feat]: 새로운 기능 구현.
+🎨[style]: 스타일 관련 기능.(코드의 구조/형태 개선)
+➕[add]: Feat 이외의 부수적인 코드 추가, 라이브러리 추가
+🔧[file]: 새로운 파일 생성, 삭제 시
+🐛[fix]: 버그, 오류 해결.
+🔥[del]: 쓸모없는 코드/파일 삭제.
+📝[docs]: README나 WIKI 등의 문서 개정.
+💄[mod]: storyboard 파일,UI 수정한 경우.
+✏️[correct]: 주로 문법의 오류나 타입의 변경, 이름 변경 등에 사용합니다.
+🚚[move]: 프로젝트 내 파일이나 코드(리소스)의 이동.
+⏪️[rename]: 파일 이름 변경이 있을 때 사용합니다.
+⚡️[improve]: 향상이 있을 때 사용합니다.
+♻️[refactor]: 전면 수정이 있을 때 사용합니다.
+🔀[merge]: 다른브렌치를 merge 할 때 사용합니다.
+✅ [test]: 테스트 코드를 작성할 때 사용합니다.
+ +
+ +### Commit Body 규칙 +> 제목 끝에 마침표(.) 금지
+한글로 작성
+브랜치 이름 규칙 + +- `STEP1`, `STEP2`, `STEP3` + +
+ +## Git flow +- `main` 브랜 치는 앱 출시 +- `Dev`는 테스트 및 각종 파일 merge +- 각 스텝 뱔로 브런치 생성해서 관리 + + diff --git a/BeatCounter/Tuist/Dependencies.swift b/BeatCounter/Tuist/Dependencies.swift new file mode 100644 index 0000000..4455df2 --- /dev/null +++ b/BeatCounter/Tuist/Dependencies.swift @@ -0,0 +1,18 @@ +// +// Dependencies.swift +// Manifests +// +// Created by 서원지 on 12/17/23. +// + +import Foundation +import ProjectDescription + +let swiftpackage = SwiftPackageManagerDependencies([ + +]) + +let dependencie = Dependencies( + swiftPackageManager: swiftpackage, + platforms: [.iOS] +) diff --git a/BeatCounter/Tuist/Templates/Module/Module.swift b/BeatCounter/Tuist/Templates/Module/Module.swift new file mode 100644 index 0000000..f26f26d --- /dev/null +++ b/BeatCounter/Tuist/Templates/Module/Module.swift @@ -0,0 +1,75 @@ +// +// Module.swift +// Manifests +// +// Created by 서원지 on 10/31/23. +// + +import ProjectDescription +import Foundation + +let layer = Template.Attribute.required("layer") +let name = Template.Attribute.required("name") +let author: Template.Attribute = .required("author") +let currentDate: Template.Attribute = .optional("currentDate", default: defaultDate) +let year: Template.Attribute = .optional("year", default: defaultYear) + +let template = Template( + description: "A template for a new modules", + attributes: [ +// path, + layer, + name, + author, + currentDate, + year + ], + items: ModuleTemplate.allCases.map { $0.item } + +) + + +enum ModuleTemplate: CaseIterable { + case project + case baseFile + case testProject + + var item: Template.Item { + switch self { + case .project: + return .file(path: .basePath + "/Project.swift", templatePath: "Project.stencil") + + case .baseFile: + return .file(path: .basePath + "/Sources/Base.swift", templatePath: "base.stencil") + + case .testProject: + return .file(path: .testBasePath + "/Sources/Test.swift", templatePath: "test.stencil") + + } + } +} + + +extension String { + static var basePath: Self { + return "Projects/\(layer)/\(name)" + } + static var testBasePath: Self { + return "Projects/\(layer)/\(name)/\(name)Tests" + } +} + + +var defaultDate: String { + let today = Date() + let formatter = DateFormatter() + formatter.dateFormat = "yyyy/MM/dd" + let formattedDate = formatter.string(from: today) + return formattedDate +} + +var defaultYear: String { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy" + return dateFormatter.string(from: Date()) +} diff --git a/BeatCounter/Tuist/Templates/Module/Project.stencil b/BeatCounter/Tuist/Templates/Module/Project.stencil new file mode 100644 index 0000000..8336b8f --- /dev/null +++ b/BeatCounter/Tuist/Templates/Module/Project.stencil @@ -0,0 +1,16 @@ +import Foundation +import ProjectDescription +import MyPlugin + +let localHelper = LocalHelper(name: "MyPlugin") + +let project = Project.makeAppModule( +name: "{{ name }}", +bundleId: .appBundleID(name: ".{{name}}"), +product: .staticFramework, +setting: .settings(), +dependencies: [ + +], +sources: ["Sources/**"] +) diff --git a/BeatCounter/Tuist/Templates/Module/base.stencil b/BeatCounter/Tuist/Templates/Module/base.stencil new file mode 100644 index 0000000..556ee1a --- /dev/null +++ b/BeatCounter/Tuist/Templates/Module/base.stencil @@ -0,0 +1,22 @@ +// +// base.swift +// ChaeviUS +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} Team.hae.jo, All rights reserved. +// + +import SwiftUI + +struct BaseView: View { + var body: some View { + VStack { + Image(systemName: "globe") + .imageScale(.large) + .foregroundColor(.accentColor) + Text("Hello, world!") + } + .padding() + } +} + diff --git a/BeatCounter/Tuist/Templates/Module/test.stencil b/BeatCounter/Tuist/Templates/Module/test.stencil new file mode 100644 index 0000000..6d194a4 --- /dev/null +++ b/BeatCounter/Tuist/Templates/Module/test.stencil @@ -0,0 +1,8 @@ +// +// base.swift +// ChaeviUS +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} Team.hae.jo , Ltd. All rights reserved. +// + diff --git a/BeatCounter/WorkSpace.swift b/BeatCounter/WorkSpace.swift index 6be69b2..ff35781 100644 --- a/BeatCounter/WorkSpace.swift +++ b/BeatCounter/WorkSpace.swift @@ -1,16 +1,18 @@ // -// WorkSpace.swift -// ProjectDescriptionHelpers +// Workspace.swift +// Manifests // -// Created by 염성훈 on 12/10/23. +// Created by 서원지 on 12/17/23. // -import Foundation import ProjectDescription import MyPlugin +let localHelper = LocalHelper(name: "MyPlugin") + +let workspace = Workspace( +name: Project.Environment.appName, +projects: [ + "Projects/**" +]) -let workSpace = Workspace( - name: Project.Environment.appName, - projects: ["Projects/**"] -)