Prevent iPhone app to run on iPad - iphone

I'm shipping two binaries; one for iPhone/iTouch and the other for iPad. It's the same application.
Will Apple ensure that the user will never receive an iPhone version of the app on the iPad? If YES, then I don't have anything to worry about, but if not then I do have a problem.
The reason I ask is the iPhone application will simply not work correctly on the iPad because the server knows it's an iPad and will deliver the iPad HD content to it and the iPhone cannot handle that. I would rather not hack my application to send the server a fake device type if running the iPhone app on the iPad in order to receive the correct resources.
Suggestions?

I've been looking for this for a while because I couldn't prevent the iPhone app to load on the iPad. Searched a bit to understand why this was happening, followed #hotpaw2 instructions and found this on the official apple store rules:
UPDATE:
2.4.1 To ensure people get the most out of your app, iPhone apps should run on iPad whenever possible. We encourage you to consider
building universal apps so customers can use them on all of their
devices. Learn more about Universal apps.
https://developer.apple.com/app-store/review/guidelines/

The SDK and/or App store rules prohibit you from preventing an iPhone app from running on an iPad in 1X or 2X zoom mode, unless there are other requirements listed in the app plist. Apple's app review is known to test iPhone-only app submissions (unless there are other requirements) on an iPad, and reject the app if it doesn't run properly.
Other requirements (as listed under UIRequiredDeviceCapabilities in the app's plist) might include your app requiring telephone capabilities (or healthkit, etc.), which might help you temporarily, but still won't prevent the app from running on some hypothetical future iPad product that includes telephony capabilities (and/or healthkit, etc.).

Actually you can.
Add telephony to UIRequiredDeviceCapabilities in your plist file.
But i really not recommend it and maybe you could get rejected because of gratuitously using this property.
I think you should handle that there are iPad versions and iPhone versions on iPads, use the second one as an iPhone.
Also don't forget that retina iPads will use upscaled applications at retina resolution while none retina ones use the standard resolution. And this behavior can tweaked using jailbreak tweaks like RetinaPad and FullForce.

In the plist settings, add Application requires iPhone environment and set the boolean to YES

Related

Change compatibility of submitted app from universal to iPhone only

My app that I submitted yesterday to the App Store had to be compatible only for iPhones because that is how I already set it to like this.
Now I saw that on iTunes on my app it says that is compatible with iPhone, iPad and iPod and it really should be only iPhone.
I tried to solve the problem with adding the element telephony to the array Required device capabilities in info.plist like this.
Will that make in iTunes to say Compatible with iPhone only and not allow installs on iPads and iPods ? If not how can I solve the problem ?
Yes, that should do it according to this other stack overflow post:
How to Restrict the iOS app only for iPhone excluding iPad?
Essentially there's no way to restrict apps by device unless the device doesn't have a feature you need, in this case, the ability to make calls (telephony).

Is it mandatory to submit iPad compatible app version

I am about to submit my iPhone app for review.
Was just going through the guidelines for approval on https://developer.apple.com/appstore/resources/approval/guidelines.html.
2.10 iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution
What does this mean?
I have not included any iPad feature so far.
Nor I have any graphics for iPad.
I am not intending to release it for iPad.
(not that I want to restrict it, but I never planned it, and I don't think its necessary as far as my app is concerned)
What should I do?
Is it mandatory to make it 'universal' app?
If yes, what should I ensure?
If no, what should I ensure to make sure 2.10 above is met as far as Apple requirements are concerned?
No. As the guidelines say, it must run at iPhone resolution and at 2X iPhone resolution. In other words, in iPad's compatibility mode.
What this means is that you should install your app on iPad and check there's nothing peculiar about it that might make it incompatible in that mode. What it means in practice is not to bother even doing that in most situations: you have to try really hard to make an iPhone app incompatible with iPad.
It is not mandatory to make it universal.
Try downloading and iphone only app and opening it up on an ipad.
It looks like this.
You just to make sure it launches and runs normally on an iPad

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.

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.

How to keep iPhone app out of iPad store?

I have an iPhone app that I have started to turn into a universal app, however the process is not complete and I want to release an update to the iPhone version.
I know that you can specify device capabilities in the Info.plist file to restrict your app to certain devices, but how can I do this to prevent the unfinished universal version from appearing in the iPad store?
Is checking the LSRequiresiPhoneOS BOOL entry (in the Info.plist file) enough?
Thanks!
I'd consider restriction to iPhone very bad decision - the iPad is designed to run all iPhone apps in compatibilty mode (except for obvious things like telephony). So you will run into severe complaints.
If it is about the half-done enhancements for the iPad part, then just turn those features off and compile for iPhone (targeted device: only iPhone; maybe tweak the plist file, too).
You could use the UIRequiredDeviceCapabilities and specify that you require "telephony" in your info.plist. That would keep it off the iPad (and iPod touch too). See Device Support.
I found a setting under Project Settings -> Build that titled "Targeted Device Family." Maybe try setting this to just iPhone, not iPhone/iPad -- I think that should also help.