From UIAlertView to UIAlertController using Xamarin and async / await

by Runar Ovesen Hjerpbakk

UIAlertView has been deprecated by Apple from iOS8. From now on, UIAlertController is the way to go. UIAlertController is surly an improvement, but given the asynchronous nature of displaying alerts to the user, I wanted to us the API together with async and await.

Below is a screenshot of what I wanted to accomplish:

Customer feedback sheet

A simple menu with two options and a Cancel-button.

UIAlertController lets you add multiple UIAlertActions, each with its own handler which is just a normal Action. I want to present the menu to the user and wait for her to select one of the items.

By using a TaskCompletionSource, I can accomplish this using async and await.

The TaskCompletionSource can be used to map an external asynchronous operation onto a normal C# Task. We can then use this task as we would any other.

In this case, the result of this task is the Enum CustomerFeeling with values corresponding to the users happiness. Thus, ShowRatingDialogAsync can be used like this:

The choice of the user can be awaited and UIAlertController now fits in perfectly with the rest of the C# code.

(If you liked this, you might enjoy New Features in FermiContainer 1.1.)

ERROR ITMS-9000: Invalid Image Path

by Runar Ovesen Hjerpbakk

I just submitted version 1.5 of Book Scanner to the App Store, but this time I needed two tries.

Book Scanner now fully supports iOS8 and the larger iPhones, and I've also update the app's icons. I use asset catalogs and had dutifully added icons in all the slots. Then I started uploading the app using Application Loader. After a while, this error message appeared:

ERROR ITMS-9000: Invalid Image Path

ERROR ITMS-9000: "Invalid Image Path - No image found at the path referenced under key 'CFBundleIcons': 'AppIcons120x120'"

After a little trial and error, it turns out that the CarPlay icon was the culprit. I removed the CarPlay icon from the asset catalog and the upload completed successfully.

No CarPlay Icon

And I will update Book Scanner to 64bit soon...

(If you liked this, you might enjoy Xamarin.Forms - App Store Rejection.)

New features in FermiContainer 1.1

by Runar Ovesen Hjerpbakk

FermiContainer gains features, but while doing so becomes even more simple. How is this possible? Let me tell you:

Automatic resolving of constructor arguments

Through constructor injection, the dependencies known to the container are automatically resolved. No attributes or XML configuration are needed.

Default container instance

Easier to extend

The Services dictionary is now protected so FermiContainer is easily extendable.

Better performance

C# expressions makes FermiContainer very performant.

Available as source through NuGet

PM> Install-Package FermiContainer.Sources

(If you liked this, you might enjoy Introducing FermiContainer - an IoC container for the rest of us.)