My father, Fred Nachbaur, died of cancer in September of 2004. He was 53 years old. I had just moved to Canada not long before, and our relationship, which had always been complicated, never got the resolution that I think both of us probably wanted. He was brilliant, generous, stubborn, private, and deeply creative. He was a musician, an electronics/radio engineer, a programmer, and by all…
I’m happy to share that today is my 2-year anniversary at Okta! This would make more sense if I’d originally announced on this blog that I’d changed jobs and started working at Okta, so I’ll take a moment to recap what’s happened in the past two years, and some of the milestones and accomplishments I’m most proud of. 
 
 Before joining Okta, I worked at…
Someone on Twitter recently asked how to implement a TableView header that will stretch and resize as the content is scrolled, so I thought I’d spend a few minutes to provide a good example. Since I thought it’s a neat trick
that’s often overlooked, I felt it was worthy of wrapping a post around it to explain how it works, maybe giving others the ability to replicate this…
One of the “delightful” features of iOS is the almost imperceptible UI effects they add to give the illusion of depth. One of the most under-appreciated features is UIMotionEffect, which ties the device’s gyroscope to your views to make them adapt to how the user moves their phone. 
 This can be seen throughout iOS, from your lock screen to your app icons in Springboard (the iOS app launcher).…
UIAppearance is analogous to CSS for UIKit, while being compatible with both Interface Builder and traditional styling in code, without sacrificing performance. It’s a way of declaratively assigning UI style values to your views, without needing to manually tweak settings throughout your codebase. This makes it easy to define your app’s visual style centrally, which makes maintenance simpler when…
When working with iOS apps (or really anything within Apple’s ecosystem) I’ve sometimes found the need to deeply introspect the libraries and executables built in my project to answer questions like “Is bitcode enabled for all architectures?” or “Which architectures was this binary compiled for”, and so forth. 
 These aren’t easy questions to answer unless you know your way around the…
Everyone has a love/hate relationship with bug reports. For the user, they’re a nuisance to file. For the engineer receiving a bug report, it means extra work and the sad realization that your product isn’t perfect. 
 I’ve been frustrated with Apple’s handling of bug reports just as much as everyone, but haven’t really thought much about it recently. But with some recent talk on the topic, I…
I recently wrote about Cocoa / Cocoa Touch frameworks , and in writing about it I was sorely tempted to dive into Modules, since they are pretty important to modern frameworks. But it was such a huge topic, I decided to break it out into a separate post. 
 In a nutshell, LLVM Module Maps were invented as a way to improve how source code imports other frameworks. 
 If you’ve ever worked on…
If you don’t know the nuts and bolts of how your code is compiled, linked, and executed on target devices, you aren’t alone. And lets be honest, this is perfectly fine! That’s the great thing about abstraction: not everyone need be an expert at everything in order to be effective. 
 There are times though where a little bit of knowledge can go a long way to help troubleshoot particularly…
I feel that every few years I write a post like this. It’s filled with statements like “Life got busy”, or “I had a problem with my server and didn’t notice”, or some other reason that seems insignificant in the grand scheme of things. 
 This time around though I have a very good reason for a 5-year break in my blogging activities. It started out as being just generally busy with travel, and…
You know how many times, as an iOS developer, you want to ensure some method or delegate call occurs on the main thread? We do this dance countless times, and while it’s straight-forward enough, it can be a burden sometimes. 
 Here’s an easy way to keep your thread access safe, without having to write a lot of code in the process.
Many people have heard the phrase “Don’t live to work; work to live”. This usually means that the goal of working should be to enable you to live your life, rather than allowing work to consume your life. Far too many people in the tech industry sacrifice their families, spouses, children, and even their sleep, in order to make it in this industry.
The past year has been quite a ride, to say the least! I have been so busy with work, creating awesome features and technologies on iOS apps that over a year has raced by without an update to my blog! 
 I’ve also been neglecting my own apps due to being so overwhelmed with the requirements of my work as the lead developer for Salesforce.com’s iOS Chatter app , so it wasn’t until recently that…
