안녕하세요~ 차니에요!!
앱 푸시 알림을 위해 대표적으로 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 파일을 다르게 적용해주었습니다.
2. Run Script에서 분기 처리
Project - Targets - Build Phases
Run Script 생성을 위해 아래 경로에서 새 스크립트를 생성합니다.
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 설정을 완료할 수 있습니다.
이해가 안되거나 틀린 부분이 있다면 댓글로 남겨주세요!