Network Error Messages That A User Can Actually Understand

I was helping a client with developing an iOS app that uses almost all of the time their API, hence requires a working network connection. Unfortunately, mobile devices do not always have that. So we needed to deal with situations where the connection would be down. A lot has to do with smart software, for instance retry after x seconds without bothering the user, or detect when network is available again and then try again. And of course not an app should never crash or show inconsistent results! However there will always be cases when you need to tell the user something is wrong, hence error messages.

Our goals were:

  1. Be understandable for a nontechnical user
  2. If possible, explain how to fix the problem
  3. Be humble. It is not the user’s fault
  4. Be aware of the user’s state of mind

Bear in mind, a difference with a web site is that a user has very little control over what URL is called (no browser bar for user caused 404’s or DNS lookup errors). Another difference is that we control the client, so as a browser can detect connection problems.

HTTP status 404 (object not found)
Technical explanation: no resource found at url, very probably because of a programming error
Error title: Oops!
Error message: Sorry, we made a mistake and couldn’t find <object> for you

HTTP 401 Unauthorized or HTTP 403 Forbidden
App is trying to access a secured resource that require some kind of authentication. User entered incorrect credentials
Error title: Login failed
Error message: Check your username and password and try again.

HTTP status 500 (server error)
Technical explanation: server error, caused by a server programming error or network/hardware failure
Error title: Oops, sorry!
Error message: Unfortunately our server had a problem. Please try again later when we probably have fixed this.

HTTP timeout
Technical explanation: very probably the connection is that slow that the request timed out. Small chance it was actually the server that was slow
Error title: Connection is too slowww
Error message: Unfortunately the communication broke down. Please try again when you have a better connection.

No network connection
Technical explanation: user could have no cellphone reception, be on a bad wifi network, or turned on Airplane mode
Error title: No connection ūüôĀ
Error message: We couldn’t reach our server. Are you in airplane mode? Try again when you have cell phone reception or wifi again.

No DNS entry for host
Technical explanation: probably hardcoded server name could not be resolved, might be due to a down or unreachable DNS server, very probably a network problem
Error title: Oops! Could not find server
Error message: We couldn’t find our server, probably because of a bad connection. Try again when you have a better connection.

Also read this excellent post about error messages. What do you think? Do you like really funny messages like Mailchimp uses?

hosting iOSDevCampAMS was a blast!

What a fun it was. As veteran participant I was given the opportunity to host a hackathon myself. iOSDevCamp is the biggest iOS hackathon in the USA, and also has satellite events. I happened to be in Amsterdam so I seized the opportunity when I was asked to run the iOSDevCamp Amsterdam event. A full weekend it was, starting with pitches on Friday night, hacking on Saturday and Sunday and final presentations on Sunday with a jury, in which I also participated.

iOSDevCamp USA had this year with over 500 developers. We in Amsterdam had in total 4 teams, with over 25 iOS developers.

Civ Orbis won, with their history Foursquare app. They also won the iOSDevCamp Satellite competition, woohoo! Here is a video of the whole weekend:

 

Read a full recap on Appsterdam blog.. Appsterdam is an awesome organisation for app makers in Amsterdam and the whole of the Netherlands. They organise a ton of events each week, if you live in the Netherlands check out their site and the Appsterdam Meetup page.

Dear Apple, a little love for developers please

Yesterday Apple announced the new version of the iPhone OS, OS 4. Ever since OS 2.0 and the ability of third party parties developing apps for the iPhone platform, the OS has been a huge success. Although OS 4 has added some nice features like multitasking, life of developers has not become easier on the whole.

So let’s have a little overview of this that interested me:

  • Multi-tasking. Finally. Yes battery life and performance is important for end users, so not offering multitasking was defensible. However, 7 services ? That a lot of work for developers to implement. I’ve been looking at it for a day now, and I am still not sure how to use some of them. And can I do everything I want with these services?
  • iAd advertisement platform. Great for developers, what about 3rd party ads platform?
  • You have to use Objective-C, C or C++ to create iPhone apps

So…

Some features were really lacking compared to Android. The multitasking is nice but difficult. Android’s services are great and simple. But the biggest news is the 3rd party software makers that Apple is running off its turf, most notably Adobe with Flash. There are other frameworks in peril, like Unity 3D. What is not clear yet is what 3rd party ad platforms like AdMob and Mads. In general Apple has been clear: they want full control of their platform.

