Friday, April 2, 2010

Ad Hoc Distribution, Android vs. iPhone

I've spent a fair few words on this blog discussing my perception of the Android SDK. To sum it all up simply, my overall opinion is that programming for the Android SDK is good, but nowhere near as good, nor as fun, as programming for iPhone SDK. Although Android has some places where it shines, there are relatively few where it outshines the iPhone SDK.

There is one, however. One where the experience is worlds better in the Android camp: ad hoc distribution.

When you do contract programming, ad hoc distribution is a big part of your life. A lot of people who hire others to write software aren't programmers themselves, so we have to have a way to get the applications we develop to our client for their review and for testing. On the iPhone, we have to go through this relatively convoluted process where we create an ad hoc distribution certificate then create an ad hoc provisioning profile that ties the application to certain, specific devices based on a unique identifier called a UDID. The client then has to install the provisioning profile on their phone, and then install the app.

When it works, it's not too terrible. It's a bit of a pain in the ass, but it's not too awfully time-consuming.

The problem is when it doesn't work. When a client reports that an app won't install, trying to remotely figure out why can be really tedious and time-consuming and the process creates a negative impression of the platform in the eyes of the client. And there are many reasons it can go wrong, and it does go wrong way too often in my experience. If the application bundle gets changed in any way, code signing fails and the app won't launch. If the provisioning profile doesn't get installed properly, installation of the app fails. Often, when the problem is finally fixed, we have no idea what we did that fixed it.

And we developers are left holding the bag. We're left spending hours and sometimes even days trying to get the app working on the client's device. Usually, that time we spend figuring out what the hell is going on is unbillable. When a client isn't a programmer, especially when a client isn't particularly tech-savvy, the whole process can be extraordinarily painful and frustrating both for us and for our clients. On top of that, we're limited to 100 devices that we can even do this process with. With several models of iPhone and iPod Touch, plus the iPad and the fact that most developers have multiple clients in the course of a year, we have the added hassle of having to manage our devices so we don't exceed our limit.

On Android? I drop the compiled app into my Dropbox folder and e-mail the client the URL to it. I instruct them to tap the link from their phone. That's it. It just works. No hassles, no worries. There's a one-time instruction I have to give them that involves tapping a checkbox in their phone's settings to allow third-party apps, but after that, it's just the URL. The user still has control of whether it gets installed, so it's relatively safe, but there's no provisioning profile, no iTunes requirement, no worries about the application getting corrupted or accidentally changed in transit. No angry customer calls or e-mails.

In most ways, I wish Android was more like the iPhone. In this way, I really, really wish the iPhone was more like Android. This whole process lacks the polish and ease of use that I ordinarily associate with Apple products, and after two years of developer complaints, it has improved a bit, but not nearly enough.


gradha said...

Once a betatester told me that on his jailbreaked iphone development apps worked without profile. Not ideal, but once you know it works you can use it to your advantage, especially on ipod touch devices, where jailbreaking is not a serious deal.

On such devices the dropbox+download link works as on android.

Jeff LaMarche said...


I'm not going to request a client jailbreak their device. The clients where this has been an issue are the ones who aren't particularly tech-savvy, and I really don't think non-tech-savvy people should be jailbreaking.

I would like Apple to make this work without all the hassle, at least on the iPod touch and WiFi iPad. Although they have an argument for controlling distribution on the phone and iPad 3G, that argument is basically moot when it comes to the devices that don't use the 3G network.

Jason Crawford said...

Totally agree, Jeff. This is a hassle even for folks who have full-time dev jobs, as well as for contractors. The worst part is how this hampers private alpha and beta programs (where people are doing you a favor by trying the app, and you want to make it as easy for them as possible). Really wish Apple had a better solution.

Chintan Patel said...

I could so relate while reading this article. I was thinking we minions are the only ones who struggle with provisioning, distribution etc but - in a way - its nice to know even you struggle with the same problems. :)

Niklas said...

Don't agree with this. Think it's a non issue, but then I never had any problem... Plus, just try to install on your own device before sending to client... Besides, haven't they made this easier anyway in the latest XCode?

Lucky said...

Hey, Thanks for sharing this. I would like to tell you, This topic is extremely wonderful.

I am looking for this from a long time. Thank you for this again.

Rajnish Kumar

kape123 said...

From my personal experience Android SDK is way more intuitive, better documented and more fun to use than iPhone SDK.

I started with both SDKs around same time and after 6 months using both of them, I'll completely switch to Android. I understand that iFanboys and people who have been using Objective-C for years will disagree, but if you are just heading into mobile-development waters, trust me - stick with Android and don't worry about iPhone/iPad/iPod ... that market is saturnated and it will only go downhill from now on.

Not to mention that with Android you have way more freedom in distributing your app - you won't eventually get screwed because Apple decides to ban your apps just because it can.

Adam Levy said...

It's extremely convoluted! I got tired of explaining the process to each of my clients so I just created a tutorial on my website. One recommendation I have is when an app is being updated via AdHoc it's important to remove all traces of the previous version on both iTunes and the device. Not sure why but this seems to do the trick.

Gerard said...

I had a lot of problems updating an app until I realized that even though iTunes tells you it will replace an app you drop on it with the newer one it seems to be doing that based on date while it seems that the iPhone does it based on the "Bundle version" in your Info.plist. Ever since I've made it a habit to update the "Bundle version" I've had far fewer problems.

Lalita said...

y, Thanks for sharing this. I would like to tell you, This topic is extremely wonderful.

I am looking for this from a long time. Thank you for this again.

iphone battery

Rahul said...

You made some good points there.I did a search on the topic and found
most people will agree with your blog.Thanks

IPhone Battery Review

h4ns said...

What youre saying is completely true. I know that everybody must say the same thing, but I just think that you put it in a way that everyone can understand. I also love the images you put in here. They fit so well with what youre trying to say. Im sure youll reach so many people with what youve got to say.

Arsenal vs Huddersfield Town live streaming
Arsenal vs Huddersfield Town live streaming
Wolverhampton Wanderers vs Stoke City Live Streaming
Wolverhampton Wanderers vs Stoke City Live Streaming
Notts County vs Manchester City Live Streaming
Notts County vs Manchester City Live Streaming
Bologna vs AS Roma Live Streaming
Bologna vs AS Roma Live Streaming
Juventus vs Udinese Live Streaming
Juventus vs Udinese Live Streaming
Napoli vs Sampdoria Live Streaming
Napoli vs Sampdoria Live Streaming
Fulham vs Tottenham Hotspur Live Streaming
Fulham vs Tottenham Hotspur Live Streaming
AS Monaco vs Marseille Live Streaming
AS Monaco vs Marseille Live Streaming
Alajuelense vs Perez Zeledon Live Streaming
Alajuelense vs Perez Zeledon Live Streaming
Technology News | News Today | Live Streaming TV Channels

Rob said...

Hi there, I had a good experience with TestFlight for ad-hoc passing builds to client. It works fairly good. You'll still need to manage their UDIDs on Apple dev portal, but it takes some of the edge off when getting builds to devices.