1

カスタム スクリプトを使用して、アプリをビルドして実行するときに app-info.plist の CFBundleVersion を更新します。この情報は、アプリでもアプリ名とバージョンを表示するために使用されます。アップデートはビルド プロセスでは正常に機能しますが、残念ながらアプリ自体で古い情報が読み取られます。

たとえば、アプリをビルドして実行すると、 app-info.plist が更新され、CFBundleVersion8が になりましたが、シミュレーターでは値7が表示されます。

更新された app-info.plist はビルド プロセスでは使用されず、代わりに古いバージョンが使用されるようです。

更新された app-info.plist がアプリで使用されていることを確認するにはどうすればよいですか? ビルド プロセスの最初にスクリプトを実行するか、ビルド プロセスで app-info.plist を更新する必要があります。しかし、両方について、私はこれを行う方法がわかりません...

[Project] > [Buildphases] > [Add Build Phases] > [Add Run Script] の下にカスタム スクリプトを追加しました。以下の内容で:

shell: /bin/bash   Tools/addVersionNumber.sh

Tools/addVersionNumber.sh -> 希望どおりに動作します

#/bin/bash
# script that should be executed in the build phase
# to set the build number correct

plist="app-folder/app-Info.plist"

## get git information 
# git_rev_full_hash=$( git rev-parse HEAD )
git_amount_commits=$( git rev-list HEAD | wc -l )
git_rev_short_hash=$( git rev-parse --short HEAD )
buildRevision="$git_amount_commits: $git_rev_short_hash"

# set build revision ( git short hash - amount of commits )
/usr/libexec/PlistBuddy -c "Set :BuildRevision $buildRevision" $plist""

## build number
buildNumber=$( /usr/libexec/PlistBuddy -c "Print CFBundleVersion" $plist ) 
buildNumber=$(( $buildNumber + 1 ))

# set new build number
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" $plist

乾杯 -- ジェリック

4

1 に答える 1

3

解決策を見つけました。トリックは、build フォルダーの info.plist と dsym の plist (?) も更新する必要があるということでした。

私の実行スクリプトは次のようになります

#/bin/bash
# script that should be executed in the build phase
# to set the build number correct
#
# http://www.cimgf.com/2008/04/13/git-and-xcode-a-git-build-number-script/
# http://stackoverflow.com/questions/7944185/how-to-get-xcode-to-add-build-date-time-to-info-plist-file
# http://www.danandcheryl.com/2012/10/automatic-build-numbers-for-ios-apps-using-xcode

# Marketing Number is in CFBundleShortVersionString - will be edited manually
# @TODO add logging 

plist="app-folder/app-Info.plist"
build_plist=$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH
conInfo="Contents/Info.plist"
dsym_plist=$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME/$conInfo

function writePlist( ) { 

    # set build revision ( git short hash - amount of commits )
    /usr/libexec/PlistBuddy -c "Set :BuildRevision $buildRevision" $1

    # set build date
    /usr/libexec/PlistBuddy -c "Set :BuildDate $buildDate" $1

    #set build number
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" $1
}

# git_rev_full_hash=$( git rev-parse HEAD )
buildRevision=$( git rev-parse --short HEAD )
git_rev_plist_hash=$( /usr/libexec/PlistBuddy -c "Print BuildRevision" $plist )

# Only update version if a commit was performed. Avoid update version when in development cycle
if [[ $git_rev_plist_hash != $buildRevision ]]; then

    ### variables for updating plist
    # set new build number and date
    buildNumber=$( /usr/libexec/PlistBuddy -c "Print CFBundleVersion" $plist ) 
    buildNumber=$(( $buildNumber + 1 ))
    buildDate=$(date "+%Y-%m-%d %T %z %Z")

    writePlist $plist
    writePlist $build_plist
    writePlist $dsym_plist

fi 

乾杯 -- ジェリック

于 2013-03-22T10:51:34.040 に答える