October 16th, 2019

Welcome to Partly Cloudy!

Matt Soucoup
Principal Cloud Developer Advocate

We are happy to announce a new series on the Xamarin YouTube Channel called “Partly Cloudy“!

What is Partly Cloudy?

In each season of Partly Cloudy, you will learn how to build an app from scratch and take it all the way through deployment to the App Stores. With a name like Partly Cloudy – we’ll explore topics like Azure, DevOps, along with Xamarin development … you know … Partly Cloudy!

Partly Cloudy Logo

In the first season, we’ll build up a clone of the Microsoft News app!

The Shows

Each week we’ll cover a different aspect of mobile cloud development that’s needed to build up our application.

One week we will build an Azure Function backend. Next we’ll be diving into Xamarin.Forms Shell. Then be off and running with App Center Auth or even doing some DevOps.

The aim is to keep each episode of Partly Cloudy to 15 minutes or less.

The shows themselves serve as a gateway for the topic of the week. Just enough to get you started in the right direction and show you some landmarks along the way.

Due to the short nature of the episodes, we won’t be able to go deep into every single topic that each episode covers … that’s what these blogs, articles, and readmes are for.

If there is anything in the episode that needs more explanation, it will be covered in an article like this. This way you will have a step-by-step guide to get your app up and running. Additionally, all the code from each episode will be available right in GitHub!

As always, if you have any questions or would like to expand on a topic from an episode, please reach out through Twitter at @codemillmatt – DMs are always open!

Episode 1: Hello News

Episode 1 is all about getting things up and running. File->New for a Xamarin app.

We move fast! Before the episode is over, our (soon-to-be) Microsoft News clone, will be invoking an Azure Function that will run locally!

That is where we might need to expand a bit more. So jump on over to GitHub to download the code. Grab yourself some FREE Azure while you’re at it, and settle in for some fun!

The first thing to discuss is installing the Azure Functions Core Tools locally. Then how to modify your iOS and Android applications to invoke the Function, without it being served over HTTPS.

Azure Functions Core Tools

First off, the official documentation on installing the Functions Core Tools lives here.

Fwiw … You want to run the **2.x** version of the tools.

Got everything downloaded & installed? Good!

If you followed along with the video and used VS Code (or Visual Studio) to create the Function App from scratch, you will be good to go.

However, if you are cloning the repo and starting from there, you’ll need to add a local.settings.json file.

Create a file by that name, and add this to it:

{ "IsEncrypted": false, "Values": { "FUNCTIONS_WORKER_RUNTIME": "dotnet", "AzureWebJobsStorage": "" }, "ConnectionStrings": {} }

You should now be able to run and debug your Azure Function!

iOS HTTP Local HTTP Debugging

By default, iOS does not let you call out to any web service that is not served over HTTPS.

Also by default, our Azure Function is not served over HTTPS.

Not to worry! There is a relatively easy workaround for this that doesn’t involve creating or trusting any certificates:

  1. Open up the iOS’s Info.plist file in a text editor.
  2. Add the following within the top-level element:

NSAppTransportSecurity NSAllowsLocalNetworking

That’s going to allow iOS to load up any content found locally regardless of its SSL state.

Android Local HTTP Debugging

Android suffers from the same fate that iOS does. No loading of non-secure content (But it’s actually a good thing!)

However, Android is a little more difficult than iOS. Android 9 (API 28) and later requires SSL. It also just so happens that is what we’re targeting with this project.

Our good friend, James Montemagno, wrote a great post on how to allow local network traffic on an Android emulator.

Read the post for the full details. Essentially you have to add a special XML file, then specify to allow traffic on IP address 10.0.2.2 to go through in clear text.

Why 10.0.2.2? Because that is the address that the Android emulator sees its own local traffic come through as.

BUT THAT’S NOT ALL! We also have to change the URL of the function from http://localhost:7071 to http://10.0.2.2:7071 … because that’s what the Android emulator is using for its local loopback.

To do that, use some Xamarin.Essentials goodness!

if (DeviceInfo.DeviceType == DeviceType.Virtual && DeviceInfo.Platform == DevicePlatform.Android) FunctionUrl = "http://10.0.2.2:7071/api";

Summing It Up

Episode 1 of Partly Cloudy is in the books:

  • Xamarin.Forms File->New
  • The project’s structure explained
  • Azure Functions
  • Having our application make an HTTP call out to an Azure Function … running on our local machine!

That was a lot of ground for an inaugural episode. Can’t wait to see you next week when we bring in the Bing News Search API!

Author

Matt Soucoup
Principal Cloud Developer Advocate

Matthew Soucoup is a Senior Cloud Developer Advocate at Microsoft spreading the love of integrating Azure with Xamarin. Matt is also a Pluralsight author, a Telerik Developer Expert and prior to joining Microsoft a founder of a successful consulting firm targeting mobile, .NET, and web development. Matt loves sharing his passion and insight for mobile and cloud development by blogging, writing articles, and presenting at conferences such as Microsoft Build, NDC Sydney, Xamarin Evolve, and ...

More about author

0 comments

Discussion are closed.