ZOOC 프로젝트 중 서버 개발자 둔더라는 친구가 테스트와 배포를 위한 서버를 분리시켜야 한다는 제안을 했다.
테스트가 되지 않은 API가 유저에게 배포된다는 문제가 있다.
따라서 서버는 아래와 같은 작업을 수행해주었다.
기존 하나였던 서버를 Test Server와 Release Server로 분리한다.
두 서버의 차이점은
자, 서버가 분리를 해주었으니 이제 Xcode에서 적용을 해야한다.
적용하기전에 우리는 아래 개념을 어느정도 숙지하고 따라오길 바란다!
서버가 분리됨에 따라 iOS 개발자가 해야할 작업은 무엇일까.
차근차근 따라해봅시다!
Xcode 상단에서 Scheme를 분리하자.
자세한 방법은 직접 해보거나 구글링 하면 알 수 있다.
Configuration Settings File을 눌러 파일을 추가한다.
Debug / Release 파일을 두개 만들었다.

이 후 Project > Info 에 들어가 Configuration 파일을 아까 생성한 .xcconfig 파일로 설정한다.
기존엔 None으로 되어있을 것이다.
여기까지 설정되었다면 Debug / Release에 따라 파일이 분리된 것이다.
그렇다면 이제 Debug.xcconfig / Release.xcconfig 에 따라 분리하고 싶은 정보들을 담아주겠다. (BASE_URL, Bundle Identifier등..)
총 다섯가지를 적어줬다.
1. Base URL
2. Bundle Identifier
3. App Name
4. App Icon
5. Kakao Appkey

주의할 점
.xcconfig 파일에서//는 주석처리가 된다.
따라서 위와 같이$()문자를//사이에 삽입하여 주석처리 되는 것을 방지해야한다.



Target > Builds Settings > User Defined (가장 하단)에 확인하면
.xcconfig 파일에서 설정했던 값들이 위와 같이 자동으로 입력되어있는 것을 확인할 수 있을 것이다.
Config 값을 Swift 에서 활용하려면?
Swift 파일에서 Config의 정보를 사용하고 싶을 수가 있다.
AppDelegate에서 카카오앱키를 사용한다거나
Moya 네트워크 통신 부분에 BaseURL을 입력하거나 등
그럴땐 아래 방법으로 구현하면 된다.
${BASE_URL} 위 xcconfig 에서 작성했던 키 값을 작성해주면 된다.
enum Config {
static let kakaoAppKey = Bundle.main.infoDictionary?["KAKAO_APPKEY"] as! String
static let baseURL = Bundle.main.infoDictionary?["BASE_URL"] as! String
}
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
KakaoSDK.initSDK(appKey: Config.kakaoAppKey)
return true
}
우리가 xcconfig에서 한 작업은 Bundle Idenfier과 APP Name을 직접 커스텀한 설정값으로 적용시키겠단 행위이다.
따라서 프로젝트의 Info.plist 와 Target Signing & Capability 을 뒤져가며 Bundle Name과 Bundle Identifier value값을 아래와 같이 변경해야한다.
$(PRODUCT_NAME): default 값 $(APP_NAME): 커스텀 값$(PRODUCT_BUNDLE_IDENTIFIER): default 값 $(APP_BUNDLE_ID): 커스텀 값테스트와 배포용으로 분리에 의해 FCM에 등록된 어플리케이션도 분리가 필요하다.
따라서 ZOOC이라는 한 프로젝트에 두개의 FCM 어플리케이션이 등록되어야 하는 것 이다.
Firebase는 어플리케이션당 하나의 GoogleService-Info.plist를 사용하므로
총 두개의 GoogleService-Info.plist 파일이 존재해야하는 것이다.
해당 문제 해결할 때 참고한 링크는 하단 참고에 첨부하겠다.
iOS) 프로젝트 배포 환경별 Build Scheme 세팅(.xcconfig 사용) + key 숨기기