iOS Development Teaching UT Austin

Intro to iOS Development: Part Way through the 2017 Fall Semester

I thought I would drop an update here on my Intro to Swift class at the University of Texas at Austin – this is the fifth time that I’ve taught the class (two years in Objective-C, this will be the third year with Swift). This year has been a lot smoother than previous years because I’m using Apple’s App Development with Swift e-book as a learning resource for the class.

Note – I didn’t really like the confusingly titled “Intro to App Development with Swift” book because it focused too much on strange Xcode playground exercises, and didn’t really get into mobile app development as quickly as I liked.

This year, I’m also focusing on more group exercises in class. Last year, the FDA issued a call for a design for an opoid overdose prevention app that we used as the basis for a design exercise in class – it was extremely topical. I’d like to find something similar for class as well.

Another big change for this semester is that class is now one 3 hour class per week, rather than two one and a half hour classes per week. I’ve found that there is a lot more time to focus on class with this longer format, plus I can split up classes more effectively if we can do review plus learning in the first half, and then exercises, labs, or reinforcement in the second half.

As always, this class is changing – it’s an introduction to programming class for students who aren’t programmers, so I really enjoy teaching it. The challenge is trying to figure out how to make these concepts approachable and to really teach the “How” behind iOS development, not just the “Follow this tutorial”.

iOS Development MapRhino

MapRhino 1.0.5 Released – Now with route support on the iPad

One of the frequent feature requests I got for my iOS app MapRhino (Listing on the App Store) was to add the route to the view that the kids get.

MapRhino is an app for parents in the front seat of the car to share where they are going with kids in the back seat of the car. The kids’ iPads will show where they are on a map, show the car moving as it goes, and how long it will take to get there!

What the iPads didn’t show before was the route on the kid’s iPads. The app uses two different mapping technologies – Apple’s MapKit, and MapBox’s maps. The routes aren’t directly compatible between the two, and the data also has to be serialized, sent over a multipeer connectivity broadcast, and then deserialized on the iPads. I learned more about MKMapPoint and coordinates than I really needed to know, and had to do a C-style malloc for an array – yay for sticking with Objective-C on this app so far.

I added the feature over the course of an afternoon, tested it out, and it works pretty well. Hopefully more users will like it too!

Hackathon iOS Development

ATX Hack for Change: Volunteer Recognition App for Austin Pets Alive!

Austin’s no-kill animal rescue organization, Austin Pets Alive! had the honor of being selected as one of the possible projects for the ATX Hack For Change at St. Edwards University on June 2-4, 2017. My wife Cheri and I ran into one of the organizers at OSCON in early May, and we were able to submit a volunteer recognition app project that APA! needed, but hadn’t developed yet.

Austin Pets Alive! brought a team of hackers (Cheri Linwood, Beth Qiang, Walter Moreira, and myself), along with two dogs (Nimbus and Shorty). Nimbus and Shorty didn’t contribute much in the way of code or ideas, but they did provide puppy power for the hackathon.

As for the technical details – the volunteer recognition app uses Swift for the native mobile app on iOS, and Firebase as the back-end server for everything (Firebase Auth, Storage, Database). Check out the MIT-licensed source code here on my GitHub at This was the result of about 12 hours of coding over the weekend. One of my big goals was to find a visual designer at the hackathon, but they were few and far between, so I did the visual design myself. Luckily, APA! has pretty strong colors, so that makes up for a lot.

Building Mobile Apps iOS Development iPhone Development Training

Write your first iPhone App using Swift 3 and XCode 8

I’m creating a tutorial series on creating iOS apps from the ground up. Take a look at the first video, it will get you started programming iPhone apps even with no experience. I’ll be exploring this more on, if you want to follow along there.

iOS Development MapRhino

MapRhino Updated to 1.0.3

My “Are We There Yet?” app for kids on road trips, MapRhino, was just updated to version 1.0.3.

This latest version provides a fully responsive user interface across all sizes of iPhone and iPad, so that you can see more on your screen on the iPhone 6 Plus than on the iPhone 4, 5 or SE. If you’ve bought your kids that 12.9″ iPad Pro they’ve been asking for, they’ll see a lot bigger map on that device as well! Ok, most people certainly won’t do that, but now it has nice support if they do.

In addition, the maps have been upgraded for better offline access, and the app now requires iOS 9 to support all of the latest features.

Try it out and let me know what you think!

Android iOS Development Phonegap Twilio

Twilio PhoneGap/Cordova Plugin Updated to 1.0.4 Support

