Skip to Content

Dear Aunt TUAW: Limiting distribution to faster iPods and iPhones

Dear Aunt TUAW,

I'm an iPhone developer. My applications really need some computing *oomph*. How can I ensure that the app is only distributed on the iPhone 3GS or the iPod 3G or later?

Speaking of which, what exactly is the adoption rate of those newer, faster units? How can I find that out?

Love & Kissies,

Mr. Gando


Read on for Auntie's response...


Darling Gando,

Unfortunately, the iPhone device required capabilities do not provide a minimum CPU speed hook. These items are normally specified in the Info.plist file using the UIRequiredDeviceCapabilities key. Although you can specify that your application needs telephony services, access to a still camera or to GPS, or even peer-to-peer via Bluetooth, you cannot say "needs at least the computing power of a 3rd generation device." And that's a shame.

Hop on over to bugreport.apple.com (you'll need a free online developer account), and add a feature request! My radar number for this is 7302332. As I wrote in that request, applications should have the option of limiting sales, delivery, and installation based on device CPU/RAM performance. It's clear that the 3rd generation iPod and iPhone outperform the 1st (and to a degree, 2nd) generation units.

As for the adoption rates, I recommend you check out some of the iPhone analytics sites. Companies like Pinch Media and AdMob provide both free and paid reports. I don't have a link to a specific list of device-by-device breakdowns but I've read that YouTube Mobile uploads grew by 400% after the iPhone 3GS launch.

Warmly,

Auntie T

P.S. Don't forget to take extra Vitamin C and get your flu shots!

Dear Aunt TUAW, I'm an iPhone developer. My applications really need some computing *oomph*. How can I ensure that the app is only...
 

Add a Comment

*0 / 3000 Character Maximum

12 Comments

Filter by:
Honza

@agrippa (TUAW won't let me reply to my own post apparently):

Sure here's a couple of links explaining the issue:
http://www.iclarified.com/entry/index.php?enid=4935
http://www.taranfx.com/blog/iphone-privacy-is-your-iphone-spying-on-you-how-to-fix-it

Main site which has also a list of apps:
http://i-phone-home.blogspot.com/

October 15 2009 at 5:23 AM Report abuse rate up rate down Reply
Steve

Surely you can limit distribution to the 3GS and above by only compiling for armv7 instead of universal using the option in Xcode?

Older iPhones/iPods used armv6.

October 15 2009 at 1:24 AM Report abuse rate up rate down Reply
Thomas

You actually can get the cpu speed using a c function based on sysctl. It works perfectly on the iPhone. I use it in my application, Gauge Mathematical Tool, for publishing benchmark scores to a score server along with cpu clock speed.

Here's the function:
#import
#import
(import these headers if you need to.)

int getProcessorFrequency()
{
int count ;
size_t size=sizeof(count) ;

if (sysctlbyname("hw.cpufrequency",&count,&size,NULL,0)) return 1;

return count;

}

The return value will be the cpu clock speed in hz. 600 mHz would be something like 600000000.

You can also get the ram size, like this:

int getRamSize()
{
int count ;
size_t size=sizeof(count) ;

if (sysctlbyname("hw.memsize",&count,&size,NULL,0)) return 1;

return count;
}

The return value will be in bytes.


One more function is useful, and it allows you to get the hardware model id of your device (i.e. iPhone2,1 or iPod3,1)

- (NSString *)hardwareModel
{
static NSString *hardwareModel = nil;
if (!hardwareModel) {
char buffer[128];
size_t length = sizeof(buffer);
if (sysctlbyname("hw.model", &buffer, &length, NULL, 0) == 0) {
hardwareModel = [[NSString allocWithZone:NULL] initWithCString:buffer encoding:NSASCIIStringEncoding];
}
if (!hardwareModel || [hardwareModel length] == 0) {
hardwareModel = @"Unknown";
}
}
return hardwareModel;
}

Hope that this helps you.

October 14 2009 at 5:16 PM Report abuse rate up rate down Reply
1 reply to Thomas's comment
Thomas

Sorry, the headers are sys/sysctl.h and sys/param.h.

October 14 2009 at 5:19 PM Report abuse rate up rate down Reply
Sparks

Erica, if you're adding Radar bugs that aren't sensitive, you might also want to add them to the (still under-utilized) OpenRadar -- http://openradar.appspot.com/

Since Radar is only accessible to Apple folks, OpenRadar maintains a sort of mirror of bugs that have been made publicly available. You can even map the rdar: URL to OpenRadar, so that clicking on one of the ever-popular rdar:// URLs on an Apple mailing list will immediately direct you to OpenRadar to check if there's a public mirror of the bug.

October 14 2009 at 4:41 PM Report abuse rate up rate down Reply
Honza

If you put pinch media or other data collecting libraries in your app, I and many others will not purchase it. There are websites that list apps that embed this 'spyware' and this gives people a choice to not have their data network used and device (and therefore you personally) identifying data sent to 3rd party servers without their consent or knowledge.

October 14 2009 at 4:22 PM Report abuse rate up rate down Reply
1 reply to Honza's comment
Mr. Ed

Honzo, would you have links to those websites. My google-fu on this was weak. Thanks.

October 14 2009 at 5:01 PM Report abuse rate up rate down Reply
9600baud

or you could be less lazy and optimize your code so you dont need all that processing power. I know its hard to put effort and not use off the shelf API calls and call it a day so you can make a quick buck, but in the long run it'll give you more credibility as a publisher and allow you to reach a greater user base.

October 14 2009 at 4:11 PM Report abuse rate up rate down Reply
3 replies to 9600baud's comment
Cadence

yeah I recently ran into this , when a user downloaded my app. The app only works on 2nd gen devices and we state that in the app store description too. But it would have been nice if the user could have just been cut off before the sale.

October 14 2009 at 4:05 PM Report abuse rate up rate down Reply
Buy an ad here

Hot Apps on TUAW

Tweets

© 2012 AOL Inc. All Rights Reserved.