diff --git a/.gitignore b/.gitignore
index 05a46e39..67b7c91d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,11 @@ Tuist/.build/
# macOS
.DS_Store
+
+# Secrets - API 키가 포함된 파일은 커밋하지 않습니다
+# 설정 방법: *.xcconfig.template 파일을 참고하여 복사 후 값을 채워주세요
+*.xcconfig
+!*.xcconfig.template
+
+# Firebase - Firebase Console에서 직접 다운로드 받으세요
+GoogleService-Info.plist
diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift
index 4cfcc7c4..c652ce49 100644
--- a/Projects/App/Project.swift
+++ b/Projects/App/Project.swift
@@ -32,5 +32,6 @@ let project = Project.makeModule(
sources: ["Sources/**"],
resources: ["Resources/**"],
infoPlist: .file(path: "Support/Info.plist"),
- entitlements: .file(path: "Support/GOMS-iOS-V3.entitlements")
+ entitlements: .file(path: "Support/GOMS-iOS-V3.entitlements"),
+ xcconfigPath: .relativeToRoot("Projects/App/Support/Secrets.xcconfig")
)
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
new file mode 100644
index 00000000..3770e182
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-120.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-120.png
new file mode 100644
index 00000000..ad01c402
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-120.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-152.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-152.png
new file mode 100644
index 00000000..35efb9a0
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-152.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png
new file mode 100644
index 00000000..11bc9260
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-180.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-180.png
new file mode 100644
index 00000000..c888694d
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-180.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-20.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-20.png
new file mode 100644
index 00000000..217b0be2
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-20.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png
new file mode 100644
index 00000000..0c817a6e
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-40.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-40.png
new file mode 100644
index 00000000..3804491d
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-40.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-58.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-58.png
new file mode 100644
index 00000000..14b14360
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-58.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-60.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-60.png
new file mode 100644
index 00000000..ff12cd30
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-60.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-76.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-76.png
new file mode 100644
index 00000000..efc77fa3
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-76.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-80.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-80.png
new file mode 100644
index 00000000..e257b0fc
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-80.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-87.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-87.png
new file mode 100644
index 00000000..a090bb73
Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/AppIcon-87.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
index 9221b9bb..1dbd33cc 100644
--- a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,91 +1,109 @@
{
"images" : [
{
+ "filename" : "AppIcon-40.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
+ "filename" : "AppIcon-60.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
+ "filename" : "AppIcon-58.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
+ "filename" : "AppIcon-87.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
+ "filename" : "AppIcon-80.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
+ "filename" : "AppIcon-120.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
+ "filename" : "AppIcon-120.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
+ "filename" : "AppIcon-180.png",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
+ "filename" : "AppIcon-20.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
+ "filename" : "AppIcon-40.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
+ "filename" : "AppIcon-29.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
+ "filename" : "AppIcon-58.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
+ "filename" : "AppIcon-40.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
+ "filename" : "AppIcon-80.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
+ "filename" : "AppIcon-76.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
+ "filename" : "AppIcon-152.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
+ "filename" : "AppIcon-167.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
+ "filename" : "AppIcon-1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
diff --git a/Projects/App/Resources/GoogleService-Info.plist b/Projects/App/Resources/GoogleService-Info.plist
deleted file mode 100644
index 5f7ea53f..00000000
--- a/Projects/App/Resources/GoogleService-Info.plist
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- API_KEY
- AIzaSyBa8rRdoPVnSvSgUx6hvtFoR24TpAxXN4c
- GCM_SENDER_ID
- 1070773351979
- PLIST_VERSION
- 1
- BUNDLE_ID
- HARIBO.GOMS-iOS-V2
- PROJECT_ID
- goms-ios
- STORAGE_BUCKET
- goms-ios.firebasestorage.app
- IS_ADS_ENABLED
-
- IS_ANALYTICS_ENABLED
-
- IS_APPINVITE_ENABLED
-
- IS_GCM_ENABLED
-
- IS_SIGNIN_ENABLED
-
- GOOGLE_APP_ID
- 1:1070773351979:ios:51eb2afc3f152977b09c6e
-
-
diff --git a/Projects/App/Support/GoogleService-Info.plist b/Projects/App/Resources/GoogleService-Info.plist.template
similarity index 61%
rename from Projects/App/Support/GoogleService-Info.plist
rename to Projects/App/Resources/GoogleService-Info.plist.template
index c69d390c..27a0e36f 100644
--- a/Projects/App/Support/GoogleService-Info.plist
+++ b/Projects/App/Resources/GoogleService-Info.plist.template
@@ -1,19 +1,21 @@
+
API_KEY
- AIzaSyApAUEezH-Mlj8FPqeczHbHiy5c8KSeUFU
+ YOUR_FIREBASE_API_KEY
GCM_SENDER_ID
- 371885187431
+ YOUR_GCM_SENDER_ID
PLIST_VERSION
1
BUNDLE_ID
HARIBO.GOMS-iOS-V2
PROJECT_ID
- gsm-goms
+ YOUR_PROJECT_ID
STORAGE_BUCKET
- gsm-goms.firebasestorage.app
+ YOUR_STORAGE_BUCKET
IS_ADS_ENABLED
IS_ANALYTICS_ENABLED
@@ -25,6 +27,6 @@
IS_SIGNIN_ENABLED
GOOGLE_APP_ID
- 1:371885187431:ios:8c95f804f4678251398fc2
+ YOUR_GOOGLE_APP_ID
-
\ No newline at end of file
+
diff --git a/Projects/App/Sources/Application/AppDelegate.swift b/Projects/App/Sources/Application/AppDelegate.swift
index bb8cdc24..17ce0788 100644
--- a/Projects/App/Sources/Application/AppDelegate.swift
+++ b/Projects/App/Sources/Application/AppDelegate.swift
@@ -19,7 +19,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
- SDKInitializer.InitSDK(appKey: "7fe97f25eb228b1f07f0d982272290d1")
+ guard let kakaoAppKey = Bundle.main.infoDictionary?["KAKAO_APP_KEY"] as? String,
+ !kakaoAppKey.isEmpty else {
+ fatalError("KAKAO_APP_KEY is not set in Info.plist or is empty. Please check your configuration.")
+ }
+ SDKInitializer.InitSDK(appKey: kakaoAppKey)
FirebaseApp.configure()
Messaging.messaging().delegate = self
diff --git a/Projects/App/Support/Info.plist b/Projects/App/Support/Info.plist
index 1cdcbc79..cdc2e7d9 100644
--- a/Projects/App/Support/Info.plist
+++ b/Projects/App/Support/Info.plist
@@ -62,7 +62,9 @@
UIInterfaceOrientationPortraitUpsideDown
KAKAO_APP_KEY
- 7fe97f25eb228b1f07f0d982272290d1
+ $(KAKAO_NATIVE_APP_KEY)
+ KAKAO_REST_API_KEY
+ $(KAKAO_REST_API_KEY)
NSLocationWhenInUseUsageDescription
위치 사용
diff --git a/Projects/App/Support/Secrets.xcconfig.template b/Projects/App/Support/Secrets.xcconfig.template
new file mode 100644
index 00000000..192da204
--- /dev/null
+++ b/Projects/App/Support/Secrets.xcconfig.template
@@ -0,0 +1,6 @@
+// Secrets.xcconfig.template
+// 이 파일을 Secrets.xcconfig로 복사한 후 실제 값을 채워주세요:
+// cp Projects/App/Support/Secrets.xcconfig.template Projects/App/Support/Secrets.xcconfig
+
+KAKAO_NATIVE_APP_KEY = YOUR_KAKAO_NATIVE_APP_KEY
+KAKAO_REST_API_KEY = YOUR_KAKAO_REST_API_KEY
diff --git a/Projects/Service/Sources/Services/Map/PlaceServices.swift b/Projects/Service/Sources/Services/Map/PlaceServices.swift
index 37fbd0c6..886e51ad 100644
--- a/Projects/Service/Sources/Services/Map/PlaceServices.swift
+++ b/Projects/Service/Sources/Services/Map/PlaceServices.swift
@@ -136,7 +136,11 @@ extension PlaceServices: TargetType {
switch self {
case .getRoute:
- commonHeaders["Authorization"] = "KakaoAK b47f0cac2134d01481d23d13ffa419e6"
+ guard let kakaoRestKey = Bundle.main.infoDictionary?["KAKAO_REST_API_KEY"] as? String,
+ !kakaoRestKey.isEmpty else {
+ fatalError("KAKAO_REST_API_KEY is not set in Info.plist or is empty.")
+ }
+ commonHeaders["Authorization"] = "KakaoAK \(kakaoRestKey)"
case .getRecommendedPlaces(let auth),
.getRecommendedPlacesCount(let auth),
.searchPlace(_, let auth),
diff --git a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
index 6c957794..db2d21e1 100644
--- a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
+++ b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
@@ -12,13 +12,14 @@ public extension Project {
sources: SourceFilesList = ["Sources/**"],
resources: ResourceFileElements? = nil,
infoPlist: InfoPlist = .default,
- entitlements: Entitlements? = nil
+ entitlements: Entitlements? = nil,
+ xcconfigPath: Path? = nil
) -> Project {
let settings: Settings = .settings(
base: [:],
configurations: [
- .debug(name: .debug, settings: entitlements == nil ? [:] : ["APS_ENVIRONMENT": "development"]),
- .release(name: .release, settings: entitlements == nil ? [:] : ["APS_ENVIRONMENT": "production"])
+ .debug(name: .debug, settings: entitlements == nil ? [:] : ["APS_ENVIRONMENT": "development"], xcconfig: xcconfigPath),
+ .release(name: .release, settings: entitlements == nil ? [:] : ["APS_ENVIRONMENT": "production"], xcconfig: xcconfigPath)
],
defaultSettings: .recommended
)