먼저 현지화(Localization) 작업을 하면 info.plist를 통해 언어별로 보여질 내용을 적어야 하기 때문에 아래처럼 파일이 나눠집니다. (infoPlist.strings)
꼭 할 필요는 없지만, 영문버전을 사용할경우 테스트할때도 앱 이름에 [Dev]가 보여지면 팀원들도 구분하기 명확할거 같아 추가했습니다.
2. GoogleService-Info
앱 디버깅을 하기 위해 Crashlytics를 사용하고 있는데, dev로 테스트했을때 찍히는 로그와 prod에서 찍히는 에러로그들을 나눠 지표를 파악하고 싶었습니다.
3. awsconfiguration.json
AWS에서 제공하는 KVS(Kinesis Video Streams)를 사용하기 위해 인증이 필요한데 Dev, Release에 따라 값이 다르기 때문에 매번 수동으로 설정해뒀던걸 자동으로 바꿔주게 하고 싶었습니다.
방법
GoogleService-Info.plist을 환경별로 프로젝트를 만들었다고 가정후 예로 들자면
1. Dev, Release 폴더를 따로 나누고
2. TARGETS → Build Phases → Run Script 추가
3. shell 명령어 입력
환경별 파일 경로 지정
# Type a script or drag a script file from your workspace to insert its path.
case "${CONFIGURATION}" in
"Dev" )
cp -r "$SRCROOT/${PROJECT_NAME}/FirebaseConfig/Dev/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
"Release" )
cp -r "$SRCROOT/${PROJECT_NAME}/FirebaseConfig/Release/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
*)
;;
esac
다른 파일들도 위와 같이 경로지정을 해주면
빌드시 환경별로 지정해둔 파일을 가리키게 됩니다.
참고
Run Script의 경우 이름을 바꿔도 상관없음
에러
해당 작업을 하면서 여러가지 에러가 있었는데 아래와 같이 해결 했습니다.
1. Command PhaseScriptExecution failed with a nonzero exit code
경로에 해당 파일이 없다는 뜻인데
Xcode 좌측 네비게이터 끝 부분에Build 버튼을 누르면 어디서 어떤에러가 났는지 확인할 수 있습니다.
해당 경로에 없는파일을 채워주면 해결 됩니다.
다른로그지만 이런식으로 디버깅을 할 수 있음
2. Multiple commands produce error
문제가 발생하는 파일 클릭 후 오른쪽 Utilities창 → Target Membership → 프로젝트 이름 체크해제,
Run Script의 순서를 Copy Bundle Resources 아래에 설정해주면 정상작동됩니다.
이런식으로 ..
조금만 더 빨리 적용했다면 그동안 아카이브 했을때 좀더 신경쓰는 수고를 덜어낼 수 있었을텐데 라는 생각이 들었습니다.