コマンドとエラーキーワードで特定

接続ノードから iOS ビルド成果物の納品まで。

初めて利用する方、リリースエンジニア、CI/CD 担当者向けです。コマンド、エラーの一部、タスク名を入力し、まず問題の範囲を絞り込んでから、期待される出力を順に確認します。

現在 8 個の操作項目を表示しています。

RUNBOOK / OAK-06 ビルドノード受け入れチェックリスト
01
接続方法SSH · VNC · 画面共有
確認
02
ビルド環境Xcode · 署名アセット · キャッシュ
確認
03
タスク実行runner タグ · 分離ディレクトリ
確認
04
納品結果archive · export · logs
アーカイブ
トラブルシューティングの原則 一度に変更する変数は 1 つ

症状に合う記録から始める

各項目で確認対象、コマンド、観測指標を示します。フィルターで変わるのは下の項目だけで、操作手順の全章が非表示になることはありません。

まず接続方法を確認し、その後でノード設定を変更する

接続情報は、コンソールに表示される現在のインスタンス詳細を基準にしてください。古い問い合わせ履歴、チャット、過去のスクリプトからアドレスや認証情報をコピーしないでください。

推奨手順 · 4 項目

初回ログインチェックリスト

まず安定した接続を 1 つ確立し、その後でパスワードとタイムゾーンを確認します。ネットワーク、解像度、認証方式を同時に切り替えると、変化の原因を特定しにくくなります。

  1. 01

    コンソールから現在の接続情報を取得

    ノードのリージョン、ホストアドレス、ポート、ユーザー名、インスタンスの状態を確認します。認証情報は管理されたパスワード管理ツールだけに保存し、コードリポジトリやビルドログには記録しません。

  2. 02

    まず SSH で基本経路を確認

    次を実行します: ssh -v user@host 名前解決、ハンドシェイク、認証の各段階を確認します。接続確立前にタイムアウトする場合は、まずローカルネットワークとポートを確認します。認証に失敗する場合は、ユーザー名と現在の認証情報を確認します。

  3. 03

    タスクに合わせて GUI 接続を選ぶ

    Xcode の画面を操作する場合は、VNC または画面共有を使用します。まず標準の解像度と色設定のまま、キーボード、マウス、クリップボードが正常に動作することを確認してから画質を調整します。

  4. 04

    初回ログイン確認を完了

    初期パスワードを変更し、 datesystemsetup -gettimezone を実行して時刻とタイムゾーンを確認し、プロジェクトディレクトリの所有者が現在のタスクユーザーであることを確認します。

ビルド入力と成果物のパスを記録に残す

再現可能な iOS ビルドには、ツールチェーン、プロジェクトの入口、署名アセット、アーカイブパラメータ、エクスポート先の固定が必要です。「ビルドに失敗した」だけでは再確認できません。

01 / TOOLCHAIN

Xcode コマンドラインツールを固定

まず次を実行します: xcode-select -pxcodebuild -versionを実行し、スクリプトが実際に使用する Developer ディレクトリと Xcode のバージョンを確認します。バージョンを切り替えたら、この 2 つを再実行し、ターミナルのウィンドウタイトルだけで判断しないでください。

02 / SIGNING

証明書、秘密鍵、プロビジョニングプロファイルを分離

署名アセットへのアクセス範囲は、プロジェクトと環境ごとに管理します。インポート後、次を使用して security find-identity -v -p codesigning 利用可能な署名 ID を確認し、証明書のパスワードをパイプラインログに出力しないでください。

03 / ARCHIVE

workspace、scheme、アーカイブ先を明示

スクリプトでは workspace または project、共有 scheme、configuration、 -archivePathを明示的に指定します。ビルドマシンで、前回の Xcode GUI における一時的な選択に依存しないでください。

04 / EXPORT

結果とログをまとめて保存

次を使用して -exportArchive バージョン管理されたエクスポート設定から成果物を生成します。アーカイブ、エクスポート結果、ビルドログ、コミット ID を保存し、失敗時もマスキング可能な診断情報を残します。

BUILD RECORD アーカイブコマンドの基本形
xcodebuild \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  -archivePath "$PWD/output/App.xcarchive" \
  clean archive
入力コミット ID、依存関係ロックファイル、Xcode バージョン、scheme
出力アーカイブディレクトリ、エクスポートディレクトリ、元のログ、タスク番号
失敗時に保持終了コード、最初のエラー部分、環境バージョン。機密値は保持しない

runner の登録は始まりにすぎない。分離ルールが長期運用を左右する

OakVM のノードは独享の物理マシンであり、仮想マシンではありません。同時実行は独享ノードを追加して拡張します。同一ノード上のタスクにも、キュー、タグ、作業ディレクトリの境界を明確に設定してください。

GITHUB ACTIONS

