初回ログインからビルド成果物の保存まで

接続して、移行して、ビルド。

初回接続、環境移行、CI設定、返却までを解説します。まずSSHコマンドでノードに接続できることを確認し、コード、署名情報、ツールチェーンを移行しましょう。仮想マシンではない専有物理Macで、macOSのGUIとコマンドラインを利用できます。

注文済みですか?まずコンソールでインスタンスの状態と接続情報を確認してください。パスワード、秘密鍵、署名証明書を公開ログに貼り付けないでください。

ステップ1 · 接続を確認

まず接続。その後に環境を移行。

コンソールのインスタンス詳細を開き、ノードのアドレス、ユーザー名、ポート、初期パスワードを確認してください。以下のコマンドのアドレスは実際の値に置き換えます。ポートが異なる場合は、インスタンス詳細に記載された値を指定してください。

SSH

コマンドライン:まず対話形式でログイン

初回接続時はホストフィンガープリントを確認し、信頼できるインスタンス情報と一致することを確かめてから接続を許可してください。確認を省くためにホスト鍵チェックを無効にしないでください。

ssh admin@<节点地址>

インスタンスでデフォルト以外のSSHポートを使う場合は、コマンドに -p <端口>を追加してください。ログイン後、以下を実行してユーザー名、OSのバージョン、空きディスク容量を確認します。

whoami
sw_vers
df -h
passwd

passwd を実行すると、現在のユーザーのパスワードを対話形式で変更できます。続いてローカルで専用のed25519鍵を作成し、公開鍵をノードの ~/.ssh/authorized_keysに追加します。秘密鍵は自分のデバイスか、アクセス管理された鍵保管庫だけに保存してください。

ssh-keygen -t ed25519
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

権限変更コマンドはノード上で実行します。別のターミナルから鍵認証でログインできることを確認してから、チームのセキュリティ方針に沿ってパスワード認証の設定を変更してください。ログインできなくなる事態を防げます。

確認:新しいターミナルから鍵認証でログインできる
VNC

GUI:対話形式で初期設定

キーチェーンの操作、Xcode設定の確認、シミュレータの表示には、インスタンス詳細に記載された画面共有の接続情報を使います。接続先とSSHで使うアドレスやポートは異なる場合があるため、推測で入力しないでください。

  1. インスタンスの準備ができたことを確認し、コンソールで画面共有のアドレス、ポート、ユーザー情報を確認します。
  2. ローカルMacの画面共有アプリから接続し、提供されたアカウント情報でログインします。
  3. 初めてデスクトップにログインしたら初期パスワードを変更し、ログインキーチェーンが正常にロック解除できることを確認します。
  4. 使用するXcodeのバージョンを開き、ライセンスに同意して必要なコンポーネントをインストールした後、コマンドラインで確認します。
xcode-select -p
xcodebuild -version

SSHトンネル経由で画面共有に接続する場合、ローカルの転送ポートと接続先ポートはインスタンスの実際の設定に合わせてください。アクセス元は必要最小限に制限し、画面共有のポートをすべての接続元に公開しないでください。

画面が真っ暗でも、ノードがオフラインとは限りません。まずSSHで接続できるか確認し、その後、GUIセッション、アカウント権限、接続ポートを調べてください。原因を確かめずにシステムを何度もリセットしないでください。

確認:デスクトップが表示され、Xcodeのバージョンも正しい
ステップ2 · 依存関係の順に移行

ローカルMacからクラウドMacへ。

データ、ツールチェーン、CIの順に進めます。まず単独で検証できるプロジェクトを1つ移行し、ユーザーディレクトリ全体をいきなりコピーするのは避けましょう。以下の所要時間は作業の目安です。リポジトリのサイズ、ネットワーク、依存関係のダウンロード状況によって変わります。

01 / データ

コードと署名情報を先に移行

Gitからリポジトリをクローンし、ローカルと同じコミットに切り替えます。プライベートリポジトリには、権限を制限したデプロイキーか有効期間の短いトークンを使い、長期利用の認証情報をリポジトリURLに含めないでください。

git clone <仓库地址>
git rev-parse HEAD
rsync -av --progress ./Assets/ \
  admin@<节点地址>:~/work/Assets/

