Monday, December 22, 2014

iOS Layout Gotchas Redux

Since my last post on iOS Layout Gotchas I have encountered a few more basic layout mistakes that can lead to bugs and brittle code. Some of these are things I have found myself doing so hopefully they will be useful to others.

Sunday, December 7, 2014

Xamarin.iOS Deep Dive Talk Recording

I have sadly neglected this blog a bit during the busy month of Novembruary1, but I wanted to link to a recording of a relevant talk I gave recently on Xamarin.iOS. The talk was given at the Austin Mobile .NET Developers Group's November meeting. Here is the abstract:

This month's talk is a whirlwind tour through how Xamarin marries the worlds of C# and Objective-C. In this talk we will explore the basics of Objective-C and Cocoa Touch and how the Xamarin.iOS runtime and bindings map to C#. You will learn how delegates work, how memory management works, and how to work around missing or incomplete bindings. You will also learn how to use Xamarin Studio to explore Xamarin's code and expand your knowledge on your own.

The presentation runs about 1hr. 20min., but it is full of detailed information. If you are interested in learning more about how Xamarin.iOS works under the hood then I think it is well worth viewing.

Link (embedded recording after the break, along with links to example code from the talk)

Sunday, November 9, 2014

iOS Layout Gotchas

In a previous post I touched on layout in iOS by describing the difference between Frame and Bounds, and in that post I covered one of the most common layout mistakes I encounter in iOS code. However, there are several other common mistakes in layout that I have been seeing a lot recently. Read on to learn how to avoid these gotchas in your own code.

Sunday, October 26, 2014

C# Finalizers and IDisposable

Because C# is a garbage collected language you can usually just allow objects to be collected whenever the system gets around to it. However, sometimes you have resources that come from outside the garbage collected world ("unmanaged resources"), and you may want to be more proactive about freeing these resources. C# provides two mechanisms for dealing with unmanaged resources: finalizers and IDisposable.

Monday, September 22, 2014

UIView Frame vs. Bounds

The UIView class on iOS has several properties related to size and position, and some of them seem to overlap in functionality. It may not be obvious at first which ones to use when or whether there is even a difference, and as a result I have seen many people get confused by how these properties fit together, and many examples of them being used improperly. This post will try to explain how these properties work.

Monday, September 8, 2014

Navigation With MVVM

In my previous post I covered the basics of navigation patterns in mobile apps and the Xamarin.Forms navigation APIs. In this post I will cover architectural issues related to navigation in an app using the MVVM pattern and one method of implementing your navigation in a more portable way.

Tuesday, September 2, 2014

Navigation in Xamarin.Forms

Navigation is a fundamental concept in mobile applications. Desktop computers have relatively large screens that lend themselves to many modeless windows, which allows users to see multiple views at once switch between tasks quickly. Mobile devices, on the other hand, have small screens. It would be impractical in most cases to show multiple views at once (no matter what Samsung's marketing says). As a result, mobile applications tend to be designed around the concept of moving from one full-screen view to another. In this post I'll describe the most common types of navigation in mobile apps and how to use them in Xamarin.Forms.

Friday, August 29, 2014


Howdy, and welcome to my mobile coding blog!

What is this blog about?

In this blog I intend to mostly cover topics related to mobile development, especially iOS and Xamarin.

Who am I?

My name is Adam Kemp. I've been a software engineer since about 2001 (including internships). I've worked at National Instruments since graduating with a B.S. in Computer Science from Texas A&M. At NI I have worked mostly in the LabVIEW group, where I've worked on things like Linux and Mac support, the first 64-bit version of LabVIEW, and miscellaneous smaller features. Since 2011 I've been working in a subgroup of the LabVIEW team specialing in mobile applications. In that time I have worked on iOS, Android, and Windows 8 applications.

For examples of some of the cooler applications I have worked on check out Data Dashboard for LabVIEW (iOS/Android) and VirtualBench (iOS).

You can also follow me on Twitter @TheRealAdamKemp.