Skip to content

pranavlathigara/awesome-iOS-Library-Curator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

My Curated Awesome iOS Library

A review of each project I "Star" On Github.

As you can tell from my profile, I "STAR" more projects than prety much anyone else (I have a problem?) This document is an attempt to break down each and every one of these projects. Note that I primarily use Obj-C and this list clearly reflects that. I will make a seperate list for Swift projects

Note: Please also see these other awesome lists! AwseomeUI, Awesome iOS, Awesome iOS Charts, Awesome iOS Animation, Awesome iOS Top 1000 , Awesome_WatchOS, Awesome Swift, and this other Awesome Swift . A huge thanks is also in order for Cocoapods and CocoaControls - I wouldn't be the dev I am today without learning from a few projects I picked up from each of those sites.

Please also know this was not meant to discredit any other lists!! This list is just my own expanded version of those, so that I can put my own 2 cents on each library. It was created to help me remember what I have seen on Github - there is an incredible open source community out there that could really save you tons of time if you use it right! Hopefully this list can be a bit helpful for you

This guide was created using Prose, which utilizes Markdown style syntax.

Index

Here's how this list is going to be categorized:

  • Essential Projects
  • ReactiveCocoa / FRP / MVVM intro
  • ReactiveCocoa Projects
  • Library and Frameworks
  • Plugins
  • Good Websites
  • My Personal Favorites
  • Example Projects (to be broken down furthur)
  • Awesome iOS Reads

First, the gold standard libraries. The essentials --- You NEED to know about these !! You're likely to include a few of these in your own iOS projects

  • AFNetworking: Probably the most "starred" iOS project on Github, and for good reason. AFNetworking wraps most of the complicated NSURLSession / HTTP / Core Data into one easy to use library.
  • ReactiveCocoa: If you haven't heard about this one, well, you're in for a serious treat. This lib makes your iOS code Functional and Reactive. Find out more from their documentation on their github page or from their website
  • Mantle: A fantastic lib for creating Model objects in iOS. Normally, this requires a ton of boilerplate code. Now, it doesn't have to!
  • GPUImage: The single best lib when it comes to editing images.
  • POP Easily the best UI Lib ever built for iOS. Built by Facebook - it provides and alternative to working with the super obnoxious CoreAnimation and UIKitDynamics libs. Do cool spingy stuff!
  • RESTKit: A fantastic library for making REST type requests in iOS with WEB services relatively painless. It provides a powerful object mapping engine that seamlessly integrates with Core Data and a simple set of networking primitives for mapping HTTP requests and responses built on top of AFNetworking. It has an elegant, carefully designed set of APIs that make accessing and modeling RESTful resources feel almost magical.
  • MagicalRecord: Inspired by Martin Fowler's ActiveRecord pattern, where data is stored in relational databases, Magical Record is a lib that simplifies all of your Core Data code. With MagicalRecord, database and object communication is made a heck of a lot easier. Which is great, because I personally get headaches wrapping my head around Core Data. Reminds me of R.O.R.'s ActiveRecord response to CRUD, using an NSFetchedResultsController
  • Masonry: You got autolayout issues? Don't like using storyboards? Hate autolyout code? (I know I do!) Use this library instead!
  • Objection: Dependency Injection in objective-c made so much easier with this. A great great lib that fixes one of my least favorite parts of the ojective-c language.
  • Typhoon: Another D.I. framework that people really really love
  • Specta: A light-weight TDD / BDD framework for Objective-C & Cocoa. This makes testing your code a piece of cake
  • Expecta: A matcher framework that works fantastically with Specta. expect(expecta).to.beAwesome() for testing your ReactiveCocoa code
  • OCMock: Library for easy creation of mock objects
  • KIF: Keep it functional with KIF. A great great lib for UI testing and continuous integration testing
  • PonyDebugger: Note- I added this because it looks awesome. But still testing and need to verify its awesomeness. Pretty much lets you monitor network activity with Chrome Developer Tools
  • CocoaLumberjack: Note: see PonyDebugger. But looks easy to use and awesome. I've been using Aspects up to this point but will start looking in this direction! According to the docs, "In most cases it is an order of magnitude faster than NSLog."
  • FLEX: See PonyDebugger. FLEX looks like an ultra awesome UI debugging tool built by Flipboard. Possibly outdated? Will investigate
  • CocoaAsyncSocket: Webscokets done right in iOS
  • CanvasPod: Really cool addition to Xcode lets you animate your stuff in interface builder WITHOUT running your code! Saves a heck of a lot of time

