10

ビルド/アーカイブする前に、プロジェクトのビルドとバージョン番号を調整する必要があります。
いろいろ試しましたが、今のところ効果なし。

スクリプトを使用してターゲットを追加して数値を更新し、それを最初の依存関係としてメイン ターゲットに追加しました。しかし、アプリに拡張機能があり、すべての依存関係が Xcode によって並行して (または少なくともランダムな順序で) 実行されるため、複数の依存関係があるため、これは機能しません。

スキームに事前アクションを追加して、同じ結果を得ました。Xcode は、ビルドを続行する前に、事前アクションが完了するのを待機していません (テストのために sleep 100 を追加しました)。

ビルド番号を変更しているため、他の処理を開始する前にスクリプトを完了できることが重要ですが、もう 1 つの副作用もあります。目標。

agvtoolsさらに難しいのは、バージョンとビルド番号を設定するために使用したいということです。これは明らかに、plist を変更するために制御できないバックグラウンド プロセスを開始します。

免責事項:他の回答を検索しましたが、役に立ちませんでした。

4

2 に答える 2

9

agvtools は、Xcode ビルドでは機能しません。常にビルドが停止します。うまく機能するのは PlistBuddy ですが、セットアップはそれほど適切ではありません。

プロジェクトで新しいターゲットを呼び出すために、メイン スキームのビルドにプレアクションを追加しました。

xcodebuild -project "${SRCROOT}/MAIN_APP.xcodeproj" -scheme BuildNumberPreProcess

ターゲットBuildNumberPreProcessにはRun Scriptがあります:

VERSION=$(head -n 1 version.txt)
BUILD=`git rev-list $(git rev-parse --abbrev-ref HEAD) | wc -l | awk '{ print $1 }'`

echo "${VERSION} (${BUILD})"

SCRIPT="${SRCROOT}/CLIENT/Supporting Files/set-version-in-plist.sh"

"${SCRIPT}" "${SRCROOT}/MAIN_APP/Supporting Files/Info.plist" ${VERSION} ${BUILD}
"${SCRIPT}" "${SRCROOT}/EXTENSION/Info.plist" ${VERSION} ${BUILD}
...

set-version-in-plist.h:

#!/bin/sh

#  set-version-in-plist.sh
#
# usage:
# set-version-in-plist LIST VERSION BUILD
# LIST:      Info.plist path & name
# VERSION:   version number xxx.xxx.xxx
# BUILD:     build number xxxxx
#

# Location of PlistBuddy
PLISTBUDDY="/usr/libexec/PlistBuddy"

echo "$1: $2 ($3)"

${PLISTBUDDY} -c "Set :CFBundleShortVersionString $2" "$1";
${PLISTBUDDY} -c "Set :CFBundleVersion $3" "$1";
于 2015-04-08T13:25:08.140 に答える
2

Xcode には、ビルド/アーカイブ用のコマンド ライン ツールがあります: https://developer.apple.com/library/ios/technotes/tn2339/_index.html

したがって、最初にビルド/バージョン番号を調整するためにスクリプトを実行し、次に xcode ビルド/アーカイブをコマンド ライン ツールとして実行するシェル スクリプトを作成できます。

于 2015-04-04T20:25:01.823 に答える