Tablet Opportunities

September 4th, 2012

While driving home from a camping trip on the weekend, I was listening to John Siracusa's Hypercritical podcast, where he was talking about the iPad mini.

I usually only listen to the tech podcasts in the car when everyone else is asleep on a long drive, but my wife was listening, and surprised me by saying she wants an iPad Mini.

I asked if she'd be willing to trade in her current iPad for it, and her answer was a no-hesitation "Yes".

Personally I like my 9.7" iPad, but as the Galaxy Note and Kindle Fire have demonstrated, not everyone wants a big tablet. The Apple community has been somewhat dismissive of these alternative sizes, but I think Apple has been paying attention to the market, and will have a big hit on its hands with an iPad Mini.

I'm happy to see this, because I've been betting on tablet apps. My two paid apps, Resume Designer and MealPlan, came out on the iPad first, and MealPlan is still iPad-exclusive.

There are still quite a few app categories where there are great apps on the iPhone, but not nearly as many iPad apps. There is still a lot of opportunity to capitalize on the rise of tablet computing.

Twitter Chaos and TweetKit

August 28th, 2012

Here’s a part of this Twitter chaos that I don’t understand.

Okay, so there’s a new limit where a particular application can only add 100,000 user tokens before it hits a limit, and needs to “talk to Twitter” to request more. People are assuming that this talking to Twitter won’t go well, and that effectively there will be a hard limit of 100,000 users on any new Twitter app.

So let’s say I have a successful Twitter app, and I want to make some money off of it. I’ve hit my 100,000 user limit, however, and my app is cut off. Should I turn out the lights and go home?

Why wouldn’t I just launch a new application, using the same code base, rebranded? If I do that, under the current rules, I'm good for another 100,000 users.

Twitter could block this by changing the rule to be 100,000 per company, in which case you start a new company under a new name. Another option would be to sell the app as a "kit" that others can use to sell their own 100,000 copies.

Twitter has set themselves up for a game of whack-a-mole here. Their alternatives seem to be blocking out third party clients completely, or stop trying to block them at all.

Here’s an option I haven’t seen discussed: How about working with third party Twitter client developers to have them be working towards your own goals?

As I understand it, the problem Twitter has is they want to have more control over the branding, appearance and behaviour of Twitter clients, so they can have a richer platform upon which they can sell things.

Third party Twitter clients (like TweetBot or TweetDeck) have created alternate experiences for Twitter users, and that works against Twitter’s goals.

Here’s my proposed solution: Have Twitter produce a library that third party Twitter clients must use to display tweets.

It could be as simple as a view that renders a single tweet:

201208281512
Or code that you call to render the tweet onto an existing context. The view would have a delegate that it could use to tell the app when things happened like the user clicking on a link or toggling "expanded" or "regular" view of the tweet. The lower-level tweet drawing code would have a lower level API.

I believe a solution could be found that would let Twitter control the in-Tweet experience while still giving app developers the ability to build cool apps around Twitter.

Push Notification Troubleshooting on Mountain Lion

August 7th, 2012

I'm developing a Mac app that intends to receive push notifications using APNS. It seems I'm a bit off the beaten path here, so I'm sharing some information here to help the next developer to come along.

Technical Note TN2265 tech note is very helpful. It mentions using push notifications on the Mac, and tells you how to turn on logging so you can see diagnostic messages from the push notification service.

Unfortunately it's dated 2011, before there were any push notifications on the Mac, so I'm not sure what the information was talking about. Here's the relevant bit:

$ sudo defaults write /Library/Preferences/com.apple.applepushserviced APSWriteLogs -bool TRUE
$ sudo defaults write /Library/Preferences/com.apple.applepushserviced APSLogLevel -int 7
$ sudo killall applepushserviced

In Mountain Lion, there is no applepushserviced. Seems it's been renamed to apsd.

$ ps -ef | grep apsd
 0    62     1   0 10:55am ??         0:02.06 /System/Library/PrivateFrameworks/ApplePushService.framework/apsd

So the commands to use are:

$ sudo defaults write /Library/Preferences/com.apple.apsd APSWriteLogs -bool TRUE
$ sudo defaults write /Library/Preferences/com.apple.apsd APSLogLevel -int 7
$ sudo killall apsd

And the log file it generates is /Library/Logs/apsd.log. It's only readable by root so you'll need to sudo to read it.

Unfortunately, this doesn't actually help me, as my problem is that notifications are being sent to APNS but not actually making it to my Mac. The log shows no activity when I push a message, so I'll keep looking.

DSL is no longer “high-speed internet”

July 20th, 2012

