Apple Pushes Developers To iOS 7
Hugh Pickens DOT Com writes "Chuong Nguyen reports that Apple is forcing developers to adopt iOS 7's visual UI for their apps, and has advised iOS developers that all apps submitted after February 1, 2014 must be optimized for iOS 7 and built using Xcode 5 ... 'It's likely that Apple is more anxious than ever for developers to update their apps to fit in visually and mechanically with iOS 7, as it's the largest change in the history of Apple's mobile software,' says Matthew Panzarino. 'iOS 7 introduced a much more complex physical language while stripping out many of the visual cues that developers had relied on to instruct users. For better or worse, this has created a new aesthetic that many un-updated apps did not reflect.' Most app developers have been building apps optimized towards iOS 7 since Apple's World Wide Developer Conference in June 2013. Apple has been on a push over the past couple of years to encourage developers to support the latest editions of its OS faster than ever. To do this, it's made a habit of pointing out the adoption rates of new versions of iOS, which are extremely high. Nearly every event mentions iOS 7 adoption, which now tops 76% of all iOS users, and Apple publishes current statistics. In order to optimize apps for the new operating system, they must be built with the latest version of Xcode 5 which includes 64-bit support and access to new features like backgrounding APIs."
... does this mean there is no way to turn off "automatic updates" in an Idevice ...
A user of an iOS device does not have to upgrade. The check for an update is automatic, the installation is not.
Its more of an issue for developers. The development tools sometimes make it difficult to support older versions of iOS. At the moment iOS 6 is well supported so there really is not much of a problem to have your app target both iOS 6 and 7.
It's awful. Things that function as multi-state buttons now look like hyperlinks. Low-contrast shading "highlights" state changes. Other buttons, formerly intuitive and multi-state, now summon fly-up menus from the bottom of the screen (like the loop one/all button in Music app).
"WHY ARE YOU TRYING TO RUIN MY COMPANY?"
-- Steve Jobs, c. 2003
"Flyin' in just a sweet place,
Never been known to fail..."
Summary is an over simplification based reading T.F.Email from Apple. Nothing that Apple is doing at this time will prevent developers from targeting older devices than they previously have been able to target. I *think* the current oldest supportable iOS given their requirements is iOS 5, but I haven’t verified that with the latest Xcode build.
All apps published after the cut-off date must be built with the latest version of Xcode and must have imagery & design that will support iOS 7 devices’ look & feel. They must use iOS 7 as the Base SDK, but they are not required to use iOS 7 as the Minimum Deployment Target. The minimum target supported by latest Xcode is the one thing I’m uncertain of right now, but I’m pretty sure it’s iOS 5.something.
The two settings on your project (Base SDK and Min. Deployment Target (MDT)) control the newest and oldest features you have access to, respectively. An app with a newer Base SDK will still run on an older device (down to MDT). Any features added to an iOS release that’s newer that the MDT will be weak linked. The developer can check at runtime whether particular functionality is available. Unavailable classes will return nil when you try to access them (which you can ignore or check for depending on your needs), and newer methods will be unavailable on old devices (so check with respondsToSelector: or similar before calling). Additionally, when running on an older device, you keep the old device look & feel. You don’t suddenly start looking like iOS 7 on an older device.
As for what developers must do to comply with the new requirements:
1) Make sure all artwork, screen layouts, etc. are available in the higher resolution / size needed by the larger iPhone 5+ screens & Retina iPads.
2) If changing the MDT, update any code referencing methods/classes that were deprecated in between whatever the previous MDT was and the new one. Any methods/classes deprecated between the new MDT and the Base SDK version can stay unchanged,since in many cases, the newer method/classes wouldn’t be available at runtime on the older devices.
Apple has definitely cut off older devices in the past. It’s currently Very Difficult to target 3GS or earlier devices as the current Xcode doesn’t generate ARMv6 code any more. It’s still possible to make that work if you’re very dedicated by building an ARMv6 binary with an older Xcode, ARMv7(s) with the latest Xcode, and manually merging the binaries with the `lipo` command. Anecdotal evidence suggests Apple will still approve such binaries, though I’ve not personally tried to submit one.