App Extension의 Bundle Version을 자동으로 앱의 Bundle Version에 맞추기

소개



iOS 앱 업데이트를 출시할 때 버전 번호를 업데이트하지만,
App Extension이 있다면 그 버전도 업데이트해야 할 것입니다.

App Extension의 버전 업데이트는 잊기 쉽기 때문에 자동으로 업데이트하려고합니다.

할 일



기본 타겟의 앱 버전을 업데이트하고 빌드하면
App Extension 버전 및 설정 앱에 표시되는 버전이 업데이트되도록 스크립트를 추가합니다.

※ 설정 앱에 정보를 표시하기 위해 Settings Bundle 을 사용합니다.
  본 기사에서는 Settings Bundle의 상세는 생략합니다 (>사람<)

Run Script 만들기



이번 샘플 프로젝트의 구성은 다음과 같습니다.

  • Build Phases에 Run Script Phase를 추가합니다.
  • 추가한 Run Script를 알기 쉬운 이름으로 이름을 바꿉니다.
    이번에는 'Refresh App Versions'라고 합니다.
  • 스크립트를 작성합니다.
    Run Script를 열고 스크립트를 작성합니다.

  • 이번에 추가하는 스크립트는 다음과 같습니다.
    
    APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
    /usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${PRODUCT_NAME}/Resources/Settings.bundle/Root.plist"
    /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" "${SRCROOT}/DemoAppNotificationServiceExtension/Info.plist"
    

    이제 빌드하면 Info.plist의 CFBundleShortVersionString 값이 설정 앱과 App Extension의 Info.plist에 기록됩니다.\(^ω^)/

    ※ 2, 3행째에는, 출력처의 plist의 PATH를 포함하고 있으므로, 프로젝트의 구성마다 조정이 필요합니다 m(_ _)m

    스크립트 내용 정보



    스크립트의 내용을 간략하게 설명합니다.
    APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
    

    첫 번째 줄은 Info.plist의 CFBundleShortVersionString 값을 변수 APP_VERSION에 유지합니다.PlistBuddy는 plist를 조작하는 프로그램입니다. (Mac에 기본적으로 포함되어 있습니다!)$PRODUCT_SETTINGS_PATH는 plist의 PATH를 나타내는 환경 변수입니다.
    /usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${PRODUCT_NAME}/Resources/Settings.bundle/Root.plist"
    

    두 번째 줄은 APP_VERSION 의 값을 Settings.bundle/Root.plistPreferenceSpecifiers 의 첫 번째 dictionary DefaultValue 키 값에 쓰고 있습니다.
    (PreferenceSpecifiers는 dictionary의 array입니다. array이므로 index는 0 시작입니다.)
    /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${APP_VERSION}" "${SRCROOT}/DemoAppNotificationServiceExtension/Info.plist"
    

    세 번째 줄은 두 번째 줄과 거의 같습니다.
    쓰기 대상이 App Extension의 Info.plist로 바뀌고 있을 뿐입니다(`・ω・´)

    사이고에게



    기본 타겟의 앱 버전을 업데이트하고 빌드하면,
    App Extension 버전 및 설정 앱에 표시되는 버전이 업데이트되었습니다!

    App Extension이 여러 개 있는 경우에도 마찬가지로 스크립트의 행을 추가해 나가면 한꺼번에 업데이트할 수 있습니다!

    좋은 웹페이지 즐겨찾기