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.

ACE 
Appirater
Reachability
AQGridView
bitvect
Boost
Breadcrumb
breakpad
Chromium
CocoaHTTPServer
CocoaLumberjack
DCRoundSwitch
DTCoreText
EGODatabase
expat
FFT by Mark Oleson
FFT by Takuya Ooura
gh-kit
gh-unit
Google Toolbox for Mac
google-web-toolkit
gtest
gyp
IEEE 754r Half Precision floating...
HPGrowingTextView
InAppSettingsKit
ios5-cookbook
ios-8601-parser-unparser
jqueryjs
JSONKit
leveldb
LibComponentLogging-Core
LibComponentLogging-NSLog
libjingle
libjpeg-turbo
libjpeg
libPhoneNumber-iOS
libphonenumber
libsrtp
libvpx
libyuv
llvmreturn
MAZeroingWeakRef
minizip
mizpanel-iphone
mosquitto
MessagePack Objective C Imple...
MessagePack
msinttypes
OpenCV Tutorials
nimbus
NJKWebViewProgress
unmodified objc4
ObjQREncoder
OCHamcrest
OCMock
OCPDFGen
OmniGroup OmniUI
OpenSSL
OpenUDID
opus
peertalk
PhotoScroller
PHP
PLCrashReporter
pmtk3
Pocket-ObjC-SDK
portaudio
protobuf
PSTCollectionView
SUtilities
RestKit
Ring Buffer Utility
SDURLCache
SDWebImage
SOCKit
SPDY-for-iPhone
spdylay
spreadsort
ssziparchive
TDOauth
tiqr
UAModalPanel
webkit
webp
webrtc
WebViewJavascriptBridge
XMLReader
yaml-cpp
yasm
zlib
zxing

Answers


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.

Full length article here: http://www.quora.com/Facebook-Launches-Paper-January-2014/What-was-it-like-to-help-develop-Paper/answer/Jason-Barrett-Prado?srid=iaDC&share=1


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.


Need Your Help

Observable which does not pass anything in onNext()

java rx-java

I would need an Observable, for example to provide a system clock, which does not need to pass anything in onNext(). I couldn't find a signature that would allow me to do that.

ifconfig command not found

linux centos command ifconfig

I've just installed CentOS7 as a virtual machine on my mac (osx10.9.3 + virtualbox)