[iOS] FCM) GoogleService-Info.plist 개발/운영 분기 처리하기

안녕하세요~ 차니에요!!

앱 푸시 알림을 위해 대표적으로 FCM 라이브러리를 많이 사용하죠.

그런데 개발 앱과 운영 앱의 번들 ID가 다를 경우 GoogleService-Info.plist도 2개 이상 프로젝트에 들어가야 하기 때문에 분기 처리가 필요합니다!

 

FCM은 연동되어 있다고 가정하고 분기 처리를 위한 두 가지 방법을 포스팅 해보도록 하겠습니다.

1. 코드 레벨에서 분기 처리

FirebaseApp.configure()

AppDeleaate에서 위 메서드로 FCM 연동을 하셨을텐데요.

해당 함수의 경우 프로젝트 ROOT 경로에서 GoogleService-Info.plist 파일을 찾아서 연동되도록 구현되어 있기 때문에 plist 파일이 하나일 경우에는 별도의 설정이 필요 없습니다. 하지만 해당 파일이 2개 이상일 경우, 분기 처리가 필요하겠죠.

 

#if _RELEASE
let filePath = Bundle.main.path(forResource: "PRD_GoogleService-Info", ofType: "plist")
#else
let filePath = Bundle.main.path(forResource: "DEV_GoogleService-Info", ofType: "plist")
#endif

if let path = filePath,
  let options = FirebaseOptions.init(contentsOfFile: path) {
    FirebaseApp.configure(options: options)
    Messaging.messaging().delegate = self
}

전처리문을 통해 운영인지(_RELEASE) 아닌지를 구분하여 plist 파일을 다르게 적용해주었습니다.

 

실제 프로젝트에도 실제 plist 파일들이 있어야합니다.

2. Run Script에서 분기 처리

Project - Targets - Build Phases

Run Script 생성을 위해 아래 경로에서 새 스크립트를 생성합니다.

+ New Run Script Phase 항목을 선택합니다.

GoogleService-Info.plist 설정을 위한 스크립트이므로 이름을 수정해주었습니다.

새로운 스크립트를 생성했다면 하단에 추가되었을텐데 위 사진과 같이 Copy Bundle Resources 항목 위에 추가해주어야 합니다. (중요)

if [ "$CONFIGURATION" = "release" ]; then
printf "creating release configuration";
cp -r "$PROJECT_DIR/FCM/PRD_GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
else 
printf "creating dev configuration";
cp -r "$PROJECT_DIR/FCM/DEV_GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
fi

1번 방법과 마찬가지로 빌드 시점에 $CONFIGURATION 값을 바라보고 운영인지 개발인지 분기하여 해당 경로의 plist 파일을 프로젝트 root에 copy 해주는 작업을 해주었습니다.

 

FirebaseApp.configure()

이렇게 해주었다면 위 메서드 한 줄로 FCM 설정을 완료할 수 있습니다.

이해가 안되거나 틀린 부분이 있다면 댓글로 남겨주세요!