For the longest time it seemed that releasing an update to an iOS app was a random whack-a-mole process that I’d invariably get wrong in some way. It was maddening, especially since iTunes Connect has only recently become a decent web application. By switching to Jenkins for continuous integration of my iOS app builds I’ve greatly improved my process, but things didn’t really improve until I…
Consider the following situation that happens far too often in mobile app development: You’ve just released an app that works perfectly for you, and you’ve tested it extensively. You’re proud of your accomplishments and submit the app to the world, only to have several emails sent to you from users who have nothing but difficulties in running the app. You send a bug fix release to the App Store,…
I’ve recently released version 1.2 of Docset Viewer, which fixes a number of bugs people experienced with the previous version. If you had problems with the previous release, please give this one a try. 
 One of the improvements I’ve added is the ability to customize whether or not you would like to back up your Docsets (which can get quite large) into iCloud. To keep with the instructional…
As I’ve shown in my previous post announcing Docset Viewer , I want this series of posts to be more than me talking about my new app. In keeping with the instructional nature of my site, I’m going to show you a few things that I did in my new app Docset Viewer and how I put it together. This time around I’m going to show how I use NSURLConnection for downloading large files, and even resuming…


 Over the years my blog has transformed from the usual “Wordy geek ranting about first-world problems” content toward more educational and informative posts on what I do for a living: developing awesome iOS applications. I don’t usually talk about the actual applications I’m writing though, since most of my work is on other people’s apps (and I’m not allowed to spill the beans on…
For anyone who’s developed exclusively with UIViews on iOS may take the title of this post a bit oddly. “WHAT?!” they might say, “Are you insane? Core Graphics is not only a C-only API, but has confusing function names, and needs way more code to do the same thing I can do in less code in UIView”. Yes, they might be right, but there’s a reason why Core Graphics exists. It’s FAST! 
 But using…
As developers we spend most of our lives dealing with broken and barely-functional software: our own software. We do our best to make the applications we develop somewhat less broken and try to add features to make it functional. And once we finally get our software working bug-free and functioning stably, what do we do? Do we bask in the joy of a stable app and spend countless hours enjoying that…
One of my pet peeves is Open Source iOS libraries distributed as just a collection of Objective-C classes, rather than being bundled as a static library. I know a lot of people prefer it that way, but from a maintainability standpoint it really doesn’t make much sense to me. So when I’m faced with another library I want to use that doesn’t have a static library readily available for it, I…
With iOS 4.0 Apple introduced two new technologies to the iOS platform: Grand Central Dispatch, and blocks. Simply put, it is to multi-threaded programming what fire is to a barbecue. Sure you can do without it, but the end result is much better. 
 Despite all this, developers still seem to avoid using it. Some of the reasons for this, off the top of my head, could be backwards-compatibility…
One of the things I like most about Apple’s iOS SDK is the consistent and easy-to-use API they provide. Across all their different frameworks there’s a pattern at work that makes using their classes easy to understand. This is due in part to the simplicity for configuring those objects. In most cases you don’t need to call cryptic methods to setup or teardown classes. If you want to change a…
Following up on my previous post in this series, I’m going to continue talking about beginner topics that I and many other developers take for granted. So for this entry in my “Back To Basics” series I’d like to talk about UITableViews, and how to simply and easily construct one without convoluted or confusing code. 
 This topic in particular is something I’ve struggled over in the past and…
These days I’ve been working on some fairly advanced iOS development techniques on my various projects: I’ve taught myself (badly) about Core Audio, I’m learning OpenGL, I’m developing a series of applications using Core Data, asynchronous parsing of JSON from a streaming HTTP connection, etc. It’s extremely fun and easy once you understand the basics. 
 What I tend to forget however is that…
Like most developers, I look to Apple’s default application templates to get up-to-speed on what would appear as being the Right Way™ of developing apps on iOS. In practice however what you need to realize is Apple’s templates are meant to be the easiest introduction to a set of tools that can be fairly complicated for beginners to understand. Core Data is one of those areas. The problem is when…
I’ve written about building iOS applications with Hudson Jenkins, but until recently there hasn’t been a convenient way of getting those applications to your testers. Of course the most important part of your build output will be the app bundle you send to Apple’s iTunes Connect web interface, but throughout your development cycle you’ll want to test your app. Sure you could build and deploy a…


 This is the fourth in a series of posts I’m writing on animating iOS interfaces using Core Animation. In the first post I created a planetary orbit demo using nested CALayer objects. The second post showed how to dress up a UI by animating an image. The third post shows how you can trigger animations in response to button actions. 
 This post will show how you can create the…


 This is the third in a series of posts I’m writing on animating iOS interfaces using Core Animation. In the first post I created a planetary orbit demo using nested CALayer objects. The second post showed how to dress up a UI by animating an image. 
 This time I’ll show how you can trigger animations in response to button actions to illustrate to the user that an action is taking…


 This is the second in a series of posts I’m writing on animating iOS interfaces using Core Animation. In the previous post I created a planetary orbit demo using nested CALayer objects. 
 This time I’m going to show how you can dress up a UI by creating a simple effect using an image and Core Animation.


 One of the greatest things about the iOS platform and applications people see on it is its beauty. Smooth gradients, consistent transitions, and animations that illustrate the transition of UI elements from one state to another. Animations are more than flashy eye-candy; they tell the user what’s happening. If an element is being deleted, instead of it simply disappearing it fades or…
I’ve often been asked by people about where to start with iOS programming, whether they be co-workers, colleagues in the same line of work at other companies, or even total strangers who happen to see me happily working away on my personal projects in Xcode. Some rather naïve people assume that I learned from a book, still others even think I took a class to learn all of this! I can say…

 
 Shadowed view using a rectangular shadowPath 
 
 

 I recently had to improve the performance of a few views that utilized CALayer-based shadows on rounded-rect UIView objects. On this particular iPad application, when the device was rotated, the views rotated quite a lot slower than we would have hoped. It wasn’t a show-stopper, but the jerky rotation animation made it…
As some of you may be aware, I have enough allergies to various common foods to have earned the name “bubble-boy” from my friends. In fact, my wife’s friends used to semi-joke about me while we were first engaged that she should take a good life-insurance policy out on my, “just i n case”. She used to laugh at that, until she had to race me to the hospital a couple times, or stay up all night to…


 

For myDrumPad the main pad buttons are images. I create a UIButton object, and use setBackgroundImage:forState: to customize which image will be used for each state (UIControlStateNormal and UIControlStateHighlighted mainly). I customize the title label font, shadow and color, and voilà I have a pad button that simulates the look and feel of a Korg padKONTROL . There’s just a…


 Passwords are definitely fickle beasts. I’m used to juggling a multitude of different semi-incomprehensible passwords containing a mixture of numbers, symbols, upper and lower-case letters, and in some cases unicode characters (letters such as ü, • and §). And for some mysterious reason I’m able to remember these gibberish-filled passwords with ease. But despite all this, when asked to…


 Boomle is by far the lowest-selling app I have published on the iTunes App Store, and sadly as a result I just haven’t had the motivation to dedicate more time to it. However it’s times that I see people using it in person that I see just how much people enjoy playing it. I really hope I’ll have time to revisit it, because it’s one of those games that people just “get”, and is enjoyably…
My life is pretty darned busy right now. Transitioning to a new job , travel for work, helping @dccp with her travel arrangements for her academic conferences, my own iOS projects, and my blog. Since the time I have available to work on my own coding experiments is limited to evenings and weekends. I’ve been recently attempting to focus on just one or two projects at a time, since for a while…


 For as long as I’ve been a developer, there was only ever once when I had a machine that I felt was an adequate development workstation. That was around 2001 when I had a dual-proc 667MHz P3 768MB RAM and three 17″ CRT monitors. This baby put out enough heat that my home-office didn’t need a heater on during the rainy Seattle winters; in fact, it was so warm in there that I’d wear…


 One of the things that’s hard as a developer is keeping your legacy code up to date. It’s all too easy to fire-and-forget; write your code, debug it just enough so that it compiles, and then forget it until it breaks again. I’m guilty of that as well. In fact, just today I discovered that my continuous deployment configuration for Boomle was broken…for the past 3 months. 
 After…


 As with most things, the amount of work we as developers see when starting an iOS application is just the tip of the iceberg. There’s artwork, “About” screens, tutorial pages, icons, the app’s website, and all the marketing the app needs to get it out there. Even writing the app’s description or taking screenshots for the App Store is a time-consuming process. So anything I can do to…
I’m a fairly decent web designer. I’m not great by any stretch of the imagination, but I’m not really visually creative. I tend to express my creativity in the apps I build, as well as in my writing. So given the fact that I’m really proficient in CSS and HTML, I can make simple web applications look good if I don’t have the help of a designer. That being said nothing replaces a great UI designer,…
Last night while watching TV I had a conversation with my wife Deanna that made me realize that she is, as far as I’m concerned, a Jedi Knight. 
 I never really have that much of an appetite, and it’s not uncommon for me to skip meals altogether. Since yesterday we had a late lunch, I ended up skipping dinner. Normally it wouldn’t be a big deal, except that I thought I’d forage for a little…
While developing myDrumPad, I came across an interesting problem for my in-app purchase support. The app allows users to download additional packs of sounds (referred to as “sound packs” in the app) that they can use to tap out songs and rhythms. The sound packs themselves were a collection of CAF-encoded uncompressed PCM audio files, with a single configuration file describing the labels and…
Today, I’m proud to announce that I’m officially a Canadian Citizen! I’ve lived in Canada for 7 years now and almost all of my family lives here, but since I was born in California, I’ve technically been an American for all that time…until today. 
 No longer will I have to sheepishly explain myself when US teams play against the Canucks. No longer will I have to carry a stupid Permanent…
I’ve been working recently on getting more exposure to my existing apps, especially myDrumPad. It’s a fun app, and I have a few more updates that are in the works when I get a couple of free weekends, but frankly I’d like to see its sales figures climb a bit higher than they are now. Of course, if you’re an iOS developer, you’ll know the biggest thing that can improve your sales rankings is to be…
I’ve been considering starting a new project recently, and have been torn: Should I create my project using Three20, or should I use UIKit directly? I know Three20 is supposed to help by making applications easier to develop, but what does it really buy me as a developer? In my experience, most of my time with Three20 has been spent working around its various quirks. And from what I can tell from…
Because of my friend Chris Simmons , I’m going to try my hand at NaBloPoMo , the National Blog Posting Month. As if people didn’t write enough drivel on the Internet when they have something substantial to say, people are encouraged to blog even more with nothing at all to motivate them. 
 Okay…I’ll bite. I’ve been meaning to be more consistent in my blogging lately anyway. So starting today,…
Some of you who follow me on Twitter may have noticed recently that I’ve been talking about working for a new company. This week is my first week working for Salesforce.com . I’m really excited about the move for a number of reasons, some of which I’ll go into here. 
 As of this past Monday, I’m now a full-time iOS developer, instead of being limited to evenings and weekends. I’m a new…
I’m an avid “Idea Man”. I love coming up with new ideas; for iPhone apps, for web apps, and even for real-world inventions. Most of my ideas only sound great in my head, but when I open my mouth the idea seems to turn sour. A smaller number of ideas manage to survive the thought-to-word boundary. An even smaller minority of those ideas manage to make it down onto my “Idea Book” that I use to keep…