Is there a way to limit devices, i.e. iPhone 3G and higher, and not to support the iPhone 2G and lower. I can't find an element that is different. I would limit it to iOS 3.1, however I'm pretty sure that iPhone 2G and lower can run iOS 3.1.
5 Answers
There is a similar question about 3GS+. But 3G+? That might be tough. I don't see anything in the UIRequiredDeviceCapabilities
that specifies the 3G radio. You could try using another key based on a hardware feature that the 3G has that the iPhone doesn't, but then you risk getting your build rejected by Apple.
Using run-time checks to detect hardware as Sam Ritchie also suggests is also a bad idea since (1) that will most certainly trigger a rejection, and if it doesn't (2) people with older devices will be able to purchase the app, only to find out it won't run, and they will complain, which will cause Apple to pull your app from sale anyway.

- 1
- 1

- 27,575
- 16
- 91
- 128
-
1Only 3G+ have gps module (a-gps, not Wifi or cellular positioning). UIRequiredDeviceCapabilities has gps specification. – beefon Dec 09 '10 at 19:50
-
My answer stemmed from a belief that the actual issue cristian should probably be looking at is, why can this app run on 3G, but not on an earlier phone? I'll take the downvote for the runtime check, but please note I did give an answer, while you don't seem to offer any advice, or answer the question at all, – Sam Ritchie Dec 09 '10 at 19:51
-
@Sam Ritchie The first sentence of the question is: "Is there a way to limit to devices ie 3G + and not support the first gen iphone". My answer directly relates to that core question, and takes into account the consequences of those actions. If your complaint is "you can't solve the problem", please consider that some questions can not be inherently solved, either technically, or from a business point of view. – Shaggy Frog Dec 09 '10 at 20:01
One nice way to do this would be to check out the UIDevice-Extension project on github. It gives you the ability to detect what hardware you're running on.
I suspect that the way to solve this would be to examine your app and figure out what exactly you don't want a user of an earlier phone to be able to access. Once you've narrows down the feature, you can easily check for the existence of that specific feature on the device. To do this, include the UIDeviceRequiredCapabilities
key in Info.plist, and take a look at Apple's Build Time Configuration guide for a list of all possible values. You'll find it under the "Declaring the Required Device Capabilities" heading. Good luck!

- 10,988
- 4
- 42
- 53
-
-1 Neither of these approaches are good ideas for reasons I outline in my answer below. – Shaggy Frog Dec 09 '10 at 19:35
-
Thanks for the tip Sam, have you had experience using UIDevice-Extension...has Apple had issues regarding its use? – Cristian Dec 09 '10 at 20:22
-
I see Shaggys point though, if a user downloads it then cannot load it , my reviews will drop significantly. Can't find a Required Device Capability that can target 3g+. Thanks for all the help guys – Cristian Dec 09 '10 at 20:28
The only way to do it without resorting to things that Apple disallows is to target iOS 4.0 or higher. 4.0 does not run on the 1st generation. I realize you want to target iOS 3.1, but you either allow all devices, or target 4.0.

- 8,853
- 3
- 35
- 44
Add some minimal Location based functionality to your app (so that Apple can't reject it), and then add the "gps" key to your app's UIRequiredDeviceCapabilities.
But consider that the percentage of 2G's users who actually still buy apps appears to currently be microscopic, and not worth bothering over. Just state the lack of support for these devices in your description.

- 70,107
- 14
- 90
- 153
-
"But consider that the percentage of 2G's users who actually still buy apps appears to currently be microscopic, and not worth bothering over." -- would love to see a source on this as this kind of demographic/sales info is hard to come by. – Shaggy Frog Dec 10 '10 at 03:58
This answer seems to answer your question:
https://stackoverflow.com/a/4128248/285694
The solution is to require "armv7" in the required device capabilities xml.