Back in the day of dial-up internet, where you had to use a modem connected to a phone line to get online, DSL speeds were incredible.

Dial-up internet data speeds typically capped out at about 30k/second. DSL, which uses a digital signal over the same wires, typically delivers just over 600k/second. A 20 times speed boost!

Fast forward a dozen years to today. Bell Canada has a service called Fibe that advertises 175mbps. That's again about 20 times faster than the speed that DSL caps out at.

There's a huge difference between 175mbps and 5mbps.

Much of the urban world has "high speed" Internet, and the internet has been tuned around users having DSL speeds available. YouTube streams well at that speed, so does NetFlix, and things generally work alright.

As long as you only use one at a time.

I had a problem the other day where I was trying to watch an movie on iTunes and it was taking forever to buffer. iTunes estimated that it would take over 8 hours before I'd be able to start watching. I started poking around my network to see what was causing the network congestion, and it turned out to be my iPhone. I'd plugged it in to charge, and it had started a backup. The backup consumed enough of my upstream bandwidth that it was interfering with the movie transfer. Once I turned off the phone, I could start watching the movie a few minutes later.

DSL is fast enough, but Fibe gives you a buffer so that if there are multiple users using the network at once in your house, any of the individual users doesn't suffer. I think this is important. A digital future where our TV and entertainment is coming through the internet shouldn't depend on whether or not the 6 year old is playing a game on the computer and the game is downloading an update.

I'd like to see DSL speeds relabeled as "mid-speed internet" or given some other term, so that when planning is being done to bring "high-speed internet" to new locations like rural communities, the plan is for something that's really forward looking and not based on ten year old technology.

Where this hits home for me is I live just outside the city of Brantford, where good connectivity is available. But on my street, all that's available is DSL.

There was a plan in the works by the county to bring "high speed internet" to everyone in the county, and what ended up happening is they granted the contract to a company that uses line-of-sight wireless transmission. This caps out at around DSL speeds, but this has satisfied the mandate and it's all we're going to get.

This is a huge upgrade for the folks who previously had dialup, but it's a far cry from what's available in the city. DSL is the new dialup, and it'll be years before the rural users get another chance at "high-speed" internet.

Not Crashing, Hanging

July 18th, 2012

I posted previously about the frustrating experience of having an app in the app store crashing and having no way to find out why.

Then I posted about HockeyApp and an apparent happy ending. My apps aren't crashing and everyone should be happy, right?

Not so fast.

Resume Designer hangs for some users when they try to send mail.

It doesn't crash, so I don't get a crash report.

And it doesn't happen for every user. The app store reviews of the app are proof of this. There is almost equal number of happy 5 star reviews as there are angry 1 star reviews.

Rebooting the iPad seems to fix the problem, at least, it did for the two users who contacted me directly instead of heading back to iTunes to vent via the 1-star reviews.

It should be impossible for the system to get into a state where a user needs to reboot to use a feature of my app, but that is what is happening. This makes me suspect an iOS bug.

I submitted a bug report to Apple, and they asked me for repro steps and device logs. Of course I don't have any, because I have never seen the problem on my own devices.

I've opened a case with Apple DTS (using one of the two free support incidents we get every year as part of registering for the developer program); I'm hoping that I will get to talk to an Apple engineer who has at least heard of the problem and might have a suggested workaround.

Let's assume for a minute that I do come up with a fix for this. What happens then?

My app's reputation has been pretty seriously damaged by this. Lots of one star reviews that would scare away any purchaser diligent enough to read the reviews. The only thing saving me at the moment is that my competition's apps have bad reviews as well, but still, that's not where I want to be.

I supposed could pull the app, rebrand it, and submit it as new. I don't like that option, and I'm not even sure it's permitted by Apple's rules.

I could wait it out. Eventually the good reviews will win out. That's an expensive option given the sales I'm losing in the meantime.

I'm not sure what I'll do yet, but what matters first is figuring out what is going on here and getting it fixed.

UIGestureRecognizer Interference

July 3rd, 2012

I just ran into a bug in iOS 5.1, where the UIPanGestureRecognizer that is installed automatically for a UISplitViewController interferes with being able to drag a slider. This manifests itself as that you can drag the slider left, but attempting to drag it right causes it to move a few pixels and then stop tracking.

In trying to track this down, I ran across a number of other posts by users who were trying to figure out what recognisers were active, so I thought I'd share this code snippet.