The question is whether this is smart. One, to create a vertile platform you need to be reliable and stay out of the way of companies building on your platform. Second, for developers the Objective-C/C/C++ is not that great to work on.

To make a statement: Objective-C is 15 years old, a hybrid language invented at NeXT when Steve Jobs was heading this company before he returned to Apple.  Well, Steve is a brilliant CEO, but not a great language inventor. So killing other languages hinders developers to create new tools to have a better experience creating apps. And if it prohibits other frameworks from displaying ads on the iPhone platform, well that shows a total disinterest towards the developer ecosystem around the iPhone platform. Any willingness to contribute to the platform is completely cut off by now.

The question whether it is smart. All major inventions now have to come from Apple itself. Besides that,  the question is how much developer inventiveness is pushed towards other mobile platforms like Android. Right now it is ok, but in 2 years it is forecasted that Android overtakes Apple. There will be alternatives to the iPhone platform. The question is where developers will be in 2 years time. These strange moves show that maybe Android is much nicer to devs.

So Apple, please a little love for your developers please.

Combining multiple UITextFields and a UITableView in a nice way for an iPhone app: part 2

My last blog post was about creating a form for an iPhone application by combining multiple UITextFields in a UITableView. I outlined the problems with this kind of screens. The first problem is the destruction of data already entered when scrolling the field off screen and secondly, app crashes when the field with focus is scrolled off screen and you touch inside another textfield. The solution I proposed was to nest the UITableView inside a UIScrollview. After receiving feedback I came up with a second solution:

  1. extend a UITableViewController instead of implementing UITableviewDataSource and UITableViewDelegate yourself
  2. disable reuse of cells by using a unique cell identifier:
  3. NSString *CellIdentifier = [NSString stringWithFormat: @”Cell%i”, indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    ..

    }

The UITableViewController handles scrolling into view when the keyboard is shown quite nicely. Using the unique identifier will prevent a cell and it’s content to be reused. And I had to agree to some of the feedback: using a UIScrollView to nest a tableView is kind of a hack.

There is a down side to this: UITableViewControllers don’t like to be combined with other view controllers, so you have to use a NavigationController or TabBarController to offer further interaction possibilities. I tried to, but never managed nicely to have for instance a UIToolBar over the UITableView.

Try it out and let me know what you think!

Download XCode project TestTableViewWithKeyboard2 with demo using UITableView to create a form.

Combining multiple UITextFields and a UITableView in a nice way for an iPhone app

Update: also read Part 2 explaining a different way of solving this problem.

So a decent number of iPhone apps will not only show things like data, but also offer you the possibility to edit data. Many controls like UISlider, UISwitch and UITextfield are provided by Apple to create some type of edit screen, almost like a web form on a HTML page. Creating a simple form that only covers the top half of your screen is simple: you create your elements like UITextField at the top, and when you touch inside the field the onscreen keyboard will show up. You hit a Done Button or a non-UITextField control and the keyboard disappears again.

Now, when you have more data to add/edit than will fit in half a screen, things get more daunting:

  1. the keyboard should only be visible when editing a UITextField
  2. when touching a UITextField so that the keyboard becomes visible, it should not cover the field you are editing
  3. with the keyboard visible you should still be able to scroll to all elements of your editing form, and not have parts be covered indefinitely by the keyboard

Well, the most natural kind of view to use to display all controls is a UITableView. Apple uses it herself, look at the editing screen for your Mail.app settings. But when you just throw in a UITableView, you run into problems:

  1. when scrolling off screen, table cells are reused and therefore also its subviews like UITextFields, which causes your newly entered data to be destroyed
  2. when having a UITextField being firstResponder (cursor in it),  you scroll it off screen and the touch inside another UITextField that then becomes firstResponder, your app will crash. This is problably because the first UITextField is destroyed before it can resignFirstResponder

So how do we do this then? Apple does use a UITableView in some way, but the above problems are show stoppers. Well the answer is: use a UITableView, but don’t let it scroll.

Continue reading

Iphone 3Gs announcement review – ups and downs

So last week Apple announced their new model Iphone, called the iPhone 3Gs. This phone will of course be running iPhone OS 3.0. I already covered the announcements of iPhone OS 3.0 back in march, let’s now review the whole package of the new hardware and software. iPhone 3G or even iPhone 1.0 users can upgrade their phone starting jun 17th, but will miss out on some of the features of the 3Gs that involve different hardware.

