diff --git a/.gitignore b/.gitignore
index ace31153..dae2a165 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,8 @@ Pods/
xcuserdata/
.DS_Store/
+*.Gemfile
+*,lock
*.p8
*.env
*.cer
@@ -54,6 +56,8 @@ xcuserdata/
*.Signing/
*.key
*.encrypted
+*.mobileprovision
+*.pingpong.co.mobileprovision
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
diff --git a/PingPong/AppStore_com.pingpong.co.mobileprovision b/PingPong/AppStore_com.pingpong.co.mobileprovision
new file mode 100644
index 00000000..82a17c3b
Binary files /dev/null and b/PingPong/AppStore_com.pingpong.co.mobileprovision differ
diff --git a/PingPong/Gemfile b/PingPong/Gemfile
new file mode 100644
index 00000000..7a118b49
--- /dev/null
+++ b/PingPong/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "fastlane"
diff --git a/PingPong/Gemfile.lock b/PingPong/Gemfile.lock
new file mode 100644
index 00000000..7621bef2
--- /dev/null
+++ b/PingPong/Gemfile.lock
@@ -0,0 +1,218 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (3.0.6)
+ rexml
+ addressable (2.8.4)
+ public_suffix (>= 2.0.2, < 6.0)
+ artifactory (3.0.15)
+ atomos (0.1.3)
+ aws-eventstream (1.2.0)
+ aws-partitions (1.777.0)
+ aws-sdk-core (3.174.0)
+ aws-eventstream (~> 1, >= 1.0.2)
+ aws-partitions (~> 1, >= 1.651.0)
+ aws-sigv4 (~> 1.5)
+ jmespath (~> 1, >= 1.6.1)
+ aws-sdk-kms (1.66.0)
+ aws-sdk-core (~> 3, >= 3.174.0)
+ aws-sigv4 (~> 1.1)
+ aws-sdk-s3 (1.123.1)
+ aws-sdk-core (~> 3, >= 3.174.0)
+ aws-sdk-kms (~> 1)
+ aws-sigv4 (~> 1.4)
+ aws-sigv4 (1.5.2)
+ aws-eventstream (~> 1, >= 1.0.2)
+ babosa (1.0.4)
+ claide (1.1.0)
+ colored (1.2)
+ colored2 (3.1.2)
+ commander (4.6.0)
+ highline (~> 2.0.0)
+ declarative (0.0.20)
+ digest-crc (0.6.4)
+ rake (>= 12.0.0, < 14.0.0)
+ domain_name (0.5.20190701)
+ unf (>= 0.0.5, < 1.0.0)
+ dotenv (2.8.1)
+ emoji_regex (3.2.3)
+ excon (0.100.0)
+ faraday (1.10.3)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-cookie_jar (0.0.7)
+ faraday (>= 0.8.0)
+ http-cookie (~> 1.0.0)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.0.4)
+ multipart-post (~> 2)
+ faraday-net_http (1.0.1)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.0)
+ faraday (~> 1.0)
+ fastimage (2.2.7)
+ fastlane (2.213.0)
+ CFPropertyList (>= 2.3, < 4.0.0)
+ addressable (>= 2.8, < 3.0.0)
+ artifactory (~> 3.0)
+ aws-sdk-s3 (~> 1.0)
+ babosa (>= 1.0.3, < 2.0.0)
+ bundler (>= 1.12.0, < 3.0.0)
+ colored
+ commander (~> 4.6)
+ dotenv (>= 2.1.1, < 3.0.0)
+ emoji_regex (>= 0.1, < 4.0)
+ excon (>= 0.71.0, < 1.0.0)
+ faraday (~> 1.0)
+ faraday-cookie_jar (~> 0.0.6)
+ faraday_middleware (~> 1.0)
+ fastimage (>= 2.1.0, < 3.0.0)
+ gh_inspector (>= 1.1.2, < 2.0.0)
+ google-apis-androidpublisher_v3 (~> 0.3)
+ google-apis-playcustomapp_v1 (~> 0.1)
+ google-cloud-storage (~> 1.31)
+ highline (~> 2.0)
+ json (< 3.0.0)
+ jwt (>= 2.1.0, < 3)
+ mini_magick (>= 4.9.4, < 5.0.0)
+ multipart-post (>= 2.0.0, < 3.0.0)
+ naturally (~> 2.2)
+ optparse (~> 0.1.1)
+ plist (>= 3.1.0, < 4.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
+ security (= 0.1.3)
+ simctl (~> 1.6.3)
+ terminal-notifier (>= 2.0.0, < 3.0.0)
+ terminal-table (>= 1.4.5, < 2.0.0)
+ tty-screen (>= 0.6.3, < 1.0.0)
+ tty-spinner (>= 0.8.0, < 1.0.0)
+ word_wrap (~> 1.0.0)
+ xcodeproj (>= 1.13.0, < 2.0.0)
+ xcpretty (~> 0.3.0)
+ xcpretty-travis-formatter (>= 0.0.3)
+ gh_inspector (1.1.3)
+ google-apis-androidpublisher_v3 (0.43.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-core (0.11.0)
+ addressable (~> 2.5, >= 2.5.1)
+ googleauth (>= 0.16.2, < 2.a)
+ httpclient (>= 2.8.1, < 3.a)
+ mini_mime (~> 1.0)
+ representable (~> 3.0)
+ retriable (>= 2.0, < 4.a)
+ rexml
+ webrick
+ google-apis-iamcredentials_v1 (0.17.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-playcustomapp_v1 (0.13.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-storage_v1 (0.19.0)
+ google-apis-core (>= 0.9.0, < 2.a)
+ google-cloud-core (1.6.0)
+ google-cloud-env (~> 1.0)
+ google-cloud-errors (~> 1.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
+ google-cloud-errors (1.3.1)
+ google-cloud-storage (1.44.0)
+ addressable (~> 2.8)
+ digest-crc (~> 0.4)
+ google-apis-iamcredentials_v1 (~> 0.1)
+ google-apis-storage_v1 (~> 0.19.0)
+ google-cloud-core (~> 1.6)
+ googleauth (>= 0.16.2, < 2.a)
+ mini_mime (~> 1.0)
+ googleauth (1.5.2)
+ faraday (>= 0.17.3, < 3.a)
+ jwt (>= 1.4, < 3.0)
+ memoist (~> 0.16)
+ multi_json (~> 1.11)
+ os (>= 0.9, < 2.0)
+ signet (>= 0.16, < 2.a)
+ highline (2.0.3)
+ http-cookie (1.0.5)
+ domain_name (~> 0.5)
+ httpclient (2.8.3)
+ jmespath (1.6.2)
+ json (2.6.3)
+ jwt (2.7.1)
+ memoist (0.16.2)
+ mini_magick (4.12.0)
+ mini_mime (1.1.2)
+ multi_json (1.15.0)
+ multipart-post (2.3.0)
+ nanaimo (0.3.0)
+ naturally (2.2.1)
+ optparse (0.1.1)
+ os (1.1.4)
+ plist (3.7.0)
+ public_suffix (5.0.1)
+ rake (13.0.6)
+ representable (3.2.0)
+ declarative (< 0.1.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
+ uber (< 0.2.0)
+ retriable (3.1.2)
+ rexml (3.2.5)
+ rouge (2.0.7)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.3.2)
+ security (0.1.3)
+ signet (0.17.0)
+ addressable (~> 2.8)
+ faraday (>= 0.17.5, < 3.a)
+ jwt (>= 1.5, < 3.0)
+ multi_json (~> 1.10)
+ simctl (1.6.10)
+ CFPropertyList
+ naturally
+ terminal-notifier (2.0.0)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
+ trailblazer-option (0.1.2)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.1)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
+ uber (0.1.0)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.8.2)
+ unicode-display_width (1.8.0)
+ webrick (1.8.1)
+ word_wrap (1.0.0)
+ xcodeproj (1.22.0)
+ CFPropertyList (>= 2.3.3, < 4.0)
+ atomos (~> 0.1.3)
+ claide (>= 1.0.2, < 2.0)
+ colored2 (~> 3.1)
+ nanaimo (~> 0.3.0)
+ rexml (~> 3.2.4)
+ xcpretty (0.3.0)
+ rouge (~> 2.0.7)
+ xcpretty-travis-formatter (1.0.1)
+ xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+ x86_64-darwin-22
+
+DEPENDENCIES
+ fastlane
+
+BUNDLED WITH
+ 2.4.7
diff --git a/PingPong/Plugins/ChaeviTuist/Package.swift b/PingPong/Plugins/PingPongs/Package.swift
similarity index 100%
rename from PingPong/Plugins/ChaeviTuist/Package.swift
rename to PingPong/Plugins/PingPongs/Package.swift
diff --git a/PingPong/Plugins/ChaeviTuist/Plugin.swift b/PingPong/Plugins/PingPongs/Plugin.swift
similarity index 100%
rename from PingPong/Plugins/ChaeviTuist/Plugin.swift
rename to PingPong/Plugins/PingPongs/Plugin.swift
diff --git a/PingPong/Tuist/ProjectDescriptionHelpers/Dependency+Project.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+Project.swift
similarity index 70%
rename from PingPong/Tuist/ProjectDescriptionHelpers/Dependency+Project.swift
rename to PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+Project.swift
index 7c32554c..9513b82e 100644
--- a/PingPong/Tuist/ProjectDescriptionHelpers/Dependency+Project.swift
+++ b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+Project.swift
@@ -1,8 +1,8 @@
//
// Dependency+Project.swift
-// ProjectDescriptionHelpers
+// Config
//
-// Created by 서원지 on 2023/05/22.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
@@ -12,6 +12,8 @@ public extension TargetDependency {
}
public extension TargetDependency.Projcet {
+ static let HomeApp = TargetDependency.project(target: "HomeApp", path: .relativeToRoot("Projects/HomeApp"))
static let Network = TargetDependency.project(target: "Network", path: .relativeToRoot("Projects/Network"))
static let Component = TargetDependency.project(target: "Component", path: .relativeToRoot("Projects/Component"))
}
+
diff --git a/PingPong/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+SPM.swift
similarity index 88%
rename from PingPong/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift
rename to PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+SPM.swift
index 416dd347..957ea7be 100644
--- a/PingPong/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift
+++ b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Dependency+SPM.swift
@@ -1,8 +1,8 @@
//
// Dependency+SPM.swift
-// ProjectDescriptionHelpers
+// Config
//
-// Created by 서원지 on 2023/05/22.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
@@ -17,7 +17,8 @@ public extension TargetDependency.SPM {
static let CombineMoya = TargetDependency.external(name: "CombineMoya")
static let PopupView = TargetDependency.external(name: "PopupView")
static let Kingfisher = TargetDependency.external(name: "Kingfisher")
-
//MARK: - preview 관련
+
}
+
diff --git a/PingPong/Plugins/ChaeviTuist/ProjectDescriptionHelpers/LocalHelper.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/LocalHelper.swift
similarity index 100%
rename from PingPong/Plugins/ChaeviTuist/ProjectDescriptionHelpers/LocalHelper.swift
rename to PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/LocalHelper.swift
diff --git a/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Settings.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Settings.swift
new file mode 100644
index 00000000..0284bcfb
--- /dev/null
+++ b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Settings.swift
@@ -0,0 +1,46 @@
+//
+// Project+Settings.swift
+// Config
+//
+// Created by 서원지 on 2023/06/11.
+//
+
+import Foundation
+import ProjectDescription
+
+
+extension Settings {
+ public static let appMainSetting: Settings = .settings (
+ base: [
+ "PRODUCT_NAME": "PingPong",
+ "CFBundleDisplayName" : "PingPong",
+ "MARKETING_VERSION": .string(.appVersion()),
+ "AS_AUTHENTICATION_SERVICES_ENABLED": "YES",
+ "PUSH_NOTIFICATIONS_ENABLED":"YES",
+ "ENABLE_BACKGROUND_MODES" : "YES",
+ "BACKGROUND_MODES" : "remote-notification",
+ "ASSOCIATED_DOMAINS": "applinks:PingPong.page.link",
+ "CURRENT_PROJECT_VERSION": .string(.appBuildVersion()),
+ "CODE_SIGN_IDENTITY": "iPhone Developer",
+ "CODE_SIGN_STYLE": "Automatic",
+ "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File", "DEVELOPMENT_ASSET_PATH" : "\"Resources/Preview Content\""] ,configurations: [
+ .debug(name: .debug, settings: ["PRODUCT_NAME" : "PingPong","DISPLAY_NAME" : "PingPong"]),
+ .debug(name: "Dev", settings: ["PRODUCT_NAME" : "PingPong-Dev","DISPLAY_NAME" : "PingPong"]),
+ .release(name: .release, settings: ["DEVELOPMENT_ASSET_PATHS": "\"Resources/Preview Content\"","PRODUCT_NAME" :"PingPongs" , "DISPLAY_NAME" : "PingPong" ])
+ ], defaultSettings: .recommended)
+
+
+ public static let appBaseSetting: Settings = .settings(
+ base: ["PRODUCT_NAME": "PingPong",
+ "MARKETING_VERSION": .string(.appVersion()),
+ "CURRENT_PROJECT_VERSION": .string(.appBuildVersion()),
+ "CODE_SIGN_STYLE": "Automatic",
+ "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File"],
+ configurations: [
+ .debug(name: .debug, settings: ["PRODUCT_NAME": "PingPong"]),
+ .release(name: .release, settings: ["PRODUCT_NAME": "PingPong"])],
+ defaultSettings: .recommended)
+
+}
+
+
diff --git a/PingPong/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Templates.swift
similarity index 91%
rename from PingPong/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
rename to PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Templates.swift
index d18c8f40..ffc14b2a 100644
--- a/PingPong/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
+++ b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/Project+Templates.swift
@@ -1,4 +1,5 @@
import ProjectDescription
+import Foundation
let bundleID = "com.pingpong.co"
@@ -73,11 +74,7 @@ public extension Project {
dependencies: [.target(name: name)]
)
- let realseScheme = Scheme.makeScheme(target: .release, name: "\(name) - Release")
- let debugScheme = Scheme.makeScheme(target: .debug, name: "\(name) - Dev")
-
- let schemes: [Scheme] = [realseScheme, debugScheme ]
let targets: [Target] = [appTarget, appDevTarget,testTarget]
@@ -87,7 +84,7 @@ public extension Project {
packages: packages,
settings: setting,
targets: targets,
- schemes: schemes
+ schemes: scheme
)
}
@@ -114,3 +111,15 @@ extension Scheme {
}
+
+extension String {
+ public static func appVersion() -> String {
+ let version: String = "1.0.0"
+ return version
+ }
+
+ public static func appBuildVersion() -> String {
+ let buildVersion: String = "10"
+ return buildVersion
+ }
+}
diff --git a/PingPong/Tuist/ProjectDescriptionHelpers/SettingDictionary.swift b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/SettingDictionary.swift
similarity index 73%
rename from PingPong/Tuist/ProjectDescriptionHelpers/SettingDictionary.swift
rename to PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/SettingDictionary.swift
index a9291eeb..10c16b5c 100644
--- a/PingPong/Tuist/ProjectDescriptionHelpers/SettingDictionary.swift
+++ b/PingPong/Plugins/PingPongs/ProjectDescriptionHelpers/SettingDictionary.swift
@@ -1,8 +1,8 @@
//
// SettingDictionary.swift
-// ProjectDescriptionHelpers
+// Config
//
-// Created by 서원지 on 2023/05/22.
+// Created by 서원지 on 2023/06/11.
//
import Foundation
@@ -12,6 +12,7 @@ import ProjectDescription
public extension Project {
static let projectSetting: SettingsDictionary =
- ["OTHER_LDFLAGS": ["-ObjC", "-all_load"], "PRODUCT_NAME": "PingPong","MARKETING_VERSION": .string(buildVersion), "CURRENT_PROJECT_VERSION" : .string(buildNumber), "CODE_SIGN_STYLE": "Automatic",
+ ["OTHER_LDFLAGS": ["-ObjC", "-all_load"], "PRODUCT_NAME": "PingPong","MARKETING_VERSION": .string(buildVersion), "CURRENT_PROJECT_VERSION" : .string(buildNumbers), "CODE_SIGN_STYLE": "Automatic",
"DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File" ]
}
+
diff --git a/PingPong/Plugins/ChaeviTuist/Sources/tuist-my-cli/main.swift b/PingPong/Plugins/PingPongs/Sources/tuist-my-cli/main.swift
similarity index 100%
rename from PingPong/Plugins/ChaeviTuist/Sources/tuist-my-cli/main.swift
rename to PingPong/Plugins/PingPongs/Sources/tuist-my-cli/main.swift
diff --git a/PingPong/Projects/App/PingPongTests/Sources/HomeViewModelTest.swift b/PingPong/Projects/App/PingPongTests/Sources/HomeViewModelTest.swift
index 72eaeb3f..291e2731 100644
--- a/PingPong/Projects/App/PingPongTests/Sources/HomeViewModelTest.swift
+++ b/PingPong/Projects/App/PingPongTests/Sources/HomeViewModelTest.swift
@@ -1,8 +1,37 @@
//
// HomeViewModelTest.swift
-// chaeviTests
+// PingPongTests
//
-// Created by 서원지 on 2023/05/31.
-// Copyright © 2023 DaeYoung Chaevi. co., Ltd. All rights reserved.
+// Created by 서원지 on 2023/06/11.
+// Copyright © 2023 Wonji Suh. All rights reserved.
//
+import XCTest
+@testable import PingPong
+
+final class HomeViewModelTest: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ func testExample() throws {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ // Any test you write for XCTest can be annotated as throws and async.
+ // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+ // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+ }
+
+ func testPerformanceExample() throws {
+ // This is an example of a performance test case.
+ self.measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+
+}
diff --git a/PingPong/Projects/App/Project.swift b/PingPong/Projects/App/Project.swift
index 2dbaf473..6df8f439 100644
--- a/PingPong/Projects/App/Project.swift
+++ b/PingPong/Projects/App/Project.swift
@@ -1,19 +1,17 @@
//
// Project.swift
-// ProjectDescriptionHelpers
+// Manifests
//
-// Created by 서원지 on 2023/05/22.
+// Created by 서원지 on 2023/06/11.
//
-import ProjectDescription
-import ProjectDescriptionHelpers
-
-let version: String = "1.0.0"
-let buildNumber: String = "10"
+import ProjectDescription
+import MyPlugin
+let localHelper = LocalHelper(name: "MyPlugin")
let project = Project.makeModule(
name: "PingPong",
platform: .iOS,
@@ -23,29 +21,16 @@ let project = Project.makeModule(
],
- setting: .settings(base: ["PRODUCT_NAME": "PingPong",
- "CFBundleDisplayName" : "PingPong",
- "MARKETING_VERSION": .string(version),
- "AS_AUTHENTICATION_SERVICES_ENABLED": "YES",
- "PUSH_NOTIFICATIONS_ENABLED":"YES",
- "ENABLE_BACKGROUND_MODES" : "YES",
- "BACKGROUND_MODES" : "remote-notification",
- "ASSOCIATED_DOMAINS": "applinks:PingPong.page.link",
- "CURRENT_PROJECT_VERSION": .string(buildNumber),
- "CODE_SIGN_IDENTITY": "iPhone Developer",
- "CODE_SIGN_STYLE": "Automatic",
- "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File", "DEVELOPMENT_ASSET_PATH" : "\"Resources/Preview Content\""] ,configurations: [
- .debug(name: .debug, settings: ["PRODUCT_NAME" : "PingPong","DISPLAY_NAME" : "PingPong"]),
- .debug(name: "Dev", settings: ["PRODUCT_NAME" : "PingPong 필수앱-Dev","DISPLAY_NAME" : "PingPong"]),
- .release(name: .release, settings: ["DEVELOPMENT_ASSET_PATHS": "\"Resources/Preview Content\"","PRODUCT_NAME" :"PingPong" , "DISPLAY_NAME" : "PingPong" ])
- ], defaultSettings: .recommended),
+ setting: .appMainSetting,
dependencies: [
.SPM.Moya,
.SPM.CombineMoya,
.SPM.Kingfisher,
.SPM.PopupView,
.Projcet.Network,
- .Projcet.Component
+ .Projcet.Component,
+// .Projcet.HomeApp
+
],
sources: ["Sources/**", "Resources/**", "Resources/Font/**"],
diff --git a/PingPong/Projects/App/Sources/Application/PingPongApp.swift b/PingPong/Projects/App/Sources/Application/PingPongApp.swift
index c3cf6d52..d656d94d 100644
--- a/PingPong/Projects/App/Sources/Application/PingPongApp.swift
+++ b/PingPong/Projects/App/Sources/Application/PingPongApp.swift
@@ -4,7 +4,6 @@
//
// Created by Byeon jinha on 2023/06/01.
//
-
import SwiftUI
@main
diff --git a/PingPong/Projects/Component/Project.swift b/PingPong/Projects/Component/Project.swift
index 8b0e32b7..4184035c 100644
--- a/PingPong/Projects/Component/Project.swift
+++ b/PingPong/Projects/Component/Project.swift
@@ -1,31 +1,23 @@
//
// Project.swift
-// ProjectDescriptionHelpers
+// Manifests
//
-// Created by 서원지 on 2023/06/02.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
-import ProjectDescriptionHelpers
+import MyPlugin
+
+let localHelper = LocalHelper(name: "MyPlugin")
let project = Project.makeModule(
name: "Component",
product: .staticFramework,
- setting: .settings(base: ["PRODUCT_NAME": "chaevi",
- "MARKETING_VERSION": "1.0",
- "CURRENT_PROJECT_VERSION": "1",
- "CODE_SIGN_STYLE": "Automatic",
- "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File"] ,configurations: [
- .debug(name: .debug),
- .release(name: .release)
- ],defaultSettings: .recommended),
+ setting: .appBaseSetting,
dependencies: [
- .SPM.Moya,
- .SPM.CombineMoya,
],
sources: ["Sources/**"],
resources: ["Resources/**"]
)
-
diff --git a/PingPong/Projects/HomeApp/Entitlements/HomeApp.entitlements b/PingPong/Projects/HomeApp/Entitlements/HomeApp.entitlements
new file mode 100644
index 00000000..f3bb529a
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Entitlements/HomeApp.entitlements
@@ -0,0 +1,20 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.applesignin
+
+ Default
+
+ com.apple.developer.associated-domains
+
+ applinks:PingPong.page.link
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.files.user-selected.read-only
+
+
+
diff --git a/PingPong/Projects/HomeApp/HomeAppTests/Sources/HomeViewModelTest.swift b/PingPong/Projects/HomeApp/HomeAppTests/Sources/HomeViewModelTest.swift
new file mode 100644
index 00000000..291e2731
--- /dev/null
+++ b/PingPong/Projects/HomeApp/HomeAppTests/Sources/HomeViewModelTest.swift
@@ -0,0 +1,37 @@
+//
+// HomeViewModelTest.swift
+// PingPongTests
+//
+// Created by 서원지 on 2023/06/11.
+// Copyright © 2023 Wonji Suh. All rights reserved.
+//
+
+import XCTest
+@testable import PingPong
+
+final class HomeViewModelTest: XCTestCase {
+
+ override func setUpWithError() throws {
+ // Put setup code here. This method is called before the invocation of each test method in the class.
+ }
+
+ override func tearDownWithError() throws {
+ // Put teardown code here. This method is called after the invocation of each test method in the class.
+ }
+
+ func testExample() throws {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct results.
+ // Any test you write for XCTest can be annotated as throws and async.
+ // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+ // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+ }
+
+ func testPerformanceExample() throws {
+ // This is an example of a performance test case.
+ self.measure {
+ // Put the code you want to measure the time of here.
+ }
+ }
+
+}
diff --git a/PingPong/Projects/HomeApp/Project.swift b/PingPong/Projects/HomeApp/Project.swift
new file mode 100644
index 00000000..15e30f9e
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Project.swift
@@ -0,0 +1,44 @@
+//
+// Project.swift
+// ProjectDescriptionHelpers
+//
+// Created by 서원지 on 2023/06/11.
+//
+
+import ProjectDescription
+import MyPlugin
+
+
+
+let localHelper = LocalHelper(name: "MyPlugin")
+let project = Project.makeModule(
+ name: "HomeApp",
+ platform: .iOS,
+ product: .app,
+ //MARK: - 풀 빌드 할때는 프레임 워크로 변경
+// product: .staticFramework,
+ packages: [ // packages를 추가하여 Amplify 라이브러리 추가
+ ],
+
+
+ setting: .appMainSetting,
+ dependencies: [
+ .SPM.Moya,
+ .SPM.CombineMoya,
+ .SPM.Kingfisher,
+ .SPM.PopupView,
+
+
+
+ ],
+ sources: ["Sources/**", "Resources/**", "Resources/Font/**"],
+ resources: ["Resources/**", "Sources/**"],
+ infoPlist: .file(path: "Support/HomeInfo.plist"),
+ entitlements: .relativeToCurrentFile("Entitlements/HomeApp.entitlements")
+// scheme: [realseScheme, debugScheme]
+)
+
+
+
+
+
diff --git a/PingPong/Projects/HomeApp/Sources/Application/HomeApp.swift b/PingPong/Projects/HomeApp/Sources/Application/HomeApp.swift
new file mode 100644
index 00000000..7091d546
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Sources/Application/HomeApp.swift
@@ -0,0 +1,16 @@
+//
+// HomeApp.swift
+// PingPongProject
+//
+// Created by Byeon jinha on 2023/06/01.
+//
+import SwiftUI
+
+@main
+struct HomeApp: App {
+ var body: some Scene {
+ WindowGroup {
+ HomeView()
+ }
+ }
+}
diff --git a/PingPong/Projects/HomeApp/Sources/UI/View/HomeView.swift b/PingPong/Projects/HomeApp/Sources/UI/View/HomeView.swift
new file mode 100644
index 00000000..c7b42058
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Sources/UI/View/HomeView.swift
@@ -0,0 +1,26 @@
+//
+// HomeView.swift
+// PingPongProject
+//
+// Created by Byeon jinha on 2023/06/01.
+//
+
+import SwiftUI
+
+public struct HomeView: View {
+ public var body: some View {
+ VStack {
+ Image(systemName: "globe")
+ .imageScale(.large)
+ .foregroundColor(.accentColor)
+ Text("Hello, world!")
+ }
+ .padding()
+ }
+}
+
+public struct HomeView_Previews: PreviewProvider {
+ public static var previews: some View {
+ HomeView()
+ }
+}
diff --git a/PingPong/Projects/HomeApp/Sources/Utill/Size.swift b/PingPong/Projects/HomeApp/Sources/Utill/Size.swift
new file mode 100644
index 00000000..72eaeb3f
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Sources/Utill/Size.swift
@@ -0,0 +1,8 @@
+//
+// HomeViewModelTest.swift
+// chaeviTests
+//
+// Created by 서원지 on 2023/05/31.
+// Copyright © 2023 DaeYoung Chaevi. co., Ltd. All rights reserved.
+//
+
diff --git a/PingPong/Projects/HomeApp/Sources/ViewModel/HomeViewModel.swift b/PingPong/Projects/HomeApp/Sources/ViewModel/HomeViewModel.swift
new file mode 100644
index 00000000..72eaeb3f
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Sources/ViewModel/HomeViewModel.swift
@@ -0,0 +1,8 @@
+//
+// HomeViewModelTest.swift
+// chaeviTests
+//
+// Created by 서원지 on 2023/05/31.
+// Copyright © 2023 DaeYoung Chaevi. co., Ltd. All rights reserved.
+//
+
diff --git a/PingPong/Projects/HomeApp/Support/HomeInfo.plist b/PingPong/Projects/HomeApp/Support/HomeInfo.plist
new file mode 100644
index 00000000..3a13c1d6
--- /dev/null
+++ b/PingPong/Projects/HomeApp/Support/HomeInfo.plist
@@ -0,0 +1,63 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Home
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ Localizationnativedevelopmentregion
+ Korea
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ UIAppFonts
+
+ UIApplicationSceneManifest
+
+ Application requires iPhone environment
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+
+ UIBackgroundModes
+
+ remote-notification
+
+ UILaunchScreens
+
+ UILaunchScreen
+
+ New item
+
+ UIImageName
+
+ UILaunchScreenIdentifier
+
+
+
+
+ UISupportedInterfaceOrientations~iphone
+
+ UIInterfaceOrientationPortrait
+
+ UIUserInterfaceStyle
+ Light
+
+
diff --git a/PingPong/Projects/Network/Project.swift b/PingPong/Projects/Network/Project.swift
index f717fb7f..9421640b 100644
--- a/PingPong/Projects/Network/Project.swift
+++ b/PingPong/Projects/Network/Project.swift
@@ -1,25 +1,20 @@
//
// Project.swift
-// ProjectDescriptionHelpers
+// Manifests
//
-// Created by 서원지 on 2023/06/02.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
-import ProjectDescriptionHelpers
+import MyPlugin
+
+let localHelper = LocalHelper(name: "MyPlugin")
let project = Project.makeModule(
name: "Network",
product: .staticFramework,
- setting: .settings(base: ["PRODUCT_NAME": "chaevi",
- "MARKETING_VERSION": "1.0",
- "CURRENT_PROJECT_VERSION": "1",
- "CODE_SIGN_STYLE": "Automatic",
- "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File"] ,configurations: [
- .debug(name: .debug),
- .release(name: .release)
- ],defaultSettings: .recommended),
+ setting: .appBaseSetting,
dependencies: [
.SPM.Moya,
.SPM.CombineMoya,
@@ -27,4 +22,3 @@ let project = Project.makeModule(
sources: ["Sources/**"],
resources: ["Resources/**"]
)
-
diff --git a/PingPong/Targets/ChaeviTuistKit/Tests/ChaeviTuistKitTests.swift b/PingPong/Targets/ChaeviTuistKit/Tests/ChaeviTuistKitTests.swift
deleted file mode 100644
index 3f0774b4..00000000
--- a/PingPong/Targets/ChaeviTuistKit/Tests/ChaeviTuistKitTests.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-import Foundation
-import XCTest
-
-final class ChaeviTuistKitTests: XCTestCase {
- func test_example() {
- XCTAssertEqual("ChaeviTuistKit", "ChaeviTuistKit")
- }
-}
\ No newline at end of file
diff --git a/PingPong/Targets/ChaeviTuistUI/Tests/ChaeviTuistUITests.swift b/PingPong/Targets/ChaeviTuistUI/Tests/ChaeviTuistUITests.swift
deleted file mode 100644
index 7a5139e1..00000000
--- a/PingPong/Targets/ChaeviTuistUI/Tests/ChaeviTuistUITests.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-import Foundation
-import XCTest
-
-final class ChaeviTuistUITests: XCTestCase {
- func test_example() {
- XCTAssertEqual("ChaeviTuistUI", "ChaeviTuistUI")
- }
-}
\ No newline at end of file
diff --git a/PingPong/Targets/ChaeviTuist/Sources/ChaeviTuistApp.swift b/PingPong/Targets/PingPongs/Sources/PingPongsApp.swift
similarity index 69%
rename from PingPong/Targets/ChaeviTuist/Sources/ChaeviTuistApp.swift
rename to PingPong/Targets/PingPongs/Sources/PingPongsApp.swift
index f745fae3..376d26f4 100644
--- a/PingPong/Targets/ChaeviTuist/Sources/ChaeviTuistApp.swift
+++ b/PingPong/Targets/PingPongs/Sources/PingPongsApp.swift
@@ -1,8 +1,8 @@
import SwiftUI
-import ChaeviTuistUI
+import PingPongsUI
@main
-struct ChaeviTuistApp: App {
+struct PingPongsApp: App {
var body: some Scene {
WindowGroup {
ContentView()
diff --git a/PingPong/Targets/ChaeviTuist/Tests/ChaeviTuistTests.swift b/PingPong/Targets/PingPongs/Tests/PingPongsTests.swift
similarity index 71%
rename from PingPong/Targets/ChaeviTuist/Tests/ChaeviTuistTests.swift
rename to PingPong/Targets/PingPongs/Tests/PingPongsTests.swift
index ea3bc4b9..2900529e 100644
--- a/PingPong/Targets/ChaeviTuist/Tests/ChaeviTuistTests.swift
+++ b/PingPong/Targets/PingPongs/Tests/PingPongsTests.swift
@@ -1,7 +1,7 @@
import Foundation
import XCTest
-final class ChaeviTuistTests: XCTestCase {
+final class PingPongsTests: XCTestCase {
func test_twoPlusTwo_isFour() {
XCTAssertEqual(2+2, 4)
}
diff --git a/PingPong/Targets/ChaeviTuistKit/Sources/ChaeviTuistKit.swift b/PingPong/Targets/PingPongsKit/Sources/PingPongsKit.swift
similarity index 75%
rename from PingPong/Targets/ChaeviTuistKit/Sources/ChaeviTuistKit.swift
rename to PingPong/Targets/PingPongsKit/Sources/PingPongsKit.swift
index ccb8fdee..e82636ef 100644
--- a/PingPong/Targets/ChaeviTuistKit/Sources/ChaeviTuistKit.swift
+++ b/PingPong/Targets/PingPongsKit/Sources/PingPongsKit.swift
@@ -1,6 +1,6 @@
import Foundation
-public final class ChaeviTuistKit {
+public final class PingPongsKit {
public static func hello() {
print("Hello, from your Kit framework")
}
diff --git a/PingPong/Targets/PingPongsKit/Tests/PingPongsKitTests.swift b/PingPong/Targets/PingPongsKit/Tests/PingPongsKitTests.swift
new file mode 100644
index 00000000..11eed790
--- /dev/null
+++ b/PingPong/Targets/PingPongsKit/Tests/PingPongsKitTests.swift
@@ -0,0 +1,8 @@
+import Foundation
+import XCTest
+
+final class PingPongsKitTests: XCTestCase {
+ func test_example() {
+ XCTAssertEqual("PingPongsKit", "PingPongsKit")
+ }
+}
\ No newline at end of file
diff --git a/PingPong/Targets/ChaeviTuistUI/Sources/ContentView.swift b/PingPong/Targets/PingPongsUI/Sources/ContentView.swift
similarity index 100%
rename from PingPong/Targets/ChaeviTuistUI/Sources/ContentView.swift
rename to PingPong/Targets/PingPongsUI/Sources/ContentView.swift
diff --git a/PingPong/Targets/PingPongsUI/Tests/PingPongsUITests.swift b/PingPong/Targets/PingPongsUI/Tests/PingPongsUITests.swift
new file mode 100644
index 00000000..81c2d6e4
--- /dev/null
+++ b/PingPong/Targets/PingPongsUI/Tests/PingPongsUITests.swift
@@ -0,0 +1,8 @@
+import Foundation
+import XCTest
+
+final class PingPongsUITests: XCTestCase {
+ func test_example() {
+ XCTAssertEqual("PingPongsUI", "PingPongsUI")
+ }
+}
\ No newline at end of file
diff --git a/PingPong/Tuist/Config.swift b/PingPong/Tuist/Config.swift
index 96ca91ed..44ed26d9 100644
--- a/PingPong/Tuist/Config.swift
+++ b/PingPong/Tuist/Config.swift
@@ -2,7 +2,6 @@ import ProjectDescription
let config = Config(
plugins: [
-
-// .local(path: .relativeToManifest("../../Plugins/Affinity")),
+ .local(path: .relativeToManifest("../../Plugins/PingPongs")),
]
)
diff --git a/PingPong/Tuist/Dependencies.swift b/PingPong/Tuist/Dependencies.swift
index fb3e3513..72619cc2 100644
--- a/PingPong/Tuist/Dependencies.swift
+++ b/PingPong/Tuist/Dependencies.swift
@@ -1,8 +1,8 @@
//
// Dependencies.swift
-// MyPlugin
+// Config
//
-// Created by 서원지 on 2023/05/22.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
@@ -11,9 +11,11 @@ let dependencie = Dependencies(
swiftPackageManager: [
.remote(url: "https://github.com/Moya/Moya.git", requirement: .upToNextMinor(from: "15.0.0")),
.remote(url: "https://github.com/onevcat/Kingfisher.git", requirement: .upToNextMinor(from: "7.6.0")),
- .remote(url: "https://github.com/exyte/PopupView.git", requirement: .upToNextMinor(from: "2.1.0"))
+ .remote(url: "https://github.com/exyte/PopupView.git", requirement: .upToNextMinor(from: "2.1.0")),
+
],
platforms: [.iOS]
)
+
diff --git a/PingPong/Tuist/ProjectDescriptionHelpers/Project+Settings.swift b/PingPong/Tuist/ProjectDescriptionHelpers/Project+Settings.swift
deleted file mode 100644
index 6b1a37b5..00000000
--- a/PingPong/Tuist/ProjectDescriptionHelpers/Project+Settings.swift
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Project+Settings.swift
-// ProjectDescriptionHelpers
-//
-// Created by 서원지 on 2023/05/22.
-//
-
-import Foundation
-import ProjectDescription
-let version = "1.0.0"
-let buildNumber = "10"
-
-
-extension Settings {
- static func appBaseSetting() -> Settings {
- return settings(base: ["PRODUCT_NAME": "PingPong",
- "MARKETING_VERSION": .string(version),
- "CURRENT_PROJECT_VERSION": .string(buildNumber),
- "CODE_SIGN_STYLE": "Automatic",
- "DEVELOPMENT_TEAM": "N94CS4N6VR", "DEBUG_INFORMATION_FORMAT": "DWARF with dSYM File"],
- configurations: [
- .debug(name: .debug, settings: ["PRODUCT_NAME": "PingPong"]),
- .release(name: .release, settings: ["PRODUCT_NAME": "PingPong"])],
- defaultSettings: .recommended)
- }
-}
-
-
diff --git a/PingPong/Workspace.swift b/PingPong/Workspace.swift
index 28a0fb30..7073a93e 100644
--- a/PingPong/Workspace.swift
+++ b/PingPong/Workspace.swift
@@ -1,8 +1,8 @@
//
// Workspace.swift
-// ProjectDescriptionHelpers
+// Config
//
-// Created by 서원지 on 2023/05/2.
+// Created by 서원지 on 2023/06/11.
//
import ProjectDescription
@@ -11,5 +11,6 @@ import ProjectDescription
let workspace = Workspace(
name: "PingPong", projects: [
- "Projects/App"
+ "Projects/**"
])
+
diff --git a/PingPong/fastlane/Appfile b/PingPong/fastlane/Appfile
new file mode 100644
index 00000000..0ea3a016
--- /dev/null
+++ b/PingPong/fastlane/Appfile
@@ -0,0 +1,6 @@
+app_identifier(ENV["APP_IDENTIFIER"])
+apple_id(ENV["APPLE_ID"])
+itc_team_id("123572872")
+
+# For more information about the Appfile, see:
+# https://docs.fastlane.tools/advanced/#appfile
diff --git a/PingPong/fastlane/Fastfile b/PingPong/fastlane/Fastfile
new file mode 100644
index 00000000..8562e9da
--- /dev/null
+++ b/PingPong/fastlane/Fastfile
@@ -0,0 +1,218 @@
+# This file contains the fastlane.tools configuration
+# You can find the documentation at https://docs.fastlane.tools
+#
+# For a list of all available actions, check out
+#
+# https://docs.fastlane.tools/actions
+#
+# For a list of all available plugins, check out
+#
+# https://docs.fastlane.tools/plugins/available-plugins
+
+#import "Fastfiles/ReleaseFastfile.rb"
+#import "Fastfiles/SandboxFastfile.rb"
+#import "Fastfiles/AppDistributionFastfile.rb"
+#import "Fastfiles/LicenseFastfile.rb
+
+#require 'fastlane/plugin/spaceship'
+
+# Uncomment the line if you want fastlane to automatically update itself
+# update_fastlane
+require 'spaceship'
+Spaceship::ConnectAPI::App.const_set('ESSENTIAL_INCLUDES', 'appStoreVersions')
+ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "600"
+
+default_platform(:ios)
+platform :ios do
+
+
+ desc "Incrementing Build Number"
+
+ lane :increment_build do
+ version = get_version_number(xcodeproj: "MarketApp.xcodeproj")
+ current_build_number = latest_testflight_build_number(version: version)
+ increment_build_number(build_number: current_build_number + 1)
+ end
+
+ desc "Unit test"
+ lane:unit_Test do
+ clear_derived_data
+ scan
+ sh "bash ./Script/tuistTest.sh"
+ slack(
+ message: "Unit test 성공",
+ slack_url: ENV["SLACK_URL_TEST"],
+ payload: { "Build Date" => Time.new.to_s }
+ )
+
+ # ✅ 에러 처리.
+ error do |lane, exception, options|
+ slack(
+ message: "에러 발생 : #{exception}",
+ success: false,
+ slack_url: ENV["SLACK_URL_TEST"]
+ )
+ end
+ end
+
+
+ desc "Install Profiles and Build My App"
+ lane :build_ipa do
+ clear_derived_data
+ unit_Test
+ get_certificates
+ get_provisioning_profile
+ # resolve_packages
+ gym(
+ configuration: "Release",
+ workspace: "PingPong.xcworkspace",
+ output_name: "PingPong.ipa",
+ scheme: "PingPong",
+ export_method: "app-store",
+ xcodebuild_command: "xcodebuild",
+ include_bitcode: false,
+ # skip_build_archive: false,
+ xcodebuild_formatter: "xcpretty",
+ output_directory: "./fastlane/output/",
+ clean: true,
+ silent: true,
+ include_symbols: false,
+ xcargs: "ARCHIVE=YES",
+ disable_package_automatic_updates: false,
+ skip_package_ipa: false,
+ skip_package_dependencies_resolution: false,
+ skip_package_pkg: false,
+ export_options: {
+ signingStyle: "automatic",
+ uploadBitcode: false,
+ provisioningProfiles: {
+ "com.pingpong.co" => "PngPong",
+ # "com.shoping.MarketApps" => "com.shoping.MarketApps AppStore"
+ }
+ }
+ )
+ slack(
+ message: "빌드 성공",
+ slack_url: ENV["SLACK_URL_BUILD"],
+ payload: { "Build Date" => Time.new.to_s }
+ )
+
+ # ✅ 에러 처리.
+ error do |lane, exception, options|
+ slack(
+ message: "에러 발생 : #{exception}",
+ success: false,
+ slack_url: ENV["SLACK_URL_BUILD"]
+ )
+ end
+ end
+
+ desc "Description of what the lane does"
+ lane :upload_testflight do
+ version = get_version_number(
+ xcodeproj: "PingPong.xcodeproj",
+ target: "PingPong"
+ )
+ build = get_build_number
+ #get_certificates
+ # get_provisioning_profile
+ increment_build_number(
+ build_number: latest_testflight_build_number + 1
+ )
+ lint
+ build_ipa
+ upload_to_testflight(
+ demo_account_required: true,
+ beta_app_description:"PingPong",
+ api_key_path: "fastlane/apikey.json",
+ ipa:"./fastlane/output/PingPong.ipa",
+ changelog:"변경사항",
+ skip_waiting_for_build_processing: true)
+ slack(
+ message: "Testflight 배포에 성공했습니다!",
+ slack_url: ENV["SLACK_URL_UPLOAD"],
+ payload: {
+ "Version": version + " (" + build + ")",
+ "Build Date" => Time.new.to_s
+ }
+ )
+ # ✅ 에러 처리.
+ error do |lane, exception, options|
+ slack(
+ message: "에러 발생 : #{exception}",
+ success: false,
+ slack_url: ENV["SLACK_URL_UPLOAD"]
+ )
+ end
+ end
+
+
+ lane :get_dev_certs do
+ cert(development: true)
+ sign(development: true)
+ end
+
+ desc "Description of what the lane does"
+ desc "Push a new release build to the App Store"
+ lane :release do |options|
+ # ✅ 매개변수를 넣어서
+ # fastlane release version:"2.1.0"
+ # 과 같이 사용할 수 있다.
+ if options[:version]
+ version = options[:version]
+ increment_version_number(version_number: options[:version])
+ version = get_version_number(
+ xcodeproj: "PingPong.xcodeproj",
+ target: "PingPong"
+ )
+ build = get_build_number
+ #get_certificates
+ #get_provisioning_profile
+ unit_Test
+ build_ipa
+ upload_to_app_store(
+ username: "shuwj81@daum.net",
+ team_id: "N94CS4N6R",
+ ipa:"./fastlane/output/PingPong.ipa",
+ api_key_path: "fastlane/apikey.json",
+ skip_metadata: false,
+ metadata_path: "./fastlane/metadata",
+ skip_screenshots: true,
+ force: true,
+ submit_for_review: true,
+ automatic_release: false,
+ precheck_include_in_app_purchases: false,
+ submission_information: {
+ add_id_info_uses_idfa: false,
+ export_compliance_encryption_updated: false,
+ export_compliance_uses_encryption: false,
+ content_rights_contains_third_party_content: false
+ },
+ # app_version: version,
+ # build_number: build,
+ # whats_new: "Update for version #{version}"
+ )
+
+
+ end
+ #성공했을때 슬랙 메세지
+ slack(
+ message: "앱 배포 성공",
+ slack_url: ENV["SLACK_URL_UPLOAD"],
+ payload: {
+ "Version": version + " (" + build + ")",
+ "Build Date" => Time.new.to_s
+ }
+ )
+
+ # ✅ 에러 처리.
+ error do |lane, exception, options|
+ slack(
+ message: "에러 발생 : #{exception}",
+ success: false,
+ slack_url: ENV["SLACK_URL_UPLOAD"]
+ )
+ end
+ end
+ # ✅ if 문을 종료하기 위한 end
+ end
diff --git a/PingPong/fastlane/README.md b/PingPong/fastlane/README.md
new file mode 100644
index 00000000..2d14a226
--- /dev/null
+++ b/PingPong/fastlane/README.md
@@ -0,0 +1,82 @@
+fastlane documentation
+----
+
+# Installation
+
+Make sure you have the latest version of the Xcode command line tools installed:
+
+```sh
+xcode-select --install
+```
+
+For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
+
+# Available Actions
+
+## iOS
+
+### ios increment_build
+
+```sh
+[bundle exec] fastlane ios increment_build
+```
+
+Incrementing Build Number
+
+### ios unit_Test
+
+```sh
+[bundle exec] fastlane ios unit_Test
+```
+
+Unit test
+
+### ios build_ipa
+
+```sh
+[bundle exec] fastlane ios build_ipa
+```
+
+Install Profiles and Build My App
+
+### ios upload_testflight
+
+```sh
+[bundle exec] fastlane ios upload_testflight
+```
+
+Description of what the lane does
+
+### ios upload_firebase
+
+```sh
+[bundle exec] fastlane ios upload_firebase
+```
+
+upload Firebase App Distribution
+
+### ios get_dev_certs
+
+```sh
+[bundle exec] fastlane ios get_dev_certs
+```
+
+
+
+### ios release
+
+```sh
+[bundle exec] fastlane ios release
+```
+
+Description of what the lane does
+
+Push a new release build to the App Store
+
+----
+
+This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
+
+More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
+
+The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
diff --git a/PingPong/fastlane/Script/tuistTest.sh b/PingPong/fastlane/Script/tuistTest.sh
new file mode 100644
index 00000000..64d2bd34
--- /dev/null
+++ b/PingPong/fastlane/Script/tuistTest.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+echo "tuist clean"
+echo "tuist fetch"
+echo "tuist test PingPong"