[cc lang="objc"]
NSLog(@"Recognizers:");
NSMutableArray *views = [self.view.window.subviews mutableCopy];
while (views.count > 0) {
UIView *view = [views objectAtIndex:0];
[views removeObjectAtIndex:0];
if (view.gestureRecognizers != nil) {
for (UIGestureRecognizer *recognizer in view.gestureRecognizers) {
NSLog(@" Found %@", recognizer);
NSString *viewPath = [NSString stringWithCString:class_getName([view class]) encoding:NSUTF8StringEncoding];
UIView *sv = view.superview;
while (sv != nil) {
viewPath = [NSString stringWithFormat:@"%s -> %@", class_getName([sv class]), viewPath];
sv = sv.superview;
}
NSLog(@" On view: %@", viewPath);
}
}
[views addObjectsFromArray:view.subviews];
}
[/cc]

Drop this code into a method that runs when you suspect you have gesture recogniser interference, and have a look at the list. (You will also need to import objc/runtime.h).

This will walk all the views in the current window hierarchy, and print out a list of gesture recognisers on any view that has them configured. This isn't a solution in itself, but at least it can give you a list of things to look at. In my case, once I saw the UISplitViewController had a recogniser configured, a little light bulb went off in my head and on a hunch I disabled it, and my problem went away. This, and some subsequent Googling, led me here, which describes the problem perfectly.

New Podcasts app

June 26th, 2012

Apple has released a new Podcasts app for iOS.

The app has two interesting design twists on the genre. The first is that the metaphor for browsing for podcasts is an old style radio dial. Check it out:

201206261442

And the other is the media player screen, where, in keeping with the old school radio technology feel, they went with reel to reel tape. The wheels turn, and the tape slowly moves from the leftmost reel to the rightmost reel as the show progresses. Pretty.

201206261441

The app seems to have two dark spots. First, it's slow. Often the app seems hung while it does .. something .. but then it picks up where it left off and continues on. This unresponsiveness is very un-Apple-like.

