Model framework for Cocoa and Cocoa Touch applications
Objective-C C Shell
Failed to load latest commit information.
Configuration @ 200d1a7
Proton.xcodeproj Removed PROManagedObjectController, which doesn't jive with MVVM (and… Apr 20, 2012
Proton Link to VELAnimatedBinding example gist from PROBinding.h Apr 23, 2012
Tools Rename all 'Emerald Lark' to 'Bitswift' Jan 11, 2012
.gitignore Ignore generated Documentation folder Dec 14, 2011
.gitmodules Added Specta and Expecta submodules Jan 23, 2012

Proton is a utility framework for Cocoa and Cocoa Touch that provides tools useful for building a powerful model layer.


  • A simple and extensible system for bindings, suitable for use on iOS and for replacing Cocoa Bindings on OS X
  • Components to make Core Data easier to use, including:
    • PROCoreDataManager, to manage all the resources associated with a single database
    • Support for copying managed objects between contexts
    • Support for encoding and decoding managed objects to and from property lists
    • Convenience methods on NSManagedObject and NSManagedObjectContext so callers have to write less code
  • A class for key-value observing that makes it easier to manage the observation of many different objects or key paths
  • A couple macros to check key paths at compile time (i.e., fail to build when an invalid key path is used)
  • Higher-order functions (map, filter, fold) for all built-in collection classes
  • Extensions to NSUndoManager to support blocks and make it simpler to manage undo groupings
  • PROFuture, an extremely fast and simple implementation of block-based futures

All of the above features are unit tested, to validate the typical use cases and detect any future breakage.

Proton has been built with the Model-View-ViewModel architectural pattern in mind. The PROViewModel abstract class can serve as a base for any application-specific view model layer.


All dependencies can be retrieved by running git submodule update --init --recursive from the top level of the repository.

  • Xcode projects in the repository are configured using prebuilt xcconfigs
  • The unit tests for Proton are written using Specta and Expecta
  • Logging is implemented using the CocoaLumberjack logging framework
  • Parts of libextobjc and SafeDispatch are used in Proton (but are already present in the repository)


Proton is released under a modified version of the 3-clause BSD license. See the LICENSE file for more information.