April 23rd, 2012 by adam

I feel sorry for Toshiba; they make good products, but their marketing
seems to belong to a much smaller, poorer company.

Take this advert, from April 2012, when Apple is already far along with shifting their whole laptop lineup to “ultra thin” MacBook airs (rumour suggests the non-thin models will continue to be phased out next cycle – doesn’t matter so much for this post, but if true, it adds extra emphasis to the post):

…and compare it with Apple’s photo from the same period:

Apple’s problems

The iPad 3 is considerably heavier and thicker than the iPad 2. This is a pain for users, but for Apple Marketing it’s a disaster. They’ve been fighting to prevent people equating “iPad” with “low power, low utility, inferior Laptop”. The iPad 1 had a fair go, but struggled. The iPad 2 went a long way to achieve it with it’s ultra slim/light/long battery life.

With other companies (e.g. Google) we’d assume that Apple did intensive market research on iPad 1 vs iPad 2, and found that weight didn’t factor into the purchase decision much. Given this is Apple … I expect it was an internal decision instead. They decided that the sheer awesomeness of the Retina display meant the pain of the weight + thickness would just have to be accepted. Personally, I agree: the Retina makes such a huge difference that it’s a no-brainer to buy an iPad 3.

(NB: even with the considerable increase in weight, and in battery quality, the iPad 3 has a considerably shorter battery life than previous iterations)

So, what does Apple do?

It’s not a bug, it’s a feature: Apple redefines Reality

All previous Apple marketing for iPad/iPhone has included side-on photos on the front page. iPad 3 is the first to use an isometric view – not just on the front page, but *everywhere*.

APPLE LESSON 1: If it’s bad, hide it.

The photo they use is EXTREMELY poorly positioned. The iPad 3 is contorted, the image is squished by perspective, the flower image looks terrible.

But you won’t notice any of that (unless you’re a product-photographer). No, you’ll notice HOW THIN IT LOOKS!

Apple carefully chose the angle to use perspective to hide the actual width of the product. It’s just shallow enough an angle to make it appear that you’re seeing the width – but just deep enough an angle to hide most of the width. (recall that the iPad 2 and iPad 3 both have a very deep bevel on the underside).

Apple also carefully chose the lighting: white iPad 3, ultra bright lights (my gut feel is these are even brighter than normal in Apple ads, which is very bright to start with), even the photo of a delicate thin flower (see what they did there?) is itself over-exposed a little. The iPad itself seems to almost … disappear … on the advert.

APPLE LESSON 2: If it’s really bad, make a photo that lies.

Toshiba: Fat, dark, and ugly

Let’s revisit Toshiba’s photo:

  1. the angle TRIPLES the width of the lid
  2. the angle DOUBLES the width of the base (look at the extreme bottom right edge – the base appears to mirror around the white hilight stripe)
  3. the inside is DARK, with HEAVY, THICK, DIRTY lighting
  4. the shadow underneath the laptop is ALMOST AS THICK AS the laptop itself, and coloured DARK BLACK

OK, so I could forgive poor colour scheme – marketing had no choice in that.

You could (maybe) forgive the stupid choice of perspective – maybe the laptop just looks ugly at any other angle. Or maybe they “needed” to show the ports on the side (if so, they failed: the lighting is so bad you can’t see the important ones).

But … who in Toshiba Marketing approved a photo with a black shadow underneath that makes their “thin” laptop look considerably thicker than it is? There’s no excuse for this: it’s a terrible photo (should have been rejected during the photo-shoot) – but it’s a catastrophically bad piece of marketing.

TOSHIBA LESSON 1: ?

March 19th, 2012 by adam

TheChaosEngine – private forums hangout for games-industry professionals. There’s an epic thread on there where people post projects they / their team / their employer has published on iPhone. It’s currently 40 pages long, so I went through and pulled out the links to the iTunes pages for each game.

NB: these run the gamut from “my first iPhone app” to “large-team of developers working for multinational publisher”. Quality here will vary hugely – YMMV!

Also, interesting to note … these are listed in order of posting to the forums, so … as you go down the list, you’re seeing an evolution over time of personal/indie (and occasionally “big team / AAA”) games on the app store.