タグでプロジェクトを指定ノードへルーティング

  • リポジトリまたは組織の範囲で self-hosted runner を作成し、登録先を記録します。
  • リージョン、チップ、用途のタグを使い、リリース用と日常テスト用などを分けます。
  • ワークフローでは runs-on を正確に一致させ、意味が曖昧な汎用タグは使用しません。
  • タスク終了後、使い捨てのキーチェーン、一時ディレクトリ、今回の実行だけに必要な環境変数を削除します。
GITLAB CI

runner の範囲とタスクタグを明確に記述

  • runner がインスタンス、グループ、プロジェクトのどの範囲に属するか確認し、無関係なプロジェクトが実行できないようにします。
  • ジョブで tags を宣言し、不要な未タグタスクの受け入れを無効にします。
  • キャッシュにはプロジェクト単位のキーを設定し、異なるブランチやアプリが互換性のない結果を共有しないようにします。
  • ジョブ番号、コミット ID、runner 名を保持し、ノードログと対応付けられるようにします。
GENERIC RUNNER

汎用 runner はまずライフサイクルを定義

  • 登録スクリプト、サービスの起動方法、ログの場所をチームの運用手順書に記載します。
  • タスクごとに独立した作業ディレクトリを作成し、終了後は保持ポリシーに従ってキャッシュと成果物を処理します。
  • 同一の物理ノードには明確な同時実行上限を設定し、複数の重いアーカイブタスクがリソースを奪い合わないようにします。
  • ノードは 365 日、年間を通じて稼働します。タスクの再試行にも上限を設定し、失敗理由を記録してください。

分離の基本:プロジェクトディレクトリ、ビルドキャッシュ、署名アセット、成果物ディレクトリを個別に管理します。日常的な分離のためにノード全体を消去したり、2 つのプロジェクトで同じ書き込み可能な署名ディレクトリを共有したりしないでください。

画面負荷からネットワーク経路まで段階的に確認

VNC や画面共有で感じる遅延は、必ずしもノードの計算負荷が原因とは限りません。決めた順序でテストし、エンコード負荷、ローカルネットワークのジッター、バックグラウンドタスクの競合を切り分けます。

  1. 01

    解像度を下げる

    まず表示解像度を現在の操作に必要な最低レベルまで下げ、使っていない追加の表示領域を閉じます。応答が明らかに改善すれば、画面のエンコード量が原因である可能性が高くなります。

    ポインターとウィンドウのドラッグを確認
  2. 02

    色数と動的コンテンツを減らす

    動画、アニメーションプレビュー、継続的に更新される監視ウィンドウを一時停止します。ビルド中は不要なシミュレーター画面を閉じ、静的な編集操作が安定するか確認します。

    静止画面と動動画面を比較
  3. 03

    フレームレートの期待値を調整

    コード編集やリリース作業では、通常、高いフレームレートは必要ありません。まず入力の反応と文字の見やすさを優先し、徐々に画面の滑らかさを高めます。

    入力遅延の変化を記録
  4. 04

    ネットワークジッターを確認

    ノードアドレスに対して短時間の遅延テストを連続実行し、単発の最低値ではなく変動とパケットロスを確認します。ローカルネットワークを切り替えた後、同じサンプル数で再テストします。

    サンプル概要を保存
  5. 05

    チームでの共有方法を確認

    1 つのタスクにつき主な操作者は 1 人にし、他のメンバーはビルドログと成果物の記録を通じて協業します。複数人が同時に GUI を操作すると、コンテキストの衝突が増えます。

    現在の操作者を明確にする

まず用語を統一し、その後で設定と境界を議論

以下の用語は OakVM のページ、コンソール、サポート連絡で使用します。提供形態とワークフローを表すもので、第三者プラットフォームによるサービス推奨を意味するものではありません。

物理ノード
macOS とビルドタスクを直接実行する Apple Silicon の物理デバイスで、注文に対応する計算単位です。
専有
レンタル期間中、ノードの計算リソースは現在の注文で使用し、他の顧客のタスクと同じ物理マシンを共有しません。
クラウド Mac
データセンターに配置され、ネットワーク経由でアクセスする Mac 環境です。GUI 操作、コマンドラインビルド、自動化タスクに利用できます。
仮想マシンではない
注文時に提供されるのは専有の物理マシンであり、共有ホストから分割された仮想コンピューティングインスタンスではありません。
VNC
macOS の GUI をリモートで表示・操作する接続方式の 1 つです。操作感は解像度、画面の変化、ネットワークジッターの影響を受けます。
self-hosted runner
CI/CD プラットフォームに登録し、自社またはレンタルしたノードでパイプラインタスクを受け取って実行するランナーです。
ビルドキャッシュ
再ダウンロードや再コンパイルを減らすために保持するデータです。依存関係キャッシュや DerivedData などがあり、無効化・再生成できる状態にします。
署名アセット
アプリ署名に必要な証明書、秘密鍵、プロビジョニングプロファイル、および関連するアクセス権です。最小権限で管理します。

