Xcode コマンドラインツールを固定
まず次を実行します: xcode-select -p と xcodebuild -versionを実行し、スクリプトが実際に使用する Developer ディレクトリと Xcode のバージョンを確認します。バージョンを切り替えたら、この 2 つを再実行し、ターミナルのウィンドウタイトルだけで判断しないでください。
初めて利用する方、リリースエンジニア、CI/CD 担当者向けです。コマンド、エラーの一部、タスク名を入力し、まず問題の範囲を絞り込んでから、期待される出力を順に確認します。
現在 8 個の操作項目を表示しています。
各項目で確認対象、コマンド、観測指標を示します。フィルターで変わるのは下の項目だけで、操作手順の全章が非表示になることはありません。
コンソールから接続情報を取得し、SSH、GUI、パスワード、タイムゾーンを確認します。
Xcode ツールチェーン、署名入力、アーカイブ先、ビルド成果物の保存ルールを確認します。
プラットフォームへの登録、ノードタグ、同時実行の境界、タスクごとの作業ディレクトリを整理します。
解像度、色、フレームレート、ネットワークジッターの順に操作遅延を切り分けます。
ノード、runner、キャッシュ、署名アセットの意味を統一し、協業時の認識違いを減らします。
ネットワーク、ディスク、Xcode、署名の問題をコマンド、期待結果、分岐に整理します。
リージョン、時刻、タスク番号、マスキング済みログを添えて、サポート担当者が再現できる情報をまとめます。
再生成できるキャッシュ、アーカイブ結果、保持が必要なリリース成果物を区別します。
エラー文を短くするか、次のようなコマンド名を検索してください: xcodebuild、df -h、ping。
接続情報は、コンソールに表示される現在のインスタンス詳細を基準にしてください。古い問い合わせ履歴、チャット、過去のスクリプトからアドレスや認証情報をコピーしないでください。
まず安定した接続を 1 つ確立し、その後でパスワードとタイムゾーンを確認します。ネットワーク、解像度、認証方式を同時に切り替えると、変化の原因を特定しにくくなります。
ノードのリージョン、ホストアドレス、ポート、ユーザー名、インスタンスの状態を確認します。認証情報は管理されたパスワード管理ツールだけに保存し、コードリポジトリやビルドログには記録しません。
次を実行します: ssh -v user@host 名前解決、ハンドシェイク、認証の各段階を確認します。接続確立前にタイムアウトする場合は、まずローカルネットワークとポートを確認します。認証に失敗する場合は、ユーザー名と現在の認証情報を確認します。
Xcode の画面を操作する場合は、VNC または画面共有を使用します。まず標準の解像度と色設定のまま、キーボード、マウス、クリップボードが正常に動作することを確認してから画質を調整します。
初期パスワードを変更し、 date と systemsetup -gettimezone を実行して時刻とタイムゾーンを確認し、プロジェクトディレクトリの所有者が現在のタスクユーザーであることを確認します。
再現可能な iOS ビルドには、ツールチェーン、プロジェクトの入口、署名アセット、アーカイブパラメータ、エクスポート先の固定が必要です。「ビルドに失敗した」だけでは再確認できません。
まず次を実行します: xcode-select -p と xcodebuild -versionを実行し、スクリプトが実際に使用する Developer ディレクトリと Xcode のバージョンを確認します。バージョンを切り替えたら、この 2 つを再実行し、ターミナルのウィンドウタイトルだけで判断しないでください。
署名アセットへのアクセス範囲は、プロジェクトと環境ごとに管理します。インポート後、次を使用して security find-identity -v -p codesigning 利用可能な署名 ID を確認し、証明書のパスワードをパイプラインログに出力しないでください。
スクリプトでは workspace または project、共有 scheme、configuration、 -archivePathを明示的に指定します。ビルドマシンで、前回の Xcode GUI における一時的な選択に依存しないでください。
次を使用して -exportArchive バージョン管理されたエクスポート設定から成果物を生成します。アーカイブ、エクスポート結果、ビルドログ、コミット ID を保存し、失敗時もマスキング可能な診断情報を残します。
xcodebuild \
-workspace App.xcworkspace \
-scheme App \
-configuration Release \
-archivePath "$PWD/output/App.xcarchive" \
clean archive
OakVM のノードは独享の物理マシンであり、仮想マシンではありません。同時実行は独享ノードを追加して拡張します。同一ノード上のタスクにも、キュー、タグ、作業ディレクトリの境界を明確に設定してください。
runs-on を正確に一致させ、意味が曖昧な汎用タグは使用しません。分離の基本:プロジェクトディレクトリ、ビルドキャッシュ、署名アセット、成果物ディレクトリを個別に管理します。日常的な分離のためにノード全体を消去したり、2 つのプロジェクトで同じ書き込み可能な署名ディレクトリを共有したりしないでください。
VNC や画面共有で感じる遅延は、必ずしもノードの計算負荷が原因とは限りません。決めた順序でテストし、エンコード負荷、ローカルネットワークのジッター、バックグラウンドタスクの競合を切り分けます。
まず表示解像度を現在の操作に必要な最低レベルまで下げ、使っていない追加の表示領域を閉じます。応答が明らかに改善すれば、画面のエンコード量が原因である可能性が高くなります。
動画、アニメーションプレビュー、継続的に更新される監視ウィンドウを一時停止します。ビルド中は不要なシミュレーター画面を閉じ、静的な編集操作が安定するか確認します。
コード編集やリリース作業では、通常、高いフレームレートは必要ありません。まず入力の反応と文字の見やすさを優先し、徐々に画面の滑らかさを高めます。
ノードアドレスに対して短時間の遅延テストを連続実行し、単発の最低値ではなく変動とパケットロスを確認します。ローカルネットワークを切り替えた後、同じサンプル数で再テストします。
1 つのタスクにつき主な操作者は 1 人にし、他のメンバーはビルドログと成果物の記録を通じて協業します。複数人が同時に GUI を操作すると、コンテキストの衝突が増えます。
以下の用語は OakVM のページ、コンソール、サポート連絡で使用します。提供形態とワークフローを表すもので、第三者プラットフォームによるサービス推奨を意味するものではありません。
まず元の終了コードと最初の有効なエラーを保存してから修正します。複数のクリーンアップコマンドを続けて実行すると、問題発生時の状態が失われ、依存関係のエラーをノード障害と誤認する可能性があります。
| 確認対象 | コマンドまたは操作 | 期待される結果 | 異常時の分岐 |
|---|---|---|---|
| ネットワークの名前解決と到達性 | ping -c 20 hostssh -v user@host |
アドレス解決が一致し、サンプルで継続的なパケットロスがなく、SSH がハンドシェイクと認証段階まで進む。 | 名前解決エラーの場合はアドレスを確認します。接続前にタイムアウトする場合はローカル経路を変更して再テストします。認証失敗時は現在のユーザー名と認証情報だけを確認します。 |
| ディスクとビルド容量 | df -hdu -sh ~/Library/Developer/Xcode/DerivedData |
対象ボリュームにソース、依存関係、アーカイブ、エクスポート結果を保存できる十分な空き容量があり、キャッシュ容量がチームのしきい値内にある。 | まず保持必須の成果物を移動し、その後で再生成可能なキャッシュをプロジェクト単位で削除します。所有者を確認できないアーカイブディレクトリを直接削除しないでください。 |
| Xcode ツールチェーン | xcode-select -pxcodebuild -version |
Developer ディレクトリとバージョンがパイプライン記録と一致し、コマンドが正常に返る。 | パスが誤っている場合はツールチェーンを明示的に切り替えます。バージョンが異なる場合はタスクを停止し、比較できないアーカイブ結果の生成を避けます。 |
| プロジェクトと scheme | xcodebuild -list -workspace App.xcworkspace |
対象の scheme が表示され、自動化に使用する scheme が共有されている。 | 一覧が空の場合は作業ディレクトリと依存関係の生成手順を確認します。scheme が表示されない場合は、プロジェクトの共有設定と名前の大文字・小文字を確認します。 |
| 署名 ID | security find-identity -v -p codesigning |
現在のタスクに必要な署名 ID が表示され、無効な ID や重複選択による曖昧さがない。 | ID が見つからない場合は、インポート範囲、キーチェーンアクセス、プロビジョニングプロファイルの対応関係を確認します。秘密鍵やパスワードを公開ページに貼り付けないでください。 |
| アーカイブとエクスポート | 保持するもの: xcodebuild 終了コード、アーカイブパス、エクスポートログ。 |
アーカイブディレクトリが存在し、エクスポート結果がコミット ID とタスク番号に対応付けられている。 | ログの最初の error から調査します。コンパイル、署名、アーカイブ、エクスポートの各段階を個別に判断し、最終行だけで失敗全体を要約しないでください。 |
ネットワークを切り替えた後も画面設定は変えず、Xcode を切り替えた後もソースのコミットは変えません。これで前後の結果を比較できます。
後続のエラーは連鎖的な結果であることが多いため、最初に現れたエラー部分、終了コード、対応するコマンドを記録します。
ホスト認証情報、トークン、秘密鍵の内容、プロジェクトの機密パスを削除し、時刻、タスク番号、ツールのバージョンは残します。
既存ユーザーはまずコンソールにログインして問い合わせを送信してください。ログインできない場合は support@oakvm.com へメールを送信します。どちらの方法でも、公開ページに接続情報を貼り付ける必要はありません。
シンガポール、日本(東京)、韓国(ソウル)、香港、米国東部、米国西部。
日付、時刻、タイムゾーンを明記し、ノードログと時刻を一致させます。
注文、インスタンス、CI タスクで確認できる識別番号を記載します。
操作入口、コマンド、問題が発生する直前の最後に成功した手順を列挙します。
期待される出力と実際の出力を分けて説明し、「使用できない」だけで済ませないでください。
エラーの前後関係、終了コード、バージョンを残し、認証情報、トークン、秘密鍵の内容を削除します。
OakVM M4 または OakVM M4 Pro を選び、6 つのノードリージョンからレンタル期間を設定できます。すべてのリージョンが 365 日、年間を通じて稼働します。実際の可用性はコンソールのリアルタイム表示に基づきます。