WARNING: This article is over two years old. Lots has changed in that amount of time.
Please see this link for a more up to date and more comprehensive list.
We love open source software here. Have a look at our GitHub profile if you don't believe me. There's absolutely no reason to re-invent the wheel when someone already built the spokes and rubber. We just put it together, modify some things and we've got the wheels ready to integrate into the car we're building.
There's been a lot of activity in open source projects for iOS development. There's even places like CocoaControls.com that feature open source libraries and provide a central place to browse and talk about the libraries.
You may not need all of these libraries for your next project, but here's some of my favorite libraries to use in iOS projects:
ASIHTTPRequest - This is the first on the list for a reason, and I would be remiss if this wasn't at the top of the list. If you are still making CFNetwork requests you need to use this library. It handles every networking task you'd ever want including sending POST data, uploading files, server authentication, synchronous/asynchronous requests, queueing requests, caching, cookies, bandwidth throttling, and anything else you could think of. You can program using delegates or by specifying completion blocks. This is a must-have library for anyone writing iOS apps that use a network connection.
GCDiscreetNotificationView - This is a nice way to display information to the user without being as obtrusive as a modal window. Simple and elegant.
MBProgressHUD - For the times when you need to interrupt the user with information. This is great for download progress meters (using ASIHTTPRequest, of course) and synchronous tasks where the user isn't allowed to interact with the application.
SSZipArchive - Based on ZipArchive, this class provides simple utility methods to unzip files with your iOS application. Great for downloading a set of files from your server and then unzipping them to a specific place in the filesystem. You don't even have to init the class, it provides a singleton object that you can just call to unzip the file where you need it:https://gist.github.com/1216726
EGOTableViewPullRefresh - Ever wonder how you can do the cool "pull to refresh" thing like the Twitter iPhone app? This library makes it almost trivial to add that sort of functionality to your application.
DavidBoyes/SDWebImage - This is a fork from the main SDWebImageproject. This library is great for loading a network image into a UIImageView and retaining it indefinitely. The code uses a hash of the image's URL to cache the image in the application's /Library/ folder. If that same URL is requested by the application at a later date, it loads in the cached version instead of pulling the image over the network. This fantastic category addition to the UIImageView class will make your life a lot easier. Instead of using:
you can simply use
and the library handles everything FOR you (including placeholder images if you want). I forked that project and added some code that fades in the image instead of simply popping it in.
SBJson (aka json-framework) - I won't get into the benefits of using JSON instead ofXML in this post, but this is an overall great JSON framework. I've tried a few others, but this one takes the cake in terms of simplicity for simple parsing operations. All you have to do is init an instance of SBJsonParser, then you can get an NSDictionary by using:
Then don't forget to release the alloc'd parser object from memory. Though don't be fooled by the simplicity... there are tons of methods for reading, writing, and parsing JSON objects.
InAppSettingsKit - Apple has made a Settings.bundle format available to developers so that their app settings can show up in Apple's own Settings app. But what if you want those settings to show up inside your app? Enter InAppSettingsKit. It gives you the ability to generate an almost pixel for pixel representation of the Apple Settings app. You can, of course subclass it like I did in one of my apps so that it matches the look and feel of your application.
ShareKit - This library is quickly becoming the de-facto standard for developers that want to give their users the ability to share things from within their application to social networks. Your users can share images, text, and even files (if the service supports it). All the big services are supported like Twitter, Facebook, Instapaper, Tumblr, and more... but the great thing is that since it's completely open source, any developer can write a plugin for any service and utilize the ShareKit framework's underlying code.
Flurry - (non-open source) This one isn't so much a library but a great service that provides a library for you to use. Flurry is a developer's best friend when it comes to tracking application usage (anonymously, of course) and statistics. You can set up triggers and events to see what users are interacting with certain portions of your application. One great thing that Flurry does is intercept uncaught application exceptions (i.e. "crashes") and tells you what type of device it was on as well as the crash message, though the crash logs aren't as comprehensive as something more complex like CrashKit.
I hope you've enjoyed this list of libraries. I have used every one of these in an iOS application at some point and they've saved me innumerable hours of coding so giving back to the community in the form of code or publicity wherever possible is a must.
Do you have a favorite iOS library you use all the time? Let us know in the comments!