TCE games, in first-launched order (earliest first)

  1. http://toucharcade.com/2008/12/12/ivory-tiles-a-unique-iphone-puzzle-game/
  2. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298060143&mt=8
  3. http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289208006&mt=8
  4. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=303057162&mt=8
  5. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=305889055&mt=8&s=143441
  6. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307740243&mt=8
  7. http://zenbound.com/itunes
  8. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307117698&mt=8
  9. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=311115651&mt=8
  10. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=318996099&mt=8&s=143441
  11. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317781445&mt=8
  12. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=321510472&mt=8
  13. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=323694495&mt=8
  14. http://bit.ly/ifistchaosengine
  15. http://appshopper.com/utilities/isundial-2
  16. http://bit.ly/qqq_iphone
  17. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=333962577&mt=8
  18. http://itunes.com/app/Coretex
  19. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=334682266&mt=8
  20. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=334683021&mt=8
  21. http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=335955369&mt=8
  22. http://tinyurl.com/yc9bpr5
  23. http://itunes.apple.com/us/app/revz/id352513901?mt=8
  24. http://itunes.apple.com/gb/app/fm-2010/id352933624?mt=8
  25. http://itunes.apple.com/gb/app/koan/id366816832?mt=8
  26. http://itunes.apple.com/us/app/tiki-towers/id298127125?mt=8
  27. http://ultrablast.net/
  28. http://bit.ly/aurifi_itunes
  29. http://itunes.apple.com/gb/app/denki-blocks/id371685186?mt=8
  30. http://bit.ly/yatr_iphone
  31. http://bit.ly/qqq_worldfoot
  32. http://itunes.apple.com/au/app/gamebook-adventures-2-the/id375065935?mt=8
  33. http://itunes.apple.com/app/id356565414?mt=8
  34. http://itunes.apple.com/app/reckless-racing/id386234787?mt=8
  35. http://itunes.apple.com/gb/app/tiltstorm/id392545121?mt=8
  36. http://itunes.apple.com/us/app/awakening-the-dreamless-castle/id386161821?mt=8
  37. http://itunes.apple.com/au/app/gamebook-adventures-1-an-assassin/id352871101?mt=8
  38. http://itunes.apple.com/au/app/gamebook-adventures-4-revenant/id395652668?mt=8
  39. http://itunes.apple.com/gb/app/cricket-captain-2010/id406333955?mt=8
  40. http://itunes.apple.com/us/app/pocket-frogs/id386644958?mt=8&partnerId=30&siteID=0JkCNyaaKoo
  41. http://itunes.apple.com/us/app/sky-burger/id311972587?mt=8&partnerId=30&siteID=0JkCNyaaKoo
  42. http://itunes.apple.com/us/app/scoops-ice-cream-fun-for-everyone/id291591378?mt=8&partnerId=30&siteID=0JkCNyaaKoo
  43. http://itunes.apple.com/us/app/dizzypad-frog-jump-fun/id357104694?mt=8&partnerId=30&siteID=0JkCNyaaKoo
  44. http://itunes.apple.com/us/app/textropolis/id301643671?mt=8&partnerId=30&siteID=0JkCNyaaKoo
  45. http://itunes.apple.com/gb/app/kamicrazy/id299644692?mt=8
  46. http://itunes.apple.com/us/app/bubble-dreams/id400309976?mt=8&ls=1
  47. http://itunes.apple.com/au/app/gamebook-adventures-5-catacombs/id422246290?mt=8
  48. http://itunes.apple.com/gb/app/family-games/id417601428?mt=8
  49. http://itunes.apple.com/gb/app/moving-day/id395714931?mt=8&ign-mpt=uo%3D4
  50. http://itunes.apple.com/gb/app/to-fu-the-trials-of-chi/id436987555?mt=8
  51. http://itunes.apple.com/gb/app/bashi-blocks/id441051678?mt=8
  52. http://itunes.apple.com/gb/app/magnetic-billiards-blueprint/id432152950?mt=8
  53. http://itunes.apple.com/au/app/specky-mark-of-the-year/id458244379?mt=8
  54. http://itunes.apple.com/gb/app/quarrel-deluxe/id453203047?mt=8
  55. http://itunes.apple.com/us/app/death-at-fairing-point-a-dana/id445507820?mt=8
  56. http://itunes.apple.com/us/app/lap-uranus/id447548601?ls=1&mt=8
  57. http://itunes.apple.com/app/cutesy-the-quest-unicorn/id463920538?mt=8
  58. http://itunes.apple.com/app/funpark-friends/id444438531?mt=8
  59. http://itunes.apple.com/gb/app/myragdoll-3d/id444210353?mt=8
  60. http://itunes.apple.com/gb/app/puzzler-world-2/id465620717?mt=8
  61. http://itunes.apple.com/app/shark-jug/id473563382
  62. http://itunes.apple.com/au/app/mini-motor-racing/id426860241?mt=8
  63. http://itunes.apple.com/gb/app/grabatron/id481309065?mt=8
  64. http://itunes.apple.com/us/app/leapin-frogs/id487318065?mt=8
  65. http://itunes.com/apps/gravityrocks
  66. http://itunes.apple.com/app/puzzle-bonsai/id491318778?mt=8
  67. http://bit.ly/lighthousegame
  68. http://itunes.apple.com/us/app/my-coin-match/id472717295?mt=8
  69. http://itunes.apple.com/gb/app/froad/id469021974?mt=8
  70. http://j.mp/EufloriaHD
  71. http://itunes.apple.com/us/app/end-night-hd/id498102948?ls=1&mt=8
  72. http://smallgreenhill.com/ballonawall/index.php
  73. http://itunes.apple.com/us/app/rune-raiders/id497702195?mt=8

Non-chronological

These posters didn’t provide a real iTunes link – I had to hunt it down on their websites – so they’re out of order:

  1. http://itunes.apple.com/us/app/ax-raven-elite/id331999733?mt=8
  2. http://itunes.apple.com/us/app/red-card-rampage/id388957922?mt=8
  3. http://itunes.apple.com/us/app/wordsnap-contraption/id412453514?mt=8&ls=1
  4. http://bit.ly/zSf5vc
March 19th, 2012 by adam

For a couple of years now, Firefox has had a nifty feature where if it crashes – for ANY reason – the next time you run it, it gives you a “menu” of the windows you had open, and lets you selectively re-open them. As a bonus, this menu is just a plain window – you can ignore it (if you’re too busy right now), and open some other windows in parallel.

(even if it’s not Firefox that crashed – e.g. a laptop battery ran out, or someone tripped over your power cable – you still get this window. This is a huge help on OS X, which crashes quite a lot if you’re running Apple’s dev tools :))

I’d wondered a few times “what happens if it crashes again, before you’ve selected which things from that menu you want to re-open?”

I just found out the hard way: actually, it gives you a new menu, where one of the items is … the previous menu. It nests, all the way down (I had a crash-of-a-crash-of-a-crash – and I got everything back perfectly. Very useful, too – one of the deeply nested open windows was an important form I’d forgotten I’d not yet sent).

On the downside, if you close Firefox, and re-open it normally, the menu gets blown away – but that’s probably to do with the “five-years-and-counting still unfixed” bugs in Firefox where “remember open windows on startup” doesn’t work properly (there’s some epic threads in their bug tracker, many complaints, but no fix yet).

Still, for the most part, this is a very nice approach to application-crashing. One to remember when designing your own document-based applications…

March 13th, 2012 by adam

Ever seen this hard to notice bug in an iPhone / Mac project? Caused by a flaw (bug?) in Apple’s own API:

NSDictionary * map;

NSObject * key;
NSObject * value;

// NB: next line will frequently crash at runtime
// …but even if doesn’t crash, it probably won’t do
// what you’d expect it to:
[map setObject:value forKey:key];

if( value != [map objectForKey:key] ) // HA!
{
NSAssert( 1 == 0, @”What the **** just happened??” );
}

NSDictionary is one of the nastier things I’ve seen in a programming language: in an Object-Oriented Language, it’s a class that refuses to take Objects as arguments, *but pretends to*. If you attempt it, it either crashes, or it invalidates your objects, breaking contracts all over the place.

ObjC’s bizarre design

In the days pre-OOP, a “dictionary” was something that mapped:

“a string”
to
“anything” (usually: basic datatypes – e.g. strings, integers, floats, etc).

In the days of OOP, the same thing is usually called a “map” (which is a better term) – although the terms are synonymous – and maps:

“an object”
to
“another object”

What did Apple/NextStep/Crazy-Guys-Behind ObjC do?

NSDictionary: maps:

“STRINGS ONLY” (no objects allowed!)
to
“OBJECTS ONLY” (no core datatypes allowed!)

But … I can use an NSObject as key?

