After missing my second mini deadline in as many weeks, I’m thinking I need to work out a slightly different tack. The problem with having a fixed time in mind is that I am one of those people who chronically underestimates the amount of work any particular task will require, by simply ruling out any chance of unforeseen screw-ups and leaving everything until the last possible minute. For instance yesterday I decided to play with sound a bit, and wrote a sub-system wrapper to handle playback of arbitrary samples before I realized that the AVAudioPlayer class is in fact far from ideal as the basis for multichannel real-time audio (although the docs seem to recommend it). Imagine my horror when I realized that every time I made a planet go “ping!” the display would freeze for 1/5 second (and this was not just when the sound was first loaded).
So then I basically had to start over with OpenAL. OpenAL is is the audio counterpart to OpenGL, the cross-platform 3D graphics API (and, just for the record, nothing I have done so far on iOS uses OpenGL, although I’ve nothing against it per se). Both were designed with games & simulation in mind, so it’s more than enough to meet my needs, but at the cost of much greater complexity and some really ugly boilerplate code. I’ve yet to get it loading samples in anything apart from Apple’s CAF format, which is a real pain because the only tool that seems to create CAF files is a command-line conversion tool. Wheee! Suddenly it’s all feeling much more like the olden days around here– like when the Win32 API would only let you load BMP image files, and it would do a shitty job at that.
All this means that I’ve only just got the thing ping-ing without latency and glitching, and still haven’t finished the changes I started in Version 1.2 which went live more than a day ago. I really didn’t want that version to see the light of day, expecting to have bumped it with 1.3 by now.
So I have suspended Lando from the AppStore until June 1, because I don’t really want people downloading or updating to a version that is inferior to the version that came before (I did a lot of work under the hood, but nothing that makes a positive difference visibly at this time).
I’m going to try less tricks and arbitrary goals, and see if I can just be a bit grown-up for a change, because there’s no way I can do good work if I keep leaving it until 12 hours before the deadline…
Meanwhile, please enjoy this totally unrelated music video from one of my all-time favorite artists:
For the second time XCode told me my app passed automatic verification and could be submitted, but then once it was uploaded and submitted it was instantly [automatically] rejected because:
Invalid Signature – Make sure you have signed your application with a distribution certificate, not an ad hoc certificate or a development certificate. Verify that the code signing settings in Xcode are correct at the target level (which override any values at the project level).
The only way I can fix is to do as it says, which would be no big deal except that if I make this change then the binary can’t be run on my own devices because I am prohibited from installing the distribution profile on them. This seems kind of weird to me because it means the actual build I upload to Apple can’t even be run on my own devices. If anyone can explain how to get around this problem please let me know here.
Well the first week’s download figures for Lando are in, and after the first day I have to say it was all rather downhill from there…
This is not actually so terrible though, since a) the product is barely a product at this point, and b) there has been nothing even approaching any kind of marketing/PR effort for it. That it was downloaded at all I can only assume has something to do with it randomly popping up on “Just Added” lists.
Total downloads for the week was 351, with the top ten countries:
- USA – 142
- China – 38
- Australia – 22
- UK – 18
- Canada – 15
- Japan – 11
- Taiwan – 10
- Russia – 10
- Italy – 8
- Mexico – 6
Meantime I’m doing lots of experimenting with UI controls and trying to optimize some of the shitty buffer performance I’ve been seeing on the iPad. An interesting note is that indexed color seems very poorly optimized in iOS right now, so it’s actually faster to work in 24/32 bit color than with 8-bit indexed.
I’m sure there are a lot of jaded desktop developers who, like me, have been meaning to try out the App Store and just haven’t got around to it, and might be wondering if they’ve missed the gravy train/gold rush/random metaphor.
I plan to be as open as possible about the progress of Lando as I evolve it into a saleable product, and maybe this will inspire (or deter?) others to have a stab at it.
Here’s my first full day’s breakdown of (free) downloads from the App Store.
Less than 9 days from submission to approval of my first app… not bad!
This link should open for iTunes US store, not sure when it will show up in others.
To be honest I was kind of expecting it to be bumped because of confusing lack of interface, and knowing it’s visible now makes me want to fix everything and make it 100 times better (already I have learned some better ways to do things in iOS)– which all kind of validates the exercise of forcing myself to this milestone.
Well it took a few goes, and I still don’t feel like I understand anything about digital certificates and provisioning profiles, but it looks like an actual human working for Apple will finally take a look at my submission, some time in the next days/weeks/I have no idea.
And this is basically what they’ll be seeing when they run it– utterly monochrome, utterly silent.
Note that there are NO visible on-screen controls– hoping they don’t reject it over that. Even so, I’m sure I can get it into a state they are ok with.
Feeling good that I finally did something, in large part thanks to Ray for being such a great anti-inspiration. Not sure if I will try this approach again, but it does seem to have made the difference in this case. I suspect [hope] that simply having released something new into the wild after all these years will be motivation enough for now.
Since I completely bypassed pretty much all the iOS acceleration available, Lando will be extremely easy to port to other devices. I’ve used my own vector routines, the same code I’ve built up over the years for Drivey and general font-rendering duties, to achieve extremely sharp and clean edges. There are no bitmaps used, everything on screen is rendered to maximum precision for every single frame.
The down side of this approach is that it is rather CPU-intensive, so performance can be an issue– the greyscale was a pragmatic choice as well as an aesthetic one. It seems to run fine on iPad, iPhone4 and iPhone 3GS, but struggles a bit on the older iPhone 3G. Interestingly the best performance is currently on the 3GS, which although less powerful than the 4 has only a quarter of the pixels to push. It’s quite revealing to look at an analysis of the 3 most expensive functions across various devices:
iPhone 3GS – 480 x 320 pixels
iPhone 4 – 960 x 640 pixels
iPad (2010) – 1024 x 768 pixels
(% refers to portion of total runtime spent in this function)
Note that the most expensive function on the 3GS is my own code to draw anti-aliased shape fragments, whereas on the iPhone4 and iPad this is completely overtaken by system functions that simply fill and copy buffers. Basically it looks like iOS devices are really not optimized for shuffling pixels between system and graphics memory, and I’m hoping I can learn more to try to avoid this bottleneck in the future.
Ok, well I tried to submit it, but it looks like I messed up the security crap from Apple, and although it’s waiting for me to upload it won’t accept the binary right now. Attempting to submit counts as submission, in my humble broken-armed opinion. I will try again tomorrow, after I’ve had enough sleep to work out just which goddamn stupid digital certificate goes where…
and here’s where the submission failed:
And here’s a screen shot of the app running on my iPhone:
And that’s all I have to say right now, because my eyes are practically bleeding thanks to a project that was done in the last 4 days with a broken arm (of course I didn’t use the whole 2 weeks… I should have just said a week in the first place).