署名が必要な場合は、ローカルのキーチェーンから秘密鍵を含む .p12 ファイルを書き出します。専用のパスワードで暗号化して転送し、ノードのキーチェーンに読み込みます。プロビジョニングプロファイルは別途移行し、証明書の有効期限、チーム、対象の設定を確認してください。

大きなリソースはrsyncで差分同期します。初回は削除オプションを付けず、ノードで新たに作成された成果物を誤って削除しないよう、先に移行先を確認してください。

目安:3~10分 · 大容量ファイルの転送を除く
02 / ツールチェーン

キャッシュは持ち込まず、バージョンを再現

ローカルでBrewfileを書き出し、ノードに転送して環境を復元します。リストを確認し、不要なデスクトップアプリや古い依存関係を削除して、初回のダウンロード量を抑えましょう。

brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes list
xcodes install <所需版本>

プロジェクトで指定されたXcode、Ruby、CocoaPodsのバージョンを確認してください。xcodesでバージョンをインストールする場合は、ソフトウェアライセンスとダウンロード権限の要件に従います。インストール後、 xcodebuild -version を実行して、実際に選択されているバージョンを確認してください。

Gemfileがあるプロジェクトでは、まず bundle exec pod installを実行します。SPMではプロジェクトに含まれるロックファイルを使って依存関係を解決してください。初回ビルドはキャッシュの準備と考え、以後のビルド速度の目安にはしないでください。

目安:5~15分 · ダウンロード時間を除く
03 / CI設定

まず手動で成功させてからランナーを登録

まず対話形式のセッションでビルドと署名を一度完了させます。コマンドラインからアーカイブを作成できたら、GitHub Actionsのself-hosted runnerまたはGitLab Runnerを登録しましょう。ツールチェーンとジョブ設定を同時に調べる事態を避けられます。

bundle exec fastlane match development --readonly
bundle exec fastlane gym

matchの署名タイプと実行するlaneは、プロジェクトの設定に従ってください。CIでは権限を制限した認証情報を使い、保護された変数か鍵保管庫に保存します。パスワードをスクリプトに書き込まないでください。

一時ランナーには専用のラベルを付け、まず信頼できるブランチだけが実行できるようにします。実行アカウントから署名用キーチェーンと作業ディレクトリにアクセスできることを確認し、非対話形式のビルドで確認ダイアログが表示されないことも検証してください。

目安:3~8分 · 既存のパイプラインがある場合

移行完了の基準:同じコミット、同じXcodeのバージョン、同じ依存関係ロックファイルを使い、ノード上で回収可能なアーカイブを作成できること。「依存関係のインストールに成功した」だけで環境移行が完了したと判断しないでください。

利用開始まで · 約4分

つまずいたら、該当する手順を確認。

注文からノードを使えるようになるまで、通常は約4分です。コードの転送、ツールのダウンロード、初回コンパイルにかかる時間は含みません。支払い、割り当て、納品の進捗はコンソールに表示される最新情報を確認してください。

  1. 01

    注文内容を確認

    約40秒

    機種、利用期間、ノードを選択し、追加オプションと合計金額を確認します。先に進めない場合は、必須項目と画面上のエラーメッセージを確認してください。同じ注文を繰り返し作成しないでください。

  2. 02

    米ドルで支払い

    約60秒

    お支払いはUSDT-TRC20、Visa、Mastercard、Amex(Stripe経由)のみで、決済通貨はUSDです。先に進めない場合は請求状況を確認してください。ブロックチェーンの承認やカード発行会社による認証で、時間がかかることがあります。

  3. 03

    ノードの初期化を待つ

    約2分

    支払いが確認されると、専有物理ノードの割り当てが始まります。進まない場合はインスタンスの状態とシステムメッセージを確認してください。支払い済みなのに長時間変化がない場合は、注文番号を控えてサポートチケットを送信してください。

  4. 04

    納品通知を確認

    認証情報:メール/コンソール

    受信トレイと迷惑メールフォルダを確認し、コンソールに表示された接続情報と照合してください。心当たりのないメールにパスワードを返信しないでください。通知が届かない場合は、まずインスタンスの準備ができているか確認します。

  5. 05

    初回ログインを確認

    約20秒

    まずSSHで接続し、その後GUIを確認します。問題が起きた場合は、エラー全文、発生日時、タイムゾーンを記録し、下のトラブルシューティングを参考にネットワーク、認証、セッションのどこに原因があるか切り分けてください。

