16

最後に...数年の視聴と1か月の参加の後、皆さんに私自身の質問をする機会があります。

上司は、ビルド番号をインクリメントするために私(またはプロセス)を信頼していません。また、ビルドの日付と時刻をアプリに焼き付けたいと考えています。これを通常のInfo.plistファイルに入れたいと思います。

私はこの関連する質問を見つけました:

iOSアプリケーションで情報をビルドします(アプリがビルドされた日付/時刻)

そこでの回答に基づいて、Scheme Editorに移動し、ビルドフェーズの「Post-Action」セクションに以下のスクリプトを追加しました。

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

XCodeでは、SchemeEditorウィンドウは次のようになります。


(出典:maniac.deathstar.orgのmyke

残念ながら、BuildDateがInfo.plistに書き込まれることはありません。

「${builddate}」を「$builddate」に変更しても機能しません。次の行をスクリプトに追加しました。

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

そして、日付は書き出されたファイルで完全にうまく見えました。上記のスクリプトからInfo.plistファイルに文字列を書き込むと、問題なく動作します。

要約すると、Info.plistファイルに追加される日付を取得するにはどうすればよいですか?

4

3 に答える 3

6

ああ、私は自分の質問を投稿する前に、さらに 30 分 (既に無駄にしていた 2 時間に加えて) を費やして、この質問の回答を確認する必要がありました。

Xcode に Subversion リビジョン番号を挿入する

このアクション後のスクリプトは、トリックを実行し、私のために機能します。

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

ご覧のとおり、そこで少しハックを行っています (存在しない場合は追加し、後ですぐに設定します)。

誰かが上記の「デフォルト書き込み」方法を使用して解決策を提案できる場合 (「PlistBuddy」よりもサポートされていると思います)、私は喜んで見つけます (もちろん、その優れた回答を受け入れて使用します。それも)。

于 2011-10-30T10:13:37.767 に答える
5

Michael の回答のコードが正しくないか、最新ではありません。以下のバージョンでは、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

注:この変更は編集として送信されましたが、拒否されました。彼の回答にコメントを投稿するのに十分な評判はまだありません...

于 2015-05-25T09:53:51.850 に答える
3

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

ところで、提案をありがとう、それはかなり賢くて便利です。

于 2011-10-30T09:54:55.227 に答える