Hacker News new | ask | show | jobs
by ianstallings 4827 days ago
Frustrated with just iCloud? No I'd go further. I'm frustrated with the whole iOS platform. It's like writing an app in the 1990s. Sure it works. But it's painful as hell. So much so that I've decided this latest project on iOS was probably my last unless something big changes. And just for the record I have a few flagship apps in the app store with millions of active users and I've worked quite extensively with the platform. So it wasn't a case of trying it and then giving up in frustration. It's more like watching your peers blow past you because your toolset is from yesterday and their's is from tomorrow.
5 comments

This sounds unfair. I have been developing for the platform right from the start and I am very happy about the whole toolchain. My only real gripes are with the review process, nothing else. (I have never used iCloud as a developer, so I can’t comment on that.)
What is this toolset of tomorrow your peers are using to blow past you, if you don't mind me asking?
I'm not OP, but one key complaint I have is that there isn't much in the way of testing. Unit tests are somewhat well-developed, integration testing is a complete mess.

Much of the iOS community still creates software by the seat-of-your-pants model (i.e., write code, boot it up, does it look like it works? ship it). Engineering rigor is still a concept relatively foreign to iOS, and it shows. Apple has little-to-no built in support for anything that smells like TDD.

When you're talking to your server-side peers who have good test coverage, good regression testing, and more generally just sound engineering processes, you can't help but get bit jealous.

