The first version of my app runs on all iOS devices. I'm considering releasing an upgrade which will only work on devices which support OpenGL ES 2.0. Is that as simple as changing the UIRequiredDeviceCapabilities in info.plist? If I do this, what will users on the old devices see when they try to upgrade? Or will they even be notified that there's an upgrade available?
And lastly, just want to double-check that this will work, that it's possible to change the device requirements for different versions of my app.
I would not restrict app via UIRequiredDeviceCapabilities unless you do not want app installed. I would not restrict and check at runtime and then use new features conditionally.
Unfortunately, to tighten hardware requirements on a published app, you may need to resubmit it under a different name. I believe Apple does this to protect the investment of users who bought your app.
Related
I have released an App in the App Store with target platform 5.1. The app also was developed using SDK 5.1. My customer phoned me and said this is crap because als the jailbroken phones aren't able to download the app yet - because there is currently no jailbroken version for 5.1.
What do I have to do? I'm coming from Android - therefore I want to be really sure what I am doing when applying an App update to ensure that it is also available for 5.0 users.
I also use a Library Project - which also uses SDK 5.1 as shown in the screenshot below.
I would be really glad about some instructions how to reduce the required version for the app and if there are some compatibility troubles/problems occurring to my code when I do this.
You should change the deployment target, in the summary tab of the target, as shown in the image:
And call your customer and tell him there is already Jailbreak for 5.1 ;)
Release App version 1.1 with deployment Target OS as 5.0 or what ever else version you want to include ...
Just found this now while researching another question, so I'm sure this has already been handled, but here's my $0.02, eight years later....
You provided a working app to the App Store. All apps on the App Store are guaranteed to work on compatible iPhones that have not been jailbroken.
If your user is doing non-sanctioned things with his iPhone, it's not really your concern. There were plenty of big-name apps which had the same problem as yours: people couldn't use the latest version because a jailbreak wasn't yet available. They had to wait until such a jailbreak was out. That's the risk you take with using a jailbreak.
The difference here is that if FaceBook or WhatsApp or whatever big-name app changed its target SDK to an iOS version that did not yet have a jailbreak, users couldn't call Zuckerberg on the phone to complain or threaten. You, as an independent developer, got the phone call.
It's a balancing act. You want to use the latest, greatest features of the iOS version, but existing users might not have the latest, greatest OS. So you have to decide what's more important: new features or supporting existing users.
I have an application that I would ideally like to run on all iOS versions, however I think Apple accepts apps only from a version and above (3.0 I think, but not sure). So my question would be, what's the minimum iOS target version you can send in review (and get accepted). If anyone with greater iOS publishing experience would answer my question it would be great and maybe point out some places where I can read about it.
Many thanks!
Sometime last year, an Apple DTS employee posted (and later clarified) on the iOS Developer Forums that the App store would no longer be accepting apps with a Deployment Target lower than 3.0. That might indicate that a lower Deployment Target has or will become grounds for an app to be rejected.
I would never set the Deployment Target lower than that of the lowest OS version among the devices I plan to use to test the app before submitting it to the App Store.
Also, the installed based of devices which haven't been upgraded to 3.0 or above might be too microscopic to be worth a developer's time or effort (unless you happen to still have and use one for some reason).
ADDED in 2013: App store submission now requires that the app support the 4" display, which requires iOS 6.0 or later, which allows a minimum deployment target no lower than iOS 4.3
To back up what hotpaw2 indicated, this is from the News and Announcements for iOS Developers on June 29, 2010:
Make sure that your applications are
compatible with iOS 4. All new
applications and updates to existing
applications must be built with iPhone
SDK 4. In addition, the App Store will
no longer support applications that
target iOS 2.x.
ok... strangely Im having a hard time verifying this... but it's my belief that you must build your app with the latest base SDK (4.0), but you can target an IOS version all the way back to 2.0. Ill continue to try to verify that.
You can only build your apps with the SDKs you have installed.
Since XCode will nuke your old SDKs whenever you upgrade (unless you install XCode elsewhere), it is assumed that you will always be building using the latest stable SDK version. This is in contrast to, say, Android, which will always retain SDKs whenever you upgrade.
Your deployment target can go back as far as you want, right back to 2.0 - but you may find it difficult to actually test it on that platform! Most people would just target 3.x upwards, which gives you as close to 100% coverage as makes no difference.
Let's say we have an application with a deployment target set to 3.0 and we want to raise the deployment target to 3.2. Normally, the App Store won't let the App be installed on devices with an IOS version less then this, but what about devices which already had the App installed prior to the update? Will they see the update but won't be able to install, will they just not see the update or, heavens forbid, will be able to install and the app just won't start?
I searched everywhere for this, but I can't find anything about raising the minimum OS version for an app update.
Thanks!
From my experience those updates just won't show up as available.
When I upgraded OS on my device from 3.1 to 4.1 about 10 available updates appeared immediately in App store app - so that should be the actual behavior.
In addition to only showing supported updates, the store now offers the "last compatible version". This lets people download an app even if their device doesn't support the most recent version. Unfortunately this means that some people could still download an older version with bugs you have already fixed. There may be a way to disable this, but none of my app updates have introduced new requirements, so I can not test.
It's nearly a safe bet that they won't be allowed to install it. A similar situation is iPad apps or Mac apps which won't display in the App Store on iPhones and iPods.
I say nearly because the updates should not appear to older users on their iOS devices. The risk, however, is when users sync with iTunes, or if they update with another device. The new version of the app is now associated with their account, and will ruin the install on the older device if they try to sync it with iTunes.
Please how can I make sure before developing my iPhone app that it will be compatible with iPhone4, 3GS, iPod touch and 3G?
You need to create the app keeping in mind all the features available in lowest version of iPhone you need it to be compatible to.
For Example:
Suppose you want it to be compatible to iPhone 2G then you cannot use in-app SMS feature as iPhone 2G cannot be upgraded to iOS 4.0 or higher.
In-app SMS feature is only available in iOS 4.0 and higher versions.
Hope this example gave you a proper idea.
Once the app is made, you should test your app throughly on different devices i.e. iPhone 3G, iPhone 3GS and iPhone 4 and iPod Touch.
Unless you test it on device, you cannot be sure because sometimes some of the things work in simulator but crashes on device.
So better to test on device.
Hope this helps you.
If it's the SDK you are talking about, you might want to make sure it runs on iOS 3.X versions. See here for more details.
If it's the hardware you are talking about, you will need to test your app on separate pieces of hardware to make sure that they all run.
The settings in XCode that you make regarding which version of iOS your app will be compatible with is the iOS deployment target and the Base SDK. The Base SDK is the default version you are building against (this should be set to the most recent SDK which is currently 4.3). The iOS deployment target is the earliest version you would like your app to be available for (currently goes back to 3.0 on XCode 4).
These settings are in the settings for your target.
As for if your app will actually work on all of these devices depends on how you program for them. In other words, if you are using new APIs, they obviously will not work on versions that did not implement them.
Hope this helps.
Jamie
You can't be sure without testing. (and even with testing, some say...)
There are potential "gothcha's" in the iOS API documentation, in the Simulator handling of those APIs, and particularly in device performance, which you may not realize or be able to guess until you actually try an app out on all the device models and iOS versions which you plan to support.
Even some simple apps with no undocumented API use and no compiler or analyzer warnings, et.al., have been know to "break" after a new OS version is released.
You can "claim" an app is compatible by appropriate setting of the Deployment Target in the Build settings, lack of plist hardware restrictions, and in the app store submission data. But that's only a claim, not compatibility.
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.