それで、最初に彼の答えとコメントをくれたharaldに感謝します。それは、私が本当に達成したいことをよりよく考えるのに役立ちました。
私の考え、やりたいことに気づいたこと、そしてそれをどのようにしたかを要約しましょう。
自動化された方法でビルド番号(CFBundleVersion)を入力する方法が必要でした。この値は、ソース制御されているメインプロジェクトの-Info.plistファイルに保存されます。私は、「ビルドフェーズ」スクリプトを介してこれを自動化するためのガイドに従うことを懸念していました。それは、おそらく複数の開発者のためにこのファイルを変更し、絶え間ないマージが必要になる状況を引き起こすからです。
これが必要な理由は、特定のビルドでどのコードが使用されているかを簡単に追跡できるようにするためです。タグ付けと適切なドキュメントを使用して手動でこれを行うことは確かに可能ですが、TestFlightに対して多くのビルドが行われると思うので、より自動化された柔軟な方法が必要でした。
私の当初の考えは、この値に単純な増分ビルド番号を使用することでしたが、それはマージの問題になります。GitリポジトリでコミットSHAを使用するというハラルドの提案は、私にとってより良い考え方を引き起こしました。
したがって、私のソリューションの最初の部分は、コミットSHAの最初の9文字を使用することです(SHAは長すぎます)。GitLab HQ(ちなみに素晴らしいオープンソースプロジェクト)を実行しているので、最初の9文字を使用し、実行中のコミットストリームの表示に最初の9文字を使用します。これを取得するコマンドは次のとおりです。
/usr/bin/git rev-parse --short=9 HEAD
Gitマージの問題を回避するために、最初にプロジェクトの-Info.plistファイルのビルド番号(CFBundleVersion)値を変更してビルドを実行できるようにし、最後のステップで値をデフォルトに戻すことを考えました。 1ソース管理で変更されて表示されないようにします。「スクリプトの実行」を使用して「ビルドフェーズ」フローでこれを行うためのあらゆる方法を試しましたが、最後のステップで値を元に戻すためにコードを挿入しても、実行中のアプリに影響を与えていたようです。
もう少し掘り下げた後、私はスキーマとプレアクションとポストアクションに出くわしました。これが私のルートのようでした。
したがって、スキーマでは、「ビルド」プランに対して、CFBundleVersion値を現在のコミットID(9文字)に設定するプレアクションを作成し、ポストアクションでは、この値をデフォルトに戻します。 (1)。これは必要に応じて機能するようです。
これが私のプレアクションコードです:
buildPlist="$SRCROOT/$INFOPLIST_FILE"
echo "The build plist file $buildPlist"
CFBundleVersion="$(cd $SRCROOT;/usr/bin/git rev-parse --short=9 HEAD)"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
これが私のアクション後のコードです:
buildPlist=$"$SRCROOT/$INFOPLIST_FILE"
CFBundleVersion=1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $CFBundleVersion" $buildPlist
「ビルドフェーズ」スクリプトで使用していたものとは異なるこのコードで注意すべき点は、$SRCROOTを使用してディレクトリを設定するための要件です。当初、「ビルドフェーズ」と同じビルド設定が得られるという印象を受けましたが、そうではないようです。[スクリプトの実行]ウィンドウには、[ビルド設定の提供元:]という名前のオプションがあり、ターゲットを選択できます。たぶんそれは正しく機能していて、事前のアクションに関係なく、完全なディレクトリパスを設定する必要があります。それを理解するのに少し時間がかかったので、私はそれについて言及しようと思いました。
要約すると、私は受け取った情報に感謝し、それは私が何をしようとしていたかを考え、最終的に私が望んでいた目標に到達するのに役立ちました。