Sharing War Stories: The Best Way To Swap Between Xamarin Studio & Visual Studio

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.

The Problem

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:

  1. MUST natively support TFS for source control and work item tracking.
  2. MUST have the ability to create and edit XIB files for Xamarin.iOS projects.
  3. 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.

The Solution

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

The Details

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:

Summary

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!

Android ListViews Reinvented

I learned something new last week that I felt I probably should have learned a long time ago.  As I know from my previous experience in Android development, ListViews only scroll vertically.  In the past, there was no out of the box support for horizontal ListViews in Android.  Developers had to create them manually or use 3rd party libraries hosted on GitHub.  If you examined a 3rd parties source code, you would see implementing a horizontal ListView is not an easy task.  With the release of Android 4.4 KitKat (API Level 19), a new control was added to the Android SDK.  This new control is called a RecyclerView, and is available via the Android Support Library v7.

android-training

Luckily for us Xamarin Developers, we have out of the box binding to this library, so we can use this just like native Java developers.  In this post I’m going to show you how to implement a vertical ListView (just like a standard ListView), as well as a Horizontal ListView.  But we are not going to use the old legacy ListView control or a 3rd party library.  We are going to use the now out of the box RecyclerView to implement both.  The good news is that the since this is available in the Android Support Library v7, this control can run on devices from the current version of Android, all the way down to API Level 7 (Android 2.1 Eclair).  So this control remains backwards compatible with almost any device out there.  So let’s get coding!

(more…)

A Replacement For ActionSheet Date Picker

ModalPickerViewController

In the earlier days of Xamarin.iOS development (up to iOS 7), one of the more useful recipes from the Xamarin Documentation was the ActionSheet Date Picker.  Adding a DatePicker as a subview of a UIActionSheet was a very convenient way to display a DatePicker to the user.  The Action Sheet would behave as it usually would, and you could modify it to slide from the bottom and only take up the bottom portion of the screen.  After the user selects the date and taps on “Done”, the ActionSheet would then slide back down.  Because of the behavior of the ActionSheet, this was a great way to provide a Modal Date Picker.  However, this recipe no longer works on iOS 8 due to “misuse” of the UIActionSheet.  I created an alternative, with full source code and sample app that replaces the ActionSheet Date Picker that is free to use.

(more…)