
I've had more fragmentation problems with iOS/iPhone than with Android - dazzla
http://www.getidealyzer.com/blog/ive-had-more-fragmentation-problems-iosiphone-android
======
aaronbrethorst
> I was not worried about breaking it again as the changes in this update did
> not touch anything that had issues before...I must have fumbled in the SVN
> check in.

Even if this wasn't the case, it's always possible that some new chunk of code
you're adding requires a library that doesn't exist on down-level OS versions.
Or the new code doesn't properly check existing libraries for the availability
of classes or methods (e.g. some UIKit classes only exist in iOS 4.0 and up.
To ensure that your app doesn't crash on older versions, you need to test for
the existence of the class you want to instantiate). If any of these
conditions hold true, crash city.

I own every iPhone that Apple has released, and I keep my original iPhone on
3.1.3 for precisely this kind of scenario. In fact, just yesterday I had to
fix a couple iOS 3.1.3-specific bugs, and couldn't have done it without that
original iPhone.

Long story short: if you're going to claim you support a particular platform,
you better test on it. If you can't or won't test on it, then don't support
that platform as a deployment target.

~~~
nhangen
Exactly. In this case, the developer should've either tested prior to release
(on 3.0), or specified a 4.0 build.

------
blinkingled
Some things that may have helped him not get into issues with Android -

You can create AVDs (Android Virtual Device) that have different hardware
capabilities (RAM, Camera, SDCard, Screen Sizes etc.) and run different
versions of Android - 1.6 to 2.3 as of now. This makes testing your app very
easy - you just set a minimum SDK version and if your app doesn't do weird
things (uses features that don't work on a version of Android and declares
support for that version)- most times it works very well.

API Levels - API changes are mostly additive and old APIs are carried forward
as-is. <http://developer.android.com/guide/appendix/api-levels.html>

More than anything though - the developer can just push a beta in the Market
and receive excellent feedback from users - user submitted stack traces,
device info, feedback etc. can be very valuable in identifying and fixing
compat issues.

------
sp4rki
How is this a tale about fragmentation on either operating system's
ecosystems? It reads more like a story about how the developer has a faulty
approach to releasing software. He made the mistake of making an assumption
that turned out to be erroneous, and then had an issue with his version
control. He fixed the issues and everything was good with the world. Once
again, how is this fragmentation? If he where complaining that the review
process takes too long, then point taken and I agree, but this has more to do
with user error than with the ecosystem itself.

------
jinushaun
The problem is that Apple deprecates their SDK really quickly. As developers,
that makes it really tough to test old versions of iOS when installing an
updated SDK REMOVES previous versions!! Even if you select an older "OS
Deployment Target", you're out of luck unless you have a device to test it on.
The Simulator is always running the latest version.

I guess they assume everyone will upgrade, but a lot of people don't or can't.

~~~
jbrennan
> The Simulator is always running the latest version.

Actually this appears to be false now. I just fired up my iOS Simulator, and
in the "Hardware" menu I can select which OS version I want, either 3.2,
4.0.2, 4.1, or 4.2.

~~~
dazzla
That's right you can select all those versions accept 3.1.3 and that is the
problem.

~~~
natch
Why is that the problem?

Just install Xcode 3.2.2, which does include support for the Simulator 3.1.3.

You can get it from <http://connect.apple.com/> \- select Developer Tools,
find 3.2.2. in the page, download it, and install it to a directory other than
the default /Developer, so your existing tools won't be affected. You might
want to skip the installation of the developer utilities, since the ones from
the current Xcode will be more up to date.

But you still are missing an important point. The Simulator is not an
emulator. It does not run the same instruction set as the device itself. So
the best way to test is still with actual devices running the versions of the
OS you are interested in testing.

~~~
dazzla
I absolutely I agree testing on a device is necessary. In fact I use push
notifications which cannot be tested at all in the simulator. It is also true
with the Android emulator. As an emulator it is closer to a device but still
not the same.

However the bugs I had would have been picked up in the simulator.

Thanks for the pointer for the older version of Xcode. That would have been
great but at this point I may as well do my 3.1.3 testing on the device.

------
MichaelApproved
How is this a major fragmentation problem? This is a story trying to point out
fragmentation issues but only points to one problem (testing on iOS 3.1.3).
There are many more fragmentation issues with Android than this one story.

~~~
kjksf
The reason people bring Android fragmentation as a negative is because they
claim it's hard for developers to support all different Android devices.

This post shows that iPhone has the same problem: every iOS version is a
fragmentation point. If you want to support version X1, X2, X3, X4 etc. of iOS
you have to make sure it works on all those versions, just like if you want to
support version X1, X2, X3, X4 etc. of Android, you have to make sure it works
on all those versions.

The post shows another thing: that while Google makes it easy for developers
to support all OS versions by providing decent development tools (i.e.
emulator that supports older OS versions) and providing developer-friendly
phones (so that you can install different versions on the device).

In contrast Apple makes it difficult by forbidding developers to downgrade
their phones for testing or providing emulators for older devices so
developers have to jump through major hoops to make sure that their software
runs on devices that are still being used by a nontrivial amount of users.

To summarize: in practice supporting multiple version of Apple's iOS is harder
than supporting multiple versions of Android due to Apple's shitty developer
tools and their general shitty attitude to developers, at least according to
that one developer.

