If you are a Xamarin developer (or would like to become on), probably you were wondering, which OS is the best choice. There are few available options:
Each option has it’s pros and cons and none of them is good for every situation. When making decision which option to chose, the result should be based on team size, available budget and personal preferences. In this post I will describe few available options – I hope it will help you to make the best decision 🙂
1. Windows + Mac Mini
In this case, we use Windows machine we already have (personal or company’s) and we buy Mac Mini for iOS compilation. From Visual Studio we are paring to a Mac. Detailed instructions can be found in documentation.
I recommend following Mac Mini configuration as absolute minimum for compile-only machine:
- i3 3,6 GHz
- 8 GB RAM
- 256 GB SSD
On the day of writing this post, it costs 799$ at apple.com. Don’t buy Mac Mini with HDD or less that 8GB RAM – it’s not worth it. I’ve learnt that the hard way 😉
- You can use Windows machine you already have
- Everybody knows Windows and tools for it (Visual Studio or SQL Server Management Studio).
- Organizations have already experience and knowledge in managing Windows machines. Your local IT department knows how to help you with problems you may have.
- Cheapest option available (at least at the beginning).
- Mac Mini needs to be maintained as every other company equipment.
- Xamarin.iOS versions needs to be in sync on Windows and Mac Mini. If you have different versions, compilation may not be possible.
- Connection with Mac Mini can be interrupted at the least appropriate moment (e.g. during iOS compilation).
- Only one developer can be connected to Mac Mini at once. Other developers will need to wait for their turns.
- Testing iOS apps on iPhone simulator can be a challenge. As first option, we can use Remoted iOS Simulator for Windows. However I found this solution not very reliable and therefore, most of the time I was using VNC to connect to Mac Mini. This solution was more reliable but also had his own problems.
- Remote work is difficult. You can’t compile iOS until you take Mac Mini with you.
This option may seem cheaper at the beginning than buying Macbook Pro for every developer in the team. However it can turn out that developers work will be more expensive in this option.
You may also take a look at Xamarin Hot Restart, which allows to deploy iOS apps to iPhone from Windows. However, this solution have some limitations. The most significant one is that you can not use Xamarin Hot Restart to create app bundles for publishing – you still need a Mac to do that.
2. Macbook Pro
In this option, every developer in a team works only on Macbook Pro. I recommend following configuration as absolute minimum for convenient work:
- i5 2,0 GHz
- 16 GB RAM
- 512 GB SSD
On the day of writing this post it cost 1 799$ at apple.com.
- Macbook Pro is the only machine needed to develop mobile apps for iOS and Android. Both platforms can be compiled on macOS.
- Compiling iOS is faster than compiling Android – at least from my experience. In every day development I run my code first on iOS.
- If you still need to use Windows you can do that by virtualising it using for example Parallels. Another option is to use Boot Camp. Apple computers are the only machines, which allows to run both macOS and Windows. You can’t virtualise macOS legally on Windows.
- In order to be effective Xamarin developer, you will need to buy JetBrains Rider IDE, because there is no ReSharper for Visual Studio for Mac. Rider has ReSharper built-in, so writing every-day code will be easier. However Rider sometimes doesn’t support everything regarding Xamarin, so you will need to use Visual Studio for Mac from time to time.
- You need to learn macOS if you have never used it.
- Organizations tend to have small or none experience in managing macOS computers. If your organisation has only Windows based machines in a standard equipment catalog, then you will need to proceed in non-standard way in order to buy Macbook.
3. macOS virtualization
In this option we use Mac Pro and create virtualized macOS for every developer. Developer connects remotely to that virtualized macOS using low-cost machine, which acts like a terminal.
- Possibility to create virtualized macOS for every developer in a team. It’s easy to scale up number of virtual machines if team grows.
- New virtualized macOS will be created from same image with all dev tools already installed.
- One hardware to handle all virtual machines.
- Mac Pro is expensive.
- There is no possibility to deploy iOS apps to iPhone from virtualized macOS. iOS apps can be only deployed to iPhone, which is connected directly to Mac machine.
- Keyboard will be different when connecting to virtualized macOS from Windows based terminal.
My personal choice is working on Macbook Pro. I’ve been doing this for over 3 years now and I’m happy with it. However this option may not be for everyone. It’s quite expensive and not everybody must like macOS, because it’s way different from Windows. Anyway I encourage you to try working on macOS and find out how it’s like.
What’s you personal preference? Maybe you see some additional option available? Let me know in comments 🙂