2011-10-30 21 views
15

最後に、2年間の視聴と1ヶ月の参加の後、皆さんに自分の質問をする機会があります。Info.plistファイルにビルド日時を追加するXCodeを取得する方法

私の上司はビルド番号を増やすために私(またはプロセス)を信頼していません、また、ビルド日付&をアプリに焼きたいと思っています。私はこれを通常のInfo.plistファイルに入れたいと思います。

私は、この関連する質問が見つかりました:

Build information in iOS Application (date/time app was built)

をし、そこ回答に基づいて、私はスキームエディタに行き、ビルドフェーズの「ポスト・アクション」セクションに以下のスクリプトを追加しました: Xcodeで

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    defaults write "${infoplist%.plist}" BuildDate "${builddate}" 
fi 

、私のスキームEditorウィンドウは、次のようになります

残念ながら、BuildDateは決してInfo.plistに書き込まれません。

"$ {builddate}"を "$ builddate"に変更することもできません。私はこの行をスクリプトに追加しました:

echo "build date is $builddate" > /tmp/result.txt 

日付は書き出されたファイルに完全に正しく表示されました。上記のスクリプトからInfo.plistファイルに文字列を書き込むと、問題なく十分にうまくいきます。

これで、Info.plistファイルに日付を追加する方法をまとめましたか?

+0

私はあなたを使用して問題ありませんでしたスクリプトがポストアクションとして実行されますが、署名が無効になってしまいます。ポストアクションの代わりにビルドフェーズとしてうまくいくと思われます。これは、ワークスペースを共有するかどうかに関係なく作業するという利点もあります。また、プレアクションはビルド時の上書きを引き起こす実際のinfo.plistへの変更によって前哨戦に襲われるため、プレアクションよりも優れています。 – smparkes

答えて

4

マイケルの答えのコードが間違っているか、または最新のものではありません。以下のバージョンでは、set構文のエラーを修正し、空白を含むビルドパスもサポートしています。

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

注:この変更は編集として提出されたが、拒否されてしまったと私はまだ彼の答えにコメントを投稿するのに十分な評判を持っていない...

2

私は正確なコードを使用していますが、事後アクションではなく事前アクション内にあり、ビルドされた製品内のinfo.plistはビルド日付を正しく報告します。つまり、のinfo.plistをカスタマイズしてをビルドした製品にコピーする必要があります。これは妥当なものです。

ところで、提案していただきありがとうございます。それはかなり巧みで便利です。

+0

pre-actionでこれを行い、実際にinfo.plistを更新すると、あなたの変更はアップデートで活躍します。 info.plistはあまり更新されていないので、大したことではないかもしれません。 – smparkes

5

えーえ、私は(私はすでに無駄にしていた2時間の上に)別の30分を過ごしたし、私自身の投稿前この質問に対する答えを見ておく必要があります。

Insert Subversion revision number in Xcode

これをポストアクションスクリプトは、トリックを行い、私の作品:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
    # if BuildDateString doesn't exist, add it 
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}" 
    # and if BuildDateString already existed, update it 
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}" 
fi 

あなたが見ることができるように、それは(それが存在しない場合は、それを追加し、右後でそれを設定)がハッキングのビットをやっています。

上記の "defaults write"メソッド(「PlistBuddy」よりも優れていると思われる)を使用して解決策を提案できれば、私は気づくことができて嬉しく思います。その優れた答えも)。