What iOS version to use when start building an iOS App now and publishing in 1-2 months? - iphone

Couldn't find similar questions:
I'm currently designing my app and after that I will build it with Xcode 4.2. My question is what iOS version should I use - iOS4 or iOS5?
I was trying out storyboard and ARC, so it would be great to build the app with iOS5, but I don't know if it will be better to use iOS4 to reach more users?
What are your advices?
Merry XMas! :)

According to this report, about a third of users had updated to iOS 5 in October. The figure has probably increased since then and will continue to increase (especially considering the huge influx of new iOS 5 devices which will enter use after Christmas), so by the time you publish your app it is quite likely that about half of users will have iOS 5.
Whether it's worth losing about half of your potential market for the extra features which are available when developing for iOS 5 is entirely up to you. To some extent, it also depends of what the app is - if it is something targeted at people who make intensive use of their iPhone, chances are they will already have upgraded, so it shouldn't be a problem. If, on the other hand, it's something that is likely to be used by non-techsavvy people, you might be better off making it compatible with iOS 4.

I would say go for IOS 4, you can still use Arc, and StoryBoards are not the end of the world...

I would:
In Xcode, set Base SDK to Latest iOS (iOS 5.0) and set iOS Deployment Target to iOSx.xx where x.x is any version from 3 to 5. The deployment target is where you can decide what is the minimum version of iOS that your app will need in order for it to work. So the lower the number would mean you can reach more targets. Just make sure you do test your app on those versions that you set before submiting to iTunes for review.

Related

Can you set a Max iOS version for an iPhone App?

Our iPhone Apps run beautifully up through iOS 6, but certain features do not work on the iOS 7 beta. My fear is that we won't be able to complete our iOS 7 compatibility before iOS 7 is released and our customers will upgrade to iOS 7 and the App will be unusable....resulting in negative reviews, etc...
Does anyone have any suggestions on how to best handle this? Is there a way to set a Maximum SDK that the App supports?
I think if you do this you will get bad reviews anyway, but it may be your only option if you can't revise in time.
You need to take a look at this SO answer and use a condition with a macro like
if(SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(#"6.1.3")) {
// work normally
} else {
// fail gracefully
}
to disable any part of your app that is broken post that version number.
I don't think there is a way to restrict users with later versions installing and trying to use your app as there is with users with versions earlier than you require. The reason is probably that while it's OK to use new features and lock out older devices it generally isn't OK to not support new devices indefinitely.
If you run a binary built against the iOS N SDK on iOS N+1, the device substitutes the behaviour of iOS N. Assuming you have an iOS 7 device set up for testing, try downloading anything from the App Store — you should see gradients and wide UISwitches and view controllers acting properly when wantsFullScreen is set to NO and everything else.
So you don't need to handle anything. It's dealt with automatically on the device.
There is not maximum iOS version setting anywhere but it shouldn't necessary.
If you build the app with Xcode 4.6 / iOS 6 SDK, then run it on device w/iOS 7 installed, does it work OK? If so, that's what you should release first (or leave in the app store). If not, you need to fix just those problems that show up and release an update made with Xcode 4.6. Just fix those issue, don't try to restyle and redo everything for iOS7 yet. Most apps built with Xcode 4.6 won't need fixes to run on iOS 7.
When you build with Xcode 5 / iOS 7 SDK, then you'll want to fully use and support iOS 7. But you can't release that build until we get a gm Xcode/SDK anyway. You don't have to go down this path right away if you aren't ready.
Try systemVersion of UIDevice.
Format is 6.1.3 or 7.0.1
Split them with '.' to get major version
https://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/occ/instp/UIDevice/systemVersion

Will my app work with a new iOS?

I have made an app for iOS 5.1..
Will the app work with iOS 6 also? Or do I have do to any updates in the code or something?
Thanks!
Apple has good backward and forward compatibility so it should work with no problem
There are cases when you use some specific libraries that your app will need a resubmission
but 99% of the cases your app will just work good
One point to note here: is if apple will change the resolution of their next devices you may find some icons that are low quality (happend when iphone 4 was first release)
But regardless of that your app should work.
Usually the OS versions are backward compatible for the apps.

iPhone and SDK different version compatibility issues

I am a beginner Apple developer and I have some issues I would like to resolve.
First of all, I am curently working on Xcode 3.2.6 because I haven't enrolled for the developer program yet. I would like to know if Apple only accepts apps (for the App Strore) compiled on SDK 4.
Secondly, I want my apps to work both on iPhone 3 and 4. What would you advice me to do? I have read in several developer forums that in order to achieve this I have to build my application with 3.1 iOS as a target. Is this correct?
Finally, is there any problem due to the difference in resolution between iPhone 3 and iPhone 4? Which resolution do you think I should use?
Thank you in advance,
Cherry
Set Base SDK to latest (4.3).
Set Target SDK to 3.1.
Avoid features available only in iOS 3.2 or later (e.g., don't use blocks, don't frameworks introduced in iOS 3.2 or later, always check availability of methods). Later, when you get more experience with Objective-C, you may try to combine features of more modern iOS, but still keep compatibility with older iOSes.
Don't worry about resolution. It affects only images – if you want to take full advantage of Retina display, then you will need to create images for both resolutions (std. and hi-res).
P.S. I suggest you to avoid support for iOS 3.2 or earlier. iOS 4 introduces a lot of nice and helpful features. And I pretty sure, Apple will revoke support for iOS 3.x soon after iOS 5 release.
If you are aiming for iOS 3, you will end up not using the features of iOS 4, which is the majority.
This is Apple's statement.
Target the latest iOS release.
Targeting the latest release allows you to take advantage of all the features
available in the latest version of iOS. However, this approach may offer a smaller
set of users capable of installing your application on their devices because your
application cannot run on iOS releases that are earlier than the target release.`
Target an earlier iOS release.
Targeting an earlier release lets you publish your application to a larger set of
users (because your application runs on the target OS release and later releases),
but may limit the iOS features your application can use.`
But I would suggest that you target the iOS 4 as people are now targeting iOS 5, and in another 8 months, I am sure Apple would release iOS 6 (They are very quick with their updates), and I personally feel that targeting iOS 3 is not going to give you great results in the long run.

Is iOS 4 generally backwards compatible?

I have the following problem, in near future I will need to write a few not very complicated apps for iPhone. I do not currently own an iPhone, so I plan to purchase one for testing purposes. In short would iPhone 4 allow me to test apps written for older ios versions? Any pitfalls? Or would I have to purchase older phones/ipad to do the testing properly?
Yes, to perform a proper test you will need to test on the individual devices you are supporting. The documentation will tell you if the framework/API you are using is supported in the older iOS versions. I'm afraid there will be some subjective answers here as I am sure some apps end up running just fine across many versions with simulator testing. There are many factors to consider when looking at backwards compatibility (desired speed, memory usage, APIs, ...). You stated your app is "not very complicated" so you may be fine. I would test your application on as many devices as possible.
I should also make the distinction that there is a difference between "will it compile" and "does it perform as expected". You can use xcode to test whether the application is compatible by targeting and older version. Whether or not the application runs as desired will be discovered when testing on the specific devices.
You can't run iOS 3 on iPhone 4, so you have to buy separate devices.
But if it is a new app I wouldn't consider to make it iOS3 compatible. Most users have upgraded to iOS4 already. And at the time your app is in the store there will be even less users running iOS3.
Sure, this will remove like 0,5% of potential customers. But you don't want to buy another device for 100$ if you can get only 10$ revenue from the 0,5% customers that run iOS3. And you have to test your whole app again, which will take a significant amount of time.
So you should consider to drop support for iOS3.
See this question: Will an application compiled for iOS 3 run on iOS 4?
It will allow you to test apps which are targeted at older iOS versions, yes.
Performance differences to older iDevices like the 1st gen iPhone / iPod touch are quite significant however. So if your apps require expensive calculations or the like, I'd recommend buying an older, used device too to get a feeling for performance on that generation of hardware.
Note that if you need to make sure the apps you are about to develop will run on very old devices / iOS versions, you maybe need to do without some cocoa classes and methods which require more recent versions of iOS
If you bought an iPhone 4 for testing purpose.. You're testing on the latest iPhone available in the market and that doesn't means your app is ready to target low-end device automatically.
Let's take a deep look: If you've designed an App that must look gorgeous and work right out of the box on iPhone 4, then you're probably making your app a Retina display compatible. That is like playing with 960x640 resolution screen.
Now, if you planned to target low-end device for eg, iPhone 3GS, then all you gotta do is to reduce the graphic assets size by half, as iPhone 3GS is 320x480
That's it! Your App is ready for the low-end device as well, in looks and feels perspective.
Now, let's look from deployment perspective. If you base SDK is 4.2.1 and you're targeting to devices which runs 3.3, then all you gotta do is to make sure you don't use latest libraries/classes which are introduced in iOS 4.2.1, as they won't be available to device which are running on iOS 3.3. If you take care of this part, your app is almost ready to ship out.
From Market perspective. I see all the great apps out there had made their deployment target as iOS 4.0 or later. That means, they are targeting to only devices which runs iOS 4.0 or later versions.
I think, you can try your build in low-end iPhone simulator after successful testing cycles ran on iPhone 4 device. :)
The iPhone is generally not backwards compatible. Sometimes methods, properties, classes etc. are added or older ones become deprecated.
For testing, i would recommend that you have several devices with different iOS Versions depending on the target iOS Version you want to release.
Also check the the iOS Reference Library: Under "Availability" for each function etc. is noted since when it is Available

