
Starting Feb 1, new apps and app updates must be optimized for iOS 7 - trhaynes
https://developer.apple.com/news/index.php?id=12172013a#top
======
jwr
iOS 7 is the first Apple system where I felt royally screwed. My iPhone 4
became so slow as to be nearly unusable. Everything now takes seconds, swipes
are being missed, even audio gets chopped up when I play back podcasts over
bluetooth.

There are two reasons for me to be angry about this:

* Apple should never have released iOS 7 for iPhone 4 devices. iPhone 4 should have been listed as "unsupported". But had they done that, they would have ended up with a fragmented ecosystem, and unable to brag about how so-and-so-many percent of users upgraded to the latest iOS.

* There is _no good reason_ for iOS 7 to be slower than iOS 6. The "it requires more processing power for animations" reason is bogus, because there are very few animated effects, and I switched off whatever I could anyway. The only reason every iOS release is slower than the previous one is because Apple does not care about optimizations. They can afford not to care because every new hardware device is much faster than the previous one. But that means some users get royally screwed.

I should have stayed with iOS 6 (there is no going back now), but more
importantly, Apple should not have claimed that iOS 7 is supported on my
device. For all practical purposes, it isn't — the experience is really bad.
I've just compared it to an iPhone 3G running iOS 4.2.1, it's more responsive
than iOS 7 on iPhone 4.

So, this forced migration to iOS 7 is something that makes me angry, because
I'm that part of the userbase than is being dragged into it kicking and
screaming.

~~~
potatolicious
Agreed, with reservations. iPhone 4 itself was a grossly mis-executed product,
though it wasn't obvious at the time.

The core issue is that the iPhone 4's CPU and GPU performance are only
marginally better than the 3GS it replaced, but it pushes 4x the number of
pixels around.

At the time we weren't really pushing the performance envelope, so everything
appeared fine. Now we are - it's trivially easy to hit the upper bound of
iPhone 4's performance envelope, whereas the 4S (and the 5, 5S) have a lot
more wiggle room.

More critically for app and OS developers, the GPU performance on iPhone 4 was
woefully inadequate for the number of pixels it's tasked to render. IIRC the
iPhone 4's GPU has a fillrate (i.e., max pixels rendered per second) that's
about 13% higher than the total number of pixels it has. This is to say, if
you draw even a trivial amount of stuff in the background, you're going to
start dropping frames.

For the 4S, 5, and 5S, the lack of CPU performance can often be made up by
moving things to the GPU judiciously. On the 4 we don't even have that.

Here's where I disagree:

> _" There is no good reason for iOS 7 to be slower than iOS 6. The "it
> requires more processing power for animations" reason is bogus"_

Of course it is, but no one stated that the slowness is due to animations. A
large part of the slowness comes from the "blur everything!" design of iOS7,
which is inherently GPU-heavy, and thus performs _very_ poorly on the iPhone 4
and its shittastic GPU.

The blur is _everywhere_ , even (especially?) the stock apps where every tool
bar and navigation bar blurs items behind itself. You may want to try turning
the blur off: [http://www.redmondpie.com/how-to-turn-off-ios-7-blur-
effects...](http://www.redmondpie.com/how-to-turn-off-ios-7-blur-effects/)

This really has little to do with optimization - iOS is on the whole a pretty
performant OS and platform. This has everything to do with Apple deciding to
include features that are beyond the performance envelope of a targeted device
(or conversely, failing to drop support for a device when features move past
its performance envelope).

~~~
jwr
I disagree with this reasoning. The number of pixels to be pushed around did
not change from iOS 6 to iOS 7. It's still the same. The fancy graphics
effects are reduced already by default, and you can reduce them even further.
My phone doesn't do visibly anything different from what it did under iOS 6.
And yet it is much, much slower.

I already did everything that the article you quoted suggests. My phone runs
in high-contrast, super-accessibility, no-fx-please mode. And performance
still sucks.

To give you an example: I sometimes press power-on, nothing happens for a
second or two. Then I press the home button and after another two-three
seconds I get… a screenshot, just as if both buttons were pressed
simultaneously. Number of pixels, blur, seriously? We haven't even gotten to
displaying the lock screen yet!

I still believe there is lots that can be optimized, but Apple chose not to do
it. It wasn't laziness, it was a business decision — their time is better
spent implementing new stuff — but that is a decision I disagree with. Or,
more precisely — I disagree with this decision given that they called iPhone 4
"supported".

~~~
Terretta
> _I sometimes press power-on, nothing happens for a second or two. Then I
> press the home button and after another two-three seconds I get… a
> screenshot, just as if both buttons were pressed simultaneously._

Sounds like your phone's borked in some way.

That happens to me sometimes (1 in 10?) when bringing in legacy settings on to
a new device.

I've helped upgrade several 4 (not 4s) users and they're happy. On all of them
I turned off motion, turned off blur, turned off background updates, turned
off auto music/app/updates downloads.

If a phone still has slowness, it's usually a bad setting brought forward.
Seems to usually be in email or network settings.

I delete email accounts, reset network settings, and recreate email accounts,
leaving iCloud as Push and all others as Fetch, Manual.

If that doesn't fix, I try again, this time "Erase all settings". (Not Content
and settings.)

