Review of Apple Macbook Pro M1

It is now about two weeks since I got my Apple Macbook Pro M1 delivered. It is the one with 16 GB of RAM and 2 TB SSD. Delivery time was quite long, I ordered it at the beginning of December. But now when I have used it as my primary machine for a while it is time for a review.

I primarily use it for .NET development including app development using Xamarin and backend development using .NET Core 3 and .NET 5. I also, do some development using Blazor from time to time.

Overall

To overall impression is that it is a really fast machine. macOS and applications that are optimized for the machine are really fast. Applications that not are optimized are faster or at least not slower than on my old MacBook Pro from 2017.

What is great is that it never became hot, not so far, it can be a little bit warm, but I have never heard the fan. On my old MacBook, the fan sounded like a jet plane.

As always with a Macbook it is very solid. I like that they have switched back to the old keyboard. The only downside is that it only has two thunderbolt/USB-ports. So you probably need a USB-hub. I have a display connected with USB-C that has USB-ports and it also powers the computer.

Xamarin development

As we could expect, iOS development is not an issue, because Apple has of course optimized XCode for the new M1 Macs. And Visual Studio for Mac runs good with Rosetta 2, But what about Android? The development worked well, but to run my app on an emulator I had to go and download a preview version of the emulator for the new Macs. But the emulator works really well and it is really fast. But right now (preview 3) you cannot run Chrome on it. You can download it from here. https://github.com/google/android-emulator-m1-preview

Backend development

To do backend development with .NET Core 3+ and .NET I had to install the beta of Big Sur 11.2. Before that, it crashed every time that I tried to debug an application. But with the beta, it is working like a charm.

For Visual Studio Code there is an insider build that is compiled for ARM. That version is really good, it is much faster than the "old" Visual Studio Code.

Docker

Docker has a preview for M1, https://docs.docker.com/docker-for-mac/apple-m1/. It works great, there are some problems with images that not are for ARM. I tried with an SQL Server 2019 image for example and that one did not work. https://github.com/docker/for-mac/issues/5170#issuecomment-767803717. But a colleague found an image that I can use for SQL-server that had enough features for me, mcr.microsoft.com/azure-sql-edge. I also run a container for MongoDB without any issues.

Streaming and media

I have tried Streamlabs OBS and there are no problems running it with Rosetta 2. It feels more smooth compared to running it on my old Mac.

For editing videos, I have tried iMovie, an app that Apple has optimized for M1. It works really great, I imported and 6-hour long video with a size of 13 GB and it worked like I imported just a short video.

I also have tried Adobe Photoshop without any issues.

Other applications

Microsoft Office including Word, Excel, Outlook, and Teams, etc. runs fine. But I could not get OneDrive sync working. The same with Google Drive sync.

Running Windows

You cannot run Bootcamp on the M1 Macs. But Parallels Desktop has a technical preview, https://www.parallels.com/blogs/parallels-desktop-apple-silicon-mac/, that are able to run Windows ARM. The problem is that Windows ARM images can be hard to find. But after I asked on Twitter I got an answer that there are insider builds that is available for download. So I did and Windows runs much better on Parallels now than compared with the x64 version on my old Macbook. I also was able to run Visual Studio (x86) on it and it works ok, it is as good as running it on Parallels on my old Macbook.

Summary

MacBook Pro M1 is a really good and fast computer, there are some small issues, but if you should buy a new Mac now, I recommend you to buy an M1, Intel Mac feels old!

Debug Android emulator remotly

When developing apps for Android I'm using Xamarin and Visual Studio. I'm running Windows under Parallels.Therefor I can't use the x86 emulator with HAXM for hardware acceleration. But Android emulator is really slow without hardware acceleration, because of that i running the emulator on the host OS, in my case OS X.

To set up remote debugging there are a few steps to follow.

  • Enable "Remote Login" in OS X. You find it under "System Preferences" - > "Sharing".
  • Install the Android SDK on the host OS.
  • Open SDK manager and install the Intel x86 Atom System Image for the API version you want the emulator to run on. If you have Xamarin Studio installed I think that is the easist way to start the SDK manager.

SDK Manager

 

Create emualtor dialog

  • Start your new emulator, if it start and using HAXM successfully you will se the text "HAX is working and emulator runs in fast virt mode" during the startup process.
  • Kill the adb server on the host OS using the command adb kill-server.
  • Kill the adb server on the guest OS using the command adb kill-server.
  • Install Putty on your Windows machine, that can be downloaded from here, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • Open Putty and type the hostname or IP address to your host OS.
  • Under SSH -> Tunnel, configure port forwarding on port 5554 and port 5555.

Putty

 

  • Open a new session and type your login credentials when Putty asks for them.
  • Start the adb server on the host OS using the command adb start-server. To verify that the emulator is connected use the command adb devices. 
  • You will now be ready to start debug your app in the emulator remotely.

Running Windows Phone emulator in Parallels on OS X

If you're developing apps for all the major mobile platforms i guess you are using a Mac since that is the only way you can build iOS apps. If you're using Parallels to run Windows for Windows Phone development you need to activate nested virtualization if you want to use the emulator. This is because that Windows Phone emulator is using virtualization with Hyper-V.

To activate nested virtualization, shut down your virtual machine if it is started. Then open the configuration view for your machine in parallels and go to the "Optimization tab" and check "Enable nested virtualization". When you start your virtual machine you'll be able to use Hyper-V and the Windows Phone emulator.

Configuration dialog for virtual machine