Last week Apple featured BuzzVoice 3.0 under New and Noteworthy Apps on the iTunes App Store’s front page — a real treat for any app developer. This had a strong effect on app sales and it wasn’t long before BuzzVoice broken into the top charts under the App Store’s News section making it as high as number eight under the Top Paid Apps and number six under Top Grossing.
Very Cool!
A new set of apps is showing up under New and Noteworthy now (I’m told that Apple cycles the category every week). I hope they see the same good fortune BuzzVoice did.
At the end of June Apple sent a notification out to members of its developer program advising them that all new iPhone apps and updates would have to be built with the iPhone SDK 4. The important bit of the email read thus:
Make sure that your applications are compatible with iOS 4. All new applications and updates to existing applications must be built with iPhone SDK 4. In addition, the App Store will no longer support applications that target iOS 2.x.
This seems reasonable and, by itself, is not a problem as apps can still target previous versions of iOS even though they are built with iPhone SDK 4. The problem arises when you realize that any third party libraries your app uses will also have to be recompiled.
Several months ago Apple purchased QuattroWireless as their ad solution and recently relauched it as iAds. Most third party library publisher will be very quick to provide an updated version of their compiled library (if they don’t just provide the source code), and this is where I think Apple dropped the ball. This is not the case with QuattroWireless, at least at the time of this writing. The existing QuattroWireless library can not be used in apps built with SDK 4 without generating compile errors. The library needs to be republished for the updated SDK, however an email exchange with QuattroWireless reveals they have no plans to do this
As you may know, QuattroWireless was bought by Apple. As a result we are moving forward with our iOS 4.0 support in the new iAd platform. There will be no immediate update to the QuattroWireless SDK to support 4.0. We hope you join the iAd Network for 4.0 ads. Please let us know if you have any further questions
So why not just go with iAds? Including iAds in your app means you limit your audience to just people who have upgraded to iOS 4. Including iAds in your app means your app will not run on the iPad (the iPad has no iOS 4 support at this time). Basically implementing iAds means limiting your potential audience, at least for the time being.
I guess this means all the apps that currently use QuattroWireless and who are unwilling to lose audience by updating to SDK 4 will be looking to another ad solution such as AdMob.
Apple, what were you thinking?
I’m currently working on an Android app and I’ve decided to use the java.net package for making HTTP requests. While the java.net package includes support for caching requests it does not include a default caching implementation like some other libraries — apparently Android developers are left to roll their own. I looked into it, and it seemed pretty straightforward to implement the ResponseCache, CacheRequest and CacheResponse classes, but there was a surprise waiting for when I tested my work. It was annoying so I thought I’d share. What follows is a simple example of how to implement ResponseCache, the surprise I found, and how I dealt with it.
I guess the topic of dynamically loading fonts in Flash swfs is fairly old by now, and has been covered by several other people. But this was always something I meant to write up so … better late than never? I should say that while the way I did it back in the day works, Flex offers a few short cuts over a Flash IDE only approach. Anyway this is my take on the subject and is what I used when I was building the Flash albums for Zoto.
I’ve worked with Adobe Flash for years and never had to develop with screen readers in mind until recently. Making a swf that would play nice with screen readers was more involved than I’d have imagined. The challenges included operating systems that disregarded de facto standards, browsers fussy about the embed code used, and what seemed like glaring oversights in Adobe’s own product. Let me share with you some of my experience in the hope it will make it a little easier for the next guy.
I also want to thank aut0poietic for his help in this little effort. He blazed the trail before me and was kind enough to loan his map.
For all that Amazon.com does, and the sheer size of their audience, you’d think they would be very careful about the design decisions that go into their website. I’ve used Amazon rarely over the past three years, but lately more often, and I found that parts of their site design — especially their login — make no sense to me.
Even after years of application development experience there are still those times where you realize you’ve done something monumenally noobish and the only recourse your left is to face-palm, admit the mistake, and refactor. I’ll share this story in the hopes that it will help someone avoid a similar snafu.
One of the things I’ve always thought was missing from Flash was access to a browser’s cookies. I can understand the argument that cookie access is unnecessary for sites that are primarily flash based. After all Flash’s Local Shared Objects make persisting data across sessions or page views fairly painless. However for hybrid sites where the server passes information to the browser via cookies a developer must jump through a few hoops to get any important data sent from the server via a cookie into Flash.
There are times when I need to listen to an object’s event for just a single dispatch and then be done with the listener. When I’m faced with this situation I tend to want to define the event handler as a closure or an anonymous function as opposed to adding yet another class method to handle the dispatch. A complication with this approach comes from the fact that I also want to explicitly remove my event listeners for the sake of good garbage collection. So, to have my cake and eat it to I created a proxy class that takes care of listening to the event and cleaning up after itself once the event has been handled.
An inline box is a dom element that is laid out inline, like span tag, but has a defined height and width like a positioned div or image. Actually, the img tag is a fair example of how an inline box should be have. So if you can imaging a block level container tag that has all the layout behavior of an image then you have a good idea of how an inline box behaves.
I worked on a photo album project where I needed something like an inline box. I wanted a square container that could take a border, that could hold a smaller image centered within it, and that could be aligned left, right or center in the normal inline flow of the page. Something that I could layout in a grid that would grow or shrink as the width of the browser was changed. The problem I faced at the time was only IE 7 supported the css display:inline-box; rule. Shocking… isn’t it.