Skip to main content
Devin が macOS 仮想マシンを利用できるようになりました。これにより、iOS および macOS アプリケーションのビルドとテストが可能になります。
Dedicated SaaS デプロイメントをご利用の場合は、macOS VM を有効化するために担当のアカウントチームまでご連絡ください。

仕組み

macOS のサポートは、Linux と同じ 宣言的設定の仕組みの上に構築されています。ブループリントの runs-on フィールドで Devin がビルド・実行するプラットフォームを指定し、プラットフォームごとに個別のスナップショットが作成されます。 Linux との主な違いは、シェル、ファイルシステムのレイアウト、パッケージマネージャーの 3 点です。

macOS セッションの開始

macOS はセッションごとに選択できます。
  • Blueprint: runs-on: macos を追加すると、そのリポジトリのスナップショットが macOS 向けにビルドされます (以下を参照) 。
  • Slack: !mac バングコマンドを利用して、macOS VM 上でセッションを開始します。
  • API: セッション、スケジュール、自動化を作成する際に platform: "macos" を設定します。API リファレンスを参照してください。

macOS ブループリントの作成

単一プラットフォームのブループリント

リポジトリが Apple プラットフォームのみを対象とする場合は、トップレベルで runs-on: macos を利用します。

マルチプラットフォーム対応のブループリント

同じリポジトリを複数のプラットフォーム向けにビルドするには、プラットフォームごとに --- で区切った個別の YAML ドキュメントとして記述します。各ドキュメントで独自の runs-on ラベルを宣言します。この形式の詳細については、ブループリントガイドの 複数ドキュメント YAML の補足を参照してください。
各ドキュメントは、それぞれのプラットフォーム向けに個別のスナップショットのビルドを生成します。セッションはプラットフォーム固有のスナップショットから起動します。
トップレベルのYAMLは、シーケンスではなくマッピングである必要があります。上記の使用例を単一のリスト (- runs-on: default / - runs-on: macos) として記述すると、バックエンドで拒否されます。上に示した---区切りを利用してください。

runs-on フィールド

runs-on フィールドは、アカウントに登録されている machine config に対応します。 runs-on は文字列またはリストで指定できます。
リスト構文では、リストに含まれるすべてのプラットフォームで同一のコマンドが実行されます。コマンドが完全にクロスプラットフォームである場合 (例: npm install) にのみ利用してください。プラットフォーム固有のコマンド (Linux の apt-get や macOS の brew など) には、代わりにマルチドキュメント形式を利用してください。

使用量とコスト

macOS セッションの使用量は、同等の Linux または Windows セッションと同じです。macOS による追加料金はありません。使用量の計測方法の詳細は、使用量を参照してください。

プリインストールされているもの

macOS のセッションイメージには Apple のツールチェーンがあらかじめインストールされているため、ブループリントでダウンロードする必要はありません。 バージョンは、Apple が新しいリリースを提供しイメージが更新されるのに合わせて変わります。セッションに実際に何が入っているかを確認するには、Devin に次のコマンドの実行を依頼してください。

Xcode のバージョンを選択する

デフォルトの Xcode は xcode-select が指しているものです。特定のコマンドだけ別のインストール済みバージョンを利用するには、DEVELOPER_DIR を設定してください:
PATH 上にある特定の Xcode の Contents/Developer/usr/bin から解決される xcodebuild は、DEVELOPER_DIR に関係なく自身のバージョンを報告します。そのため、これではなく /usr/bin/xcodebuild (DEVELOPER_DIR を尊重するシム) を利用してください。 あるいは、セッション全体のデフォルトを切り替えることもできます:
必要なバージョンをブループリントに記述しておけば、すべてのセッションが適切なツールチェーンで開始されます。

macOS でのセッションの動作

Shell

macOS セッションでは、デフォルトのシェルとして zsh を利用します。ほとんどの POSIX シェルコマンドは Linux のブループリントからそのまま動作しますが、BSD 系ユーザーランドである点にご注意ください。sed -i には引数が必要で (sed -i '') 、gsedgdategreadlink といった GNU ツールは Homebrew の coreutils フォーミュラで提供されます。

パス

リポジトリは /Users/devin/repos/<repo-name> にクローンされ、セッションにアップロードしたファイルは /Users/devin/.files/ に書き込まれます。

シークレット