返却前 · データを手元に保存

マシンは返却します。
成果物は持ち帰りましょう。

契約期間終了後、自動更新はされません。引き続き利用する場合は、期限前にコンソールから手動で延長し、処理結果を確認してください。実行中のビルドによって利用期間が延びるわけではありません。

返却後、ディスク全体が安全に消去されます。ノードを長期バックアップ先として使わないでください。最後のアーカイブ、デバッグシンボル、必要なログをアクセス管理されたストレージにコピーし、ファイルを読み取れることを確認します。ローカルファイルを削除しても、リモートアクセス権の取り消しにはなりません。

返却前に確認する4項目

  1. ビルド成果物を書き出す。.xcarchive、.ipa、dSYM、必要なビルドログを回収し、アップロードまたはダウンロードの完了を確認します。
  2. 一時ランナーの登録を解除する。CIプラットフォームからrunner登録を削除し、ローカルのrunnerプロセスを停止して、デプロイキーと一時アクセストークンを失効させます。
  3. 署名情報を削除する。読み込んだ証明書の秘密鍵、プロビジョニングプロファイル、一時設定を削除し、パイプラインのログに鍵やパスワードが漏れていないことを確認します。
  4. 期限とバックアップを確認する。コンソールに表示された利用期限とタイムゾーンを確認し、最後のビルドと成果物の転送に必要な時間を確保します。

チームで作業する場合は、返却前チェックの担当者を1人決めてください。「同僚がダウンロードしたはず」を唯一のバックアップ手段にしないでください。

よくある用途 · 最小構成のレシピ

まず1つ動かし、パイプラインへ展開。

どちらの機種もM4搭載の専有物理Macです。SDK Pack 16は16GB / 256GB、SDK Pack 24は24GB / 512GBを搭載しています。プロジェクトの実際の要件に応じてメモリとストレージを選び、初回検証で並列タスクをすべて実行しないようにしましょう。

アプリの自動ビルド

まずschemeを共有できる状態にし、署名設定が正しく、キーチェーンにアクセスできることを確認します。Gemfileがある場合は、BundlerでFastlaneのバージョンを固定してからアーカイブを作成してください。

bundle install
bundle exec fastlane gym
bundle exec fastlane pilot upload \
  --ipa ./build/App.ipa

サンプルのパスを実際の成果物のパスに置き換えてください。pilotでアップロードする前に、プロジェクトで使用するリリースAPIキーを設定し、保護されたCI変数に保存します。アップロード権限とビルドの成功は、別々に確認してください。

確認:アーカイブを回収でき、アップロード結果も確認できる

リモートMac開発

まず通常のSSH接続を確認し、同じ接続設定をVS Code Remote-SSHで使います。エディターから接続できない場合は、システム権限を直接変更せず、リモート拡張機能のログを確認してください。

Host sdk-build
  HostName <节点地址>
  User admin
  IdentityFile ~/.ssh/id_ed25519
  ServerAliveInterval 30

ローカルの ~/.ssh/configに設定を記述します。接続後、ターミナルがどのマシン上にあるか、作業ディレクトリが正しいかを確認してください。シミュレータやGUIのデバッグには画面共有を使い、コード編集とGit操作はSSHで行えます。

確認:編集とビルドで同じワークスペースを使える

GPUレンダリングとMLX推論

タスクがApple Siliconと必要なグラフィックスバックエンドに対応していることを確認し、分離されたPython環境を用意します。モデルの重み、アプリのメモリ、中間データを保存する容量も確保してください。

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx
python -c "import mlx.core as mx; print(mx.default_device())"

まず小さな入力で依存関係とデバイスの選択を確認し、その後、解像度、バッチサイズ、コンテキスト長を段階的に増やします。アプリのバージョンと実行パラメータを記録してください。実行できるモデルは重みのサイズと実際のメモリ使用量によって異なります。

