How to determine if it is M1 in Terminal regardless of Rosetta settings
When judging whether it is M1 or not in Terminal of Mac, I think that the following processing may be performed.
if [[ `uname -m` == 'arm64' ]]; then
echo "This is arm64"
echo "This is x86_64"
If you refer to this,
uname -m is
a command to check the kernel version you are currently using, and when you use it in iOS development, it is mainly used to judge whether it is M1 or not.
However, this command will be
x86_64 if the Terminal
Rosetta setting is enabled, so it cannot be used to determine if it is an M1 when
Rosetta is enabled. In this case, it can be determined by the following branch processing.
arch -arm64 uname -m
if [[ $? == 0 ]]; then
If you put it before the command to execute
arch -arm64 or
arch -x86_64, you can execute the command in each architecture regardless of
But for non-M1 Macs, we get an error because I don’t have the
Therefore, it becomes false in the branch processing of the next
if statement, and it is possible to judge whether it is
M1 regardless of the
If there is a simpler way than this, I would appreciate it if you could tell me!