Thursday, 25 February 2016

Ninja Coder for MvvmCross and Xamarin Forms for Visual Studio 2015


So first of all thoughts on Microsoft buying of Xamarin.

Well its something all followers of Xamarin thought might happen and now it has.

As with all Microsoft purchases you never know quite how it will work out - they have a chequered history of acquisitions.

There is no doubt that Xamarin licenses are too expensive to indie developers and the Xamarin code base - especially Visual Studio integration and Xamarin Forms has far too many bugs to be acceptable for such a high cost to developers.

Additionally communication has been patchy at best from Xamarin and non-existent at times!

There doesn’t seem to be a public roadmap for Xamarin products either.

That all sounds very negative on my part - but if things turn out well with the Microsoft and Xamarin love in all the above is solvable given Microsoft's vast resources :-)

Now to the reason for this blog post!

It has taken much longer than I thought it would be I’m just about there with Ninja Coder for Visual Studio 2015.

The biggest challenge was moving from a 'studio add-in' to a 'vs-package' - You would assume that would be quite straight forward especially as I had kept almost all the code in a separate assembly away from the 'add-in' assembly.

The truth is it has been painful - additional complexity was around getting the Vsix installer working  - better documentation around these 2 things from Microsoft would have helped!!

This version also supports the recently launched MvvmCross 4.0 - mainly namespaces changes for me to update (quite a few of them!!!)

Other highlights that have been introduced in the new shiney version include:-
  • Support for Adding Xamarin Forms Dependency Services
  • Support for Adding Xamarin Forms Custom Renderers
  • Support for Adding Xamarin Forms Effects 
  • Support for Xib files in MvvmCross iOS projects
  • Suppot for Storyboard files in MvvmCross iOS projects
  • The ability to select the Startup project on the Finish screen of the 'Add Projects' wizard
  • Support for Xamarin Forms Build time compilation 
  • Coding style improvements - support for removal of file headers and xml comments and 'this' pointer
  • Several UI tweaks and improved options

This version of the Ninja Coder is currently in beta testing - if you would like to test (please help!!!) get in touch via twitter @asudbury



Monday, 17 February 2014

Ninja Coders for MvvmCross Part 8

VS2013 we have lift off!
Support for VS2013 is now here - this has been the number one request by far - so enjoy :-).

Other note worthy things :-
The first thing you will notice is that the Ninja has had a makeover (or lick of paint as we say in the UK)! For better or worse I've moved the UI to WPF and used a metro style theme. You will be happy to know you can change the theme colors via the options screen as shown below.
Other things that have changed are back tracking a bit on testing and mocking frameworks - I started with MSTest and then moved to NUnit (both with Moq mocking framework)
Now I support both MSTest and NUnit plus Moq, RhinoMocks and NSubstitute as mocking framework (will attempt Microsoft Fakes at some point - any help with this would be great!)
Frameworks can be changed via the options screen as shown below.
User Plugins now supported. This means you can add your own plugins to the Ninja (and also override current ones defined to the system) - All you need to do is copy your plugin to the user directory following the plugin naming convention and hey presto it should appear as an available plugin to install.
Still work in progress but you will be able to select different View templates - at the moment you can select blank, sample data and web. I can see more views coming time permitting - which should make it easier to jump start development.

The Ninja now has an in built update notification facility too!

There are other bug fixes and minor enhancements, there a couple of things that need some work but I was keen to get this release out to support VS2013 and MvvmCross v3.1.

As always feed is welcome.

Saturday, 26 October 2013

Ninja Coders for MvvmCross Part 7


Its all about the community.

Ninja for MvvmCross version 2.2.0 is now available for download.

The focus of this release has been on improving the plugin support and also nuget integration  especially around plugins.

The following core plugins have been added to the list :-

  • FieldBinding
  • JsonLocalisation
  • MethodBinding

To try and improve the discoverability of plugins I have added the following community developed plugins :-

  • AppId
  • Bitmap
  • Connectivity
  • FaceTime
  • Settings
  • SimpleWebToken
  • SMS
  • Sqlite (Community version)
  • UserInteraction
  • Vibrate 

Please note that some of these community plugins are not available via nuget,
in cases where this happens the ninja will install the local version.

Some minor bugs have also been fixed and some performance improvements have been made.

Wednesday, 9 October 2013

Ninja Coders for MvvmCross Part 6


Sometimes no change is good.

Version 2.1.0 of the Ninja Coder for MvvmCross is now available for download from the Visual Studio gallery.
Again its not that exciting. Version 2.1.0 is now built with MvvmCross 3.0.13 and there have been a couple of small changes.
Change No. 1 is a link to the MvvmCross Plugins Wiki page from the 'Add Plugins' option.
Change No. 2 In the 'Add ViewModel and Views' option you now have the ability to set which ViewModel the newly created ViewModel was navigated from and also which ViewModel the newly created ViewModel will navigate to!
I told you they weren't very exciting!
I am working hard on providing the 'Add Service' functionality. I am in the middle of creating services for :-
  • LocationService
  • SqliteDataService
  • WebRequestService
  • DropBoxService

