web-dev-qa-db-ja.com

Xcode 4の「アーカイブ」ビルド専用のスクリプトの実行

Xcode 4のスクリプト実行ビルドフェーズからosascriptを使用して実行するスクリプトがあります。このスクリプトは、plistなどで人為的エラーを検出してキャッチするためにいくつかのチェックを行います。

ただし、実際にこのスクリプトを実行するのは、ビルドするたびに実行するのではなく、開発者が「アーカイブ」を選択した場合のみです。

この状況をテストする方法はありますか?シェルスクリプトまたはApple Script?

37
Wex

Xcode 4以降では、このスクリプトを「アーカイブ」アクションのアクション前またはアクション後のスクリプトとして実行できます。ただし、アクション前およびアクション後のスクリプトは、ビルド自体の一部とは見なされません。それらの出力はビルドログの一部ではなく、スクリプトが失敗してもビルドは失敗しません。

このスクリプトをビルドのファーストクラスの一部として組み込み、その失敗によりビルドが失敗するようにする場合は、別のことを行う必要があります。新しい「外部ビルドシステム」ターゲットを作成し、スクリプトを実行するように構成します。スクリプトへのパスは、プロジェクトルートからの相対パスにすることができます。

最後に、メインプロジェクトスキームを開き、「ビルド」タグで新しいチェッカーターゲットを追加し、「アーカイブ」アクションにのみ含まれるように設定します。これにより、「アーカイブ」が選択されている場合にのみチェッカースクリプトがビルドの一部として実行され、スクリプトがゼロ以外の値を返す場合、ビルドは失敗します。

A screenshot showing how to configure the scheme

53
BJ Homer
  1. プロジェクトの「ビルドフェーズ」に「新しい実行スクリプトフェーズ」を追加する
  2. スクリプトを正しい位置に移動(ドラッグ&ドロップ)
  3. 「インストール時にのみスクリプトを実行する」をチェックします

を実行しない場合、スクリプトは常に実行されますが、このボックスをオンにすると、アーカイブ時にのみ実行されます。

15
Mike

私のシステムでの簡単なテストでは、「Build」と「Build and Archive」の詳細なスクリプト出力に違いはありません。

また、すべてのスクリプトが実行されたときにプロセスの最後にしか作成されないため、アーカイブの存在(または不在)をテストすることはできません。

私が知る限り、これを行うためのXcode 3内の現在のオプションはありません。たぶん、アップルに機能強化のリクエストを提出しますか?

Appleを待つ間、私が提供できる唯一の解決策は、コマンドラインシェルスクリプトの一部としてxcodebuildとxcrunを使用することです。この場合、knowアーカイブするかどうか。これはとどまるXcodeソリューションではありませんが、多くの柔軟性を持っています。

Xcode "Build and Archive" from command line

0
Philippe