안드로이드 처럼 xcode swift 도 빌드환경 분리로 생산성을 향상시키고 싶었다.
자꾸 Scheme 을 변경하면서 앱을 xcode 를 실행시키면서 디버깅하는 부분은 시간이 오래 걸린다. 그래서 미리 PROD 버전을 다운받고 DEV 버전으로 테스트 후 배포 했을떄 잘 돌아가는지 확인하기 위해 PROD 버전을 미리 다운받는 형식의 빌드환경을 분리하고 싶었다.
그래서 그 부분에 대해 설정을 하고 어떤 절차로 설정했는지를 기록하려고 한다 .ㅎㅎ

빌드환경 분리 방법
1. 디버그 / 릴리즈 용 변수 설정
#if DEBUG
static let baseUrl = "http://localhost"
#else
static let baseUrl = "http://xxxxxxxxx"
#endif
위의 코드처럼 저렇게 디버그냐 아니냐에 따른 분기처리로 변수를 설정해놓고 불러와서 사용해도 된다.
2. Info.plist
위처럼 우선 Target -> 앱 -> Build Settings -> User-Defined 에서 + 버튼 눌러서 추가하고 위의 처럼 사용자 설정 변수를 만든다.
나는 앱 광고 , 소켓 , 그리고 REST API URL 을 설정하였다.
그리고
Info.plist 에서 위처럼 사용자 변수에 대해 추가로 설정을 해주어야 한다. 그럼 앱 빌드시 info.plist에서 해당 변수의 값을 불러와서 사용할 수 있다.
- 채팅 URL 불러오기
static func getChatUrl() -> String? {
if let path = Bundle.main.path(forResource: "Info", ofType: "plist") {
let dictRoot = NSDictionary(contentsOfFile: path)
if let dict = dictRoot{
return dict["CHAT_URL"] as? String
}
}
return nil
}
- 앱 광고 ID 불러오기
static func getAdsId(name: String) -> String? {
if let path = Bundle.main.path(forResource: "Info", ofType: "plist") {
let dictRoot = NSDictionary(contentsOfFile: path)
if let dict = dictRoot{
return dict["ADS_\(name)_ID"] as? String
}
}
return nil
}
- REST API URL 불러오기
static func getApiUrl() -> String? {
if let path = Bundle.main.path(forResource: "Info", ofType: "plist") {
let dictRoot = NSDictionary(contentsOfFile: path)
if let dict = dictRoot{
return dict["SERVER_URL"] as? String
}
}
return nil
}
위의 3가지 코드대로 사용한다면 잘 불러와진다 !! 후후 !!

그리고 Packing -> Product Bundle Identifier 에서 Debug / Release 버전에 대해 suffix 를 .deubg 등 디버그와 릴리즈 버전의 차이를 두어서 서로 다른 앱임을 설정해두어야 한다 .
그리고 위의 사진처럼 같은 앱을 2가지 버전으로 다운받아 내가 원하던 DEV / PROD 버전 으로 나뉘어서 바로 앱을 테스트할 수 있게 된다.
그리고
Edit Scheme 에 들어가서 아카이브 선택 후 위의 사진처럼 Debug 로 설정
위의 RUN 부분에서도 Build Configuration 을 Debug 로 설정해주며
마지막 Profile 에서도 마찬가지로 Build Configuration 을 Debug 로 설정해준다. !!!
그리고 PodFile 도 변경한다면
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
# 만약 User-Defined 에서 Build Identifier 에 대해서 아래 4가지처럼 설정을 해주었으면 밑에 처럼
# 설정을 해주어야 한다.
# ⚠️ 여기에 Configuration 설정 추가!
project 'xxx',
'DebugStaging' => :debug,
'DebugProduction' => :debug,
'ReleaseStaging' => :release,
'ReleaseProduction' => :release
target 'xxx' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for xxx
target 'xxxTests' do
inherit! :search_paths
# Pods for testing
end
target 'xxxUITests' do
# Pods for testing
end
end
# 만약 User-Defined 에서 Build Identifier 에 대해서 아래 4가지처럼 설정을 해주었으면 밑에 처럼
# 설정을 해주어야 한다.
위의 코드처럼 Podfile 에서 설정을 해주고 그다음
Pod install
을 반드시 해주어야 한다
그리고 Firebase .json 관련 부분도 설명해보자면
📌 Firebase GoogleService-Info.plist 분기 설정 방법
Firebase는 앱별로 고유한 GoogleService-Info.plist 파일을 사용해야 하기 때문에, Staging(테스트용)과 Production(운영용)을 분리하여 빌드할 때 적절한 파일을 자동으로 선택하도록 설정해야 합니다.
✅ 1. GoogleService-Info.plist 파일 준비
- Firebase Console에서 개발용 앱(Staging)과 운영용 앱(Production) 을 각각 생성
- 두 개의 GoogleService-Info.plist 파일 다운로드
- 파일 이름을 변경
- GoogleService-Info-staging.plist (개발용)
- GoogleService-Info-prod.plist (운영용)
- Xcode 프로젝트 내부에 Configuration 폴더를 만들고 두 개의 파일을 추가
✅ 2. Xcode에서 빌드 설정 추가
🔹 (1) Build Phase에 Copy Script 추가
- Xcode에서 프로젝트 선택
- 상단 메뉴에서 "Build Phases" 탭 클릭
- 좌측 상단 "+" 버튼 클릭 → "New Run Script Phase" 추가
- 생성된 Run Script 섹션을 아래로 이동하여 "Link Binary With Libraries" 위쪽에 배치
- 추가된 Run Script를 클릭하고, 아래의 스크립트 입력
CONFIGURATION_BUILD_DIR=${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}
# Staging과 Production의 구분
if [ "${CONFIGURATION}" == "DebugStaging" ]; then
cp "${PROJECT_DIR}/Configuration/GoogleService-Info-staging.plist" "${CONFIGURATION_BUILD_DIR}/GoogleService-Info.plist"
elif [ "${CONFIGURATION}" == "DebugProduction" ] || [ "${CONFIGURATION}" == "ReleaseProduction" ]; then
cp "${PROJECT_DIR}/Configuration/GoogleService-Info-prod.plist" "${CONFIGURATION_BUILD_DIR}/GoogleService-Info.plist"
elif [ "${CONFIGURATION}" == "ReleaseStaging" ]; then
cp "${PROJECT_DIR}/Configuration/GoogleService-Info-staging.plist" "${CONFIGURATION_BUILD_DIR}/GoogleService-Info.plist"
fi
🔹 (2) Xcode에서 Configuration 추가
- Xcode에서 프로젝트 선택
- "Info" 탭 클릭 → "Configurations" 섹션으로 이동
- "Duplicate Debug" 및 "Duplicate Release"를 사용하여 아래와 같이 수정
- DebugStaging
- DebugProduction
- ReleaseStaging
- ReleaseProduction
끝이다..
'개발 > Swift' 카테고리의 다른 글
Swift_ 변수의 종류 (0) | 2025.02.11 |
---|---|
Swift_ intrinsicContentSize / Frame / bounds (0) | 2025.02.08 |
Swift_ CoreData Model , extension , Struct (0) | 2024.08.02 |
Swift_ CoreData 적용기... (0) | 2024.07.24 |