These are the same steps I use to get back battery life losses. Something goes
wrong, runs in background, kills batt and slows phone.

Finally, one friend has Downcaster and always ends up with a full phone. Below
a level of free memory the device definitely slows drastically. Touch and wait
kind of slow, less than 2GB on 64GB device is noticeable, less than 500MB get
to be a real problem.

------
VLM
The original ipad can only be upgraded to iOS 5.1.1, I think.

There are a couple implications. First of all schools (like where my kids go)
that bit the apple and deployed ipads to all the kids can't install or upgrade
software after February. So if you're selling apps to kids, get your profits
while you can. After february if they spend all their budget on upgrading
ipads to the latest hardware so they could eventually install apps, they're
not going to have any money to spend on apps, so that is a double whammy on
sales. Something tells me no one told the accountants and administrators that
the depreciation period was so short; much like elementary schools reuse
textbooks for 20 years I think they were a wee bit optimistic about ipad
usable lifespan.

Another implication is if you have a use case for app-less (web based) ipads,
the market is probably going to absolutely flood in a couple months with cheap
ipads that can't run modern native apps. So if you're trying to develop an
ipad app for cheap people, the wise choice at this time would be web based not
native. Also a web based solution could be sold to android users or desktop
users or whatever.

The TLDR is native iOS apps are going to die pretty soon. Which is too bad, it
was an interesting technological idea.

~~~
CookWithMe
App optimized for iOS 7 != App only runs on iOS 7

In most cases, the developer just has to recompile the app and include iOS 7.
Of course it get's a lot more tricky if one wants to start using new APIs
introduced in iOS 7, and that's why most devs will drop support for older
versions.

~~~
tannerc
This needs to be highlighted more here.

Support for iOS 7 can complicate things, but for -- I'd estimate -- 75%+ of
developers it's simply tweaking a few things and then releasing an app that
continues to support v5.0 and up at the very least.

This isn't as dramatic an announcement as some are making it out to be. Though
maybe it should be, as the way to encourage both consumers and developers to
stay up-to-date is to force them into it with limited support.

~~~
JScarry
Agreed. It takes a while to figure out what iOS7 breaks in your app, but there
are plenty of resources out there that tell you exactly how to fix all of the
problems. Sliding content under the top menu was the big one for me, but it’s
a one line fix. (Or three if you like your if statements on multiple lines.)
Turning off the bright colors for links and buttons is another one liner. It
was probably less than 20 lines of code and a day’s work to update my apps.

There are a bunch of new features that I’m adding. I especially like the
ability to speak text with a Siri-like voice.

I think my interfaces fit into the iOS7 ecosystem, but until they start
enforcing the policy on Feb 1, I won’t really know. Figuring out what the
rules really mean is always a big unknown in the app review process.

------
jarjoura
A few things people might be missing from this announcement.

1) Simply recompiling an application with iOS 7 SDK unlocks a different set of
view metrics and subtle behaviors that are non-trivial to address. Developers
need to make sure views lay out properly (accounting for the status bar, etc.)
in both iOS 7 and iOS 5/6.

2) If you're a game company, chances are you can set your target device to iOS
5 and after making sure you account for the metrics changes you should be
fine.

3) Clang/LLVM changes might cause a new crash when run on iPad 1, for example,
because Apple won't be testing it anymore. You'll need to have this hardware
around to verify everything runs if you want to support that device.

