The (Obvious) Importance Of Customer Convenience

There’s a discussion over at the Pebble forums about whether a user should be able to manage multiple Pebble watches in the Pebble app for iPhone or Android.

Why manage switching between multiple Pebbles from the Pebble app? Well, for one, it’s a better user experience.

Most customers wanting to do anything with their one Pebble, or many Pebbles, will naturally go to the Pebble app. That should be embraced.

The Pebble app should be the single place for all things Pebble. Doing that affirms a positive user, and therefore brand, experience and keeps the user focused on Pebble. Having an app that allows customers to manage multiple Pebbles in an easy way will also encourage them to buy more Pebble products.

If managing another Pebble becomes a hassle, then Pebble potentially looses additional sales to a current customer. Worse, that now less-than-satisfied customer means it’s less likely Pebble sells to others who read or hear that the app isn’t that convenient.

Anecdotally, think where the iTunes ecosystem would be if you couldn’t manage multiple iPods, iPhones, etc. within the iTunes app. The answer is, not the dominant position it is in today.

@WWDC 2013

Good morning! So, here I am at WWDC 2013. I’ve had some coffee and a muffin compliments of Apple, and am now cooling my heels on the second floor. This is much better than in years past when they’d let us chill-out in the nice SF fog…until 9:55 after which we’d literally run to find a seat.


Screenshots-A Legal Way To Get Screenshots

Note: Please remember that this post is over 5-years old, is not therefore current, so code at your own risk.

Screenshot 2011 03 25 04 23 15Well, Screenshots is finally done. So, what took so long since the last post about Screenshots on March 7th?

The worst thing about having perfectionist attributes is that sometimes they are detriments. Take, for example, my initial Screenshots demo app. Yes, it worked in so much as it did demonstrate that by using Apple’s Q&A 1702, 1703, 1704, and 1714 you could get they type of screen shot, or screen image, that you could by using UIGetScreenImage(). But it was…how best to put it, so ugly that not even its coder (I) could love it. So I rewrote it. All of it. And then I added features. Yeah…like I said, a detriment.

Ok…so what took so long?



How To Legally Replace UIGetScreenImage()

Note: Please remember that this post is over 5-years old, is not therefore current, so code at your own risk.

In the summer of 2010, Apple opened up UIGetScreenImage() as a way of taking screenshots in iOS apps. There was great joy in the land.

Then the following September, Apple decided that it was better for app developers to use either UIImagePickerController or methods from AVFoundation to capture images and present a camera view. Happiness was replaced with great sadness in the land.

To help developers, Apple’s iOS Team came out with 4 Technical Q&A’s that tried to show developers how to get around the prohibition on UIGetScreenImage() while still accomplishing the same thing. To put it simply, what had been a one-line job became a many line task.

Worse, in none of the Apple supplied Technical Q&A’s was there an elegant solution for those interested in augmented reality applications…such as I, to take a screen shot. So, in plain English, if you wanted a screenshot of your augmented reality app including its UIKit layer content, sort of like…well, a gun camera, you were out of luck. This bothered me greatly.



When Users Try To Upgrade An App Without a Connection

Store Kit is a great API because it lets developers create one app that can be enhanced through upgrades, buying tools, or whatever feature we want to offer the user to make the application more useful. In my case, all I want users to be able to do is upgrade their copy of Flush ’em! from the free edition for 99¢. The Flush ’em! upgrade allows the user to select from three bathroom choices.

But, there will come a time when a user will try to upgrade an app when she/he doesn’t have a network connection. And it’s fairly certain that such a user will flame the app page if the app doesn’t give the user the ability to go to Settings, turn on the network capability and then continue back to where the user left-off in the app to upgrade.



When NSString Doesn’t Create A String With A String

If one goes to the NSString documentation, one quickly realizes that there is a very nice convenience method,

+ (id)stringWithString:(NSString *)aString


    The string from which to copy characters. This value must not be nil.

Raises an NSInvalidArgumentException if aString is nil.

Return Value
A string created by copying the characters from aString.

One would be forgiven for not noticing that little note that is supposed to catch your attention by having the title, Important. And it is important. Because, let’s say that you are trying to tell your iOS user how much an app feature upgrade cost,

NSString *titleString1 = [NSString stringWithString:@"Upgrade Flush'em for "];
NSString *titleString2 = [NSString stringWithString:[PFIAPManager sharedManager].upgradePrice];
NSString *titleString3 = [titleString1 stringByAppendingString:titleString2];
NSString *titleMessage = [titleString3 stringByAppendingString:@"?"];