~~~
podperson
No, the problem here isn't supporting _devices_ but OSes. If you flag your app
as v4 (correctly) anyone who wants to use it can upgrade to v4 and use it. No
fragmentation. Under Android it's a dog's breakfast just on that point, forget
screen resolutions etc.

~~~
billswift
Do you actually have any specifics about Android fragmentation causing a
problem? If you do, ESR has been trying to find any specifics to back up the
generic claims of fragmentation, and has said he has not found any reasonable
evidence of such problems. Same question for all you apparent Apple fanboys
who voted this comment up so much, any specifics? If you have any here's the
thread where ESR's been requesting them - <http://esr.ibiblio.org/?p=2835>.

~~~
runjake
I program for both platforms. A couple things that annoy me the most often,
aside from devices shipping with old versions of Android:

\- Resolution differences, and no real scalable interface APIs. \- HTC vs Blur
vs Samsung's distribution of Android. They all dick with stuff their own way.
\- Physical buttons on each device. Some are overly sensitive capacitive
buttons, clicky buttons, or high latency. Each require model specific code.

You can verify this by searching the release notes for apps in the Market.
There's commonly caveats for certain models.

------
oemera
Every developer who has ever used the Android VM should know that testing on
it IS NOT a bulletproof test. Sometimes things work on the device which aren't
working in the VM even if it is the same version, resolutions and so on.
Sometimes things will work in the VM and not on the device.

You don't believe me? Go on and try to stream a video on a Android 1.6 VM.

BTW: I'm developing a iPhone App in my spare times and a Android at work.

------
Stormbringer
For some of the apps I've written (status: trying to get the frame-rate up)
the constantly changing screensizes of the devices is a frickin' nightmare.

I'm currently really only supporting iPad because of that... but _of course_
Apple will change the screen size on iPad 2.0 when that comes out. Aargh.

Went and bought an iPod-touch so I can test the 960x640 res if I ever get
enthusiastic enough about it....

...then it turns out that Apple's implementation of multi-tasking is going to
be a nightmare of a whole new dimension... lovely.

------
JF47
Look, this guy is right on from an OS fragmentation perspective (which is what
he is talking about). Both iOS and Android have OS version fragmentation in
the real world and the fact is that Google makes it easier to test for and
Apple makes it very hard. I have an app(game) written for both and dealing
with the iOS side of things for this is always harder then on Android.

------
jarin
Developer error/ignorance is cross-platform and runs on both Android and iOS.
You can't blame the fact that you didn't test on the version you released for,
know how to install older OS versions to test with, or check documentation on
Apple OR Google.

------
ryanpetrich
Use TinyUmbrella or Saurik's MITM server to save your device's SHSH hash for
each new iOS version that comes out. Allows downgrading to any version you had
installed previously

------
dillon
So it's not fragmentation, Apple just doesn't let you test in previous
versions. This was an easy fix for all you needed was only one phone. Unlike
Android who has over 100 different versions of Android, yes you have the
emulator for each base version but you can't guarantee for every phone.

~~~
dannyr
I'm a 100% certain that you have not developed on Android. You just read about
fragmentation on a blog or heard it from Steve Jobs.

There are best practices on Android development to minimize fragmentation
issues.

And no, you don't have to handle 100 versions of Android when developing.

If you restrict your app to run only from 2.1 and above, you got 80%+ of
phones covered.

[http://developer.android.com/resources/dashboard/platform-
ve...](http://developer.android.com/resources/dashboard/platform-
versions.html)

------
xuki
Instead of testing on 5+ devices for Android, you just have to buy an old iPod
touch with 3.1.3 on it. Is it too costly for you?

~~~
dazzla
I had an iPod Touch with 3.1.3 on it but by then I'd upgraded to to 4.x with
no way to downgrade it. Sure I could have bought another sooner but this is
not something I was expecting as up till that point I could always test in the
simulator for any version.

~~~
xenophanes
you can download old versions of iOS and downgrade your ipod.

~~~
dazzla
It has been a few months since I tried to downgrade but I certainly did try
and killed too much time in the process. Could you point me in the direction
of some instructions?

~~~
xuki
It's fairly easy, just save your old SHSH blobs (I always jailbreak my device
so I'm not sure if jailbreak is required, there's a tool called TinyUmbrella
to do it), then you can downgrade to whatever version you want.

------
J3L2404
'I found some potential problems in my app, fixed them and posted an update'

'Of course this was a time when Apple approved an update fast and it went out
before I could test and I had not fixed all the issues.'

'I must have fumbled in the SVN check in.'

~~~
tlammens
So initially there were problems with the code and afterwards with his
development process.

I fail to see what this got to do with iPhone vs. Android. It could have
happened with both platforms.

~~~
blueben
His point is that Android made it easy to test multiple platforms, and Apple
did not.

~~~
spaznode
When you say "multiple" and "easy" what exactly is the implication there?
Worrying about 5-6 revisions of an API or 30-70 variances of the same problem
on multiple pieces of hardware with multiple variances of platform debauchery
forced upon you by a given mobile carrier?

It just isn't possible to make the case that this aspect of android doesn't
make things harder and still retain any semblance of honesty or credibility.

~~~
blinkingled
Read the Android developer docs. API Levels document especially. Also play
around with the emulator and that will clear up your misconceptions. It isn't
hard at all unless you want to convince yourself that it is ;)