Yep – but Apple’s internal implementation takes a *copy* of the object, and uses that as a key – rather than using the object that you gave it. This is a common problem in OOP languages and implementations of Map – e.g. Java does the same thing.

Unfortunately, this means that you can call “setObject:forKey:”, and then “objectForKey:” will return nil *for the same key*.

In Java and other OOP languages, you are required to implement a custom “isObjectEqualToObject” method. In ObjC too – except that that method is ILLEGAL if you’re using CoreData.

And ObjC will crash too, as a bonus

I’ve never seen this in other OOP languages, but in ObjC *additionally*: if you don’t manually add to the object you pass-in … it crashes at runtime. Yay!

How come? AFAICT, Apple’s header file is wrong:

- (void)setObject:(id)anObject forKey:(id)aKey // You lie!

it seems the implementation of that method is:

- (void)setObject:(id)anObject forKey:(id<NSCopying>)aKey; // the correct signature?

Net result? Code that happily compiles … will crash. ARGH!

Two reasons to beware…

…so what’s the other one?

Ah, just the one we see again and again on live projects, wasting hours and hours of time:

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
object1, key1,
object2, key2,
nil];

NSLog( @”dictionary = %@”, dictionary ); // but it only has one key/value pair. ?!?!?

Ah, well … that nil … what happens when object2 is nil? Oh, damn.

What about if key2 is nil? Now we’re really nasty … we’ve given it “half” of key/value pair. Nice!

January 16th, 2012 by adam

Looks like a “normal” KickStarter project for a new Tower Defence game.

Halfway through the demo video, it switches to “here’s how I’ve been using GA to detect game-design flaws, and to test ideas in tweaking game design”.

Something I’ve wanted to do for more than a decade, but could never find a company who’d take it seriously :). I really hope this iPad game does well – would be great to see a poster-child / real-world demonstration of a workable technique here.

January 16th, 2012 by adam

As a free-time project, I’ve been writing a Risk clone (*) for iPad.

One of the bits I like best right now is that you can give it the URL of *any* SVG file on the web, and it automatically turns it into a Risk map.

(e.g. all the maps in Wikipedia articles are SVG files – it’s a common file format with good browser support)

This was one of those “interesting” technical challenges – I had to find an algorithm that would automatically work out which territories a human would “assume” were connected to each other.

I’m using an open-source SVG library which works fine for basic SVG files but has a lot of bugs with the more esoteric ones. I’ve already fixed a few of the major bugs (they’re now merged into the GitHub project) – but I’d like to get more SVG files to test with.

The one thing to bear in mind is that the colour-data gets wiped when it imports. So … SVG files that make heavy use of different colours or gradient-fills/pattern-fills lose detail when imported.

Also, files where none of the elements are close enough to be deemed “connected territories” … work poorly.

Everything else works fine.

So … if you’ve got any, please post a comment here with URL, or email them to me directly (address in the About link at top of this page).

(*) – I say “clone” because it’s the same genre – but the gameplay is “fixed” quite a lot. If you once loved Risk, but grew to hate it, you’ll see why I wanted to change the baic game design :).

December 9th, 2011 by adam

For the past week, my iPhone’s have been unable to use Gmail. After approximately 4 hours, gmail locks you out of IMAP completely, unless/until you force-kill Apple’s mail client. The problem is … if you force-kill the client, you lose all emails you wrote, and you lose all emails you filed into IMAP folders (Apple’s client refuses to save state – it requires the server to do it).

Nothing has changed on the phones – and Google has been putting up irritating “stop using gmail, use the new gmail” ads for the same period of time – so I’m going to go out on a limb and guess that someone at Google changed something on the IMAP protocol that makes it no longer work correctly with iPhone.

