I still target 5.1 because it does 90% of what 7 does but still works on first gen iPads. Apple has a tendency to only implement software features on their newest OS instead of back porting to earlier versions, because it sells more devices. It's unleet for developers to encourage this.
I think a reasonable prime directive for API developers is that if hardware can do something then software shouldn't be prevented from running on it. Sure there are arguments for speed/responsiveness but most of these are straw men because the real bottlenecks are somewhere else (reading from flash memory, internet lag etc). The only real hardware constraints I hit daily are limitations in OpenGL or limited ram (which wouldn't be an issue if proper virtual memory had been in place from the beginning so we didn't have to use mmap).
This kind of software "truthiness" is taking us further and further from computer science.
I wish other developers would adopt such a considerate attitude. Alas, my personal experience is that many simply abandon users who dare to have a device more than a couple of years old. My worst personal experience being an app that became obsolete, only to be replaced by an app that doesn't support my version of iOS.
Obsoleting an app is a problem, but -- at least in the PC space -- people who do not upgrade from e.g. XP to Win7 are unlikely to pay for new apps - so, if you care about getting paid, there's no point in supporting XP home users (enterprise is different, and I do not wish to go into that).
Does anyone here know if that's also true for iOS devices? I'm quite sure that the big app spenders would be the people who continuously upgrade. There might still be a significant population who does not upgrade to make financial sense for still targeting 5.1 with new apps. I don't know, but my guess would be "not so much".
Well, I can only speak for myself, but I definitely would keep buying apps if given the opportunity. There are plenty of apps I've wanted to purchase, but haven't been able to - whether there are enough like me that would make the extra market lucrative enough is another matter.
If I started developing tomorrow, and have no 5.1 device, how can I do QA? I have an iPhone 4 that was never upgraded, but I can either keep it as is or upgrade to 7
Apple is making it really hard to support a version that you didn't target from day 1. And it is hard to target older versions from day one
Of course that's true. If you are serious enough, you can develop for any device. The question is, does it make sense from any perspective?
Realistically speaking, it's going to cost me a $1,000-$10,000 more to develop for 5.1 rather than develop just for 7 (extra device, extra design, extra testing time, potentially extra development time). If you didn't originally develop for 5.1 and it doesn't cost you as much, you are not serious (or severely underestimate your costs).
I'm not developing apps for iOS, but I'm not sure if I started tomorrow, and released (say) in two months, that it would be financially justified to target 5.1
I still support iOS 5.1 for the same reason on my main app, but it's getting harder to do so. The status bar change with iOS 7 introduced a ton of conditional code for me because iOS 5 doesn't support autolayout and unfortunately that's the easiest way to deal with the topLayoutGuide.
Depends what you mean by "target". You can specify the whatever minimum OS version you want for an app.
You have probably heard something like "[After Feb 1] new apps [...] must be built with the latest version of Xcode 5 and must be optimized for iOS 7."
That only means you must use the latest dev kit and satisfy some other requirements. It does not mean that you need to disable support for older OSes.
It is not trivial to support ios7 with the latest gui elements (ios7 sdk) and also support prior versions. Practically speaking you will need to support only ios7+ after feb1, which for me is a lot of development work which is not worth doing with the income my apps give. I am therefore no longer supporting my apps.
Great points, except for "@2x only." If your app supports iPads, then the iPad 2 and iPad Mini (first generation) are both non-Retina screens and are still available for sale directly from Apple. Given Apple's 3 year support cycles, iOS 10 will be the first iOS that can fully drop support for non-retina displays if the iPad 2 and original iPad mini are discontinued by the end of this year.
Nope, it's an iOS 7 feature. Retina iPads have done this since iOS 5, since that is when the iPad 3 was introduced, but non-retina iPads used non-retina graphics until iOS 7.
Seems more like iOS 7 is the only convenient thing to do. That's fine, but the current title makes it read more like a weak attempt to justify not wanting to support older versions.
There isn't anything in this article that explains why you can't support both. The only sentence about this is "We can’t leverage what iOS 7 has to offer and a lot of the UI is compromise.", which doesn't cite any difficulties they've run into. The only iOS 7 features they mention are UIDynamics and the receding keyboard—the rest are iOS 5/6 features.
I agree that the article could've gone into more depth about the difficulties they faced, but most developers will agree "a lot of the UI is compromise" is the key point. Supporting iOS 6 and 7 visuals at the same time just means your app looks out of place in both versions.
> Supporting iOS 6 and 7 visuals at the same time just means your app looks out of place in both versions.
Assuming you want it to look exactly the same on both. I have an app that offers a flat, stylised look on iOS 6 and a completely native iOS 7 look on iOS 7.
The problem is a lot of iOS 6 apps don't use mostly native UI. The article touches on this when talking about all their custom code because previous iOS components were not as easily customizable. My next update will be iOS 7 only, at which point I plan to drop a lot of custom code and switch back to mostly native UI.
Yes, UIKit only became easily customisable in iOS 5 and the OP's app was written for iOS 3.
But even then you can port it to native UIKit (which is a good idea either way), and then make iOS 7 frameworks optional, and add a few UIAppearance calls for iOS 6. The last two pieces are extra effort that might not worth it for < 30% of your users, but it's still completely possible.
There are some excellent 3rd-party frameworks and libraries for doing spring-based animations that work on previous versions of iOS. My favorite (that I still use and favor above UIDynamics even on iOS 7-only apps) is JNWSpringAnimation which uses CAKeyframeAnimations to do amazing springy, bouncy animations. The same code is wholly portable to Mac apps as well which is an awesome bonus.
Note that Apple now keeps the previous version of the app around for users on older OSes. Of course they won't get any of the upgraded features, but at least there's still something there for them - and you won't have to worry about all that messy code for supporting multiple versions.
My next app updates will also be iOS7 only, since I know the iOS6 version will still be around. Makes it much easier to decide to use newer features.
One open issue is that from time to time a breaking change to our API is needed and a force-upgrade is forced on the app users. We try to avoid it, but it happens.
The next time this happens, it's really goodbye iOS 6 users.
Slightly off topic here. I'm a bit baffled by that app. It's a fugly - it seems like a pre ios 7 app that was resurrected in a few days and isn't very Appley at all. I wouldn't call is skeuomorphic, but it isn't the new(ish) flat look. The main screen's background just looks like someone forgot to include the artwork. Its a flat grey though, so must have been chosen. The clunky FAQ page isn't nice either, and a straight link to a web page would have been nicer IMHO.
Apple only offers older versions of your app to users that have previously purchased it. New users will still get the traditional "this app requires iOS 7" failure message.
I believe you can purchase apps you haven't purchased before. The writer of the article I read on this tried it. I've downloaded free apps whose latest versions weren't compatible on my device, and got the older version that works for my old (iOS 3.2) device a couple of months ago.
You're fortunate you can afford to expend development effort/money on an update that won't bring in any more users. Im still licking my wounds from the app store change that came with ios6, sales are way way down to the extent that significant development work to these apps cannot be justified. With the pre ios6 app store I could make a case for it but not today.
Sheesh. Am I the only one still using a first-gen iPad stuck with iOS 5? Just a couple weeks ago my sister wanted to install an app that turned out to be iOS 7 only. Grr.
No. And I hope there are a lot of first-gen iPads still in use, since the alternative would mean millions of abandoned pieces of hardware, rather than just millions of us abandoned users. If only I'd had the hindsight to stick with iOS 4 - at least my tablet would then be usable without inducing stress, fury, and bitter regret.
I wonder, what do they consider very painful regarding to having this functionality on iOS < 6. Sure it's not just setting a single property, but [UIView endEditing:] and UIScrollViewDelegate protocol was available since iOS 2.
Except he explains that it works like it does in the Messages app. If you're not familiar, the keyboard in Messages slides down/recedes when you start scrolling through past messages so that it's not in the way and you can see more content. Give it a try if you have an iOS device, it's a very useful interaction.
Actually, that doesn't seem very sane to me. Why are we doing additional work for functionality that we already created, and losing support for people on older versions? Sure if you are a making a new app it makes sense to use great new features. It doesn't make sense to delete code that is working and redo it just because the new way is easier. 0 effort >>>> small effort times 10.
While I agree that less code is better, is it the highest ROI on your time compared to actually improving the app, or maybe making a new one? It might break in the future, it might not. What you change it to might break in the future too. Why not wait until it breaks to rip out and rewrite working code?
The sweet point for me has been iOS 6-7 support. There's little that iOS 7 has that I need to use, so a few conditionals here or there haven't been a huge deal (tintColor has been the only significant one). This contrasts immensely with trying to support back to iOS 5 where so many new things were added after (e.g., autolayout) that you end up with huge chunks of redundant code that differ only in the approach taken to get the end result.
My apps' interfaces are entirely customized, so everything looks roughly the same across the major versions. I've shifted to a flatter appearance since iOS 7, but I've held onto certain things from older ones that I like better such as borders on buttons where the button status is not clear from the context, filled toolbar icons (I hate the stenciled ones), and a shadowing level somewhere between iOS 6 and 7.
I was a bit on the fence about iOS versions before because I still have a first-generation iPad (iOS 5.1 maximum) and I wanted to make games for it. I have a new iPhone 5S as well.
I originally wrote game code with OpenGL ES, and then tried very hard to make the same code work on a Mac with regular OpenGL. It took more time than it should have to see results and it wasn’t that fun. About all I can say is that I learned a lot and OpenGL clearly runs efficiently.
After seeing Sprite Kit (Mac OS X Mavericks and iOS 7 only) and working with it, I am now completely devoted to these latest OSes. That framework has solved virtually all of my Mac/iOS parity issues, while allowing code to be almost identical in ways that really impressed me. Sprite Kit requires far less effort and it produces far greater results. About the only downside I see is that there would be no hope of porting my code to something like an Android phone (and I don’t happen to care about that).
It doesn’t hurt that Mavericks is free so about the only device left out in the cold is my old iPad. I decided that I was probably holding myself back by trying to support it anyway; the device is quite slow compared to almost any other iPad. I will likely just buy a new iPad.
I've done the same for the app that I work on, but not because I needed an if-else for the UI code. The biggest problem for me was that every now and then, I'd get a bug that shows up on a device, but not the simulator. If this happens even once, it is one time too many for a small team without a lot of leftover devices to sport old iOS versions on.
"This was one feature we really wanted and implementing this was painful as hell. I can’t believe it’s now just a boolean value away." - So awesome yet so frustrating! haha
I've been programming on a daily basis for iOS even before the SDK came out (ohhh those reverse engineering days...!). Two years ago I left the job and since then I've always wondered what were the relevant changes in the SDK, just in case I get back to programming iOS again. And here we have it!
> When we added pull to refresh to our app there weren’t many apps using this technique and it added a premium feel to our app.
This makes me want to vomit. I can't wait until implementing flashy UI is so trivial and common that shallow things like this don't actually affect an application's perceived value. I don't remember the transition to GUI in the 80s as being as shallow as the mobile app market is.
Seriously though, you contest the idea that an interface with interactions which hide complexity and have been shown to be pretty intuitive could be decisive in how users value a product?
No, I agree that in the current mobile app world UI flourishes really do make a difference in how users perceive an application. I'm hopeful for the day when such flourishes are so common that they are no longer perceived as valuable and we can get back to working on things that matter.
This isn't just a cosmetic thing; it makes it substantially easier to perform an operation (in this case refreshing) and to see the status of that operation.
Don't bet on UX enhancements ever going away, by the way; people come up with new things all the time. Pull-to-refresh didn't come from any platform vendor; it came from a third party Twitter client.
I'm using MOAI. Implementing flashy UI's is so trivial, its not even funny. What I'm finding though, is that its very much better to keep things simple, and well .. for my clients at least, its working.
Pull to refresh isn't flashy, shallow or trivial, and it shouldn't bring on emesis: It is a simple, convenient user interaction that saves putting a big refresh button or the like.
Done with (IIRC) PhoneGap, AngularJS and ClojureScript. The actual utility as a weather app is debatable (I like it), but the UI is beautiful and responsive, especially considering it's PhoneGap!
I think a reasonable prime directive for API developers is that if hardware can do something then software shouldn't be prevented from running on it. Sure there are arguments for speed/responsiveness but most of these are straw men because the real bottlenecks are somewhere else (reading from flash memory, internet lag etc). The only real hardware constraints I hit daily are limitations in OpenGL or limited ram (which wouldn't be an issue if proper virtual memory had been in place from the beginning so we didn't have to use mmap).
This kind of software "truthiness" is taking us further and further from computer science.