Wednesday 21 September 2011
I originally wrote this post last week, and had planned to put it up over the weekend once I’d had time to clear out a couple more bugs for a final release tag. In the light of recent events, I’ve decided it’s probably best to make my intentions clear now and just call it a day.
I have never claimed to be a great programmer, and most likely I’ll never be one. I built a library that I found useful, put it up for others to use, and tried to help people with their problems in my spare time.
I’d love to be able to say I that I've got plans for other open source projects, but given the vitriol I’ve seen over the last couple of days, I don’t think I want to do this anymore. Life’s too short.
After giving it a lot of thought over the last few weeks, I’ve decided that I’m not going to continue working on ASIHTTPRequest in future.
I hope this won’t come as too much of a surprise given the slow rate of progress recently. However, I know some people will be disappointed, so I wanted to talk briefly about why I’ve made this decision.
I’m aware that the ASIHTTPRequest codebase has become over-complex, and that some of the architectural decisions I’ve made over the years have made it harder to maintain and customise. The monolithic class design, dependence (for legacy reasons) on CFNetwork rather than the higher level APIs, and the fact that it tries to cater to too many different usage patterns have all made it harder to enhance or extend. Looking at how much the Obj-C landscape has changed over the last few years, and ahead to stuff like ARC, I’m not certain this library is the right base to build on.
ASIHTTPRequest was created because I wanted a queue-based HTTP networking API. I wasn't able to find one, so I wrote my own. These days, there are lots of modern alternatives to choose from.
It’s been a while since I actually used ASIHTTPRequest in my own projects, and it has been tough to motivate myself to work on it, knowing I’m only trying to scratch somebody else’s itch.
Most importantly, ASIHTTPRequest has become way more popular that I ever anticipated, and frankly I just can’t keep up with all the email. My apologies if I didn’t get to your pull request or bug report. My day job is demanding, my spare time finite, and most of all I’d just like to get back to working on my own stuff, having fun writing code.
A big thank you!
The ASIHTTPRequest documentation has had over 60,000 visits in the last month, and almost 2 million page views in the last year. ASIHTTPRequest is the second most popular Objective-C project on github, by both watchers and forks, and it’s in the top 50 watched projects on the whole of github.
I feel honoured to have been part of something that got this popular. I’m incredibly grateful to all the amazing developers who’ve helped fix my broken code, patiently explained the intricacies of run loop programming, or advised on the care and maintenance of the lesser-used HTTP status codes. I’m extremely grateful to all those who’ve written to me to say thanks, and those who’ve been kind enough to send money to me or to donate to charity. Most importantly, I’d like to congratulate all the people who’ve used ASIHTTPRequest to make such amazing apps, a small selection of which are listed here.
Great. I’ve invested all this time in your library - now what?
One option is to continue using ASIHTTPRequest. The code will remain available. If there’s any interest, perhaps someone else will take over as maintainer. If it works for you now, as far as I know it will continue to work for the foreseeable future. Honestly, I think now is the time to start looking elsewhere.
If you’re starting work on a new application, there are many other libraries out there to choose from. I’m afraid I can’t speak with any authority on which is best, but these are the ones I hear about most often:
From the people who make Gowalla. A general purpose HTTP lib, built on modern patterns, actively developed. AFNetworking has been gaining a lot of traction over the last few months, so it’s a good bet that it’s going to be around for a while.
A lightweight HTTP lib, actively developed. Also comes in an ARC-flavoured variety.
For applications that talk to REST-based services, lets you map remote objects and store them in CoreData. It sounds like this could replace a lot of code in the right circumstances.
AWS SDK for iOS
Amazon S3 support has been one of the most popular ASIHTTPRequest features. These days Amazon offers their own SDK for iOS, providing access to S3, CloudFront, SimpleDB and other Amazon cloud services.
The highest-level API listed here. Provides a simple way to upload content to a variety of services, and a UI to make it super easy to drop into your projects.
From the people who make your cellphone. Built by smart people, lightweight, actively developed. :)
Posted by Ben @ 9:41 PM