개발자 블로그

CFBundleVersion Mismatch 문제 해결하기 본문

프로그래밍/iOS-SWIFT

CFBundleVersion Mismatch 문제 해결하기

로이드.Roid 2018. 5. 8. 19:27

최근에 아이폰 앱을 업데이트 하는 과정에서 겪은 문제다. 

제목이 너무 길어질까봐 CFBundleVersion Mismatch 하나만 썼는데, 아마 CFBundleShortVersionString Mismatch 경고도 함께 떴을꺼다. 일단 에러는 아니다. 그렇기 때문에 그냥 냅둬도 문제는 없지만 괜히 찝찝하니깐 해결하는 방법을 알아보자.

그 전에 아래는 애플에서 받은 메일. 

내용을 요약하면, "메인 앱과 쉐어 익스텐션 버전이 불일치한다. 앱 업로드는 성공했다." 정도 되겠다.


이번에 Share Extension을 추가했는데, 원래 메인 앱(이걸 정확히 뭐라고 지칭해야 되는지 모르겠네..)과 버전이 다르기 때문에 발생한 경고였다. 업로드 하기 전에 Validate 할 때는 아무 말이 없더니.. 진작 알려주든가하지.

뭐 어쨌든, 수정은 간단하다. 그냥 버전만 서로 맞춰주면 된다. 근데 아마 매번 업로드 할 때 수작업으로 이걸 하고 싶지는 않을꺼다. 사실 CFBundleVersion이라고 되어있는 빌드넘버도 업로드 할 때 같은 번호를 재사용 못하기 때문에 변경해줘야 된다. 하지만 이 작업 역시 매번 수작업으로 하기는 귀찮은 일이기 때문에 Build Phases에 스크립트를 추가해서 자동으로 증가되도록 한다.


일단 이 빌드넘버 자동 증가 스크립트는 아래와 같다.

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"

참고로 자동증가를 막으려면 주석처리 해주면 되고, 주석처리를 하려면 맨 앞에 "#" 문자를 추가하면 된다.


그리고 아래는 Share Extension의 버전을 자동으로 동기화 시켜주는 스크립트

INFOPLIST_MYAPP="${SRCROOT}/(메인앱의 plist 파일 path)"
myAppVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_MYAPP")
myAppBuild=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_MYAPP")

INFOPLIST_SHAREEXT="${SRCROOT}/(Share Extension의 plist 파일 path)"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $myAppVersion" "$INFOPLIST_SHAREEXT"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $myAppBuild" "$INFOPLIST_SHAREEXT"

파란색으로 쓴 부분은 각자의 환경에 맞게 적절히 변경해주면 된다. 내 앱을 예로 들면 "${SRCROOT}/SmingPicMaker/Info.plist". (괄호는 빼고 입력)

위 스크립트도 메인 앱의 Build Phases에 작성해주면 된다.


이렇게 하면 빌드 할 때 메인 앱의 빌드넘버가 자동으로 증가하고, Share Extension의 빌드넘버와 버전문자열은 메인 앱의 것과 자동으로 동기화 된다.


Comments