確認:小規模なタスクが完了し、リソース使用量も適切
トラブルシューティング · 変更は1つずつ

原因に合わせて切り分けましょう。

まず元のエラーを保存してから変更を加えてください。以下の4つの問題は、ネットワーク、GUIセッション、署名権限、ストレージに分けられます。環境の再インストールは最初の手段ではありません。

SSHのタイムアウト・認証エラー

タイムアウト:アドレス、ポート、インスタンスの状態、ローカルネットワークの制限を確認します。 ssh -v を使うと、接続段階と認証段階のどちらで止まっているか判断できます。

認証エラー:ユーザー名、鍵のパス、authorized_keysの権限を確認します。フィンガープリントが変わった場合は、ノードが再納品されたかを先に確認してください。信頼済みホストの記録をすぐに削除しないでください。

チケットに記載する内容:エラー全文、ポート、発生日時

画面共有が真っ暗

まずSSHでノードに接続できるか確認し、画面共有のポートとログインアカウントを確認してください。初期化処理が続いていないか、ローカルクライアントに古い接続情報が保存されていないかも調べます。

クライアントを終了してから再接続します。トンネルを使っている場合は、ポート転送プロセスが動作中か確認してください。成果物を回収する前に、何度もマシンを再起動しないでください。

チケットに添付する内容:クライアントのバージョン、個人情報を隠したスクリーンショット

キーチェーンの確認ダイアログでCIが停止

GUIセッションで署名用秘密鍵が読み込まれていることと、証明書の有効期限内であることを確認します。runnerの実行アカウントが署名環境を設定したアカウントと同じかも確認してください。

CIには専用の署名用キーチェーンを使い、チームの方針に沿ってロック解除とアクセス権を設定します。まず非対話形式でビルドを実行して確認してください。キーチェーンのパスワードをログに出力しないでください。

チケットに記載する内容:失敗した段階、署名エラーコード

ディスク容量不足

まず df -hを実行し、DerivedData、アーカイブ、シミュレータデータ、コンテナイメージを確認してください。再生成できることを確認したキャッシュだけを削除し、未回収のアーカイブとデバッグシンボルは残します。

プロジェクトやリソースが長期的に容量を超える場合は、注文時に追加ストレージの+1TB SSDまたは+2TB SSDを選択できます。既存インスタンスの変更方法は、まずチケットで確認してください。購入後すぐに容量が増えるとは限りません。

チケットに記載する内容:空き容量、大容量ディレクトリの内訳
関連記事 · 課題から探す

詳しく知りたい場合は、技術記事へ。

このページでは、接続から返却までの作業手順をまとめています。コンテナツール、依存関係の移行、安全な接続方法、プラン選びの詳しい解説は、技術記事一覧をご覧ください。記事一覧に掲載されている内容が最新です。

まず解決したい問題を特定

ツールチェーン:インストールしただけではビルドできるとは限りません。Xcode、依存関係管理ツール、ロックファイルを記録し、まずローカルとノードのバージョンの違いを比較してください。

セキュリティ:接続できても、適切な権限が設定されているとは限りません。一時ノードには専用の鍵と権限を制限したトークンを使い、返却時に登録を解除してください。個人の長期利用認証情報は使い回さないでください。

機種選び:一度成功しても、長期的に適しているとは限りません。実際のメモリ使用量のピーク、ディスク使用量の増加、並列タスクを確認してから、機種と利用期間を決めましょう。

エンジニアに相談する

状況をそのままお伝えください。
エラーの確認から一緒に進めます。

レンタル中のインスタンスに問題がある場合は、コンソールにログインしてチケットを送信してください。注文番号、ノード、発生日時とタイムゾーン、再現手順、個人情報を伏せたログを添えてください。購入前のご相談やログインできない場合は、 support@macsdk.comまでメールでお問い合わせいただけます。

対応時間は、チケットに表示される受付状況と返信状況をご確認ください。自動返信は担当者からの返信ではありません。進行中のビルドに影響している場合は、件名に影響範囲を記載し、失敗時の状態を保存してください。秘密鍵、パスワード、署名ファイル全体は送信しないでください。