Exclude devices that do not support multitasking - iphone

I'm making an app that requires multitasking. Is there a way to compile an iPhone/iPad (universal) app so it excludes devices that do not support multitasking. I know iPhone 1, iPhone 3G and iTouch 1-2 do not support multitasking but I haven't found a way to build my app so it prevents people to download the app from the app store if they have one of these devices.
I was thinking to simply set the "Architectures" setting to armv7 on Xcode but I'm not sure if this will work and if it will have any other consequences.
Any help will be appreciated. Thanks!

You can set the minimum API level supported to be iOS 4.3. This version only runs on devices that support multi-tasking.

You should check in your application for multitasking support and fall back to a non multitasking alternative if it is not available.
Suppose you change the supported architectures to include ARM7 upwards. If you do, you need to find out what happens if somebody attempts to deploy such an application to an incompatible device. If iTunes stops them from doing it, that's fine and it's the right answer. But if iTunes lets them do deploy the app and it crashes when they try to run it, it would be far better to do the test for multitasking support and display an alert telling the user why your app won't work.

Go to targets section of your project--> navigate to Build Tab-->Go to Deployment tab & select IOS deployment target as 4.2. It will not run on IOS versions earlier than this.

Related

Restrict iPhone/iPad App to iPhone 4 and higher only?

I am looking to make my app so that it only works on iPhone4 or higher, and not the 3GS.
How can I do this? Is it done via setting the Architectures setting to Standard Armv7/Armv7s
And Valid architectures to Armv7 & Armv7s?
Or do I need to look at deployment target? And set it to a certain iOS version?
Thanks in advance!
Deployment target is only going to allow you to target a specific iOS version and a 3GS can run iOS6. If you're truly looking to restrict older devices from running your app you're likely going to have to do some checks for device model within the AppDelegate and restrict functionality.
A caveat to this is that your app will likely not be permitted in the App Store. What feature(s) are you trying to leverage that a 3GS doesn't support?
Unfortunately you can target the iOS version not the device! You can try to build for iOS 6.0+ and it'll isolate some older devices like iPad1. I'm not sure what iOS version will go up to on 3GS, it'll be phased out soon, though with upcoming iOS releases. I know iOS 6 will work on 3GS but iPad1 won't
You can detect the device, and restrict it via code, but through Apple and iTunes, there is no device centric restrictions, only OS.

IPhone app build and deliver to store without device

I have a simple question.
I use an old IPhone with ios version 3.1.3 and I have to deliver an app for the ios version 5.0.
Is it possible to build and deliver an 5.0 app to the store without the correct 5.0 device?
Problem is, it isn't really cheap to buy every single ios version device.
I know it is probably necessary to test on a real device, but I only want to know is it theoretically possible do develop and deliver without the device.
thanks for your help
Matthias
Yes, it's possible. Xcode comes with an iOS simulator that simulates iPhones and iPads running iOS 4.3 and 5.0. However these don't fully match real devices, so you really should be testing on real devices. There's an additional problem that a lot of functionality won't work on the simulator, such as in-app purchases and Game Center. But for basic applications, you can scrape by.
If you're looking to reduce costs, iPod touches are almost identical to iPhones and a lot cheaper, so that's the low cost way of testing on a real device. I would also upgrade your current device to iOS 4 if possible - iOS 3 is practically dead now, so it's better to test on a real device with iOS 4 than it is to try to support iOS 3.
Yes it is possible to deliver an app without the correct version.
I found out, that it is even possible to deliver apps without an iPhone.
even though you can deploy apps without having an iOS device ..or having a device with lower iOS version..
but in future and generally a good advice i will give is to find someone with correct iOS device version(any other version will work too) and get him to try your app using ad-hoc distribution..that way you can get feedback of how your app will perform..
Yes it's possible. You can anyway test most functionality by using the simulator.
With the new Xcode, you don't need the device when you are building for release.
What you need to do is select iOS Device in the menu, then Product -> Archive.
Then you will see the "Validate" and "Submit" options in your organizer.

iPhone application compatibility

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.

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.

Testing in iOS 3.1.3 with the latest Xcode

How do you test an app in iOS 3.1.3 with the latest Xcode build?
Is it possible to do this in the Simulator? If not, is it possible to downgrade a device to iOS 3.1.3?
Yes, you can downgrade a device. It is not officially supported but I've done it on two 3Gs with success for testing on 3.1.3.
First find a tool called RecBoot by someone called the0rkus, runs on Intel macs only. This brings the phone out of recovery mode once you have loaded the 3.1.3 software.
Find the .ipsw file for your device, as you know it is a different file for iPhone 3/3GS or iPod Touch. Load this software to the phone via iTunes in the usual way, holding the option key while clicking "restore". Wait while it loads.
When it finishes and reboots you will find iTunes complains about this version being incorrect. Situation is the software is loaded, ready to go, but it lacks the final blessing from Apple. RecBoot brings it out of this mode, "waking" the phone into normal ready-to-activate state. Once you have gone through connection to iTunes with a SIM inserted you have a phone just as if you had never gone to 4.0.
Too bad we have to resort to a hack to test with older devices but I don't know any other way. It would be nice if the simulator could still run 3.1.3, nice if setting deployment target would flag pre-3.2 features.
You can also install the older Xcode 3.2.1 with iPhone SDK 3.1.3 but the hardware is the true test of whether your software really works. Given that, you could probably skip finding and using it - although there is no quicker way to find everything that you can't use in 3.1.3. There is no problem having multiple copies of Xcode of different versions installed but it is a good idea to uninstall them with the script provided in /Developer/Library/uninstall-devtools (read the readme included with each Xcode distribution)
You need to test the app on a device running 3.1.3.
The deployment target is one thing (that you set to 3.0 so that you can test on the device)
But if you are looking debugging with a specific version of the SDK, you should have the respective XCode installer.
Does your simulator have a menu marked "hardware" with a variety of older OS version choices?
(Mine does.)
Just use that.
It won't be 100% "actual device" test... but it's a WHOLE lot easier.
(None of the simulators are 100% tests anyway.)