Cross Platform Mobile Development: Considerations

Recently, I’ve started working on a small side-project with one of my friends and this project requires a mobile app. Originally the idea was to do a cross platform mobile app using Xamarin (the reason for choosing Xamarin will be discussed later), but quickly we realized that this would not be feasible.

Market Share

Firstly, let’s take a look at the market share of phones running, Android, iOS and Windows. You can find the graph full here: https://www.statista.com/statistics/266136/global-market-share-held-by-smartphone-operating-systems/. Below is a quick snip of the graph for quick reference to the discussion further below.

mobile-os-market-share

When you mouse over the last quarter of last year (2016) you’ll notice that Windows is sitting at a mere 0.3%. Targeting a mobile app for such a small portion of users does not seem feasible at all (esp. for a small side-project).

When you look at the Android vs. iOS percentages, these are at least a little reasonable with iOS sitting at 17.9% and Android sitting at a staggering 81.7%.

Cross platform considerations

We had then considered, “let’s make an iOS and Android app, using Xamarin”. Since Xamarin gives us easy tools to create both apps, however, there was one small problem. After creating the Xamarin cross platform project, we came to understand that creating iOS apps, requires a Mac. This is apparently due to some licensing restrictions from Apple that require all iOS apps to be built and compiled on Mac computers.

Needless to say, we decided to scrap the notation of creating any cross platform application, since we do not have funding to purchase a Mac in order to develop an app for iOS. This is an unfortunate restriction that exists, however my friend and I both have Android phones which made the decision that much easier.

Verdict

I will leave you with the following food for thought. Considering that the percentage of user’s using smart phones is sitting above 80% for Android, how much visibility/usage would you lose if you solely developed for Android? My advice would be – if you do not have a Mac, do not worry about creating an iOS app at all, since the number of users that you will be losing will have little impact on your overall success. If however, you do have a Mac, and the extra time to invest in simply creating a native UI for the iOS app, go ahead and create an iOS app too. In closing though, I do not believe that it is worth any effort to create a Windows phone app, since the percentage is extremely small.

Xamarin choice

The video below was a great introduction into creating cross platform mobile apps using Xamarin and the link provided for the video jumps straight to a section where the speaker explains some aspects about mobile development.

One of the key points that stood out is that Xamarin offers native performance for the apps that you create. This is because it hooks into the native API and is able to build the app as a native app for the platform.

This is different from other tools (e.g. ionic) out there which he describes as a “hybrid” approach . With these tools, the app is usually a general purpose browser that runs your app. This gives no native performance and does not give access to native APIs.

For the above mentioned reasons, Xamarin is the best tool to create an mobile app – if you are looking to code the app in a C# environment. If you are a Java developer looking to create an Android app, Android Studio might be more applicable for you.

Raspberry Pi Home Surveillance

Today I have a special treat for you.

I have compiled my notes from a couple of years ago back onto a wiki format (on my wiki site) for everyone to have access to. The content that I have uploaded relates to a home surveillance project that you can do with a raspberry pi and a web cam.

To read more about how to accomplish this, visit this page here: https://wiki.newteq.co.za/doku.php?id=raspberry-pi:home-surveillance:start_here. It will walk you through a step by step tutorial from setting up your raspberry pi to having a home surveillance system set up.

Let me know what you think about the tutorial in the comments below. If you have any suggestions, you’re welcome to throw them in the comments too!

TeamCity on Azure Windows Server

You’ve recently installed TeamCity on your Azure Windows Server and would like to access the TeamCity page from a remote computer. However, you are getting a timeout error when you try to access this page from the remote computer. What gives?

Firstly, let me just point you to these two resources for getting started with Azure Windows Server and TeamCity installations.

For the Windows Server setup, there is a tutorial video that you can watch on the Azure Portal. Navigate to: https://portal.azure.com/ and you will see the following on your dashboard.

azure-dashboard

Once you select Virtual Machines you see the tutorial to get started with Windows Server on Azure.

Next, for TeamCity installation instructions, this can be found on the main website here:  https://confluence.jetbrains.com/display/TCD10/Installing+and+Configuring+the+TeamCity+Server

Once you’ve installed TeamCity, you’d like to access it from a remote computer, as mentioned previous, however, you can’t because the web page keeps timing out. I experienced the same problem and below I’ve got the solution for you to save you some headache (as I had).

While searching around for why this was happening, I found this article here: http://www.danmusk.com/setting-up-teamcity-8-on-an-azure-virtual-machine/. It seems extremely promising, until I realized that it appears to be out of date, and Microsoft have made some major changes to the way that they have the UI structured to achieved what is mentioned in the article.

In a nutshell, what we need to do is configure the port to be accessible from a public facing computer (i.e. the remote that you are trying to connect from). From the Azure environment, this is handled slightly differently than a traditional server where you would just configure the router/hub/switch and the server’s firewall settings. Once you know where to find the configuration, it is much simpler than doing it the traditional way (as one would hope for cloud hosted solutions).

Let me walk you through the steps to get this configured.

Please note that this “tutorial” is for the UI version of Azure as at April 2017. If you are reading this in the future and do not see any of the components that I am talking about, Microsoft may have changed the way that you need to navigate to the setting in order to get this configured. Hopefully, the explanation that is provided here is enough to help you regardless of the UI.

On your dashboard you should see the followingazure-dashboard-2

Note the Network Security Group. This is the one that you need to click on.

Once there you will see a overview page similar to the one below (note that the TeamCity line will be missing in your case, since it has not been set up yet). (Click on the image if it is too small)

nsg

From the side menu, select Inbound Security Rules and you will see an option to add a new Security Rule.

nsg-new

Once you select Add, you will be able to fill in the details that pertain to your TeamCity instance. Enter the port number that you used when installing TeamCity and you will now be able to connect to your TeamCity instance from a remote computer.

Let’s Encrypt (using certbot) tutorial

Let’s Encrypt is a free, automated, and open Certificate Authority. It’s goal is to get all web pages on the internet, encrypted (using HTTPS/SSL). When web pages are sent via HTTPS, the contents cannot be modified in transit, ensuring that the receiver of the content receives the intended information. There are also other benefits of using HTTPS which you can read about here.

I have written a tutorial on how to get your site set up and using HTTPS/SSL on my wiki site, which you can find here.

The reason I have posted the tutorial on the wiki instead of directly here is to allow quicker navigation between tutorial headings. WordPress does not allow this in it’s design but the wiki platform does.

You can use this platform to provide any comments you might have regarding the tutorial