Targeting a device (not an iOS) - iphone

Is this possible? I want to target iOS 4.0 and the iPhone 4 device in my App Store distribution build. How would I do that?
Thanks!

Applications can (and should) be limited to specific device capabilities, not to specific models - you can use UIRequiredDeviceCapabilities in application info.plist file for that (check the list of available keys here in "iTunes requirements" section.)
So the key to be used will depend to what functions your application require, it seems you can use front-facing-camera as only iphone4 currently has that.

You cannot limit to a certain device but you can limit to devices with certain capabilities. E.g. you could declare that your app requires telephony and front-facing-camera. That would more or less restrict your app to the iPhone 4G.
Required capabilities are declared in the Info.plist file

This is not possible and IMHO not wanted by Apple. I don't think that a target device would have any impact on limitation of device, if it was possible. However if your App relies on a fast device and it's unsuable on a 3g you may have to improve performance.

Related

Allowing univeral iOS build to run on iPad1 but not iPod touch 3G

As far as I can tell, there aren't any "performance" criteria that you can specify to exclude specific iOS devices via info.plist.
Is it possible, via info.plist, to allow a universal app to run on iPad1, but not on iPhone 3GS/3G? Right now I use the gyroscope requirement (which my app does make use of), as a crutch to support only iPhone 4+ and iPad 2+.
To be absolutely clear, I want to make the app AVAILABLE FOR DOWNLOAD in the App Store on iPad1, but not on iPhone 3GS. This question is not about runtime query of the device from code.
Is my best/only option to create multiple binaries, and remove the gyroscope build from the iPad build (typically called the "HD" build) but leave it there for iPhone/iPod touch?
Look at this question:
Determine device (iPhone, iPod Touch) with iPhone SDK
It goes over determination of different iOS devices. So, you can explicitly support (or not support) some specific model.
Requiring armv7 will drop out everything <3gs, but still includes ipad1. That's the closest I see.
The short answer seems to be "no".
On the up-side, iPad1 only has 256Mb memory, so you need to make your app fit in 256Mb anyway, so it should work on the 3GS. The difference in CPU speed is significant though.

iPhone Target Certain Devices

I'm want to target the iPhone 4, iPhone 4S, iPod Touch (4th generation). I do not want to target the iPhone 3G and iPhone 3GS. I've seen some post that said this is not possible. However, I notice in the App Store that some apps do this such as the picture below.
How would I accomplish this?
Those requirements show up because the developers have put armv7 as an entry in the UIRequiredDeviceCapabilities Info.plist key. There's no key specifically to target the iPhone 4 and up, although you can probably eliminate the 3GS using one of the other keys.
Why are you trying to stop people from installing your app on older devices?
I believe you want to set UIRequiredDeviceCapabilities to specify exactly which features your app needs. For example, the camera-flash key is only going to be true for iPhone4 and later, if that's what you need.
There's also a Q&A article on it.
In addition to setting the features the device needs with UIRequiredDeviceCapabilities, you can also specify the minimum iOS version that needs to be installed.
See this Apple Technical Note, TN2250.

How to declare an iPhone app which has to run in the background?

Hey,
I wrote an iPhone app which needs to run in the background. I did set up the properties in my info plist according to running in the background. The problem is that the app store lists iPhone 3G as well as "compatible device".
Is it possible to set up my info plist to get rid of the iPhone 3G in the app store?
I found one solution by adding 'opengles-2' to UIRequiredDeviceCapabilities - but it doesnt seem like the best way to do it?!
Thanks!
You can't discriminate directly on actual device types (3G versus iPhone 4 etc.), but as you note things in UIRequiredDeviceCapabilities may imply certain devices. However, there's a more direct route, read on...
If you require multitasking compatible devices, that would be any device running iOS4 or higher. There's a setting in your XCode project's build settings that allows you to set the minimum required iOS for your app to run -- "iOS Deployment Target". Set this to "iOS4" and your app will only be available to multitasking enabled iDevices (which includes iPad with iOS4 or higher, btw). -- no, not enough, see comments below and Jules' link.

An app needs iphone4 to run, do I need to set some key in the plist file to exclude iphone3 and others?

My app needs iphone4 to run, do I need to set some key in the plist file to exclude iphone3 and other devices when I publish it in the itunes store.
Maybe UIRequiredDeviceCapabilities can help you out.
Set the base SDK of your project to SDK 4+ and then make sure you set the 'iPhone OS Deployment Target' to 4.0. in your project/target settings. I appreciate this will simply limit the devices running < OS4, but it's worth doing as it's consistent and will quickly rule out all devices running older operating systems.
Once that's done, limit to device features by using UIRequiredDeviceCapabilities in your Info.plist and opting for the front-facing camera (or flash). It's OK to say you need these capabilities to be present, even if you're not using them.

Can I restrict my iPhone app from being used by iPhone3G's?

My iphone app doesn't run well on the iPhone 3G. Can I make it so users with these models can't download the app? If so, what does a 3G user see when they search for my app in the app store?
Does it appear in the store at all for them? If it does, when are they notified that they can't download the app?
I recommend you use the UIRequiredDeviceCapabilities key in your info.plist. This lets you tell the App Store exactly which capabilities you require instead of which device you require.
If your app "doesn't run well" on a 3G I'll guess it is because of performance and therefore you'd want to require a newer processor. Look into setting arm7 as one of your required device capabilities.
For more info look here:
http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW3
Make it run better. Or if it's not completely unusable, just let them use it anyway. People with old devices expect them to be a bit slow.
According to the iTunes Connect Developer Guide (which links to the iOS Application Programming Guide), you can't prohibit certain devices. You can, however, require certain features which are only present on new devices:
armv7 is what I'd recommend (older devices are armv6)
magnetometer, because older devices don't have one. Apple might look at you funny if your app doesn't actually use the compass though.
opengles-2, because older devices only support 1.1. Apple might look at you funny too.
auto-focus-camera, except the iPad and all the iPod Touches don't have one. Probably not what you want.
iPhone 3GS uses iOS 6.1.x so if your app support iOS 7+ it will not be able to install on iPhone 3GS, this is the best possible way to avoid download on that device.