WWDC Quick Look 💓 By SwiftGGTeam
Get the most out of Xcode Cloud

Get the most out of Xcode Cloud

元の動画を見る

ハイライト

Xcode Cloud は、チームがビルド消費を監視および最適化できるように、使用状況ダッシュボードを追加します。開始条件を細かく設定し、テスト宛先を合理化し、無関係なファイル変更を除外することで、品質を低下させることなく CI 計算の使用量を大幅に削減できます。

主要内容

あなたのチームは Xcode Cloud を使用していますが、毎月のコンピューティング クレジットがすぐに消費されてしまいます。リリース ワークフローでは、コードを変更せずにバージョンをビルドすることが多く、テストは多数の同様のシミュレーターで繰り返し実行され、ドキュメントの更新によって完全なビルド プロセスがトリガーされます。

(02:17) セッションでは、フード トラック プロジェクトを使用してこれらの問題を診断し、最適化する方法を示します。

ビルド時間と使用量を理解する

(02:25) Xcode Cloud の 2 つの重要な指標:

  • 期間: 実測時間、ビルドの開始から結果のレンダリングまでの合計時間
  • 使用量: すべてのアクションの計算時間の合計

分析、アーカイブ、ビルド、テストなどのアクションは並行して実行されるため、期間は最も遅いアクションの時間に等しく、使用量はそれらの合計となります。 14 分のビルドでは 32 分の使用量が消費される可能性があります。

(02:43) ビルドの詳細で、使用量の分布を表示し、各アクションにかかる時間を確認できます。これが最適化のエントリ ポイントです。

Usage Dashboard

(03:55) App Store Connect の新しい使用状況ダッシュボードでは、次のものが提供されます。

  • 現在の請求期間の合計使用量と残高の割合
  • 30 日間のビルド数と使用傾向
  • 製品ごとの使用量分布を表示
  • ワークフローごとの使用状況統計の表示

(04:55) 特定の製品を入力すると、各ワークフローの使用方法を確認できます。多くの場合、リリース ワークフローは最適化の対象として最も価値があります。

開始条件を最適化する

(05:34) 開始条件により、どのイベントがビルドをトリガーするかが決まります。 Food Truck のリリース ワークフローはもともとスケジュールされた条件を使用し、定期的に構築されていたため、新しい変更がない状況が頻繁に発生しました。

