ホームへ
Toxin
JA

ビルド中に Mac をスリープさせない:macOS での Xcode と Docker

ビルドには 40 分かかります。始めてコーヒーを取りに行き、戻ると Mac は 20 分前から眠っています。

なぜビルドで起きるのか

ビルドはプロセッサを使い切りますが、入力は一つも生みません。macOS はスリープを負荷ではなく、キー入力やマウスの動きがない時間で決めます。システムから見ると、誰も前にいません。

Xcode やビルドツールが自分でアサーションを出すかどうかは、ツールと呼び出し方によります。確かめていないなら当てにしないほうが安全です。

眠ったときに起きること

Mac が眠るとビルドは止まります。目覚めるとそのまま続くことも多いのですが、いつもではありません。ネットワーク接続はたいてい切れていて、依存関係を取得していた段階はタイムアウトで失敗します。

Docker ではもう一段あります。コンテナは Mac と一緒に眠る仮想マシンの中で動いています。その後の失敗はスリープのようには見えず、たまたまのネットワークエラーに見えます。

最後まで走らせる二つの方法

ターミナルでは、caffeinate -i がコマンドの実行中だけ Mac を起こしておきます。たとえば caffeinate -i make です。正確ですが、毎回コマンドの前に付ける必要があります。

Toxin なら、ビルドの前に予想時間を十分に超える時間を選ぶか、終わりが読めないビルドには無制限のセッションを始めます。残り時間はパネルに表示され、その後はシステム設定のとおりに戻ります。

夜通し、蓋を閉じたまま

夜通しのビルドなら 12 時間で足ります。Toxin は画面も点けておくので、不要なら明るさを下げてください。

ビルド中に MacBook を閉じるなら蓋モードが必要です。蓋を閉じることは macOS の別のルールだからです。全負荷のビルドは蓋を閉じると熱くなるので、バッグの中ではなく風通しのよい場所に置いてください。

それでもビルドが途切れたら

  • アイコンを見る:輪郭だけならセッションは動いていなかった。
  • 時間が短すぎた?パネルで終了時刻を確かめる。
  • 蓋モードなしで蓋を閉じた?それなら macOS が Mac を眠らせた。
  • 途中でネットワークエラー?多くはスリープの跡。

よくある質問

caffeinate で十分では?

ターミナルの単発のコマンドなら十分です。ビルドを Xcode やほかのアプリ、いくつもの手順から動かすなら、呼び出しを毎回書き換えずに済む Toxin のほうが楽です。

Toxin でビルドは遅くなりますか?

いいえ。Toxin はアサーションを出すだけで、ほかに計算はしません。ビルドは Toxin がないときと同じ性能で動きます。

途切れたビルドで失うのは計算時間より注意力です。Toxin は望むだけ Mac を起こしておきます。macOS 用のメニューバーアプリで、まだ Mac App Store にはありません。

ホーム