From d1c3861fb5f4f70cb71815979ea9c091fb8f8b2d Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sun, 26 Apr 2026 01:32:06 +0900 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20Config.swift=20git=20=EC=B6=94?= =?UTF-8?q?=EC=A0=81=20=ED=95=B4=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .gitignore에 등록되어 있으나 이전에 git에 추가되어 추적되던 상태라 변경 시 modified로 떠 secret 노출 위험 - 별도 private 레포(thingineeer-env / Runnect-env)에서 관리 결정에 따라 메인 레포에서는 추적만 해제 - working tree 파일은 그대로 유지 (`git rm --cached` 만 사용) --- .../Network/Foundation/Config.swift | 94 ------------------- 1 file changed, 94 deletions(-) delete mode 100644 Runnect-iOS/Runnect-iOS/Network/Foundation/Config.swift diff --git a/Runnect-iOS/Runnect-iOS/Network/Foundation/Config.swift b/Runnect-iOS/Runnect-iOS/Network/Foundation/Config.swift deleted file mode 100644 index cc53aa76..00000000 --- a/Runnect-iOS/Runnect-iOS/Network/Foundation/Config.swift +++ /dev/null @@ -1,94 +0,0 @@ -// -// Config.swift -// Runnect-iOS -// -// Created by sejin on 2023/01/06. -// - -import UIKit - -struct Config { - private init() {} - - // node -// static var baseURL: String { -// return "http://3.35.184.0:3000/api" -// } - - // spring server - static var baseURL: String { - return "http://43.201.179.83/api" - - } - - // test server -// static var baseURL: String { -// return "http://54.180.15.23/api" -// } - - static var kakaoAddressBaseURL: String { - return "https://dapi.kakao.com/v2/local/search" - } - - static var kakaoRestAPIKey: String { - return "f06398327f27f68dee975d91ade34bcd" - } - - static var tmapAddressBaseURL: String { - return "https://apis.openapi.sk.com/tmap/geo" - } - - static var tmapAPIKey: String { - return "l7xx26325307e8dc401eb8c7490ea62829c3" - } - - static var kakaoNativeAppKey: String { - return "27d01e20b51e5925bf386a6c5465849f" - } - -// static var deviceId: String { -// return KeychainManager.shared.getDeviceId() -// } - - static var naverMapClientId: String { - return "ldgt4i6s7l" - } - - static var adMobNativeAdUnitId: String { - return AdConfig.nativeAdUnitId - } - - static var adMobCarouselNativeAdUnitId: String { - return AdConfig.carouselNativeAdUnitId - } - - static var accessToken: String { - return UserManager.shared.accessToken ?? "" - } - - static var refreshToken: String { - return UserManager.shared.refreshToken ?? "" - } - - static var defaultHeader: [String: String] { - return ["Content-Type": "application/json"] - } - - static var headerWithAccessToken: [String: String] { - return ["Content-Type": "application/json", - "accessToken": Config.accessToken, - "refreshToken": Config.refreshToken] - } - - static var kakaoDeveloperName: String { - return "띵진" - } - - static var appleDeveloperName: String { - return "이명진" - } - - static var developerPassword: String { - return "970821" - } -} From d3f4bfa45a8d39fa740dcbc20b3a0f1e880bc866 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sun, 26 Apr 2026 01:34:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20CLAUDE.md=EC=97=90=20Config/AdConfi?= =?UTF-8?q?g=20=EC=BB=A4=EB=B0=8B=20=EA=B8=88=EC=A7=80=20=EA=B0=80?= =?UTF-8?q?=EC=9D=B4=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - public 레포 특성상 secret 노출 위험을 최상단(프로젝트 개요 직후)에 명시 - private 레포(thingineeer-env / Runnect-env)에서 관리한다는 흐름 기록 - AI 도구가 작업 시에도 PR diff에 두 파일 변경분이 포함되지 않도록 규칙 명시 --- CLAUDE.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index cc154d8c..31fb5023 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,6 +9,25 @@ - **패키지 관리**: CocoaPods - **앱스토어**: 배포 중 +## ⚠️ 보안 — public GitHub 저장소 + +본 레포는 **public** 저장소. 아래 파일은 **절대 commit / push 금지**: + +| 파일 | 포함 secret | +|---|---| +| `Runnect-iOS/Network/Foundation/Config.swift` | 서버 baseURL, kakaoRestAPIKey, tmapAPIKey, kakaoNativeAppKey, naverMapClientId, 개발자 패스워드 | +| `Runnect-iOS/Network/Foundation/AdConfig.swift` | AdMob 광고 단위 ID | + +**관리 흐름**: +- 두 파일 모두 `.gitignore` 등록 + 메인 레포에서 추적 해제됨 +- 실제 값은 **별도 private 레포** `thingineeer/thingineeer-env` 의 `Runnect-env` 에서 관리 +- 클론 후 private 레포에서 두 파일을 가져와 동일 경로에 배치해야 빌드 가능 + +**작업 시 주의**: +- `git status --ignored` 가 아닌 일반 status 에는 안 보이지만, 실수로라도 **`git add -f` / staged 처리 / commit 금지** +- 신규 secret 추가 시 위 패턴 따를 것 (gitignore 등록 + private 레포 보관) +- AI 도구(Claude 등) 사용 시에도 이 규칙 적용 — Config/AdConfig 변경분이 PR diff 에 절대 포함되면 안 됨 + ## 주요 라이브러리 | 라이브러리 | 버전 | 용도 | |-----------|------|------|