And the other dark spot is that it doesn't seem to synchronize podcasts in the background. This is the bread and butter of other podcast apps in the App Store, so while this app is a good tool for browsing and discovering podcasts, and listening to the occasional one, it's not the app to use to follow a series of shows. For that, check out Downcast or Instacast (or any number of others, but those are two I'm familiar with).

HockeyApp

June 21st, 2012

A few weeks ago I blogged about a crash in MealPlan that was found only after I managed to talk a user through sending me a crash log. And in another post I mentioned my frustration at seeing reviews by users saying my app is crashing, when I had no reports from users and no data in iTunes Connect.

Well, that's all over, thanks to HockeyApp.

HockeyApp was suggested to me by a reader who commented on my original post (thanks Jody). I'd heard about it before, I've never liked these sort of 3rd party workarounds to things that should be working by default. But, I needed a solution, so I integrated it into Resume Designer. Integration was easy, and only took a couple of minutes.

I tested the integration by adding a simple crash to the app:

[cc]
int *ptr = (int *)0;
*ptr = 0;
[/cc]

That's a guaranteed write to a bad memory location. I wired this up to a button in the app, launched it, pressed the button, and the app terminated as expected. The next time I launched the app, I saw the QuincyKit alert:

201206210707

Cool. I clicked Yes, and then went to the website. My crash data was there, instantly, with a full call stack including symbols that pointed at the exact line of code that caused the crash.

I removed the intentional crash (don't forget to do that!), and submitted the app to the App Store for review. I noticed that this time the app was "In Review" longer than any of my apps has ever been. Maybe this is a coincidence, but I expect that it was because now the app was using quite a few additional APIs and was hitting the network for the first time. In either case, it was approved.

The next day, I had my first crash report.

Turns out that I had done something dumb in my app. I forgot to check whether the system could send mail before attempting to bring up the MFMailComposeViewController. This resulted in a crash, and not only did the HockeyApp web UI show the crashing call stack pointing the finger at the bug, but also an exception whose message detailed the problem. The problem was so clear.

Apparently a very small number of users don't have any mail accounts configured. They'd download my app, build a document, and then when they'd attempt to mail it to someone, the app would crash.

So I fixed it, and the update is waiting for review.

Apple should already be doing this for every app.

The infrastructure is there. There's a UI in iTunes Connect for browsing crash reports. There's a mechanism on the phone for capturing and uploading crash reports. But it doesn't work.

HockeyApp does.

HockeyApp is built on QuincyKit, which is the framework that actually does the crash report capturing. HockeyApp is the service that captures the crash reports, symbolicates them and gives you a nice UI for managing them. For $10/month, it wasn't worth building or setting up my own solution for capturing uploaded crash reports.

So anyway, that's my two cents on crash reports. There are other services that do this as well. I only tried HockeyApp, but it delivered.

Surface

June 19th, 2012

I've been trying to figure out what to say about this thing and it's hard to know where to start.

It looks great. The promise of a tablet that's really a full desktop computer that can run desktop apps as well as touch apps sounds pretty good, and the hardware looks slick. Nicely designed.

I love the kickstand - the Smart Cover tries to do that job on the iPad but it's too wobbly to be useful.

Using a tablet is more about the software experience than the hardware, though, and I'm a bit concerned about what this means for apps.

One of the best things the iPad has done is give developers a target, and set clear expectations. iPad apps are touch-focused. Surface still has Windows at its core, and I'm concerned that we're going to be seeing Windows where we don't want to see it.

For example, and I'm basing this on no information at all, but here's what I'm expecting. I run some touch based drawing app and I'm drawing away and it's great. But when I go to print the drawing, the printer settings dialog comes up and it's HP supplied UI is terrible.

With the iPad, Apple controls the whole experience. This means I don't get to set a bunch of options that the HP UI offers, but it also means the printing experience is seamless, and most common options are covered by a consistent UI that's the same for every printer. Which will users prefer?

Surface is going to give IT departments, currently being pressed to come up with tablet solutions, an out. "We don't need to rewrite our in-house apps for the iPad; we'll support Surface and they'll run as-is".

I'm also not convinced that Microsoft is really up for the race. They've got a good contender out of the gate, but this is a product that's going to need updates every 12 or 18 months. Microsoft doesn't get to drag their feet here.

They've done some great design here, though, and I hope someone is working on a Surface style Smart Cover for the iPad. Set those photocopiers in reverse.

TV Companion Apps

June 5th, 2012

I've been thinking about what one might do with apps on a TV set. It's actually quite an interesting field when you think about it.

Here are some things that an Apple TV set could do.

One of the reasons a lot of people pay for TV service is for the daily shows, like Dr Phil or the local news, that you can't get on iTunes. But these shows are probably already available where you are, in HD, for free. Over the air.

TiVo does this today, so I can quote some stats from their site. 88% of the most recorded shows from TiVo customers are available over-the-air with a digital antenna. Apple could build a TV that has a built-in PVR for OTA TV, and make something really compelling for people who want to cut the cord. The "free" OTA shows might go a long way towards justifying the price of the new TV.

Of course OTA TV comes with advertising, so there's still a big incentive to buy the shows from iTunes. But remember that Apple does use the razor/blade business model. They make money selling hardware. They make extra money selling content, but if you buy an iPhone or an Apple TV and don't use it to buy content, Apple still profits.

Another possibility is that Apple could also offer shows from the iTunes library on an Apple TV with commercials. Because they control the TV, they could ensure that you view the commercials (that you can't skip them) the way old-school TV used to work, in a way that TV providers can't do with a PVR. PVRs give you the ability to skip commercials in recorded shows, but if you're watching a free iTunes show, you watch the commercials. This could be huge.

Combine those two and what have you got? A pretty darn compelling TV. But here's one more thing.

When people think about apps on a TV, they're usually thinking about things like a sports scores app, or a YouTube or Netflix client.

Think about what a companion app to a TV show could do. This is what Microsoft is doing with Smart Glass and it's something that Apple could build into the set. What Microsoft is talking about is, I believe, companion apps provided by the content provider, but imagine the possibilities if any app can be a companion app for any show.

Here's an example. An MST3K app. You're watching some old movie? Cool. Now, watch the same movie with the MST3K app enabled, and you get an overlay with the MST3K guys riffing on the movie as you watch it.

Do you watch Twitter while watching a live show? Lots of people do. Watch the #idol hashtag during an American Idol to see what I mean. A TV Twitter client is an obvious thing, but one with some smarts about finding a hashtag for the show you're watching, and then selecting the best tweets (maybe with tweet voting, or some back end moderation) would be a killer app. Like a director's commentary track but live, and created by the viewers. Or maybe even the show's creators themselves.

This would all be easy to do with a couple of hooks - one when a show starts (that gives you the information about the show), and a hook that lets you place a view with transparency over the TV content. I'd expect both of these from any TV app platform.

But could any TV app platform deliver that? I don't think Microsoft could, because they'll be locking the apps to the content (and they're just not about independent developers when it comes to the Xbox 360 platform - they only seem to want to deal with the big guys).

Could Google? I think Google's openness would be a problem here. Imagine the outcry from the studios at a "steal this show" app that instead of overlaying content on top of the show, will just scrape the show and let you save it locally. You know Android would make that possible. Because hey, open.

Apple is right in the middle. They love the indie developers, and they love the studios. Bring the two together and cool things will happen.