Monthly Archives: February 2013

Rate Control for HTTP Live Streaming

So you’re trying to setRate on an AVPlayer. This works quite nicely for all kinds of media, with one annoying exception:

Apple’s docs won’t tell you that for HTTP Live Streaming, this currently (iOS 6.1) is not supported for rates > 1.0. The only hint I could find is in AVPlayer.h:

Note that advanced rate control is not currently supported for HTTP Live Streaming.
It’s not only advanced rate control (new in iOS6), but simple rate control as well. Any value 0..1 is fine, but you apparently, you can’t speed up HTTP Live Streaming. Bummer.

Update: You need I-Frame Playlists to do this.

iPhones on the Métro

I did a very unscientific study in Paris while riding the subway.

On about 15 trips with about 30 different subway cars, I sampled smartphone usage on the natives.

I found that

  1. Paris is 1984. Everyone has either an iPhone, or at least an iPod nano plus a candybar dumb phone. Out of, lets say 100 people I saw handling their smartphone, one or two had a BlackBerry or Android phone. The rest were iPhones. It’s really bizarre.
  2. Out of these iPhones, about 90% were iPhone 4 and 4S. Very few 3G(S), and only two iPhone 5.

Compare this to Germany: you’ll find a mix of all kinds of smartphones on the subway. The only people with 8" ridicuphones in Paris are Asian and German tourists. Also caught a few iPad photo takers.

But about that love for white earbuds and sandboxed apps: Why? Old love for the Mac? Sense of style and appreciation for design?

Why only the 4(S)? The "free/cheap" model? Silly baguette-shaped cases? The 5 seems to have a far greater adoption rate in Germany.

tl;dr: Localize your app in French.

iTunes Connect Test Users

itunestestusers

To test in app purchases, you will need to set up test users in iTunes Connect.

They seem to almost work like real Apple IDs, so you should have unique email addresses for them. username+itunesusa@gmail.com seems to work. You cannot use them in the real App Store, but only can use them within sandbox-signed development apps.

Don’t log in to the test accounts in the real App Store or in the Settings app. Log out in Settings, then attempt the purchase in your app. There, enter the fake email address and password.

The sandbox server does not guarantee an eternal backlog of transactions. I at least once noticed very old receipts just being blank when restored.

Sometimes, test users will burn and stop working. Just create a new test user and try again.

Test with different countries and make sure the app is flexible enough to accomodate for very long currency strings. Or prepare for the App Store to return bogus price locales (such as today) or nil values for titles or descriptions.

YYYY

Ole Begemann, in late 2011:

Pay special attention to the year format specifier @”yyyy”. It is different than the capitalized @YYYY, which represents the year of the date’s week and not the year of the day. 99% of the time, you probably want to use @”yyyy”. I have seen this bug so many times in production code that it’s not funny anymore so make sure your unit tests catch it.

It’s only not funny anymore until it is.

iCloud Restore Restores Old App Versions

appstore2008As outlined here, users of older iOS devices may have a hard time restoring their devices with compatible versions of apps. iTunes will happily download newer, incompatible versions of apps and trash the older version that would still run on the old device.

Two listeners wrote in saying that restoring their old devices from iCloud will indeed restore old, compatible versions of apps to the device. Actually, it will restore the last version that was installed on that device. So if you never updated on the device to a newer app version because you couldn’t, or didn’t want to, and the developer has not blocked that version from iCloud in iTunes Connect, the device will download that old version again.

The downside to this is that this only works from iPhone 3GS and up. iPhone Classic and 3G don’t do iCloud Backup.