9

iOS用のアプリケーションをアーカイブするビルドについてのみ、ビルド日付とビルド番号をInfo.plistファイルに自動的に追加したいと考えています。

私のスクリプトは次のとおりです

#!/bin/bash
# This was taken from variations from:
# http://davedelong.com/blog/2009/04/15/incrementing-build-numbers-xcode

if [ "$CONFIGURATION" != "Release" ]
then
exit
fi


buildPlist="$SRCROOT/$PROJECT_NAME/$PROJECT_NAME-Info.plist"


# Get the existing buildVersion and buildNumber values from the buildPlist
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" "$buildPlist")

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" "$buildPlist")

buildDate=$(date "+%s")


# Increment the buildNumber
buildNumber=$(($buildNumber + 1))

# Set the version numbers in the buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c  "Set :CFBuildDate $buildDate" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleLongVersionString $buildVersion.$buildNumber.$buildDate" "$buildPlist"

ここではすべてがうまく機能しており、[ビルドフェーズ]タブのターゲットの依存関係の直後に、このスクリプトをビルドフェーズとして実行しています。

私が抱えている唯一の問題は、プロジェクトが新しい値ではなく、Info.plistの古い値を使用して構築されているように見えることです。

つまり、アプリケーションをアーカイブして、結果のipaのInfo.plistファイルを調べると、古い値が反映されています。ただし、プロジェクトのInfo.plistを見ると、スクリプトは実際に正しく実行されましたが、古いInfo.plistを使用してプロジェクトをビルドするのに間に合わなかったことがわかります。

これに対する解決策はありますか?

これは比較的簡単に修正できるように思えますが、このトピックに投稿された記事でこの問題について質問している人がそれほど多くないことに驚いています。

4

3 に答える 3

6

答えは信じられないほど簡単でした。必要なのは、Info.plistの前処理をオンにしてから、__TIMESTAMP__プリプロセッサディレクティブを使用することだけでした。

于 2013-01-01T18:23:11.870 に答える
4

問題は、Info.plistファイルが他の何かが実行される前に処理されることです。ビルドログの調査から、これには、それをバイナリに変換し、ビルドディレクトリ内に配置することが含まれます。

これを修正するには、バージョン管理スクリプトは、プロジェクトディレクトリ内のファイルではなく、ビルドディレクトリ内のファイルを変更する必要があります。ビルドディレクトリ内のへのパスはInfo.plist、ビルドプロセス中に設定される次の環境変数を組み合わせることで取得できます。

plistpath=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}

ここでファイルを変更する$plistpathと、最終的に最終的なアプリケーションにパッケージ化されるplistが変更されます。

この手法を使用して、ビルド情報をリリースに取り込み、バージョン管理スクリプトを最初のビルドフレーズとして実行します。

于 2013-09-16T22:20:39.070 に答える
0

アプリケーションをアーカイブするとアプリがビルドされ、ビルド数が増加します。バイナリをコンパイルする前に、そのスクリプトの実行を試みることができます(ビルドフェーズで実行スクリプトを一番上までドラッグするだけです)。それがうまくいかない場合は、アーカイブを構築している場合は、条件付きで2ずつインクリメントすることができると確信しています。

于 2012-12-25T20:14:50.080 に答える