(06:30) ブランチ変更条件に置き換えられました: コードがリモート ブランチにプッシュされた場合のみビルドします。さらに一致のみに制限するrelease/*機能ブランチの変更によってリリース ワークフローがトリガーされるのを防ぐために、接頭辞付きブランチを追加します。

(07:52) 特定のフォルダーへの変更を除外することもできます。 Food Truck の docs ディレクトリには開発ドキュメントのみが含まれており、ドキュメントを変更してもビルドをトリガーする必要はありません。

  1. 開始条件で [ファイルとフォルダー] > [カスタム条件] を選択します。 2.「ビルドを開始しない」を選択します。
  2. 条件を追加します: [任意のフォルダー] > [ドキュメント]

テスト先の合理化

(09:08) テスト アクションでは、各宛先が並行して実行されます。エミュレータを選択しすぎると使用量が増加し、同様のデバイスでノイズの多い障害が発生します。

(09:31) Xcode Cloud は、さまざまな画面サイズの代表的なデバイスをカバーするエミュレーターの厳選されたリストである「推奨」エイリアスを提供します。手動で選択した多数のシミュレーターを推奨 iPhone に置き換えて、使用量を削減しながらテスト範囲を確保します。

特定のコミットをスキップする

(10:42) README の更新のみなど、一部のコミットでは CI をトリガーする必要はありません。コミットメッセージの最後に追加します[ci skip]

git commit -m "Update README [ci skip]"

Xcode Cloud はプッシュ後このイベントを無視します。正確な形式を使用する必要があることに注意してください。

最適化効果

(12:10) これらのベスト プラクティスを適用した後、フード トラックのビルド時間が 1 分短縮され、使用量が 4 分減少しました。統合ワークフローが長期間実行されると、使用傾向は大幅に低下し、新しい watchOS ワークフロー用のクォータが解放されました。

詳細

開始条件の設定

(06:40) リリースワークフローの開始条件設定例:

Start Condition: Branch Changes
  Source Branch: Custom Branches
    - Branches beginning with: "release"
  Files and Folders: Custom Conditions
    - Don't start a build when: Any Folder = docs

キーポイント:

  • ブランチの変更は、スケジュールされた空の実行を避けるために、コードがプッシュされたときにのみトリガーされます。
  • カスタム ブランチは完全一致または接頭辞一致をサポートします
  • ファイルの除外は正確なファイル パスまたはフォルダーをサポートします
  • 複数の条件間に AND 関係がある

テスト先の選択

(09:46) アクションの宛先構成をテストします。

Test iOS
  Destinations:
    - Recommended iPhones (iPhone 8, iPhone 11, iPhone 12, iPhone 13... の代替)

キーポイント:

  • 推奨されるエイリアスは、さまざまな画面サイズと機能の組み合わせをカバーします
  • 宛先ごとに独立してテストを実行し、並行して実行します
  • 同様のデバイスでのテストの失敗にはノイズが多いため、宛先を減らすと誤検知を減らすことができます
  • プロジェクトにデバイス固有のコードパスがある場合は、対応する宛先を追加できます

Custom Scripts

11:07)各 action は複数のタイミングでカスタムスクリプトを実行します。

# 未使用の依存関係をクリーンアップ
brew cleanup

# 不安定な API リクエストをリトライ
for i in {1..3}; do
    curl -f https://api.example.com/data && break
    sleep 5
done

キーポイント:

  • スクリプトは action の pre-build、post-build などの段階で実行されます
  • 一時ファイルやキャッシュをクリーンアップすると、ビルド時間を短縮できます
  • 外部サービスへのリクエストにリトライロジックを追加し、偶発的なネットワーク問題によるビルド失敗を避けます

テストの信頼性

(11:30)不安定なテストにより、ビルドが繰り返し再試行され、大量の使用量が無駄になる可能性があります。 Fixing these tests should be prioritized rather than relying on retries.

不安定なテストの一般的な理由:

  • 非同期操作が正しく待機していない
  • テスト間で状態を共有する
  • 外部サービスまたはネットワークへの依存
  • 時間に敏感なアサーション

重要ポイント

  • やるべきこと: チーム用に Xcode Cloud 使用状況監視メカニズムをセットアップする

  • 実行する価値がある理由: 使用状況ダッシュボードは使用状況を透明にし、無駄を特定し、割り当てを合理的に割り当てるのに役立ちます。

  • 開始方法: App Store Connect の使用状況ダッシュボードを定期的に確認し、ワークフローごとに使用状況の分布を分析します

  • やるべきこと: さまざまなブランチ タイプに独立したワークフローを構成する

  • 実行する価値がある理由: フィーチャー ブランチでは簡単なビルドとテストのみが必要で、リリース ブランチでは完全なアーカイブと分析のみが必要です。

  • 開始方法: 複数のワークフローを作成し、開始条件のブランチ変更を使用して、異なるブランチ プレフィックスに一致させます。

  • やるべきこと: コミット仕様に CI スキップ マーカーを導入する

  • 実行する価値がある理由: 完全な CI プロセスを必要としないドキュメントの更新、構成ファイルの調整、その他の送信により、使用量を節約できます。

  • 開始方法: チームの Git ワークフロー ドキュメントに追加します[ci skip]使用説明書

  • やるべきこと: watchOS コンパニオン アプリ用のスタンドアロン Xcode Cloud ワークフローを構成します。

  • 実行する価値がある理由: watchOS は iOS から独立してビルドおよびテストされ、個別の構成によりトリガー条件と送信先をより柔軟に制御できます。

  • 開始方法: Xcode のレポート ナビゲーターで新しいワークフローを作成し、watchOS 関連のスキームとテスト計画を選択します。

関連セッション

コメント

GitHub Issues · utterances