Update: THIS ARTICLE FROM 2015 IS OUTDATED. FIND THE NEWEST 2019 VERSION ON MY BLOG:
I love open source.
And I love the developers, who spend their valuable private time creating amazing things, which then they share with other people and don’t want anything in return. Open source authors and contributors, you are awesome people. Thank you for all your work.
So from my daily work on my own apps, here I’ve selected favorites from my favorites iOS open source libraries. Order of these projects is totally random, all of them are simply awesome.
The overwhelming majority of the libraries support CocoaPods, so adding them to your Xcode project is a breeze.
On the bottom of the article you will find a TL;DR version — a simple list with only titles and links to the projects. If you’ll find this article useful, share it with your iOS dev buddies. Good things need to spread.
This should be a standard, built-in into iOS way of dealing with empty table and collection views. By default if your table view is empty, the screen is empty. It’s not the best user experience you can have.
With this library you just need to conform to a few protocols and iOS will beautifully take care of your collection view and display proper, good looking to user messages. No brainer for every iOS project.
DZNEmptyDataSet - A drop-in UITableView/UICollectionView superclass category for showing empty datasets whenever the…
Need a simple, nice looking and working calendar component for your app? Now you have — PDTSimpleCalendar is probably the best calendar component for iOS. You can customize it in many ways, both working logic and looking.
PDTSimpleCalendar - A simple Calendar / Date Picker for iOS using UICollectionView
Core Data is simple, they said. It’s nice and simple, they said. Huh, really, Apple? A ton of boilerplate code added to each project isn’t very elegant and simple. Not to mention adding, removing and updating a lot of entities, saving context, creating different Core Data stacks for different environments etc, etc. I like Core Data very much of course, but Apple really could simplify it in a little better way — the MagicalRecord way.
MagicalRecord works like a wrapper for Core Data and hides from developer all non-relevant stuff. If you’ve ever worked with active record pattern (e.g. Ruby on Rails), you’re in home. Really, really recommended library if you are using Core Data in your app.
MagicalRecord - Super Awesome Easy Fetching for Core Data 1!!!11!!!!1!
If you are reading this, odds that you’re a better programmer than a designer are very high. This is something for you.
Chameleon is a color framework for iOS. It extends UIColor with beautiful, modern flat colors. It also gives us ability to create color palletes from color defined by us. It can do many other things, explore readme. If you want beautiful application, definitely add this library to your project.
Alamofire is an elegant networking library written in Swift. Have you ever been using AFNetworking? Alamofire is it’s younger brother. Younger and more stylish, of course (AFNetworking is written in Objective-C).
Need to do networking stuff like downloading, uploading, getting JSONs etc.? Alamofire is for you. 8000 people on GitHub cannot be wrong.
Don’t you think that standard UITextField is a little boring? Me too — so say hello to TextFieldEffects! I won’t write too much, I’ll just show you a few examples what this library can do:
Yep, these are simple drop-in controllers. You can even make use from IBDesignables in storyboard!
TextFieldEffects - Custom UITextFields effects inspired by Codrops, built using Swift
Have you ever created a camera app? If not, you surely will after meeting this library.
GPUImage provides us a GPU-accelerated camera effects (both images and video) with blazing speed. There are hundreds of apps in the App Store that use this library — and one mine’s too:
8869 stars on GitHub and still counting.
GPUImage - An open source iOS framework for GPU-based image and video processing
What’s the best way to get more reviews in the App Store? I don’t have hard data to answer that question, but if I had to guess, I would say that simple asking the user. Maybe it’s a little oldschool way to do this— most developers now create custom in-app alerts — but if you don’t have time or you don’t want to implement everything from scratch, it’s better to use iRate than not to. And this is iRate exactly — a small library that you include in your project and forget about asking users for review — iRate will do it for you, at proper time.
iRate - A handy class that prompts users of your iPhone or Mac App Store app to rate your application after using it…
Love or hate singletons, but in this case managing Game Center is just easier with a little help of our best known anti-pattern (you have only one Game Center in your game, right?).
To be honest, vanilla-managing Game Center in iOS isn’t that hard, but with this library is just simple and fast. And better is the enemy of the good.
I’m using this in one of my games and it’s a pleasure experience.
10. PKRevealController 2
This is a real gem here, one of my most favorited iOS control. PKRevealController is a slideable side menu (left, right or both), which slides with a help of your finger (or just by pressing the button, but it’s not as much cool as sliding).
I’ve tried a few other libraries providing this kind of control and PKRevealController is just the best. Very easy to setup, highly customizable and recognizes gestures very, very well. It could be included in iOS SDK as a standard control, really.
Introducing PKRevealController 2 - The second version of one of the most popular view controller containers for iOS…
Have you ever used Slack iOS app? If you are working in a bigger software company, probably yes. For these people who haven’t — Slack rocks. And Slack’s iOS app too, especially for the great, custom text input control… which here you have — a code ready for use in your app!
Self growing text area? Check.Gestures recognizing, autocompletion, multimedia pasting? Check. Easy drop-in solution? Check. What else can you possibly need?
SlackTextViewController - A drop-in UIViewController subclass with a growing text input view and other useful messaging…
RETableViewManager will help you with dynamically creating and managing your table views, everything in code. It deliver us predefined cells (for bools, texts, dates etc. — check screenshots below), but you can also create your custom views and use them along with the default ones.
All of this stuff you can do in storyboard without help of this library, but sometimes code is simply better than visual editor.
RETableViewManager - Powerful data driven content manager for UITableView.
Useful library to deliver better user experience by informing user about needed system permissions before asking user for them. Higher acceptance rate -> more users actively using the app -> better retention -> better stats -> more downloads. Highly recommended pod.
PermissionScope - A Periscope-inspired way to ask for iOS permissions
This image is loaded properly, don’t wait longer and don’t refresh the page. This is exactly how SVProgressHUD looks like in your app. If you need custom waiting indicator, here you have (the best probably) one.
SVProgressHUD - A clean and lightweight progress HUD for your iOS app.
Font Awesome is awesome and with this library you can easily add the font to your project and use it in many ways.
FontAwesomeKit - Icon font library for iOS. Currently supports Font-Awesome, Foundation icons, Zocial, and ionicons.
Love auto layout? You should!
At least when creating it in storyboards.
Creating constraints in code is painful without some help, but luckily SnapKit is here and with it on board you can code your constraints in easy, declarative way. Check it out.
Another UI component, that is so often seen in many apps that Apple should probably think about including something similar in standard iOS SDK. Swipeable table cell, this is the best description of this pod. The best one.
These are just 3 animation types, there are more of them. Explore readme.
MGSwipeTableCell - An easy to use UITableViewCell subclass that allows to display swippable buttons with a variety of…
Unit testing in Swift, for Swift (ok, for Objective-C too), integrated with Xcode. If you are Objective-C fan, I would recommend Specta instead of this, but for Swift Quick will be probably the best shot.
In-app purchases brings us a lot of boilerplate code, which this library get rid of and give us a simple wrapper for most common tasks related to money transfer from iOS user to your (or your company) wallet.
OK, here we have a little monster.
ReactiveCocoa isn’t a rather small, drop-in project like the others on this list. ReactiveCocoa brings us a totally different programming style/architecture based on signals and streams of values. It’s totally mind blowing and first you need unlearn what you’ve learned to understand how this work. It’s not an easy task, but rewarding.
This isn’t a proper place to teach you ReactiveCocoa, but I’ll give you good resources if you are interested:
Getting Started with ReactiveCocoa
Note: This is going to be a slightly more technical post geared toward our friends in the iOS developer community. In…
Languages are living works. They are nudged and challenged and bastardized and mashed-up in a perpetual cycle of…
ReactiveCocoa Tutorial - The Definitive Introduction: Part 1/2
As an iOS developer, nearly every line of code you write is in reaction to some event; a button tap, a received network…
ReactiveCocoa - A framework for composing and transforming streams of values
JSON parsing in Swift made easy.
Animations made easy, chainable and declarative.
Load custom fonts to your app easily.
FontBlaster - Programmatically load custom fonts into your iOS app.
Cross promoting your apps is one of the best marketing strategies you can implement in them for free. And with this library it’s so easy that you can’t longer justify not doing it — add TAPromotee to your podfile, configure and enjoy more downloads for free.
Do you load a lot of JPEGs in your app? With Concorde you can do it in a bit better looking way. A progressive way.
Little helper library to manage Keychain access.
KeychainAccess - Simple Swift wrapper for Keychain that works on iOS and OS X
And last but not least — the iOS charts library! It’s so useful and beautiful, that I won’t write here too much — just scroll below and see what you can do in your app with this project.
Yes, everything is available as a drop-in (ok, maybe “code-in”) component.
Unfortunately there is no CocoaPods support yet, so you need to manually drag the project to your Xcode workspace.
TL;DR list of all these libraries for quick access:
- DZNEmptyDataSet [UI, empty table view solver]
- PDTSimpleCalendar [UI, drop-in calendar component]
- MagicalRecord [Core Data helper implementing active record pattern]
- Chameleon [UI, color framework]
- Alamofire [Swift networking]
- TextFieldEffects [UI, custom looking text fields]
- GPUImage [fast image processing]
- iRate [getting user ratings]
- GameCenterManager [easily manage Game Center]
- PKRevealController [UI, slide side menu]
- SlackTextViewController [UI, highly customizable custom text field]
- RETableViewManager [create table views dynamically from code]
- PermissionScope [UI, nicely pre-asking user for system permissions]
- SVProgressHUD [UI, custom waiting spinner]
- FontAwesomeKit [easily add Font Awesome to your project]
- SnapKit [easy auto layout in code]
- MGSwipeTableCell [UI, swipeable table view cells]
- Quick [Swift unit testing framework]
- IAPHelper [In-App Purchases helper wrapper]
- ReactiveCocoa [FRP framework]
- SwiftyJSON [Swift JSON library]
- Spring [Animation framework]
- FontBlaster [easily load custom fonts into your app]
- TAPromotee [cross promote your apps with drop-in view]
- Concorde [download and decode progressive JPEGs]
- KeychainAccess [manage keychain easily]
- iOS-charts [beautiful charts library]
Thanks for reading, it was a long list! If you think it was worth creating, please share it by clicking the Share button below the article — more people will benefit from it. Also if you’re a Medium user, please click the Recommend button — it will inspire me to create more iOS development articles!
You can also follow me on Twitter, where I mostly write about iOS development.