Is it worth only supporting the iOS 4 when making an iPhone app?

If I am creating an iPhone app, is it worth trying to make sacrifices with functionality (e.g. with MPMoviePlayer) in the application and support previous versions of the OS?
Are the majority of iPhone users running iOS 4?
Will I lose out on a big portion of the market if I only support iOS 4?
There will still be a lot of iOS 3.x users because iOS 4 cannot be installed on original iPhones and older iPod touches. And iOS 4 barely works on iPhone 3G. You can still use functionality of iOS 4 while still targeting older versions though.
I've been learning through doing user testing that a lot of people don't upgrade their apps, much less their OS. Add that to the fact that lots of devices can't run 4.0, and I think you'll limit your market if you don't support at least 3.1.x.
As to 2.x, this report says it was less than 13% 5 months ago, so it's probably safe not to support for a new app at this point.
First, you're forgetting something: You need to support 3.2 if you want your app to run on the iPad.
You don't have to "sacrifice functionality"; you just have to code your app to detect what features are available at runtime and fallback gracefully.
If your app isn't free, then the real question is "Will users who don't upgrade buy my app?", and I suspect the answer is generally no. Apparently a substantial portion of the 2.x installed base are iPod Touch users who don't want to pay for the upgrade.
The other factor is the amount of work. If you use few enough iOS 4 features that it's not much work to also make it run on 3.1.3, then supporting 3.1.3 is a no-brainer. Of course, never support an OS version you can't test.
If this is a brand new app, there's not much point in supporting older versions of the OS. It will require making sacrifices when programming the app, and over time everybody will eventually move to iOS 4.