I just had to write the same email for the second time, and re-file 50+ emails for the third time – and I’m giving up. You just can’t use gmail on an iOS 4 iPhone right now (I’m guessing that iOS 5 works OK, or there’d be an internet rage fest going on.

So. What to do. Dump the iPhone (switch to Android as my main phone, perhaps?)?

Or decide that enough’s enough, gmail is just too damn annoying these days (e.g. the 3 week period earlier this year where “reply all” was disabled on my gmail account) … I’ve heard there’s an email-for-life system called … hotmail?

Hmm…

September 7th, 2011 by adam

Today I finally discovered that the iPhone has StreetView.

That means it’s only taken me THREE YEARS to find this secret feature that Google has worked very hard to make sure no-one ever uses.

The best bit? The top two Google results for “iPhone Streetview” were both incorrect, and useless – but claimed to “solve” the problem (one of them was a Yahoo answer, the other a blog).

Eventually, courtesy of this amusingly-titled (yet poor in terms of Google hits) blog post, I found the solution:

  1. There MUST be a pin on screen – either because:
    1. you did a search for a place, and Google has found it and created a pin
    2. you tapped the curled paper in bottom right, then pressed the “drop a pin” button (incidentally: instead of letting you “drop a pin”, that button arbitrarily sticks a non-moveable pin in the center of the (now-hidden) screen. Terrible UX and GUI design. Google’s designers: what were you thinking?)
  2. The popup that’s attached to the pin has a standard button, and a standard icon – BUT THAT ICON IS NOT AN ICON
    1. …it’s an invisible button…

When we’re building iPhone apps for clients, this comes up typically once on every project: if you want to do custom user-interfaces, do NOT make them look like Apple standard interfaces. Apple has trained 200 million (total number of i* devices) to expect that (in this case: ) “a map-popup has exactly one button”. You are fighting against the work of one of the richest companies on the planet, a company famous for its marketing, interface-design, and visual-obsessions.

Worse is if you then go and break all the standards on what a “button” should look like, so that (in Google’s case), they:

  1. Put something in the place that is reserved for a non-clickable icon
  2. Used an icon-image instead of a button-image
  3. Provided no other ways of triggering the feature…even though this is usually NOT the place the user would want to click to get that feature

I laughed out loud when I discovered this – 3 years it’s taken me to get this to work, and me a professional iPhone developer too! How long is it taking the average “normal” user? If nothing else had convinced me Google is fundamentally f***ed by their refusal to design for anything other than “engineers who are exactly like us (and the rest of you plebs don’t matter)”, this would have nailed it for me.

July 26th, 2011 by adam

Over the past couple of years, there’s been much coverage within the games-industry press about the fall and fall of the UK games industry. Nicholas Lovell has done a particularly good job of tracking studio closures. Many of the big companies, and the trade associations, seem to have spent most of their time trying to win tax breaks.

The argument has been: It’s impossible for AAA studios, with hundreds of employees, to stay “competitive” with Montreal, Vancouver, et al – unless the government gives them vast amounts of free profit. If they are not gifted this money, they will shut down, and make people jobless; witness NIcholas’s Job Loss Tracker above for evidence.

But the thing is … I really don’t care.

I really don’t believe we “need” those big studios.

(EDIT: NB: this post was sparked by Andy Wilson of Codemasters stating: “we need to start supporting the industry properly or the whole thing is going to melt into iPhone developers – and there’s only so many 4-man teams who are going to find success”. Of course, Codemasters is a great example of a badly-managed, has-been publisher that chews people up and spits them out)

If they cannot make the same high profit margins that those of us skilled and bold (foolish?) enough to do iOS are making, then they’re just getting in the way, and should sod off.

How many iOS studios were whining about the need for tax breaks?

How many were just being quietly profitable, and focussing on being “more profitable through good solid product and marketing”, rather than begging government to do it for them?

I welcome the demise of bloated, badly managed, unprofitable, second-rate console studios.

I also believe that console studios will return – but they’ll be offshoots of iOS studios, and they will be managed a million times better. Let’s forget the old studios, and their shitty business acumen, their mismanagement, and piss-poor leadership.

Good riddance, I say.

(unless they continue to be healthy – in which case: well done, and what a great asset to the community and industry! I judge them by their success, not by their ability to chew through people and resource as inefficiently as possible; it often seems in the press today as though the latter is the most important criteria :()

May 13th, 2011 by adam

…because Apple hates giving customer support, and buried this address deep in their website, in a tiny font where it’s almost impossible to find:

contactus.uk@euro.apple.com

…and they just screwed-up an order we’d made, but all their emails were sent from fake Apple email addresses (“You have replied to a confirmation-only address that cannot accept incoming email.”).

The only alternative they offered was an expensive pay-per-minute phone number. I’m obviously not one of the True Mac Faithful: I don’t agree that *I* should pay Apple to fix *their* mistakes :).

May 12th, 2011 by adam

Apple UK continues to show that they don’t have a clue how to operate a retail operation.

We’ve got an app that’s demoing today and tomorrow, and it would help if I had an extra iPhone4 to run it on. So, I try to buy one from the local Apple shop.

Hi, do you have any iPhone 4′s?

“Do you want a contract?”
“No”
“Well, in that case: no. We don’t have any” ([To Other Guards] I told him we already got one)
“But … if I *do* want a contract, you’ve got some?”
“Yes!”
“But you won’t sell me one of those, even though you have them?”
“No!”

When will you have [these magical non-contract] phones?

“No idea. Maybe tomorrow. Maybe not”
“…”
“Here’s a phone number – you can call them at 9am tomorrow morning and they’ll tell you if we have any that day”
“So, I can call, and reserve one and collect it that day?”
“No. They’ll only tell you if we have one RIGHT NOW when you call – it could be gone when you get here”
“So, this number is totally useless?”
“Well … it’ll tell you whether maybe we probably might have one. We don’t do reservations any more. We used to, all the time. But then we … uh … stopped”

http://store.apple.com/uk

“Order now, in stock, ships in 24 hours”

April 29th, 2011 by adam

Rebooting again, everything killed thanks to Xcode4, I thought of xkcd’s comic on “compiling”, and a little modification came to mind:

Appropriately, working with Xcode3 often suffered from time wasted for the weak compiler to churn through relatively tiny projects. We’ve moved on – Xcode4 has a much better compiler/linker/build toolset – but it’s brought it’s own (worse) problem to replace it…

Xcode4 commits IMHO the second-worse (*) sin for an IDE: serious memory / CPU leaks; run it for long enough (as little as 1 hour) and it will crash badly, and drag down your whole computer with it. Since you cannot work without the IDE, this means you waste hours every week just rebooting over and over again. Apparently, OS X has little protection against rogue apps – the whole OS seizes-up, mouse cursor stops working, etc.

Varies from machine to machine, and project to project. e.g. high CPU machines (fast Quad-core) seem to be affected only very rarely (if ever). With some machine/project combos – e.g. dual-core machines around 1.6Ghz CPU – this happens multiple times a day, every day. They’re fast machines, generally – it’s just that Xcode has some fatally bad code somewhere. Xcode3 on the same machines was fine.

(*) – worst sin: data-loss; an IDE that corrupts your source code / build settings. Those just make me lose the will to live.

March 25th, 2011 by adam

Did that get your attention?

In the last day or so, I’ve seen a barrage of crap on this topic – much of it ACTIVELY destructive (it’ll make your iPhone apps less successful than if you didn’t do it!). I’m not going to hotlink most of them – they don’t deserve the attention – but some of them mix bad with good, e.g. a guest post from someone with some good points, but also glaring inaccuracies.

So, some myths:

Thursday is the best day to launch an app

No. It’s one of the worst days. Why? Because every idiot who ever read “Thursday is the best day to launch an app” … now launches their apps on Thursday. Duh!

Facebook and Twitter sharing will make your app “go viral”

Virality is based on value, not on the presence of a corporate logo. Find some *real* iPhone developers, and ask them what happens if you launch an app with sharing in it.

Only apps that are already spreading virally, and heading for major success, ever benefit from this integration.

i.e. don’t bother until you actually need it; in some cases, for big apps, where you’re confident of 100,000 initial downloads … you may need it at launch. Most apps don’t.

Choose carefully every word in your iTunes description

Nope. Ask any experienced developer how many of their users read the iTunes description, and they’ll probably laugh at you. There’s a really, really good reason for this (but this is a post on what NOT to do, not what to do).

Check-in makes your app as popular as FourSquare

Um … WTF? How stupid are you?

“You need check-in on everything. Let your users check in to articles, blog posts, events, places, shopping items, videos, or even slide share feeds ☺.

People love to tell their friends where they are and what they are doing, so just make it easier for them.”

Who’s that from? Oh, yes – a company that doesn’t actually make apps, but sells a product to churn out crummy identikit apps, where “check-in” is one of their features.

No. In general, it just annoys people. Unless it’s part of the app’s core activity – but in that case, you never had an option to “not” include check-in. (also: why are you even trying to compete with 4square? Have you any idea how tough that is?)

Chart ranking is everything

Again, this is from the school of:

“I am a marketing person who doesn’t make apps, and doesn’t know what they’re talking about. Nor do I bother to ask anyone who does”

…because this info is several years out of date (i.e. a lifetime in App Store terms). In fact, for the last 10-18 months, chart ranking has been largely irrelevant in a lot of sectors – largely due to the surge in FAAD and their ilk.

Engaging with “the community” will give you huge sales

Sad but true: first you need a success before you even have something we’d call “a community”. You need a substantial number of downloads – AND daily actives. “Ten of your mates downloading it once” does not a community make.

Variant: for games, pandering to the TouchArcade community

Ask a game developer how easy / successful it is to promote your game on TA.

Again: back when almost no-one was doing it, this helped enormously. But that was years ago. Now … good luck getting any visibility amongst the sea of other developers doing exactly the same thing.

And finally…

If you feel you want even more “gotchas” and things to avoid, have a look at Jake Simpson’s very recent (February 2011) experiences of trying many of these – and more! – and having them fail miserably.

NB: Jake’s experience was particularly harsh, and actually goes more negative than I think is accurate, in general. At some point, I’ll do a followup that looks at the good parts (things you SHOULD do, that never seem to get old).

But, let’s be clear: mostly, this is standard Marketing. If you’ve hired someone to do your marketing who even bothers to read these sites, you made a mistake. Instead, find someone who’s good enough at marketing to invent the tactics they need all by themself. Preferably, hire someone for their skill at marketing “strategy”, not for their knowledge of “tactics”.

March 20th, 2011 by adam

Oh, yes:

http://xkcd.com/869/

…please, FOR THE CHILDREN, don’t put a “make it look like an iPhone app, but remove 90% of the content” theme on your website.

March 4th, 2011 by adam

…if you:

  1. finish it
  2. and design it
  3. and build it
  4. and test it
  5. and refine it
  6. and launch it
  7. and sell it
  8. and market it

…for me.

This was the tempting offer whispered in my ear this evening by a hard-up web-developer at a networking event, once we were alone, and he’d heard I developed iPhone apps.

For the record, this is the worst offer I’ve ever had – even in the days of the iPhone goldrush (2008, mid 2009) the least I was offered was “one third”. Since then, even the unrealistic offers usually start at $2,000 cash up-front.

I smiled, and said nothing.

I carried on the conversation, when he suddenly broke into a long (minutes) tirade of abuse in the middle of the venue, because I’d “blown [him] off” when he’d “offered to share [his] great idea”.

I stood there in silence for another 30 seconds, wondering what to do: should I respond in kind? should I try to help him? should I walk away?

I decided to try and help him. I asked him to think about how his offer sounded to someone who makes apps for clients every day. (he ranted about how I thought I “was the Big Man – BUT YOU’RE NOT!”). I apologized profusely for offending him, and said I’d try to explain (he told me to “scuttle off, little man”). I made one more attempt – I pointed out that after inadvertently offending him, I was at least trying to make amends, and all he seemed to want to do was insult me. He sneered.

So, my public-service act for the day:

How much does it cost to develop an iPhone application? (tl;dr – $250,000 for a good one)

(note: when we talk to clients, I advise them the sane limit is c. $150k for a great one, or $75k for a good one. The $250k figure is accurate if you’re doing own-IP and it HAS to be awesome (like twitterific, quoted) – but you always end up spending more when it’s your own IP – or if you work with extremely expensive digital agencies who don’t have in-house iPhone specialists. Most of the good, solid iPhone dev teams are about half that price)

NB: this problem (“I’ve got an idea, I’ll let you have it in return for a profit share”) is prevalent among people who know nothing about computer games, as much as for people who know nothing about generic iPhone apps (but who read the papers and think they’re sitting on a goldmine. That’s very interesting in and of itself…

At the end of the day, I walked away from Mr. Abusive. Some people just don’t want to be helped, sadly…

February 4th, 2011 by adam

Another interesting post from Dan Lee Rogers on whether the money paid for ngmoco last year was reasonable.

(hint: Dan is clearly rather doubtful, IMHO with good reason) E.g. …

Further, Ms. Namba stated that DeNA’s purchase decision was based ngmoco’s ability to create hit iPhone games, which begs the question: what hit games? The ones they were giving away for free or the ones they lost money selling?

Perhaps ngmoco showed DeNA some sort of new-fangled accounting scheme to justify their purchase price? Unfortunately, whatever it was is a mystery to all of us simple cotton pickers.

Harsh but probably fair. I’m settled in with the popcorn, and eager to see where this goes next.

January 8th, 2011 by adam

Despite this week’s PR disaster for Sony Ericsson, their new Android phone (due out soon) looks fantastic:

http://blogs.sonyericsson.com/products/2011/01/06/next-step-%e2%80%93-xperia%e2%84%a2-arc/

Personally, I am convinced that Sony Ericsson makes the best Android phones available, bar none. e.g. although many people prefer the X10 full size, I still think the Xperia X10 Mini is one of the best phones I’ve ever used (modulo some terrible software, because Sony can *never* seem to get software right).

As a consumer, I love it – it’s almost perfect (I just wish it had a high-quality camera, instead of a pre-iPhone quality camera).

As a developer, I’m frequently impressed by just how much it packs into a tiny form-factor. Every time I think “ah, crap – this isn’t going to work on the Mini”, I’m pleasantly surprised.

Apart from one thing, of course … Sony’s refusal to ever support current versions of Android OS.

January 8th, 2011 by adam

Google keeps improving Android. Android version 2.2 is one of the most important releases ever – it speeds up the whole phone (every game, every app, runs noticeably faster), along with bugfixes and new features.

Sony Ericsson has caused much hate among consumers by shipping their flagship phones with OS 1.6, even when 2.1 was already available, and then being very, very slow to “allow” their customers to upgrade (the upgrade is essentially free, Google doesn’t charge for it).

So far, no news at all.

But this week, Sony’s official Twitter account posted this, along with possibly the world’s worst excuse from a mobile company:

There will be further system updates for the X10 handsets however there will not be any more updates to the Android platform.

We believe the features included in the Android 2.1 phone are on par with, and in many cases better than, a vanilla installation of 2.2 #X10

i.e. “that expensive phone you bought in the last 9 months will never run many of the new apps on the Android marketplace. We believe you should be grateful because it’s a really pretty phone, and who cares about apps / games / etc anyway? iPhone? What the hell is an iPhone?”

The sweet stench of cow-manure

Let’s put this into perspective…

When you write apps for Android, before you even write the first line of code, you have to choose the minimum OS version that your app will work with. The older the version, the fewer the features that you have access to. Also, the more bugs you’ll have to workaround (even Google has bugs :)).

So, you leave out some features, maybe. But there’s more: many of the features of newer versions are things that are invisible to the user, but which make development quicker, easier, or less error-prone.

i.e. going with an older OS means that the developer has to pay more, work harder, for less reward, producing an inferior product. It’s not very tempting!

And Google just released Android 2.3, so 2.2 isn’t even the “current” version any more, it’s the “old” version.

…net result: lots of developers will be making Android 2.2 the “minimum” version. Sony is actively “locking-out” their customers from using the phone they own to download and purchase (a percentage of) new apps. Today, that percentage is small – but it will get bigger every day, and Sony has declared they will “never” fix the problem.

2.2? Why not 2.1? Why not 2.0?

There’s lots of improvements in 2.2 that make developers lives easier or less expensive, but there’s a single “flagship” featuer that overules everything else. This one feature can easily cut 20% of the cost of development.

2.2 has improvements to the Java VM, that make *all* apps run faster. c.f. my own experiments, where my space-invaders game ran approx 20%-30% faster, just because I upgraded the OS.

That saved me possibly weeks or months of coding that I would otherwise have spent hand-tuning the code to increase performance. Performance isn’t everything, but … the wide variety of Android handsets means that even relatively simple apps may struggle to run at decent speed on some of the handsets out there.

Of course, if I don’t use *any* of the other features, I could still release this app on 2.1 … but all the people with 2.1 would be getting an inferior experience, and many would complain and rate the app down. It’s probably less damaging – and more profitable – for me to simply ban people with “old” versions of Android from using the app at all. That way, they don’t get disappointed, and won’t be able to down-rate it.

January 6th, 2011 by adam

UPDATE: updated August 2011, with more detailed / idiot-proof instructions – and a couple of shortcuts. NB: when you’ve done this install once, and checked the relevant bits into your Source Control, it becomes *very* fast/easy to re-install – it’s only long-winded the first time.

I thought I’d blogged this before – the install process from Google is appalling, and I wrote up detailed instructions for colleagues about a year ago. Sadly, looks like I never published the post. I just did a fresh install on OS X (January 2011) and the process *still* is riddled with flaws. I get the impression Google won’t fix it anytime soon.

NB: the biggest single problem here is: Version Control. Someone at Google appears to believe that version control is “unimportant” and that developers should “not be expected to make reproducible builds of their software”.

But … even if you’re a sloppy programmer who doesn’t do proper version control, you probably STILL don’t want to use Google’s auto-installer. It can’t cope with basic stuff like “internet connection drops for a few seconds while ADSL re-dials” – things that your web-browser deals with perfectly. e.g. as of Jan 2011, the Android auto-installer managed to crash Eclipse just because of a blip in net connection. Pathetic, really.

(not to mention the hassle of re-downloading hundreds of meg of data over and over again for every PC in your office … this document will let you download most of it once only, and install it multiple times)

I don’t have a perfect solution, but here’s a guide for how to (mostly) un-**** the installation process for Android development.

Developing for Android: Essentials

The main IDE for Android is the (mostly excellent) Eclipse – with some custom plugins built by Google/Android folks. Once it’s up and running, it’s definitely the best free solution. To make this work, you need:

  1. Eclipse IDE … *any* flavour
  2. Android plugin for Eclipse (called “ADT”)
  3. The version-independent Android SDK (called “android-sdk”)
  4. A specific OS-version of Android (e.g. current latest is v2.3)
    • NB: plus you need a “platform tools”, which you download/install in the same way, but is an extra file/feature

FYI: the first item is from Eclipse, the last 3 are all from Google. Although Google keeps trying to kick you in the teeth, you can workaround their foolishness relatively easily for the middle two items. The big problem is the last item. More on that later.

Installing Eclipse on OS X

What follows comes mostly from: http://eclipse.org

Once a year, I call-out Eclipse.org for the appalling user-experience of downloading and installing their software. They’ve had a decade to get this right, and they still get it so wrong.

As of Jan 2011: there’s been a big improvement recently – you can now find the download link quite easily. At http://eclipse.org/ there is an enormous “DOWNLOAD ECLIPSE” button in the top right of the page, in bright yellow. This is excellent.

Sadly, the download link DOES NOT DOWNLOAD ECLIPSE … instead it takes you to a screen that demands you choose the “correct” version out of 12 offered to you, with literally no help at all. The majority of users want one of only 3 versions from that screen. In fact, I suspect 99% of people that come via the front page only want one version.

Furthermore, there is *still* no download for OS X. There is *part of* a version for OS X, but no-one has done the 5-10 minutes of setup that would make it install correctly on OS X forever more. Instead, you have to manually muck about with your computer, your administrator account etc. FAIL.

1 of 4: download the “Eclipse IDE for Java Developers” file.

Unzip it. Unzip it *again*, because they decided to use archaic Unix compression instead of ZIP.

Now you have a new folder, called “eclipse”. You have to put this somewhere. There is (officially) no official location for this … good luck getting support if you put it in a “bad” place.

Most people drag/drop this folder to their Applications folder in Finder. This kind-of works, but again because the Eclipse team haven’t spent a few minutes making an OS X manifest (could have done this any time in the past few years!), the “Eclipse.app” file is broken. If you drag/drop that file to anywhere, it will stop working.

Instead, you have to manually create a shell script to run Eclipse. I’m not even going to go into it – if you want an Eclipse.app icon in the right place on OS X, Google for tutorials on how to make a working Alias specifically for this app (working around the broken one from Eclipse.org). Or … just live with the fact you have to navigate to the “eclipse” folder before you can start the application.

Download the necessary plugins for Android

What follows comes mostly from: http://developer.android.com

Immediate FAIL from Google: the download page lists *ONE* download file, out of the *FOUR* that are absolutely required in order to do Android development. There is no mention of the others :(. How am I supposed to install the software if you won’t give me the links? Your crummy auto-installer is no subsitute.

2 of 4: At least it will get you the SDK, so download that directly

… from the main download page

If you dig around the site, read through 3 sets of instructions that all tell you not to download anything, and keep bullying you into using the crappy auto-downloader instead, you’ll eventually find a file something like:

3 of 4: ADT ZIP file

(Jan 2011:) ADT-8.0.1.zip (if you google for “ADT-8″ or “ADT-9″ you might find future versions on the site, since Google refuses to put them in a sensible place anywhere). Alternatively, the latest version should always appear at the “magic URL”: http://dl-ssl.google.com/android/eclipse/site.xml.

(Aug 2011:) currently it’s on version 12 …

(usually, this download link is hidden in the section “Troubleshooting ADT Installation”. The Magic URL … I’ve never seen anywhere. You have to know how Eclipse works in order to deduce it. For the record, other companies (including Eclipse’s maintainers) put a webpage at the parent of that URL, to help normal users. This one just does a 404 Not Found)

Finally, you need the bit that Google *really* doesn’t want to give you: a specific version of Android OS to develop against. You need to find the URL for a “repository.xml”. In this case, you can see it flash up briefly when the auto-installer is refreshing the repository (the part that does this is called “the Android SDK and AVD Managers”). You can try that URL:

4 of 4: http://dl-ssl.google.com/android/repository/repository.xml

Google could easily have provided this URL in the docs, since it is the “official” index for downloading the other files you need, but for some reason they chose not to.

There’s 2 ways to avoid Google’s broken auto-installer (which you shouldn’t be using anyway, unless you don’t care about updating your own Android apps in future).

1. Create a local “fake” repository by manually reading an XML file and downloading each file by hand.

This used to work – in 2010, I used this successfully. In 2011, it refused to work. Something critical has changed in Eclipse so that it doesn’t recognize fake repositories – or I just couldn’t reverse-engineer the format correctly any more

2. OR: … download the files you want, and later manually copy them into the folder where Google requires them to be copied.

NB: the auto-installer often fails / timesout / dies when trying to do this. This is all it needs to do, but it’s rubbish. I’ve found that doing it by hand is usually less error-prone, tragically.

To download the files, you need the URL’s of each version of Android you want to support. Google refuses to put these in a webpage (why? Who knows?), but it’s not hard: open the XML link above – your browser should be able to view it directly:

http://dl-ssl.google.com/android/repository/repository.xml (opens fine in Firefox)

Scroll down – it’s a human-readable file – skipping the huge license. You’ll see a lot of “sdk-platform” sections – each of these is a single verison of Android, and contains one URL for you. e.g.:

<sdk:platform>
<sdk:version>1.1</sdk:version>
<sdk:api-level>2</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:description>Android SDK Platform 1.1_r1</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/android-1.1.html</sdk:desc-url>
<sdk:obsolete/>
<sdk:archives>
<sdk:archive os="windows" arch="any">
<sdk:size>46828615</sdk:size>
<sdk:checksum type="sha1">a4060f29ed39fc929c302836d488998c53c3002e</sdk:checksum>
<sdk:url>android-1.1_r1-windows.zip</sdk:url></sdk:archive>
<sdk:archive os="macosx" arch="any"><sdk:size>45584305</sdk:size>
<sdk:checksum type="sha1">e21dbcff45b7356657449ebb3c7e941be2bb5ebe</sdk:checksum>
<sdk:url>android-1.1_r1-macosx.zip</sdk:url>
</sdk:archive>
<sdk:archive os="linux" arch="any">
<sdk:size>45476658</sdk:size>
<sdk:checksum type="sha1">c054d25c9b4c6251fa49c2f9c54336998679d3fe</sdk:checksum>
<sdk:url>android-1.1_r1-linux.zip</sdk:url>
</sdk:archive>
</sdk:archives>

</sdk:platform>

For each one you want to download, look for the highlighted bit above. That gives you a filename – if there’s no OS X section, take the linux section instead.

You then append that filename to the URL you used to get the repository, i.e.:

“http://dl-ssl.google.com/android/repository/” + “[filename you picked above]”

I’m afraid you have to do this for each version of Android you want to build against – but for most people, that means “just the most recent few versions”.

5 of 4: another ZIP you need: “Platform tools”

You will *ALSO* need – while you’re at it – to grab an “Android SDK Platform-tools”. Google doesn’t mention this as a separate stage, because their auto-installer treats it as part of the 4-of-4 items above.

It’s another file with the URL stored in the same repository.xml from the above step.

However, it lives right at the bottom of the XML file, in a section that looks like this (there’s only one of them – no choices to make – just grab it):

<sdk:platform-tool>
<sdk:revision>06</sdk:revision>
<sdk:description>Android SDK Platform-tools, revision 6</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/</sdk:desc-url>
<sdk:archives>
<sdk:archive os="linux" arch="any">
<sdk:size>15398275</sdk:size>
<sdk:checksum type="sha1">292732c6a86971b95ca61ba8bf84cd9d6c2285c3</sdk:checksum>
<sdk:url>platform-tools_r06-linux.zip</sdk:url>
</sdk:archive>
<sdk:archive os="macosx" arch="any"><sdk:size>15127727</sdk:size>
<sdk:checksum type="sha1">86c958b461b6244e74b4e0489ea7cef9a681d882</sdk:checksum>
<sdk:url>platform-tools_r06-macosx.zip</sdk:url>
</sdk:archive>

<sdk:archive os="windows" arch="any">
<sdk:size>16589948</sdk:size>
<sdk:checksum type="sha1">14acb6271c71dce94bba879496cd66e09ae144af</sdk:checksum>
<sdk:url>platform-tools_r06-windows.zip</sdk:url>
</sdk:archive>
</sdk:archives>
</sdk:platform-tool>

Installing ADT (the “eclipse plugin for Android”)

If you downloaded this directly, as detailed above, then Google’s post-install instructions are weak. The download ZIP also has no install instructions with it. Here’s a short version:

  1. Unzip the ADT file (Google is happy with ZIP, unlike Eclipse)
  2. Create a “magic” folder for Eclipse somewhere, which is where you’ll store all your Android SDK’s, ADT plugins, etc. Create a sub-folder “local repositories”
  3. Move the ADT folder into “local repositories” (you will probably want to upgrade this later, so you need to be able to find it easily)
  4. (NB: sad design flaw of the auto-updater – it’s hardcoded that you MUST give each repository a unique “name”, even when this makes no sense to the developer)
  5. … NB: as of August 2011 … what follows is pieced together from Google’s incoherent documentation – you won’t find these steps written clearly + correctly anywhere on the developer.android.com website :(
  6. [aug 2011]: “Start Eclipse, then select Help > Install New Software….”
  7. [aug 2011]: “Click Add, in the top-right corner.”
  8. [aug 2011]: In the Add Site dialog, click Local (not “Archive”, as per Google’s instructions – Archive causes other problems later on)
  9. [aug 2011]: Browse and select the folder you unzipped/created/moved in step 3
  10. [aug 2011]: “Enter a name for the local update site (e.g., “ADT Plugin”) in the “Name” field.”
  11. [aug 2011]: “Click OK”
  12. [aug 2011]: “In the Available Software dialog, select the checkbox next to Developer Tools and click Next.”
  13. [aug 2011]: “In the next window, you’ll see a list of the tools to be downloaded. Click Next.”
  14. [aug 2011]: “Read and accept the license agreements, then click Finish. ”
  15. [aug 2011]: …Google doesn’t admit this, but some of the ADT components aren’t signed, which is a security hole. Eclipse rightly says: “Dude, are you sure you want to install unsafe software?”. You have no alternative, though – until Google re-builds the plugin to be properly signed, you just have to accept it.
  16. [aug 2011]: “When the installation completes, restart Eclipse.”

Jan 2011: Bizarrely, at this point the auto-updater hangs for a few minutes, randomly contacting internet sites for stuff that I expressly did NOT attempt to install. I’m not sure if this is a bug in the current Eclipse, that it “hi-jacks” the plugin-install process and tries to update the rest of Eclipse, or if it’s a “feature” of the Android plugin – that it secretly triggers additional installs from the internet.

Installing the SDK

In Google’s docs, there’s a whole page for installing the SDK.

It does not – at any point – tell you how to install the SDK.

Instead, that information is inside the page for installing the ADT plugin for Eclipse.

Genius!

To save you navigating their bizarre instructions, I’ll copy/paste them here. First, however, you need to create a local install directory for the SDK (they forget this step, of course). Put it somewhere that you’ll never accidentally modify or delete – if you do, Android apps will stop building in Eclipse until you manually fix everything again. Given how tortuous the main instructions are, I’ve seen smart people diagnose the problem but have massive trouble figuring out exactly how to rectify it.

Anyway, once you’ve picked a location, unzip your SDK zip file into that folder, and proceed with Google’s instructions:

1. Select Window > Preferences… to open the Preferences panel (Mac OS X: Eclipse > Preferences).
2. Select Android from the left panel.
3. For the SDK Location in the main panel, click Browse… and locate the directory that was created when you unzipped (Google words this badly – it MUST be the folder that came out of the ZIP – Eclipse will check the contents of the folder, and reject if you select its parent folder, or one of its children)

4. Click Apply, then OK.

Installing the “Android Platform versions”

This is the install part that matches the “4 of 4″ download part above.

Take each ZIP file you downloaded, and unzip it.

e.g.:

  • android-3.2_r01-linux.zip

This will give you an *incorrectly named* folder, e.g:

  • android-3.2_r01/

…you *may* need to manually rename this using the “<sdk:api-level>13</sdk:api-level>” tag that was in the original repository.xml where you got the download URL from. Each downloadable ZIP file had a different – unique – api-level tag.

The new format (I’m not sure this is required, but it’s what the installer does, so I recommend doing it):

  • android-13/

Finally (!) … find the folder where you unzipped the SDK earlier. That will have files/folders very similar to the following:

  • add-ons/
  • platforms/
  • tools/
  • SDK Readme.txt

Take your (possibly renamed) folder – in my case “android-13/” – and move it into the “platforms” subfolder.

The ADT Eclipse plugin will automatically discover this when you restart.

…go through the same process for each Android Platform version you downloaded.

Shortcut: if you’ve done this before, with a previous version of Eclipse / ADT / Android … you can just take the sub-folders of “platforms/” from your previous install, and copy/paste them into the “platforms/” sub-folder of your nw SDK version. Easy.

Installing the “Android Platform Tools”

…this works in exactly the same way as the “Android Platform versions” above, except it goes in a different folder.

In this case, you need to take the zip file, unzip it, and rename the output folder to precisely:

  • platform-tools/

…then copy/paste it directly into the SDK folder. There shouldn’t be a “platform-tools/” folder to start with – this is how Eclipse/ADT knows whether or not you’ve “installed” it: it just looks for a folder with that name.

OPTIONAL: Downloading + Installing the Android SDK documentation

UPDATE: sorry, I missed this out originally.

Again, just like with the “Android Platform Tools”, you have to manually grab the URL for this from the repository.xml

The piece of XML in the repository.xml you need is:

<sdk:doc>
<sdk:api-level>13</sdk:api-level>
<sdk:codename/>
<sdk:revision>01</sdk:revision>
<sdk:description>Android SDK Docs for Android API 13, revision 1</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/</sdk:desc-url>
<sdk:archives>
<sdk:archive os="any" arch="any">
<sdk:size>103791308</sdk:size>
<sdk:checksum type="sha1">5dadb3b30e1f837716f8a5ef840e31abddf69b38</sdk:checksum>
<sdk:url>docs-3.2_r01-linux.zip</sdk:url>
</sdk:archive>

</sdk:archives>
</sdk:doc>

…then take the zip file, unzip it, and rename the output folder to precisely:

  • docs/

…then copy/paste it directly into the SDK folder.

Done!

Phew! Finally! You should now be set for Android development!

December 22nd, 2010 by adam

I’ve written lots of apps for iPhone/iPad and Android. Recently, Nokia kindly gave me a new N8. So, over Xmas, I thought it would be fun to write some games for it.

Didn’t get very far. Nokia “only supports Windows”, according to their developer site.

There also seems to be a lot of confusion over which language they expect you to use – Symbian C++? (which has the confusing one-line explanation “Edit”) … Python? … J2ME? … etc.

I found a promising doc that talked about “porting from Android to S60″ – which would give modern developers a way to write good code (i.e. in Java), and then back-port, maybe. But it was riddled with missing links, missing info, and bizarre propaganda (e.g. implying Android is “bad” because it supports standards like Java, whereas J2ME is “good” because … it doesn’t)

At this point, I (temporarily) gave up. I’d like to re-visit this in the New Year, but right now I don’t have a Windows machine with me (I’ve only got my Apple laptop). Android will let me write code on my laptop, then jump straight to my desktop once I’m back at work.

Of course, Apple only “allows” you to work on non-Windows machines – but they are the market-leader, they can get away with this (evil though it is!). IMHO, Android and Nokia/Ovi cannot.

I’m surprised and disappointed that Nokia has so little apparent interest in pulling-in wayward iPhone devs. If it were me, I’d have thrown up a massive, colourful, front-page picture saying: “iPhone developer? Fed up with Submission? Want to sell your apps to 1 billion people? Click here!” … or similar.

Given how painful Apple’s app-submission process is, there are plenty of iPhone devs looking for alternatives.

With Android, you can go straight from iPhone dev to Android dev. There’s a simple website dedicated to new developers (with some serious flaws and missing pages in the docs, but the experience is otherwise good). Nokia’s setup by contrast seems like they’re not really trying (yet).