Facebook Paper - what 3rd party libraries are used for what parts of the app?
I just download Facebook Paper app for iOS. There's a lot of great stuff in this app, specifically animation wise. It runs smooth as butter for me too - some really great stuff going on behind the scenes evidently.
What I'd like to know is what libraries are used for which features of the app (3rd parties libraries used are listed below. There's a truckload of them). Basically, how did they get it looking and working as well as it does - which of these libraries can I use to do the same?
Since this is a pretty broad question, specifically I'd like to know about animations - fold, swipe down, tap on a settings section, tap an icon. Was a third party library used - how did Facebook achieve the smoothness and complexity of animations that are there?
All 3rd party libraries from Facebook paper are listed below.
Quote from an engineer working on paper:
The engineering complexity here is finding a way to fully utilize the multicore architecture of newer iPhones on top of the UIKit framework which has no support for multithreading. Significant work went into creating a framework for doing rendering work on multiple threads, and we spent a long time finding the balance between performance and complexity.
Facebook held an event in San Francisco on 1st April called "An Inside Look at Facebook Paper". See the section "Spring & Delight: Beyond Static Animations - Kimon Tsinteris".
In summary, for animations they used an in-house library called Pop that has now been open-sourced. It's benefits over CoreAnimation are 1) that it doesn't depend on CALayer... any object can be animated 2) animations can be stopped mid-flow, and a new one started with the end state of the animated object matching where it was stopped. You will notice that animations in Paper can all be interrupted.
At F8 Facebook announced they would be open sourcing the rendering library DisplayNode that allows a large amount of rendering to happen off the main thread. This was released as AsyncDisplayKit in October 2014.