I was a test zealot all my academic life (it's perfect for building compilers). But in my experience as an iOS contractor, most apps are polished Thin Clients for a remote backend. Which incidentally is the only thing that Objective C is really awesome for. As soon as I write any interesting logic, it is actually a bug, because it should be pushed into the backend. After all, it must behave the same on Android and on the web client.

That leaves us with bug classes like: multithreaded Core Data misuse, "UI can be broken by using three fingers exactly like this", popping a navigation controller as a reaction to a network operation while it is currently being pushed (based on network latency), networking code that does not properly handle session extensions while multiple concurrent threads are in progress, labels use the wrong font, code uses UIKit on the main thread, ...

Good luck writing tests for that and being more cost-effective than code reviews & manual testing.

I feel like this has less to do with iOS and more with the challenges of testing client-side code vs server-side code. Even Android projects are quite tricky to test despite Java having a strong heritage when it comes to unit testing.

Part of it just comes down to the way the GUI framework (whether it's Cocoa or Android) cuts across all aspects of the application, making it difficult to isolate individual components to test. Add to that a bunch of asynchronous code (which is almost always necessary when you start dealing with the database/network/filesystem) and you have something quite tricky to automate testing for.

Most of the server-side code I've dealt with has been an order of magnitude easier to test, but I think a lot of that comes down to the nature of their respective domains.

Actually this is still the reality in most corporations out there.

I seldom see TDD, unit testing, continous integration and so on outside the startup world.

Most of the projects I do in the enterprise start agile and slowly evolve to a mix of agile and waterfall. When stress for delivery raises, many entrerprise project managers just kill unit testing related tasks.

I mainly mean my web-developer peers. Their toolsets are moving so rapidly that I see them surpassing us in the next 2-3 years unless we make some huge improvements. Just my opinion.
Web development is quite a different beast. There’s huge amount of life and struggle in the ecosystem, but only a fraction of that pushes the platform forward. I am relieved every time I move from some web development work back to plain, sane Cocoa APIs.
Which toolsets do you feel are the most exemplary of this?
I'm not a developer, but I'm finding this conversation very interesting given the original concept for iPhone apps was to have web apps only.

    And just for the record I have a few flagship apps in the app store with millions of active users
Source please.

     because your toolset is from yesterday and their's is from tomorrow
This is why I don't believe your first point without sources to verify. Eclipse+Android SDK is hardly from tomorrow. Windows 8 possibly. What else does that leave? Nada.
Oh okay so because I think the toolset is crap you want to call me out. No problem. Here's two that have over a million users below.

Oprah Magazine (1M+ subscribers): https://itunes.apple.com/us/app/o-oprah-magazine-archive-dec...

Esquire Magazine (1M+ subscribers): https://itunes.apple.com/us/app/esquire-magazine/id433020707...

Those are just two that I have built. I have an enterprise platform that I architected from the ground up that companies like pfizer use for it's whole workforce. I have ones written for Disney, Hearst, GE, MaryKay, Hallmark, Sesame Street, etc, etc. The one I'm building now is ready to scale to ~5M users right out of the gate and I believe we will succeed.

Now put your apps up and let me pick through them and tell you why you're wrong because I just don't believe your work is credible.

Hey man, not sure how worried about your info getting out there, but generally when people troll for 'proof' here I ignore it. Essentially it's just one more avenue for people to use against you, especially in regards to linking a name/identity to work and I generally (personally) try to keep them separate. Your choice, just something to think about... also, don't feed the trolls etc ;)
A valid point I'll have to keep in mind next time. I do use my real name here. I should probably think about changing that.
What’s wrong about being a real person with opinions? That is, unless you behave like an idiot, which is certainly not the case here.
Maybe he means Ubuntu for mobile? I kid, I kid!

Having started working on Android recently, if Android is tomorrow, the future sure is dystopian.

Well, I don't really agree, but I will say that the iOS testing world has a lot of catch-up to do. Ruby developers (as an example) have much, much, much better testing tools. There is no doubt about that. The hoops you have to jump through to create acceptance tests are quite annoying, especially when you can't even test UIAlertViews, or basic things like Airplane Mode...
I don't think that's a fair comparison. Testing GUI code has always been a lot trickier than testing backend code, and iOS apps tend to be GUI-oriented while Ruby projects tend to be backend-oriented.

That's not to say that the iOS testing tools are great, but I've never had a particularly pleasant time testing GUI code on any platform.

True, Ruby doesn't usually get used for GUIs. But take a look at the Javascript and browser testing tools that are available. Is there anything like Sauce Labs for iOS?
Why not jump into RubyMotion and use these testing tools?

And Apple's WWDC session about acceptance tests using Instruments UI Automation specifically handles UIAlertView.

I think the problem is that iOS apps are getting dumber and dumber while their UI bling gets more complicated/asynchronous. The value of tests is too low for The One Widely Accepted Testing Framework to emerge.

>It's more like watching your peers blow past you because your toolset is from yesterday and their's is from tomorrow.

And what would that "toolset of tomorrow" be? Surely not Android's joke offerings, or Windows 8 same old...

HTML5 and all the surrounding technology is very exciting IMHO. They have the best tools and are quicker to adapt new techniques because of they get to work with a net (the fact that they can rollback quickly if needed). I get a little jealous when I see how quickly they can get something up and running that would take me a few days.
Compared to Cocoa Touch?

I've worked with both and I can say this is just a case of "the grass is greener".

Nothing "exciting" about HTML5 and the Web for people well versed in a mobile framework. The most interesting things are re-inventions of the wheel, only more hacky and less performant.

Plus, since you can use web views in your native mobile app, there's literary nothing (technologically-wise) you can achieve with HTML5 that you cannot achieve with a native framework. The inverse is not true. Anything that requires extensive collaboration with the underlying machine, low latency, ad-hoc connections to interfaces etc is not possible (you cannot write Garageband with HTML for example. And Flipboard or even Clear would have been noticeably slower).

(Except the distribution method of course -- but then again, nowadays people still debate if it's all about native or it's all about the web, so that's like 50-50.)

Yea I tend to agree on a lot of those points. I'm currently working on a native application that does heavy AV compositing and there is no way that HTML5 solution would be as capable.

Mainly the pain points are on the API and the legacy nature of it, and the surrounding crappy tools. I see cool IDEs, testing frameworks, scaffolding/bootstrapping sets and I can only be a little jealous. Sure we have our share, but it's a small slice of where the majority of effort is in the web world.

My hope, crossing fingers, is that one day HTML apps will truly be able to compete across all facets and access native functionality with the same performance as native platforms. Will this ever be the case? I can only hope.

I think the open source toolchain for Cocoa is pretty great. There are hundreds of incredibly useful projects on Github, like RESTKit or CocoaPods or AFNetworking, libraries to ease the pain of Core Data fetches, etc.

ObjC does have a legacy nature, but I think the community is doing a great job of making life easier.

I agree. I would at MKNetworkKit too! I just want more more more! :)