IT

Rosettaの設定に関わらず、TerminalでM1かどうかを判定する方法

m1-detect-terminal

Rosettaの設定に関わらず、TerminalでM1かどうかを判定する方法

MacのTerminalでM1かどうかの判定をする時に、以下のような処理をすることがあると思います。
if [[ `uname -m` == 'arm64' ]]; then
  echo "This is arm64"
else
  echo "This is x86_64"
fi
こちらを参考にすると、uname -mは、現在使用しているカーネルのバージョンなどについて調べるためのコマンドで、iOS開発で使用する時は、主にM1かどうかの判定の時に使用します。
しかしこのコマンドは、Terminalの Rosettaの設定を有効にしていると、x86_64設定となってしまうので、Rosettaを有効にしている時にM1かの判定に使用することはできません。 この場合は、以下のような分岐処理で判定することができます。
arch -arm64 uname -m
if [[ $? == 0 ]]; then
  echo "arm64"
else
  echo "x86_64"
fi
arch -arm64、もしくはarch -x86_64を実行するコマンドの前につけると、Rosettaの設定に依存せず、それぞれのアーキテクチャでそのコマンドを実行することができます。
しかしM1でないMacの場合、arm64アーキテクチャがないため、エラーになります。 そのため次のif文の分岐処理で、falseになり、Rosettaの設定に関わらず、M1かどうかの判定をすることができます。
もしこれよりシンプルな方法があれば、教えていただけると嬉しいです!
+1

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA