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 )