For those of you using the Twilio PhoneGap/Cordova Plugin, I have just updated with Marco Padillo‘s pull request to fix a deprecated Cordova iOS method that was preventing compiling with the 4.1.0 version of the Cordova iOS plugin.

I’ve tested out the plugin with the latest Twilio Client libraries, and everything is great except on the Android side with Marshmallow – the latest Twilio Android Client SDK supports the new runtime permissions, so I’ll need to integrate that and test with my Nexus 7 for Marshmallow support. In the meantime, just target API 22 on the Android side.

Books iOS Development

New Book! Building Mapping Apps for iOS With Swift

I’m working on a new technical programming book – Building Mapping Apps for iOS With Swift. Many of my UT app teams are working on map and location based apps, and all of them are using Swift as the language for their iOS apps. The first chapter is written, which is always the hardest part of writing a book!

I’m publishing the book on Leanpub, so that you can get access to the book as it is written, and provide feedback as I go along. In the past, when I’d written technical books or articles, it’s a lot of work done behind the scenes, and then a 300 page book ends up on the shelves of the local Barnes and Noble. If we’re lucky, it will sell well enough that the publisher will invest into a second or third edition (like Beginning Hibernate/Pro Hibernate). With the Leanpub model, readers can get started immediately with the book.

Check out the preview book page here:

And sign up on the mailing list to get notified when the book is published. If you have any feedback on topics you would like to see covered, please contact me through this site, or at jlinwood at

Android App Components iOS Development

Keeping your Mobile App Libraries Up to Date

As a mobile app developer, I use many third-party libraries in my Android and iOS applications. Most of them are open source, but a few are closed source, commercial libraries (such as Flurry, a mobile app analytics SDK).

One of the problems that I’m running into, especially as I have plenty of apps that are now past the “active development” stage, is that these third party libraries don’t necessarily function well on the latest versions of the mobile operating systems. This usually doesn’t affect the shipped version of the apps – iOS in particular does a great job of simulating older operating systems, so that an app that was compiled for iOS 4 will run fine on an iOS 9 device, although the screen size won’t be the best for the newer iPhones. Android lets you specify which SDK version you are targeting, as well as the minimum SDK version you support – you can probably safely get away with supporting Android 4.0 and above for new projects, ignoring the older Android phones running on Android 2.3 (Gingerbread).

The catch comes when it’s time to update these apps – new content, a new visual style, even just an upgrade to support the latest screen sizes. Now a lot of the libraries that may have been ok in 2012 have started to show their age, in particular with iOS’s Adaptive Layout for responsive designs on iOS. Various quirks surface that need to be worked around, and a simple project to update something can take more time than is really needed.

What if you weren’t stressed about upgrading your apps? What if you’d just made updating the app’s libraries part of an ongoing process – some upgrades are necessary (security fixes, new operating system updates), and others weren’t? It’s not like it’s terribly hard to do with either CocoaPods on iOS or Gradle on Android – but out of sight, out of mind, until you get that hard deadline.

I’m building a service that takes your CocoaPods Podfiles, and your Android build.gradle files, and monitors all of this for you. I’m starting with CocoaPods first, as I think the need is greater there due to the way iOS breaks compatibility at the view layer, and then doing Gradle later. You’ll simply get an email any time a CocoaPod or Android library gets updated at the central repository, and you can decide when to upgrade. You can monitor the status of all of your projects on a dashboard to get a quick view of any technical debt that may have started to accumulate.

If you’re using continuous integration, you’ll be able to fire off a quick API call to the service to update your Podfile.lock or build.gradle to keep your project up to date.

Are you a mobile app developer who’s currently stuck in maintenance mode? Would you like to be on top of things, instead of constantly working from behind? Email me at so that I can put you into the beta version of the application. I’m just as excited about this as you are!

iOS Development iPhone Development Teaching UT Austin

Fall Semester 2015: Mobile App Development Class for iOS

It’s the fall semester at the University of Texas at Austin, and I’m teaching my introduction to iPhone app programming class again! This is the third time that I’ve taught the class, and I’m always excited by it.

This year, we’ll be using the Swift programming language, and we’ll also be using Auto Layout from the very beginning of the class for responsive user interface design. Those are two major changes from how the class was taught in previous semesters (Objective-C, and very little Auto Layout).

Because this is a class for journalism students who may have never programmed before, I take a slightly different approach than many of the other iOS programming classes and tutorials. We start with a user-interface driven approach, and then go into programming.

If you’re interested, I’ll be adding links from this year’s class (and previous years’ classes) onto this web site on the Mobile Apps Class page.