Some of the best ways to become a better software developer, in general, is to listen to other people’s experiences and learn from them. As a consultant, I’ve had the privilege of working with some of the brightest and talented software developers I have ever met. I enjoy working with people who are smarter than me for two reason. First, I learn how to approach problems in different ways I would have never have though of. Second, I can take other peoples experience and retrospectives and add them to my tool belt of knowledge.
So I’ve decided to start a series on this blog, and this is the first post in that series. I’m calling it “Sharing War Stories” and its intention is to take my experiences and share them with the rest of the community. These stories are going to be things that can’t necessarily be found in official documentation. It’s about solving certain issues or problems based on hands-on, real-world experience. In short, the theme for this series is about how things are done in the field that you can’t find anywhere else.
So without further adieu, here is the first article in this series.
In building Xamarin.iOS projects, the main problem is developing the user interfaces. My preferred IDE (most of the time) for developing mobile apps is Visual Studio. However, building user interfaces with Visual Studio has some limitations. Here were my main problems.
First, the Storyboard Designer in Visual Studio, though powerful, still has some limitations (compared to XCode). Bust most importantly, I don’t like to use Storyboards. That is another discussion/debate that deserves it’s own blog post. But for the time being, let’s just say that Storyboards are not very cross-platform friendly. And since I’m in the mobile cross-platform business, I’m going to stay away from Storyboards. Instead, I still build user interfaces that are XIB based.
Second, the Xamarin Visual Studio plug-in does not support editing XIB files. Visual Studio will create XIB files, but in a sense if irony, you can’t edit those files using the built-in designer. Xamarin Studio on the Mac doesn’t support XIB files either, but Xamarin Studio will open XCode if you want to modify XIB files and automatically sync the changes back up with Xamarin Studio.
Third, I found it a real pain to copy source code from a Windows machine to a Mac, modify the files, and then copy the files back. And to top it off, nearly all of my clients use Microsoft Team Foundation Server for their source control system. This is the defacto standard for most enterprise environments, or at least the ones I’ve work with. Unfortunately, there is not a nice solution to connect to TFS from a Mac. Xamarin Studio does not support TFS natively on a Mac. One can use the TFS Eclipse Plug-in, which works sometimes. But most of the time, it crashes and is pretty painful to work with. In short, it sucks.
My Requirements For a Better Solution
So in my search for a better solution, I came up with the following requirements:
- I MUST natively support TFS for source control and work item tracking.
- I MUST have the ability to create and edit XIB files for Xamarin.iOS projects.
- I MUST have Resharper like capabilities for developer productivity.
Given those three major requirements, neither Xamarin Studio nor Visual Studio can meet all 3 of those requirements. So the solution I came up with was to use both. But swapping between the two can be painful, especially if your Mac Host and Windows Machine are two different physical machines.
My solution was to use a Mac as my main development machine, and then run a Windows virtual machine (VM) so that I can run Visual Studio. So here is my setup:
- Physical Machine: Macbook Pro w/ 16GB of RAM and Solid State Drive
- Virtual Machine Software: VMWare Fusion
- Windows VM: Windows 8.1 with Visual Studio 2013 installed
I first started typing this up and soon realized that I was about to write a lot of content. It would have made for a long blog post, and felt like I would probably lose your attention. So I decided to try something new and created a video tutorial showing you how to setup your Windows VM using VMWare Fusion, and how to properly host your source code from TFS. So here’s the video:
So in summary, here’s the gist:
- Install VMWare Fusion. You can download the 30-day Trial Version. A new license is only $69.99 USD, but well worth the price.
- Create a Windows 8 Virtual Machine using the VM Wizard. It’s really easy. Install Visual Studio 2013/2015.
- On your Mac File System (not on your Windows File System), choose a location to host your source code.
- In your Window VM Settings, Share the folder location with the Windows VM.
- Open Visual Studio, Create/Map your Workspace to the Shared Folder, and perform a Get Latest Version.
- Swap between Visual Studio and Xamarin Studio with ease while maintaining source control integration!
So that’s my war story! If you have any questions feel free to leave a comment below!