各確認でコマンド、期待される出力、異常時の分岐を記録

まず元の終了コードと最初の有効なエラーを保存してから修正します。複数のクリーンアップコマンドを続けて実行すると、問題発生時の状態が失われ、依存関係のエラーをノード障害と誤認する可能性があります。

クラウド Mac のよくある障害を確認するコマンド一覧
確認対象 コマンドまたは操作 期待される結果 異常時の分岐
ネットワークの名前解決と到達性 ping -c 20 host
ssh -v user@host
アドレス解決が一致し、サンプルで継続的なパケットロスがなく、SSH がハンドシェイクと認証段階まで進む。 名前解決エラーの場合はアドレスを確認します。接続前にタイムアウトする場合はローカル経路を変更して再テストします。認証失敗時は現在のユーザー名と認証情報だけを確認します。
ディスクとビルド容量 df -h
du -sh ~/Library/Developer/Xcode/DerivedData
対象ボリュームにソース、依存関係、アーカイブ、エクスポート結果を保存できる十分な空き容量があり、キャッシュ容量がチームのしきい値内にある。 まず保持必須の成果物を移動し、その後で再生成可能なキャッシュをプロジェクト単位で削除します。所有者を確認できないアーカイブディレクトリを直接削除しないでください。
Xcode ツールチェーン xcode-select -p
xcodebuild -version
Developer ディレクトリとバージョンがパイプライン記録と一致し、コマンドが正常に返る。 パスが誤っている場合はツールチェーンを明示的に切り替えます。バージョンが異なる場合はタスクを停止し、比較できないアーカイブ結果の生成を避けます。
プロジェクトと scheme xcodebuild -list -workspace App.xcworkspace 対象の scheme が表示され、自動化に使用する scheme が共有されている。 一覧が空の場合は作業ディレクトリと依存関係の生成手順を確認します。scheme が表示されない場合は、プロジェクトの共有設定と名前の大文字・小文字を確認します。
署名 ID security find-identity -v -p codesigning 現在のタスクに必要な署名 ID が表示され、無効な ID や重複選択による曖昧さがない。 ID が見つからない場合は、インポート範囲、キーチェーンアクセス、プロビジョニングプロファイルの対応関係を確認します。秘密鍵やパスワードを公開ページに貼り付けないでください。
アーカイブとエクスポート 保持するもの: xcodebuild 終了コード、アーカイブパス、エクスポートログ。 アーカイブディレクトリが存在し、エクスポート結果がコミット ID とタスク番号に対応付けられている。 ログの最初の error から調査します。コンパイル、署名、アーカイブ、エクスポートの各段階を個別に判断し、最終行だけで失敗全体を要約しないでください。
RULE 01

一度に変更する変数は 1 つ

ネットワークを切り替えた後も画面設定は変えず、Xcode を切り替えた後もソースのコミットは変えません。これで前後の結果を比較できます。

RULE 02

最初の有効なエラーを保持

後続のエラーは連鎖的な結果であることが多いため、最初に現れたエラー部分、終了コード、対応するコマンドを記録します。

RULE 03

ログはマスキングしてから共有

ホスト認証情報、トークン、秘密鍵の内容、プロジェクトの機密パスを削除し、時刻、タスク番号、ツールのバージョンは残します。

自分で特定できない場合は、再確認できるタスク記録を提出

既存ユーザーはまずコンソールにログインして問い合わせを送信してください。ログインできない場合は support@oakvm.com へメールを送信します。どちらの方法でも、公開ページに接続情報を貼り付ける必要はありません。

SUPPORT PACKET 添付を推奨する 6 つの情報
01ノードのリージョン

シンガポール、日本(東京)、韓国(ソウル)、香港、米国東部、米国西部。

02発生時刻

日付、時刻、タイムゾーンを明記し、ノードログと時刻を一致させます。

03タスク番号

注文、インスタンス、CI タスクで確認できる識別番号を記載します。

04再現手順

操作入口、コマンド、問題が発生する直前の最後に成功した手順を列挙します。

05期待値と実測値

期待される出力と実際の出力を分けて説明し、「使用できない」だけで済ませないでください。

06マスキング済みログ

エラーの前後関係、終了コード、バージョンを残し、認証情報、トークン、秘密鍵の内容を削除します。

専有物理マシン · 仮想マシンではない · USD 決済

既存のパイプラインに接続できるクラウド Mac が必要ですか?

OakVM M4 または OakVM M4 Pro を選び、6 つのノードリージョンからレンタル期間を設定できます。すべてのリージョンが 365 日、年間を通じて稼働します。実際の可用性はコンソールのリアルタイム表示に基づきます。