and also plan to add in my first release :-

  • AzureMobileService (though I must admit its still very early)

The problem is its turning out to be a lot of work :-(


Friday, 6 September 2013

Ninja Coders for MvvmCross Part 5


It's all about options.

Version 2.0 of the Ninja Coder for MvvmCross is now available for download from the Visual Studio gallery.
Well that's the good news, the bad news is there isn't that much new functionality, but what we do have is options, hopefully some very useful options.
I always wanted the Ninja to work on a train with no internet connection so everything needs to work from the local machine.
The no connection mode of operation will always be the cornerstone of the Ninja, however to progress the Ninja to where I would like it to be it is going to need an online mode of operation.
Having an online mode of operation means its easier to install MvvmCross updates - in an offline world I would need to package up a setup program to be installed onto the local machine.
MvvmCross solutions can be created via Nuget and I have know taken the decision to support both Nuget and offline mode in the Ninja!
For some people this is a big deal, for others not so.
Who would have thought one little checkbox would cause me so much work!!


What actually happens is everything is installed in the offline mode and then removed and then Nuget commands are launched which
download the relevant code and assemblies from the Nuget service.
The Nuget service approach is quite a bit slower than the offline mode so I would recommend not using the Nuget option .  I will try and keep the offline mode of operation update with MvvmCross updates as I can.
Some people like the fact that they can be notified if the MvvmCross nuget packages have been updated by @slodge and allows them to update very easily.
Moving to some new options that have been implemented with version 2.0.0.
Below we can see the new options screen in the Ninja.
ReSharper can get in the way when building MvvmCross solutions especially on slow machines so an option has been created to suspend ReSharper while the solution is created (and will be restarted after!).
The option to include the lib folder (and its contents) in the solution is now an opt in option for those that like all their files in the solution.
Coding Style is always a contentious issue - Everyone things that the way they code is the way to do it. Removing file headers and the default xml comments are both options. Coding style may be more configurable in the future, it will depend on community feedback.
Options to set the defaults for Nuget also on this screen.
I'm off on holiday now - I think I've deserved it - will pick things up again in a couple of weeks time (though laptop is going with me so who knows!) - I'm not sure what next for the Ninja - do I leave as it is? or do I move it forward to try and be more helpful - answers on a postcard (or tweet me at @asudbury)

Thursday, 4 July 2013

Ninja Coders for MvvmCross Part 4

One of the best things about MvvmCross (and Mvvm) is its testability.

With the MvvmCross architecture I can test most of my code without the need for a phone (I’m assuming phone development is your focus!).

One of the common excuses for not doing unit testing is 'I haven’t got time' - I’ve been guilty of this too, the problem for me is lack of decent tooling for creating unit tests.

It’s too time consuming - creating unit test projects, unit test files, sorting out the mocking of the interfaces blah, blah.

I’m not going to get into a debate about unit testing - there is better info out on the interweb that can explain the pros and cons of doing it.
I will say one thing though when you are doing multi-platform development that require hard to use equipment like phones I think you will find with a bit of effort and discipline doing unit testing will help enormously and speed your development time not slow it down.

You probably saying 'That’s great Adrian thanks for the lecture - but I know all that, so what’s this go to do with the Ninja?'

I’m glad you asked :-)

I want to take some of the time consuming steps out of doing unit testing so here is what I have in the pipeline for Ninja Coder for MvvmCross v1.2.0 coming out very soon (next couple of days hopefully!).

1) I switched the Testing project template from MsTest to NUnit (there is hardly any difference between the two but I agreed to switch)

2) Provided the test project template with Mocking support using Moq.

3) Created a BaseClass which all unit test classes derive from - this means some of the laborious tasks are done in the base class and don’t need to be done again.

4) Created a Mock Dispatcher (required for the unit testing to handle ShowViewModel requests amongst other things).

5) When you create a new MvvmCross Solution it will create a test project for the tests (this isn’t actually new but just wanted to re-iterate the point).

6) When you create a new ViewModel and Views from the Ninja it will create a TestViewModel file in the test project by default.

7) When you add plugins to your MvvmCross solution it will do a couple of things.

a) The viewmodels will now have their constructors amended automatically to inject the interfaces required to use the plugins.

b) **Relevant (stub) tests will be added to the TestViewModel file in step 6 - all interfaces will be mocked up ready to go.

** Work in progress on this one I can see more being done in this area.

8) The soon to come Add Service functionality will follow the same pattern as the testing support for Add plugin.

The above isn’t going to make unit testing a zero effort activity but should make things a LOT easier.

As always if people can see ways of improving this then get in touch!