Here is a list of my favorite iOS blogs and websites

  • NSHipster
  • Objc.io
  • raywenderlich.com
  • Yalantis (probably the best iOS contractors out there)
  • Atomic object (I find myself on that site pretty often)

Here is a list of some high quality iOS reads on how to make some high quality stuff

ReactiveCocoa, Functional Reactive Programming, and MVVM isn't easy to understand (especially for an Object Oriented developer), so here's a few good things to read first (I've read a lot of these)

  • Zweitag FRP Breakdown: Before you jump into RAC, it's probably a good idea to learn a thing or 2 about what functional programming really is
  • RXMarbles: Really cool demonstrations of reactive programming operators in RX
  • RX Website: This pretty much gives a visual representation of ALL the reactive operators. Remember, RX came before RAC, and a lot of major RACStream and RACSignal methods have an RX equivalent. For example, flattenMap corresponds to SelectMany (in LINQ talk) or FlatMap in RX talk. Dont forget that an Observable is pretty much a Signal and an Enumerable is pretty much a Sequence
  • Atomic Object Bunch of articles from a really respected iOS development consultant group
  • Yalantis Reactive Programming Objective-C: Some great examples and visuals are abundant
  • How I Learned to Write Custom Signals in Reactive Cocoa: RACSignal Tutorial
  • ifNotApps: Great overall breakdown. Comes with this practice project which has tons of various exmaples RACExample
  • ExpressiveReactiveCocoa: Before you do anything RAC related, make sure to give this presentation a peak!
  • RACDesignPatterns: Definitely not the best site in the world, but I thought it was worth a read through. Definitely a conecpt that needs to be expanded on
  • RAC Performance: Investigation of RAC performance
  • RAC + MVVM introduction: One of the clearest write-ups I've ever seen. Great visuals
  • Modern Concurrency: Erlang, Scala, Go, Clojure: Really good presentation about what makes functional programming awesome in other languages. Let me just try to summarize quickly with some talking points
    • Remember, concurrency is not parallelism!
    • Also, locks are awful.
    • "Actor" is a state (Scala) VS. passing state as an argument (Erlang).
    • "Rough analogy: writing to a file by name (process, Erlang) vs. writing to a file descriptor (channel, Go)." (c) Rob Pike

    • Why functional programming matters in Clojure: Side-effect free functions and Deterministic functions/calculations
    • There is no silver bullet -- Use most natural approach for your technology / OP (there are many STM implementations, but in Clojure it's idiomatic and part of the core) -- Look deeply into your domain (presenters usually use most convenient case(s) to tell about functionality) -- Use "unusual" approach but remember that on this way only conventions rule If you need distributed concurrency - look at actors
    • For Scala developers from Jonas Boner : Start with deterministic, declarative, immutable core -- Add indeterminism selectively (actors) -- Add mutability selectively (STM) -- Finally: add locks and explicit threads -- check out these slides
  • twocentstudios: a friendly, project based introduction to RAC
  • RAC TableView Binding: An exploration of using RAC to update the contents of a UITableView
  • Ray Wenderlich: Some people like these
  • Ash Furrow Video: Great presentation by one of RAC's leading voices
  • Cocoa Samuri: Introduction that everyone is referring to
  • Reactive Cookbook: Cookbook for a few reactive cococa things. Comes with this example
  • Bi-directional data bindings with RACChannel: If you want to really push your knowledge of RAC, this is an interesting read
  • RAC Changelog: You've probably already read the RAC documentation (highly recommended). However, you probably haven't read this
  • Reactive Cocoa and Ruby Motion: If you HAVE to use Ruby Motion, you might want to check out this set up guide for getting your RAC code up and running

ReactiveCocoa should transform EVERYTHING when it comes to writing iOS code so here's a bunch of projects that should make your RAC transtion a little bit smoother

  • Functional Reactive Pixels (FRP): A great project from the zen master Ash Furrow. Featured in his book

  • ExpressiveReactiveCocoa: Before you do anything RAC related, make sure to give this presentation a peak!

  • RACAction: Make your RACCommands look like Swith and RAC 3.0 's RACAction!

  • 101 RAC Samples: 101 different examples of using RAC :) I;m pretty sure that this is inspired by 101 RX Samples

  • Bizhi: the holy grail of example projects. uses objection + reactivecocoa (my favs) + AFNetworking + UICollectionView

  • Typhoon + Core Data + RAC: The holy grail for those who prefer Typhoon over aObjection

  • RateStuff: Another RAC + Typhoon example

  • Firebase + RACExtensions: a lib that adds extension abilities to Firebase. I find this ultra awesome for dynamic user interfaces in need of live updates

  • UIGestureRecognizer-RACExtension: Adds UIGestureRecognizer extensions to RAC

  • ReactiveCocoaLayout: an awesome lib for creating animations with ReactiveCocoa

  • ReactiveViewModel: a library that shows, by example, how to use the MVVM design pattern

  • ReactiveCoreData: Below is an example of how this lib can be used. ReactiveCocoaLayout brings RAC code to the most obnoxious parts of iOS ibrary (I'm looking at you, autolayout!)

          RAC(self.filteredParents) = [[[[Parent findAll]
            where:@"name" contains:filterText options:@"cd"]
            sortBy:@"name"]
            fetchWithTrigger:objectsChanged];
    
  • CETableViewBinding: A library that makes the somewhat overwhleming task of using RAC with UITableViews less obnoxious

  • Bikes: A great example project for proper use of the MVVM pattern built by some guy over at TimeHop

  • Reactive+iBeacon: Very Very cool lib that makes your iPhone discoverable in an NFC environment

  • MMPReactiveCoreLocation: CoreLocation annoyances made less annoying with RAC

  • LibExtobj: This is a library that gives you some cool little additions, most notably @weakify(self) and @strongify(self)

  • OctoKit: A massive project undertaking from the makers of RAC. A good project to look at if you need ideas on RAC

  • Artsy/Eigen: From one of RAC's biggest supporters, Ash Furrow

  • *RACCommandExample: An incredibly insightful example project that accompanies this blog post

  • AFNetworking-RACExtensions: Incredibly helpful RACifying AFNetworking code! Would be pretty difficult to build by yourself (check out this blog post too)

      AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
      manager.requestSerializer = [AFJSONRequestSerializer serializer];
      manager.responseSerializer = [AFJSONResponseSerializer serializer];
      [[manager rac_GET:path parameters:params] subscribeNext:^(RACTuple *JSONAndHeaders) {
      		//Voila, a tuple with (JSON, HTTPResponse)
      }];
    
  • SKPKeyboardAwareness: Aha! Now we really can see some power of RAC. This lib uses it to understand the presence of a keyboard (which is really annoying ususally) // shpka_rac_notifyUntilDealloc is our own convenience method that returns // a signal with a notification that completes when the receiver deallocates. RACSignal *keyboardSignal = [self shpka_rac_notifyUntilDealloc:UIKeyboardWillShowNotification];

      // viewSignal is a signal that fires whenever a UITextField or UITextView becomes first responder.
      RACSignal *viewSignal = [RACSignal merge:@[
      [self shpka_rac_notifyUntilDealloc:UITextFieldTextDidBeginEditingNotification],
        [self shpka_rac_notifyUntilDealloc:UITextViewTextDidBeginEditingNotification]]
      ];
      // The two signals above, combined in a ‘zip’, meaning that one of the zipped signals
      // will wait for the other before combinedShowSignal is fired.
      RACSignal *combinedShowSignal = [RACSignal zip:@[viewSignal,keyboardSignal]];
    
  • MVVM iOS Example: Solid introduction to the MVVM design pattern

  • ReactiveCocoa-IO: Use RAC for file IO!!

  • RAC-Parse: If you're dumb enough to use Parse, then you better use RAC - you're gonna need it!

  • RAC-Example: Another example. Nt bad

  • RAC-Playground: Someone's playground project

  • Expecta+RAC: LOVE THIS. Expecta is the testing framework that's great for MVVM. It only makes sense to add RAC support!

  • LLRreactiveMatchers: Just like the one above. LLReactiveMatchers should be able to cover most of the reasons you want to test Signals. One matcher = One Subscription, n Matchers = n Subscriptions. Tests that compose on top of Subjects should use LLSignalTestRecorder and expectations should be made on the recorder.

      	NSMutableArray *sentValues = [NSMutableArray array];
      	NSArray *expected = @[@0, @1, @2];
      	BOOL hasCompleted = NO;
              [signal subscribeNext:^(id value) {
          [sentValues addObject:value];
      	} completed:^{
          hasCompleted = YES;
      	}];
      	expect(hasCompleted && [sentValues isEqualToArray:expected]).will.beTruthy();
    
  • RAC+BLE: RAC support for Buletooth low energy communication with core bluetooth

  • Simple Weather: Awesome test project that uses RAC and Mantle

  • RAC+RestKit: RAC support for RestKit- awesomeness. RestKit is a framework for consuming and modeling RESTful web resources on iOS and OS X

  • Ash Furrow Func Reactive Demo: Because ash furrow. A small demonstration of how to use ReactiveCocoa in iOS applications

  • RAC+Healthkit: Because it's awesome to get live health updates

  • RAC+Pull-To-Refresh: Demonstrates networking, JSON parsing, displaying in a tableView and implementing pull-to-refresh using ReactiveCocoa, also laid out using MVVM pattern

  • RAC+Accounts Framework: RACSupport for Accounts

  • RAC+AlertAction: Ash Furrow made it. Pretty useful for this scenario

  • RAC+Notification: RAC for push notis

  • RAC+Reachability: Needs work but you get the idea

  • Loverly: AFNetworking, ReactiveCocoa+MVVM, Pop

  • RAC+Evernote: For the Evernote SDK

  • RACSnippets: Various RAC Snippets. This project is really really good. Possibly my favorite RACExample project. It has a whole bunch of different cases in which you might use RAC. These cases are listed below

    • Use 'then' and 'take'
    • Simple MVVM
    • Notification with RAC
    • UITableView and reloadData
    • Waterfall (with SDWebImage)
    • RAC and RACObserve and map
    • use 'tryMap'
    • Repeat after TimeInterval
    • RACCommand
    • Auto Fetch access token
    • Use TakeUntil with Cell
    • Deal Multiple Errors
  • RAC+PullToRefresh: Refresh control written in RAC

  • C-41: Yet another fantastic Ash Furrow project. This guy seriously knows his stuff. This project is great not only in it's completeness, but also because it is fully tested with Expecta, Specta, and OCMock

  • Reactive Cocoa Playground: Made by the guy who made that highly quoted MVVM article. Lots of really good examples

  • RAC Ruby Motion: An example project for these "special" developers

  • ReactiveCocoaExample: Good prohect that shows how to use RAC with a UISearchBar over a UITableView

Wow - you might be saying to yourself... "THERE'S SO MANY PROJECTS!" OKAAY. I'LL LIST MY FAVORITE ONES IN ORDER
RAC Example Projects
  1. RACSnippets
  2. Functional Reactive Pixels (Ash Furrow)
  3. C-41 (Ash Furrow)
  4. RACExample
  5. 101 RAC Examples
  6. Artsy/Eigen (Ash Furrow)
  7. Func Reactive Demo (Ash Furrow)
  8. RACCommand Example
  9. Bizhi
  10. Reactive Cocoa Playground
  11. Bikes
RAC+Extensions
  1. AFNetworking + RACExtensions
  2. Expecta + RAC
  3. CETableViewBinding

Recently I've done a few projects that involve Payments, iBeacons, and PassKit. Make sure to check these links out:

  • Ubudu: Cool SDK for integrating iBeacons into your retail space. Looks good for malls ($$$)
  • Captainpass Simple to use Passbook sdk ($$$)
  • PassSlot: Another passbook SDK ($$$)
  • PassKit: This one looks like the real deal. They use iBeacons, rewards and everything. However, might be overkill. How did they score that name ??
  • LevelUp: One of the best systems I've seen. Costs money, however

####Library and Frameworks

  • Audio
  • Cache
  • Core Data
  • Charts
  • Database
  • HUD
  • iBeacon
  • Images
  • EventBus
  • JSON
  • Layout
  • Logging
  • Maps
  • Location
  • Networking
  • Push Notifications
  • Passbook
  • Text
  • Walkthrough / Intro / Tutorial
  • UI
  • Websocket
  • Code Quality
  • Analytics
  • Payments
  • Products
  • Utility
  • Security
  • Video
  • Project setup
  • Dependency / Package Manager
  • Testing
  • TDD / BDD
  • UI Testing
  • Beta Distribution
  • Toolchains
  • Rapid Development
  • Deployment
  • App Store
  • SDK
  • Xcode

Plugins

Package Manager
  • xctool: Tool to run xcode builds much more easily through the terminal.
Themes
Misc - Below are some tools that I'd recommend for you to really familiarize yourself with

-SYNX: This cleans up your project folder... automatically! One of those wicked cool Ruby scripts that makes sure your Xcode project folder matches what you have in your Xcode project. Any unused junk files get automatically deleted!

Style Guides

####Good Websites

  • News, Blogs and Feeds
  • UIKIt references
  • Components and Packages
  • Forums and discuss lists
  • Tutorials and Keynotes
  • Prototyping
  • Twitter
  • Facebook Groups
  • Podcasts
  • Other Awesome Lists
  • Contributing

Awesome iOS Books (because, sometimes I read?)

Next up is a personal list of my favorite libraries (essentials don't count here)

  • PromiseKit

Last up is a personal list of my favorite projects (essentials don't count here)

Thanks for checking out this post! Here are some more awesome pages

About

A review of each project I "Starred" On Github

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages