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.
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.
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.
At my current job, we have a website with many Asian members who, of course, post content in Asian double-byte characters. We’ve jumped through a few hurtles to make sure that our site correctly stores and displays these characters: making sure data is UTF-8 encoded, making sure that we run our text through a combination of escape(), unescape(), encodeURIComponent() and decodeURIComponent() depending on whether we’re saving or retrieving data. For the most part, our site has no problem. Then we had to go and add Flash into the mix, and things got a little weird.