How to auto-increment Bundle Version in Xcode 4?

后端 未结 9 881
情书的邮戳
情书的邮戳 2020-12-12 16:43

I am trying to figure out how to have the Bundle version number increment automatically in my Xcode 4 project (for ad-hoc and release builds). I found some scripts online th

相关标签:
9条回答
  • 2020-12-12 16:53

    1, Set CFBundleVersion to 1.0.1 or something like x.x.x

    1

    2, Add build phases to run shell script autoVersion.sh

    2

    3, save below script named autoVersion.sh

    #!/bin/sh
    # Auto Increment Version Script
    # set CFBundleVersion to 1.0.1 first!!!
    # the perl regex splits out the last part of a build number (ie: 1.1.1) and increments it by one
    # if you have a build number that is more than 3 components, add a '\.\d+' into the first part of the regex.
    buildPlist=${INFOPLIST_FILE}
    newVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$buildPlist" | /usr/bin/perl -pe 's/(\d+\.\d+\.)(\d+)/$1.($2+1)/eg'`
    #echo $newVersion;
    /usr/libexec/PListBuddy -c "Set :CFBundleVersion $newVersion" "$buildPlist"
    

    4, run shell: cp autoVersion.sh ~/Documents/ and chmod 777 ~/Documents/autoVersion.sh

    5, Build & Enjoy it. :)

    perl code from: https://gist.github.com/1436598

    0 讨论(0)
  • 2020-12-12 16:55

    For anyone wanting to integrate version incrementing into a command line build script (perhaps for continuous integration), see the following commands:

        # cd into the project folder containing the plist
        cd /Users/waitea/iOS/E.ON/iOS/trunk/Eon
    
        # grab the version numbers
        major_version=$(grep -C 2 CFBundleVersion App-Info.plist | grep -o '[0-9]\+.[0-9]\+.[0-9]\+')
        major_version_min=$(echo $major_version | grep -o '[0-9]\+.[0-9]\+\.')
        minor_version=$(echo $major_version | grep -o '[0-9]\+$')
    
        # increment the minor version
        increment=`expr $minor_version + 1`
        incremented_whole_version="$major_version_min$increment"
    
        # replace the build number in the plist using perl
        /usr/bin/perl -p -i -e "s/$major_version/$incremented_whole_version/g" App-Info.plist
    

    That will increment the rightmost number in a x.x.x style version number. Tweak the reg-ex's to alter for your convention.

    Took me a while so I thought I'd share to give back to the community!

    EDIT - I created a continuous integration system that'll do this for you

    https://github.com/adamwaite/XcodeProject

    0 讨论(0)
  • 2020-12-12 16:55

    FWIW - this is what I'm currently using to increase the build number only for release builds (which includes archiving). Works fine under Xcode 5.1.

    Just copy/paste the snippet into a Run script build phase directly in Xcode:

    buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
    
    if [ "$CONFIGURATION" = "Release" ]; then
    buildnum=$((buildnum + 1))
    echo "Build number updated to $buildnum"
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"
    fi;
    
    0 讨论(0)
  • 2020-12-12 16:55

    If you're using a version system like "x.x.x" you can add this run script. It'll increase the version number (x.x.x+1) every time a new build is made:

    if [ "${CONFIGURATION}" != "Debug" ]; then
    
    VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")
    
    NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $4}'`
    
    NEWSUBVERSION=$(($NEWSUBVERSION + 1))
    
    NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 "." $3 ".'$NEWSUBVERSION'" }'`
    
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"
    
    fi
    
    0 讨论(0)
  • 2020-12-12 17:05

    This might help you. I am using it in my projects. https://gist.github.com/alokc83/5207294

    #!/bin/sh
    # xcode-build-number-generator.sh
    # @desc Automaticvally create build number every time using curent day, month and year
    # @usage
    # 1. Select: your Target in Xcode
    # 2. Select: Build Phases Tab
    # 3. Select: Add Build Phase -> Add Run Script
    # 4. Paste code below in to new "Run Script" section
    # 5. Drag the "Run Script" below "Link Binaries With Libraries"
    
    
    #Credits 
    # sekati@github for intial direction about automatic versioning
    # http://www.codinghorror.com/blog/2007/02/whats-in-a-version-number-anyway.html (For unferstanding the Software Versoining)
    #Feel free to leave comment or report issues
    
    
    MONTH=`date | awk '{print $2}'`
    
    case "$MONTH" in
      'Jan' )
             MONTHNUMBER=1
         ;;
        'Feb' )
             MONTHNUMBER=2
        ;;
        'Mar' )
        MONTHNUMBER=3
        echo "Month is $MONTHNUMBER"
        ;;
        'Apr' )
             MONTHNUMBER=4
        ;;
        'May' )
             MONTHNUMBER=5
            ;;
        'Jun' )
             MONTHNUMBER=6
            ;;
        'Jul' )
             MONTHNUMBER=7
            ;;
        'Aug' )
             MONTHNUMBER=8
            ;;
        'Sep' )
             MONTHNUMBER=9
            ;;
        'Oct' )
             MONTHNUMBER=10
            ;;
        'Nov' )
             MONTHNUMBER=11
            ;;
        'Dec' )
             MONTHNUMBER=12
            ;;
    esac
    
    DATE=`date | awk '{print $3}'`
    echo "Date = $DATE"
    YEAR=`date | awk '{print $6}'`
    echo "Date = $YEAR"
    
    ### only uncomment section below if testing the format in terminal
    #echo "BuildNumber1 = $MONTH$DATE$YEAR"
    #echo "or BUILD NUMBER = $DATE$MONTH$YEAR"
    #echo "or BUILD NUMBER = $MONTHNUMBER$DATE$YEAR Format is |Month Number Date Year|"
    #echo "or BUILD NUMBER = $DATE$MONTHNUMBER$YEAR format is |Date MonthNumber Year|"
    ############################
    
    #### Uncomment only one one style or last one will be in effect
    #buildNumber=$MONTH$DATE$YEAR
    #buildNumber=$DATE$MONTH$YEAR
    buildNumber=$MONTHNUMBER$DATE$YEAR
    #buildNumber=$DATE$MONTHNUMBER$YEAR
    
    
    echo "Final Build number is $buildNumber"
    ## Below command write buildNumber in the property list
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
    
    0 讨论(0)
  • 2020-12-12 17:05

    I haven't found a great solution for Xcode 10.1. I have modified some scripts to reach the goal. And everything now works fine.

    version=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${INFOPLIST_FILE}")
    build=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${INFOPLIST_FILE}")
    /usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${version}" "${CODESIGNING_FOLDER_PATH}/Settings.bundle/Root.plist"
    
    0 讨论(0)
提交回复
热议问题