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!

Xamarin.iOS Apps: Adding Login/Signup Capabilities

In today’s modern mobile apps it is very common for apps to require a user account in order to function.  Apps like Twitter and Instagram require a user account in order to be used.  So a very common User Experience is to show a Login Page when the app first starts up.  The user should enter in their credentials, and then log into the app.  If the user does not have any credentials, the app should offer them the ability to create an account, and then log them in.

Though this seems like a trivial task, it can be somewhat confusing if you are new to building iOS apps using Xamarin.iOS.  In this article I’m going to show you an effective way to add a Login Page and a Signup Page to your Xamarin.iOS apps with a great user experience and a neat animation trick.

(more…)

Making Sense Of iOS Provisioning

If you’re new to iOS development, whether you are using Xamarin, native, or another platform, you will want to debug and develop on an actual iOS device.  In addition, you probably want to deploy alpha or beta versions of your app to testers running on various iOS devices in real world scenarios.  If you’re developing for Android, this process is really easy as the Android operating system allows users to easily side load applications.  However, the opposite is true for iOS devices.  In fact, setting up an iPhone or iPad for development can be very frustrating and confusing, especially if you’re new to iOS development.

OneSimpleDoesNot

Debugging my app on an iPhone or iPad should be easy…right??

 

Xamarin and Apple both have excellent documentation on how to properly provision an iOS device for debugging, and testing.  Though it is really easy to follow the step-by-step procedures on creating the proper provisioning profiles, what I find lacking in such documentation is how provisioning works.  In this article, I’m not going to explain how to create provision profiles.  There’s plenty of documentation out there.  I’m going to explain how provisioning profiles work, and why the iOS operating system needs them.  A solid understanding is necessary if you run into any issues or errors such as “No valid iOS code signing keys found in keychain”, or “Code Sign error: Provisioning Profile ‘xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx’ can’t be found”.

(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…)

Nuts & Bolts of Xamarin.iOS

In my previous post I gave a very high level overview of what Xamarin is and what Xamarin is not.  Though my post was more conversational and explained by example, I left out the technical details.  In this post, I’m going to focus on the nuts & bolts of Xamarin.iOS.  But before we start off coding a sample application, it is (in my opinion) essential to understand what Xamarin.iOS is, how it is compiled, and how it executes on your iOS device.  Though it is easy to jump right in and start coding, I believe it is essential to understand the Xamarin.iOS fundamentals, as well as the iOS operating system fundamentals.  In the long run, this will be beneficial when you have to start debugging your apps.  It will also help you troubleshoot issues and understand what is happening between the iOS operating system, Xamarin.iOS, and your own code.

(more…)