4) If the application is rarely updated or barely maintained, chances are it
will be abandoned at this point. What used to be a simple bug fix here and
there will now become a massive project.

5) Last and most important point, most software that IS maintained, or at
least downloaded enough to warrant concern, I promise you that Apple's
developer relations has a point person on top of it. All of your games and
important tool makers are well aware of their need to transition to the new
SDK if they haven't already. Perhaps a bug in 7.0 that will be fixed in 7.1
was keeping them from releasing an update.

5.1) If you have a game that is used on iPad 1, speak up and let the developer
know so that they can make a decision to keep supporting it. OpenGL ES has
been quite stable API-wise for quite some time so I suspect most games will
continue to support iOS 5 for the foreseeable future.

------
ronaldx
Worth noting that first generation iPad, the current model until March 2011,
will only run iOS 5.1.1 and has essentially been obsoleted by now.

Yes, it is theoretically possible to support earlier versions but Apple makes
it practically very awkward: around half of the top apps don't support iOS 5.
Apple's own apps apparently don't support iOS 6.

~~~
frou_dh
Which makes it odd that 2011's iPad 2 is not only still supported, but still
on sale.

~~~
MBCook
There are two reasons. First, the original iPad was somewhat underpowered.
There is a reason the iPad 2 felt _so much faster_.

The second reason is because of the iPad mini. The non-retina Mini __is __an
iPad 2, just in a smaller package.

I know some developers were complaining after the retina Mini was announced
because Apple didn't update the non-retina version to the A7, so the
effectively still have to support the iPad 2.

------
kevingadd
Doesn't requiring the new build pipeline plus 'optimized for iOS 7', mean you
can't support most older iOS devices anymore? I know that is how the build
pipeline stuff worked for desktop OS X apps - they tended to deprecate the
ability to build for older OS versions when you installed the latest rev of
XCode.

If so, how far back does it go? Like, if I compile an iOS7 optimized app, will
it work on iOS6 devices? What about iOS5? Do they schedule the support
deprecation based on lifetime (i.e. all devices released in last 2yrs will
work) or is it just based on software versions?

~~~
mildtrepidation
I'm also interested in the answer to this. Building for Android allows you to
target a wide range of versions even if your build target is the latest; is
there any analogue to this in the iOS world?

~~~
grey-area
You can build for ios 7 at the same time as ios 6. They tend to assume you'll
only want to target the latest, but it can be done without much trouble, esp.
if you already have a tested older project and are willing to put more time in
to testing. I'm supporting an app which supports ios 5-7 at present but we
tend to test only on 6-7, and have changed some of the UI to match better with
ios7.

The issues tend to be with matching chrome if you have custom controls, but if
you don't have many custom controls, you'd probably be fine. I imagine it's
not very different from the story for Android.

------
agashka
What does that mean for third party applications? Like those built using Adobe
Air, which as far as I'm concerned, does not use Xcode. Will an application
that complies with the iOS 7 guideline be rejected just because it was not
compiled under Xcode?

~~~
ryanpetrich
These tools will have to be updated to emit binaries with load commands that
link against iOS 7 versions of UIKit in order to be in compliance. This is
similar to the regulation change in March 2013 that mandated support for
iPhone 5's larger display dimensions.

------
andrewgjohnson
I think the lack of definition of "iOS 7 optimized" is what is confusing to
those of us who haven't developed apps on iOS.

~~~
tonyhb
Yeah, I was thinking that as a web/java developer I don't understand what this
means.

Does this mean that, essentially, we only build for iOS 7 onwards?

~~~
smweber
"iOS 7 Optimized" is Apple's way of saying "built with the iOS 7 SDK".

Apps that are built for iOS 7 get the new shiny keyboard and some different
behaviour when run on iOS 7, but can still run fine on older versions of iOS
if the app developer is willing to support older versions of iOS. This is done
by setting an option called "deployment target" to an older iOS version when
building in Xcode (and testing a ton on older versions of iOS, and not calling
newer APIs on versions of iOS that don't support them).

So this announcement means Apple is dropping support for older versions of
Xcode (with older iOS SDKs), but older versions of iOS are still technically
supported as long as you're building with the iOS 7 SDK.

~~~
tonyhb
Ah OK – thanks for the information!

------
mmgutz
Does this affect Phonegap and Ximian?

