ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
チーム用のXcode Cloudについて詳しく見る
あらゆる規模の開発チームによるAppleの継続的インテグレーションや継続的デリバリ(CI/CD)サービスを利用して、高品質のAppを提供できるようにする方法をご覧ください。Xcode Cloudをチームの有する既存のApp開発プロセスに統合し、CI/CDプラクティスでXcode Cloudを効率的に使用する方法を紹介します。また、App Store Connect APIを使用して、Xcode Cloudと課題追跡システムを統合する方法をはじめ、コード依存管理やベストプラクティスも紹介します。 このセッションを最大限に活用するには、WWDC21の「高度なXcode Cloudワークフローのカスタマイズ」を最初にご覧ください。
リソース
- About continuous integration and delivery with Xcode Cloud
- Configuring start conditions
- Configuring webhooks in Xcode Cloud
- Configuring your Xcode Cloud workflow’s actions
- Developing a workflow strategy for Xcode Cloud
- Writing custom build scripts
- Xcode Cloud
- Xcode Cloud workflow reference
関連ビデオ
WWDC23
WWDC22
-
ダウンロード
こんにちは ジョンです Xcode Cloudチーム技術者です 私はXcode Cloudチームの デザイナー ジョー リンです 今日は 5人または500人の チームであろうと チームの一員としてXcode Cloud を使う際に非常に役立つ Xcode Cloudの機能を いくつか見ていきます チームの一員として Xcode Cloudを使う際に有効な 他の機能やベストプラクティス についても紹介します 今日の回では 他の回でも 取り上げられるような トピックについて 詳しく説明します Webhooksや他の高度ワークフロー について学びたい場合は 「Xcode Cloud高度ワークフロー カスタマイズ」をご覧下さい この回ではXcode Cloudを 日常的に使う既存ツールや テクノロジに統合する方法 コードの依存関係の管理方法 Xcode Cloud の ベストプラクティスを紹介し ワークフローを設定して Appのビルド テスト 配布を継続的 効率的に 行う方法を説明します
さっそく始めましょう Xcode Cloudを 既存ツールに統合する場合 いくつかの オプションがあります Webhookを利用し 対応する ツールやサービス連携が容易になります Xcode CloudにWebhookを 送信するURLを伝えることで App Store Connectで Webhookを接続でき それらのWebhookが すぐに届き始めるはずです
APIを利用することで ビルドを可視化でき ビルドダッシュボードを 簡単に作成したり ビルドアーチファクトを 抽出したり 今日の例では ビルド情報を既存の ソフトウェアに統合したりできます
屋台Appの新機能を 次々と構築してきましたが 新たなバグも見つかり 今ではチームで 一緒にAppに 取り組んでいるため 誰が何に取り組んでいるのか 分かりにくくなっています
この問題を解決するため Appで行う全作業を追跡する為 課題追跡システムを 使うことにしました 課題追跡システムを使う場合 この様なビューがあります チケットの作成 デザイナや デベロッパの作業 そして完成したチケットの クローズというのが 一般的なワークフローです 実際のビルド情報が イシュートラッカーに 表示されることは すべての点を結びつける上で 大きな助けとなります その方法を今から 考えてみましょう 私たちの計画は 課題追跡デバイスをXcode Cloudと 統合するために 必要なすべてを処理する シンプルなSwift On Serverベースの サービスを作成することです 開発スピードを上げるため Vapor Web構成を使用し Webhook処理コードの 記述に集中します 基本的な流れは このようになります Xcode Cloudから サーバにWebhookが届きます このwebhook を読み コミッタが書いたメッセージの中に 私たちのトラッカーの 問題に対応する 特定の文字列があるか をチェックします もしそうなら Xcode Cloud APIを叩いて ビルドに関する詳細な 情報を収集します そして 私たちが興味を 持っている情報を含む 課題追跡システムに 投稿するコメントを作ります
私たちの課題追跡システム のAPIを呼び出し 私たちの課題に対する メッセージを保存します まず Xcode Cloud APIの ドキュメントを見ましょう Xcode Cloud APIは全て Connect APIの下に存在します App Store Connect API 用の認証トークンをすでに セットアップしている場合 Xcode Cloudデータへの接続に 必要なものは揃っています Build Runsコレクションを開くと ビルドを操作するための エンドポイントが いくつか表示されます エンドポイントを呼び出すと ビルドを作成したり ビルドをキャンセルしたり 特定の詳細情報を取得できます 例えば ビルドの 状態を表示する ダッシュボードを 作りたい場合 Ci_Build_Runsエンドポイントを 呼び出せば良いのです 次に ドキュメントにある Artifactsコレクションを見てみましょう 私たちの構成では ビルド アーティファクトをXcode Cloudの 外に置いておきたく API には 必要なものが揃っています ビルド行動エンドポイントから アーティファクトIDを取得すると 指定された行動に対して 作られた全アーティファクトが返されます その後ci_artifactを呼び出すと downloadUrl属性にアーティファクトを ダウンロードするのに 必要なURLが与えられます まず App Store Connect のドキュメントから openAPIの仕様書を ダウンロードし API用顧客を作成する為に 必要なものを見ましょう
クライアントコードを作る 新しいディレクトリを作りましょう これをxcodecloud-client と呼ぶことにします ジェネレーター用のコマンドライン ツールをダウンロードする必要があります openAPIのサイトには 様々な方法がありますが この回のために すでに設定しました app_store_connect_API から取得した openAPI specをディレクトリ にコピーしてみましょう openAPI ジェネレータ を呼び出し API 用のswift顧客を 作るよう指示できます
発電機が動いている間に それが何をしているのか 話してしまいましょう openAPI仕様は APIを構成する全パスと モデルに関する 情報で構成されています ジェネレータは API の各パスを通過し その特定のパスと 対話できる Swiftコードを 強く型付けされたswift オブジェクトで生成しています ほとんどの場合 JSONのエンコードや デコードをする 必要はありません ジェネレータが 終了したので 作成されたファイルを 簡単に見てみましょう 便利なことに 顧客コードは Swiftパッケージにあります 課題追跡システムを 更新するための ウェブフックサーバに 組み込むのがとても簡単です 新しいgitリポジトリに コードをコミットでき これをSwiftパッケージとして 参照できるようになりました APIと会話するのに 必要なものが揃ったので Webhookを 設定してみましょう App Store Connectに登録し ビルドが完了するたび サーバーに通知する Webhook を登録することができます これを行うには App Store Connectで製品に移動 設定に移動し Webhooksに移動します
うちのサーバの URLを貼り付けます Xcode CloudはどこにWebhook を送信するべきかを知れます Webフックの セットアップが完了したら それを処理するコードを 書くのみです 始めましょう Webhookからの 取得フィールドに マッチする構造体を 定義する必要があります Webhookには 実行中の特定のビルドや 実行中の各アクションに関する 情報が含まれているので これらをWebhookのペイ ロード構造に格納しておきましょう
次にVapourが受信したWebhook を関数に正しくルーティングするよう コードを記述する 必要があります Webhookパスへのpostリクエスト で実行する関数を定義します この関数内部では 受信した JSONペイロードを 強く型付けされたSwiftオブジェクトに 変換するために必要なことは デコードなので そのコードも追加します
あとは Xcode Cloud API を呼び出して 完了したビルドに関する もう少し詳しい情報を取得し 課題追跡ページに 記載することができます Webhookペイロードには 今実行したビルドに 関する多くの情報と どのアクションが成功または 失敗したかが含まれています それでもいいのですが 次の段階へ進みましょう 各アクションでどんな 課題が見つかったかという 情報も掲載すると 素晴らしいですね
CiBuildActionsAPIに 拡張関数を書くことで 特定のアクションに ついて関心のある課題を 簡単に返すことができます
この拡張機能では ビルドアクションIDを パラメータとして受け取り 特定のアクションで 見つかったすべてのissue を返す関数を作成します
私のプロジェクトにはもうありますが 残りのコードを埋めていきます
Webhookハンドラはビルドが完了した 場合のみ実行されるようにしたいので そのようにならないように ガードしましょう 次に コメント文字列の 作成に取りかかります この文字列には ビルド番号 コミットハッシュ そして作者が含まれると 良いでしょう
では 各アクションの 課題を取得するために 拡張関数を 呼び出してみましょう これをすべて課題追跡 システムに渡してみましょう
これらの情報があれば 私たちのビルドを 最新の状態に保つために 課題追跡が 役立つと思うのです 以上です! この時点で Webhooks用に Xcode Cloudに提供した URL でサーバ コードを ホストしたいのですが 課題追跡システムでXcode Cloud ビルド情報が表示されます
これまでの内容を簡単に まとめてみましょう Xcode Cloud には 既存の開発ワークフローと さらに深く統合できる 素晴らしいAPIがあります そのAPIをWebhook と使い すべての点をつなぎ合わせ 既存ツールや技術をXcode Cloud と統合することができます その他の機能やベスト プラクティスを ジョーからです ありがとう ジョン! Xcode CloudはAppや構成の 作成に使用するAppleの デベロッパツールやサービスと 統合する様 設計されています しかし あなたのプロジェクトは コードをコンパイルする為 追加の依存関係や外部ツール を必要とする場合があります Xcode CloudはSwift Package Managerとうまく連動しています パッケージのリポジトリが 公開されている場合 追加の設定を必要とせず Swiftパッケージの 依存関係をサポートします Cocoapodsや Carthage など第三者の依存性マネージャで 動作させることも できますが カスタムビルドスクリプトを 使い余分な作業を行う必要があります Xcode Cloudで依存関係を 利用可能にする方法は Xcodeのドキュメントを 参照することができます
Once we've added our Swift package Swift パッケージを追加し ワークフロー開始の変更をプッシュしたら Report Navigator のクラウドタブに移動し 最新のビルドステータスを 表示することができます
Logsを選択すると ビルドログの詳細を表示します
Xcode Cloudが依存関係を自動的に 解決していることがわかります Xcode Cloudが最初の ビルドを成功させた後 Appまたは フレームワークが常に 出荷可能な状態にあることを 確認の為 継続的インテグレーション デリバリの実践を洗練させる 次ステップの計画が必要です このセクションでは 静的コード解析のために SwiftLintでXcodeCloud を使用する方法 ワークフロー上で 編集を制限する方法 複数の開始条件を設定する 価値についてお話します SwiftLint は Swiftコミュニティで 一般的に受け入れられている スタイルガイド規則と規約を 実施するオープンソースのツールです 静的コード解析を行い コード品質の向上と バッドプラクティスの 防止を実現します SwiftLintが 特に大規模な チームで作業するときに チームのコードベースを 一貫した状態に保つための 素晴らしい方法で あることを発見しました これからお見せするのは カスタムビルドスクリプトを使って SwiftLintをXcode Cloud と統合する方法です Xcode Cloudがチームの 主要リポジトリから私たちの ソースコードをクローンした後 SwiftLintツールを実行させたく Project navigatorで Food Truckプロジェクトの ci_scriptsフォルダに post_cloneスクリプトを追加しました
Xcode Cloudのビルド環境には Homebrewが含まれており ここではそれを使って SwiftLintをインストールします
この行で SwiftLintを 実行しています 重要なのは スクリプトはci_scripts ディレクトリの中で実行されるので リポジトリを指すci_workspace 環境変数の中で実行するように SwiftLintに伝えなければ ならないということです
それでは コード解析の 結果を確認してみましょう SwiftLintはたくさんの 違反を見つけたようです そのうちの15個は深刻です 今回は初めての ツール統合なので このワークフローを 一時的に停止して まずチームの他の メンバーと話し合い コーディングスタイルや 規約について合意を取り どの問題を修正するか チームとして決定します Xcodeの「Manage Workflows」メニューから ワークフローを無効にできます そうすることで 開始条件が働かなくなり 手動ビルドしか 開始できなくなります
静的コード解析の ワークフローが停止され 修正したい問題の修正に 集中できるようになりました その後 このワークフローを 有効にすることができます 私たちのチームは 急速に成長しており ワークフロー構成について 意識的に選択していきたいです 、ワークフローの編集を行える人を制限することができます。 チームメンバーが 意図せずワークフローに 変更を加えてしまうことは 避けたいと考えています 元に戻すのに とても時間がかかります 意図しない 変更を防ぐために ワークフローの編集を 行える人を制限できます コンテキストメニューから 「編集を制限する」を選択します チームの誰でもワークフローを 使用または実行できますが 管理者 アカウント所有者 App管理者のみが制限を実施し 彼らだけが編集可能な 状態にできます
編集が制限されているワークフローでは 「鍵」マークが表示されます ロックされ あなたと 他の管理者ユーザだけが 編集できることを 意味します
代わりに「ロック」 マークが表示されている場合 管理者によってロックされ 顧客は編集できません この機能により 特に大規模なチームの一員なら 複雑なワークフローに対する アクセス管理を容易に行えます ワークフローを一時停止したり ロックダウンの簡単さがわかりました ワークフローの管理と メンテナンスについて説明します
プルリクエストや ブランチのマージの際に 同じテストやアーカイブの アクションを実行したいです それには 複数の起動条件を 設定することが最適です 作成 管理するワークフローの 数を減らせるため ワークフローのメンテナンス性 を向上させることができます この例では メインブランチ またはリリースブランチに 変更がある場合 またはメインブランチのビルドが 予定されている場合 同じアーカイブアクションと テストアクションを実行し 内部テストのために TestFlightにデプロイします 3つのワークフローを作り それを管理し 同期させるのではなく 1つのワークフローで 開始条件を一括して指定します これで 特にチームが維持すべき ワークフローが多い場合 管理性が向上します Xcodeでの開始条件の 設定は簡単です ワークフローエディタから +ボタンのメニューから 開始条件の種類を選びます
App Store Connectの Xcode Cloudは 完全な機能を備えた Webベースの体験を提供します 先ほどXcodeで行った ワークフローの設定 停止やロック 複数の起動条件の設定などは すべてAppStoreConnectから 行うことができます Xcode CloudはXcode に組み込まれた 強力な継続的統合およびデリバリサービスで あらゆる規模の 開発チームを支援し 既存のツールや プロセスと簡単に統合して 高品質のAppをユーザに 提供することができます Xcode Cloudベータ版参加者 の皆様 フィードバックを 本当にありがとう ございました これらの機能が チームの継続的統合と デリバリのプラクティス洗練に 役立つことを願っています ありがとうございました 素晴らしいWWDCを!
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。