Semantic Versioning of Xamarin Applications


1 minute read - suggest an edit

One of the unique things about Xamarin is the ability to share large chunks of code between all of the mobile platforms. This provides an unique opportunity to version mobile applications as a complete unit reglardless of the destination app store or mobile platform.

A Xamarin application typically consists of a core library where all the business logic is stored and tiny per-platform library implementations of non-portable services (i.e. CoreLocationService : ILocationService) and finally the actual applications itself.

Which can be expressed using the Semantic Versioning (SemVer) standard as follows:

Scheme

MAJOR.MINOR.PATCH.META aka BUSINESS.PORTABLE.PLATFORM.EPOCH

Decision Tree

When determining what to increment when there are multiple changes, choose the highest kind of change and reset the suffix numbers back to zero. The MAJOR number is owned by the business and should only be incremented as directed as per your sales and marketing plan.

MAJOR when:

  • directed by the business as per your sales and marketing strategy

MINOR when:

  • any shared logic change (i.e. changes in portable class library) that is able to be shared across all plaforms

PATCH when:

  • any non-portable user interface change (i.e. pixel pushing native ui or changing custom renderer)
  • any core application change (i.e. upgrading platform analytics dependency)
  • any platform service change (i.e. CoreLocationService implementation of ILocationService)

META when:

  • every time a new build is produced

Related Posts

ReactiveUI v7.2.0 released

Learn these three buttons

Announcing ReactiveUI virtual community meetups

ReactiveUI v7.1.0 released

ReactiveUI v7.0.0 released

Announcing Serilog.Sinks.Xamarin

Announcing Cake.Raygun

Announcing Cake.AppleSimulator

Example of Xamarin iOS with Cake

Example of Xamarin Android with Cake