シークレットは、Linuxの場合と同様に、セッション中は環境変数 ($SECRET_NAME) として利用できます。App Store Connect のAPIキー、署名用の認証情報、非公開レジストリのトークンなどは、この方法で渡します。

セッションのスリープと復帰

セッションはスリープ時にディスクへスナップショットを保存します。ディスク上のデータはすべて復帰後も保持されます。インストール済みのツール、クローンしたリポジトリ、ビルドキャッシュ、由来データなどです。一方、実行中のプロセスは保持されません。開発サーバー、シミュレーター、ウォッチャーは、セッションの復帰後に再起動する必要があります。

Computer Use

Computer Use は macOS セッションで利用できます。Devin には Chrome、マウス、キーボードを備えた完全な macOS デスクトップが与えられ、Web アプリだけでなく macOS ネイティブアプリもテストでき、その操作を録画できます。macOS のショートカット (⌘C、⌘V、⌘Tab) には、Control ではなく Command キーを使用します。

iOS シミュレータ

Devin は iOS シミュレータ を直接起動して操作できます:
セッションワークスペースの iOS シミュレータ タブでは、起動中のシミュレータがストリーミング表示され、Devin がアプリを操作する様子をリアルタイムで確認できます。Android エミュレータのサポート の Apple 版にあたる機能です。

ヒントとコツ

ビルドキャッシュのウォームアップ

Xcode のコールドビルドはビルド時間が長くなり、開発体験が損なわれます。environment.ymlmaintenance フィールドを利用して、キャッシュを事前にウォームアップしてください。
解決済みの Swift パッケージ、CocoaPods、DerivedData は スナップショット に保持されるため、新しい セッション は増分ビルドから開始できます。

ネットワークアクセス

CocoaPods、Swift Package Manager、Firebase、あるいは非公開レジストリから取得するbuildでは、これらのホストに到達できる必要があります。組織が制限付きのnetwork policyで運用されている場合は、macOS側の許可リストがLinuxのbuildで利用するregistriesを同じように網羅しているか確認してください。両者は個別に設定するため、項目が漏れているとbuildの途中で依存関係の解決エラーやTLSエラーとして現れるのが一般的です。

コンテナの実行

macOS VMではネストされたハードウェア仮想化が利用できないため、コンテナのruntimeはQEMUのソフトウェアエミュレーション (TCG) にフォールバックするしかありません。Colimaはこれを検出して、自動的にエミュレーションに切り替えます:
VM が利用可能になるまでには 2〜4 分かかります。また、エミュレートされたゲストがネットワークを起動している間に SSH の待機がタイムアウトし、初回起動が失敗することがあります。その場合は colima start を再実行してください。起動後、container は CPU 上でネイティブの約 15〜25 倍遅く動作し、それぞれ起動に数秒かかります。pull はホストのネットワーク速度で行われます。リントやパッケージング用の container であれば問題ありませんが、コンパイル用途では厳しいでしょう。container を多用する作業では、Linux セッションを利用するか、macOS セッションからリモートの Docker デーモンを参照するようにしてください。

必要な場合を除き、ブループリントで Xcode をインストールしない

Xcode はダウンロードサイズが数ギガバイトに及び、ダウンロードには Apple ID が必要です。DEVELOPER_DIRxcode-select で選択できる、イメージに既に含まれているバージョンを優先してください。別のリリースやベータ版が必要な場合は、Apple ID をシークレットとして保存し、ブループリントでそのバージョンをダウンロードさせることもできますが、ビルドは大幅に遅くなります。

制限事項

トラブルシューティング

スナップショットの再ビルド後、最初のセッションでビルドが大幅に遅くなる。 DerivedData がゼロから再生成されたためです。maintenancebuild-for-testing のステップを追加し、ビルド済みの状態をスナップショットに含めてください。 xcodebuild が誤ったツールチェーンを選択する。 xcode-select -p を確認し、ブループリントのステップで DEVELOPER_DIR を明示的に設定してください。 デスティネーションが見つからない。 xcrun simctl list devices available を実行して、インストール済みのランタイムで実際に利用できるデバイスを確認し、-destination の名前と OS をそれに合わせてください。 依存関係の解決がハングする、または TLS エラーで失敗する。 対象のホストが、macOS 向けの組織のネットワークの許可リストに含まれていない可能性があります。ネットワークアクセスを参照してください。