Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

warp9

macrumors 6502
Original poster
Jun 8, 2017
450
642
I'm looking at a possible career change into ios developing and was wondering if I should keep these extra ios devices I have, for app testing. Is a physical device the preferred method for testing or is the simulator good enough? This is what I have:

iPad mini 1
iPad 2
iPad 3
iPad 4
iPad Pro 12.9 2nd gen (future purchase)
iPhone 5s
iPhone 6 Plus
 
For development the Sim is useful for many things.

For testing it's best to test on a device in most cases.

Naturally there is a test matrix of multiple devices and iOS versions. Having a number of devices is helpful. Apple doesn't allow installing older OS versions on a device and it can be difficult to obtain devices with older OS versions. Your iPad mini 1 will only go up to iOS 9.3.5, which should be helpful as long as you support iOS 9. You should think carefully before updating the OS on any test device because you might lose a test OS version. Having different size screens is also useful. The iPhone 6 Plus has a different screen resolution than the retina screen that most devices have these days. Your mini 1 is not a retina screen so you have three different screen resolutions among your devices. Depending on the kind of apps you work on having a device that uses the cell network vs others that use WiFi can be useful. Also, 32 bit vs 64 bit can be a distinguishing factor.

There may be some overlap among your iPads but the other devices seem to be a good mix for test devices.
 
Thanks, that helped a lot. I looked through the 'similar threads' as well for some more info. Unfortunately, all my devices have been updated to the latest os they will support because they are hand me downs that have been returned. I'll be mindful of os versions in the future.
 
If you're learning to code iOS then don't bother learning iOS 9 specifics, since by the time you're done most apps will only support iOS 11 and back down to iOS 10. So you'll only need test devices that run iOS 10+. I would keep the iPhone 5s, since it's good for testing small screen layouts, and will support iOS 11. The iPhone 6 Plus is also good to keep because Plus iPhones are special, they sometimes behave like iPhones and sometimes like iPads. Also keep your iPad 4.
 
I don't understand why developers would drop support for ios 9.

EDIT: Some Googling has made this clear. I see developers can continue to support legacy apps for legacy devices if they choose to.
 
Last edited:
If you add analytics to your app you can determine the devices and OS versions of your users. This can help you decide what older OS versions you should support.
 
Device testing is pretty much a requirement, as apps that run on the Simulator can actually fail on iOS devices due to slight differences in the simulated OS APIs, and in the hardware support. There are also key usability differences between multi-touch on a device, and mouse pointer usage on the Simulator.

Some APIs (Metal in iOS apps, etc.) can only be tested on a device.

Note that not all users promptly update their devices to the latest OS, so it's always good (if possible) to have or keep one iOS device one major OS revision behind the current release. I currently have most of my test devices on iOS 10, but keep one back on iOS 9. I have one with the iOS 11 beta to check for compatibility. A few days before iOS 11 is released, I'll update the iOS 9 device to 10, and then gradually, after the release, most of the iOS 10 device's to 11.

For apps that have very wide usage (10's or 100's of millions of users), that last fraction of a percent of users can actually be a huge number. So these companies sometimes test on even older versions of iOS devices (two or three versions back).
 
I don't understand why developers would drop support for ios 9.

EDIT: Some Googling has made this clear. I see developers can continue to support legacy apps for legacy devices if they choose to.

There are many reasons to drop support for older iOS versions. But one thing to plan ahead for is what versions will be relevant at your app's release time, not now as you start. So if you release a month from now, then iOS 9 might still be relevant, but a half year from now, not so much. Basically the latest version tends to peak at around 80% and the previous one at 15% leaving 5% of devices running any of the other iOS versions.

The more you make automated tests, the more you can afford to test, and thus support, older versions. The more you manually test, the more you'll be spread out just trying to verify 4", 4.7", 5.5" iPhones in portrait and possibly landscape, iPad and larger iPad Pro, portrait and landscape as well as multi-tasking 1/3 and 1/2 sizes, 64 bit, 32 bit CPUs, retina and non-retina. Different font sizes for accessibility, multiple languages.
 
Well you're tripling or quadrupling your iOS version testing, and opening up many more different devices and resolutions that need to be tested and supported. Also, basic APIs for view controllers, and rotation, and segueing have all changed. Some user interface elements either didn't exist back then, or behaved very differently. Whole APIs for accessing basic things like photos and contacts are now completely different (iOS 9+). So you need to decide to either implement functionality twice, in the old and new APIs, or stick to the old ones that require a lot more work, and can't do everything the new ones can, or maybe your app doesn't need them at all. iOS 6 shows the user interface drastically differently than iOS 7. The recommended language for iOS development is Swift, and it's only supported on iOS 8 and above. I believe there's some way with extra work to use it on iOS 7, but I don't know the details of all of the limitations.

Assuming a sufficiently small app that's doable with one developer and supporting just the current version of iOS, with probably 5 test devices, then that app supporting 4 versions of iOS (7, 8, 9, 10) would probably take 3 developers, one QA, and 17+ devices.
[doublepost=1500755744][/doublepost]Meanwhile Apple just released iOS 10.3.3 that fixed numerous security issues. Anyone running anything older is asking to be hacked and their device compromised. Let alone all the security fixes since iOS 7...
 
  • Like
Reactions: robotica
Supporting iOS 4 thru 6 was fairly easy. So is supporting 8 thru 11. Supporting both iOS 6 (or earlier) and iOS 7 (and later) was a bear, because so much of the UI was different looking or moved around between those two versions. It was almost like writing two apps and then trying to glue them together without making a sticky mess of code.

If you want to code in Swift (3 or later), supporting more than a couple OS versions might create similarly evil problems.

This, if you want to support several OS versions, is in addition to testing under multiple OS version on different devices, and making sure the app doesn't try to use a new API on an old OS, but still potentially using the a lot of new APIs on only new devices because customers expect some features in the latest apps for the latest devices.

Apple also occasionally changes App store submission requirements, making support for old device illegal (for instance, they no longer accept armv6 code necessary to run on an iPhone 2G or 3G). The currently required arm64 support does not allow building apps that can run under iOS4, etc.
 
Writing an app and then supporting new OSes as they come out is different than writing an app that supports the current OS and three older OSes. Older OSes have bugs and other issues that are not documented. Of course the current OS does also but you can come onto the forums and ask about bugs in the current OS and expect some responses. If you ask about a bug on iOS 8 you won't get an answer. Developers don't remember the details about bugs from iOS 8. There might be old forum posts about old bugs but there might not be the answer you need.

Writing a new app and adding support for new OSes as they come out is a normal thing. Writing a new app and adding support for old OSes is hard and I wouldn't recommend it. Especially for a beginner.
 
I'm looking at a possible career change into ios developing and was wondering if I should keep these extra ios devices I have, for app testing. Is a physical device the preferred method for testing or is the simulator good enough? This is what I have:

iPad mini 1
iPad 2
iPad 3
iPad 4
iPad Pro 12.9 2nd gen (future purchase)
iPhone 5s
iPhone 6 Plus


Xcode 9 has great simulators, but nothing better than testing in the real device.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.