Hottest newest features of 3Gs:

  1. better camera
  2. faster CPU and more memory
  3. better battery life (both by improved hardware and software)
  4. video recording and editing
  5. voice control

The coolets thing about iPhone OS3.0:

  1. Cut-copy-paste
  2. MMS (but who uses this anymore?)
  3. Push notification (no background processes though, but workable other solution)
  4. Spotlight search on your Iphone
  5. Thethering (using your phone as a modem for your computer)

So what about disappointments with the new iPhone 3Gs:

  1. Evolution not revolution: faster? better camera? video? No brainers I’d say. BTW camera is only 3 MP, in contrast the 2 year old N95 already had a 5 MP camera.
  2. In majority of countries the iPhone 3Gs  is only sold together with a rate plan from the local telco (AT&T in USA, T-mobile in the Netherlands). So you have to agree to a 2 year contract to get your hands on an 3Gs, even if you already have an iPhone. Guess I will be going down to Belgium, where by law this practice is forbidden and phones have to be available also for sale without a contract. Expect to pay 600-700 Euro for a phone. Yes, a lot of money.
  3. Tethering works on the phone, but the telco may not allow it. Why? Because they are not ready yet, network wise. And of course they sell separate 3G receivers for computers with a big fat contract.
  4. Standard apps are the same. Yes landschape keyboard message typing, but no major upgrades
  5. No development phones :(. So 1. you have to get a contract to get a phone, and 2. no special phones with you can play around with, like restoring an OS image any moment you want to. In contrast, for Android there is a special Dev phone, no lock and completely customizable. You can restore specific OS images, or even toy with the OS and it’s system’s libraries if you want to. Fear of misuse of development phones has been cited to be the reason for Apple not to put out developer phones. I’d say make them as ugly as the Android dev g1, and you don’t have a problem. And sell only a limited number to registered developers (only 50.000 world wide in March)
  6. Still missing: Flash!

Overall verdict: better than the previous model, but no big surprises. Let’s see what cool Android devices will show up, so that real competition arises.

More reading:

Iphone OS 3.0 announced

Yesterday Apple held meeting to announce the new upcoming version of their Iphone OS, version 3 (we’re now at 2.2.1), to be released somewhere this summer. Already days ahead was a buzz going on, with lot’s of people making lists of new features they thought/wished were added to the already popular platform.

Major awaited features were cut/copy-paste, Flash, background processes, MMS, tethering (using your phone as a modem to your laptop), wireless keyboards, better app organisation

Majority of new features are indeed implemented. Cut/copy-past is there in a nice fashion as is MMS and tethering. Flash is still at large, Adobe and Apple are trying their best to solve the technical issues. Background processes are not there, but instead Apple opted for Push notifications. This will allow a service to push a short message (alert, text, audio) to an application without the application being running. Wireless keyboards and better app organisation is still missing.

What is also interesting is the new payment models. Now, you could only charge per download. Added to this will be 3 new models: subscription to apps, purchase of additional content (great for media companies) and purchase of additional levels (great for gaming apps). This means you can also purchase new things from within the apps.

What is most interesting to me? ¬†The push notification! I am working together with partners to create a messaging solution with a big focus on mobile. As third party apps, as opposed to the standard Mail.app on the Iphone, cannot run in the background with 2.0 it’s quite difficult to go head to head with Mail.app. Push notification will change that. As this services goes through Apple services, I am quite curious what they will charge though.

Other new features that were not so much anticipated are Search (through Spotlight), landscape keyboard, Google Maps libraries for third party apps.

I downloaded the beta SDK already, but unfortunately Apple doesn’t allow any disclosure of information or screenshots:( I honoustly hope they don’t make the mistake that they made with 2.0 again, to lift this NDA so late that no publisher dares to invest in publishing an Iphone 3.0 development book. Go over to Crunchgear to see some screenshots¬†(while it lasts).

OS 3.0 will be available this summer, and downloadable for current Iphone and Ipod touch users (Ipod users have to pay 10 USD). So you don’t have to get a new phone to be able to run 3.0, which is great. Big question: at what speed will users upgrade their OS, and will any (major) problems arise.¬†

You can watch the full presentation here at the Apple site.

More reading about Iphone OS 3.0: