[
  {
    "path": ".gitignore",
    "content": ".idea\nxcuserdata\nxcshareddata\nExample/Pods\nExample/swiftExample/Pods\nbuild\nPods\n.DS_Store\nPodfile.lock\n"
  },
  {
    "path": ".swift-version",
    "content": "2.3\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: objective-c\n\ninstall:\n  - brew install ios-sim\n  - gem install thrust\n\nscript: rake specs\n"
  },
  {
    "path": "Example/Example/Example/AddViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@protocol AddViewControllerDelegate;\n\n@interface AddViewController : UIViewController\n\n@property (assign, nonatomic) id <AddViewControllerDelegate> delegate;\n@property (weak, nonatomic) IBOutlet UITextView *messageTextView;\n\n@end\n\n@protocol AddViewControllerDelegate\n- (void)didAddThing:(NSString *)message;\n@end\n"
  },
  {
    "path": "Example/Example/Example/AddViewController.m",
    "content": "#import \"AddViewController.h\"\n\n@interface AddViewController ()\n\n@end\n\n@implementation AddViewController\n\n- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil\n{\n    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];\n    if (self) {\n        // Custom initialization\n    }\n    return self;\n}\n\n- (IBAction)didTouchAddButton:(id)sender {\n    [self.delegate didAddThing: self.messageTextView.text];\n}\n\n- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {\n    [self.view endEditing:YES];\n}\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/AddViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1552</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12D78</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">3084</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.37</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">626.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2083</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBNSLayoutConstraint</string>\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUIButton</string>\n\t\t\t<string>IBUILabel</string>\n\t\t\t<string>IBUITextView</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"975951072\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"191373211\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUITextView\" id=\"1057224011\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 96}, {280, 176}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"133997615\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<bool key=\"IBUIMultipleTouchEnabled\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\"/>\n\t\t\t\t\t\t<object class=\"IBUITextInputTraits\" key=\"IBUITextInputTraits\">\n\t\t\t\t\t\t\t<int key=\"IBUIAutocapitalizationType\">2</int>\n\t\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">22</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">22</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUILabel\" id=\"196202203\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 20}, {280, 68}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"1057224011\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUIContentMode\">7</int>\n\t\t\t\t\t\t<bool key=\"IBUIUserInteractionEnabled\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<string key=\"IBUIText\">NEW TODO</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUITextColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MCAwIDAAA</bytes>\n\t\t\t\t\t\t\t<string key=\"IBUIColorCocoaTouchKeyPath\">darkTextColor</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<nil key=\"IBUIHighlightedColor\"/>\n\t\t\t\t\t\t<int key=\"IBUIBaselineAdjustment\">0</int>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">1</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">43</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">43</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIAdjustsFontSizeToFit\">NO</bool>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBUIButton\" id=\"133997615\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"191373211\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">292</int>\n\t\t\t\t\t\t<string key=\"NSFrame\">{{20, 297}, {280, 51}}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"191373211\"/>\n\t\t\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC45MDE5NjA3OTAyIDAuOTAxOTYwNzkwMiAwLjkwMTk2MDc5MDIAA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIOpaque\">NO</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<int key=\"IBUIContentHorizontalAlignment\">0</int>\n\t\t\t\t\t\t<int key=\"IBUIContentVerticalAlignment\">0</int>\n\t\t\t\t\t\t<string key=\"IBUINormalTitle\">Add</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIHighlightedTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">1</int>\n\t\t\t\t\t\t\t<bytes key=\"NSRGB\">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUINormalTitleShadowColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MC41AA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"IBUIFontDescription\" key=\"IBUIFontDescription\">\n\t\t\t\t\t\t\t<int key=\"type\">2</int>\n\t\t\t\t\t\t\t<double key=\"pointSize\">31</double>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<object class=\"NSFont\" key=\"IBUIFont\">\n\t\t\t\t\t\t\t<string key=\"NSName\">Helvetica-Bold</string>\n\t\t\t\t\t\t\t<double key=\"NSSize\">31</double>\n\t\t\t\t\t\t\t<int key=\"NSfFlags\">16</int>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrame\">{{0, 20}, {320, 548}}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSWindow\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\" ref=\"196202203\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUIScreenMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUIScreenMetrics</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"IBUINormalizedOrientationToSizeMap\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<array key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t\t\t<integer value=\"3\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<array key=\"dict.values\">\n\t\t\t\t\t\t\t<string>{320, 568}</string>\n\t\t\t\t\t\t\t<string>{568, 320}</string>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"IBUITargetRuntime\">IBCocoaTouchFramework</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Retina 4 Full Screen</string>\n\t\t\t\t\t<int key=\"IBUIType\">2</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">3</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">messageTextView</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"1057224011\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">110</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchEventConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">didTouchAddButton:</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"133997615\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t\t<int key=\"IBEventType\">7</int>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">109</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"191373211\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"401894823\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">4</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"133997615\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">4</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">200</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">9</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"950255045\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">6</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"133997615\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">6</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"655781733\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"133997615\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">5</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">5</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"32810466\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"1057224011\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">3</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">4</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">8</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">6</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">24</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"720169817\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"1057224011\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">5</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">5</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"278246914\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">6</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"1057224011\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">6</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"674932954\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">6</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">6</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"476697332\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">3</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"734243576\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">5</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">5</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBNSLayoutSymbolicConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">20</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"191373211\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<reference ref=\"1057224011\"/>\n\t\t\t\t\t\t\t<reference ref=\"196202203\"/>\n\t\t\t\t\t\t\t<reference ref=\"133997615\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"975951072\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">11</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1057224011\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"903285478\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"1057224011\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">8</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<nil key=\"secondItem\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">0</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">176</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"1057224011\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">9</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">1</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">25</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"278246914\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">26</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"720169817\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">27</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"196202203\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"734939316\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">8</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<nil key=\"secondItem\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">0</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">68</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"196202203\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">9</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">1</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">34</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"32810466\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">59</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"734243576\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">61</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"476697332\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">62</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"133997615\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"50832180\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"133997615\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">8</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<nil key=\"secondItem\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">0</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">51</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"133997615\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">9</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">1</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">67</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"655781733\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">71</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"950255045\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">80</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"734939316\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"196202203\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">81</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"50832180\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"133997615\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">91</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"674932954\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">107</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"903285478\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"1057224011\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">108</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"401894823\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"191373211\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">AddViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"1.IBViewMetadataConstraints\">\n\t\t\t\t\t<reference ref=\"734243576\"/>\n\t\t\t\t\t<reference ref=\"476697332\"/>\n\t\t\t\t\t<reference ref=\"674932954\"/>\n\t\t\t\t\t<reference ref=\"278246914\"/>\n\t\t\t\t\t<reference ref=\"720169817\"/>\n\t\t\t\t\t<reference ref=\"32810466\"/>\n\t\t\t\t\t<reference ref=\"655781733\"/>\n\t\t\t\t\t<reference ref=\"950255045\"/>\n\t\t\t\t\t<reference ref=\"401894823\"/>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"107.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"108.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"11.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"11.IBViewMetadataConstraints\">\n\t\t\t\t\t<reference ref=\"903285478\"/>\n\t\t\t\t</array>\n\t\t\t\t<boolean value=\"NO\" key=\"11.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints\"/>\n\t\t\t\t<string key=\"25.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"26.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"27.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"27.IBViewMetadataConstraints\">\n\t\t\t\t\t<reference ref=\"734939316\"/>\n\t\t\t\t</array>\n\t\t\t\t<boolean value=\"NO\" key=\"27.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints\"/>\n\t\t\t\t<string key=\"34.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"59.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"61.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"62.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"62.IBViewMetadataConstraints\">\n\t\t\t\t\t<reference ref=\"50832180\"/>\n\t\t\t\t</array>\n\t\t\t\t<boolean value=\"NO\" key=\"62.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints\"/>\n\t\t\t\t<string key=\"67.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"71.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"80.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"81.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"91.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">110</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\">\n\t\t\t<array class=\"NSMutableArray\" key=\"referencedPartialClassDescriptions\">\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">AddViewController</string>\n\t\t\t\t\t<string key=\"superclassName\">UIViewController</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actions\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">didTouchAddButton:</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">id</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"actionInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">didTouchAddButton:</string>\n\t\t\t\t\t\t<object class=\"IBActionInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">didTouchAddButton:</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">id</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"outlets\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">messageTextView</string>\n\t\t\t\t\t\t<string key=\"NS.object.0\">UITextView</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"toOneOutletInfosByName\">\n\t\t\t\t\t\t<string key=\"NS.key.0\">messageTextView</string>\n\t\t\t\t\t\t<object class=\"IBToOneOutletInfo\" key=\"NS.object.0\">\n\t\t\t\t\t\t\t<string key=\"name\">messageTextView</string>\n\t\t\t\t\t\t\t<string key=\"candidateClassName\">UITextView</string>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/AddViewController.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBPartialClassDescription\">\n\t\t\t\t\t<string key=\"className\">NSLayoutConstraint</string>\n\t\t\t\t\t<string key=\"superclassName\">NSObject</string>\n\t\t\t\t\t<object class=\"IBClassDescriptionSource\" key=\"sourceIdentifier\">\n\t\t\t\t\t\t<string key=\"majorKey\">IBProjectSource</string>\n\t\t\t\t\t\t<string key=\"minorKey\">./Classes/NSLayoutConstraint.h</string>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t</object>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<bool key=\"IBDocument.UseAutolayout\">YES</bool>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">2083</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Example/Example/Example/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n\n@class ViewController, MeteorClient;\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n@property (strong, nonatomic) ViewController *viewController;\n@property (strong, nonatomic) UINavigationController *navController;\n@property (strong, nonatomic) MeteorClient *meteorClient;\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/AppDelegate.m",
    "content": "#import \"AppDelegate.h\"\n#import \"ViewController.h\"\n#import \"LoginViewController.h\"\n#import \"ObjectiveDDP.h\"\n#import <ObjectiveDDP/MeteorClient.h>\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\n    \n    self.meteorClient = [[MeteorClient alloc] initWithDDPVersion:@\"pre2\"];\n    [self.meteorClient addSubscription:@\"things\"];\n    [self.meteorClient addSubscription:@\"lists\"];\n    LoginViewController *loginController = [[LoginViewController alloc] initWithNibName:@\"LoginViewController\"\n                                                                                 bundle:nil];\n    loginController.meteor = self.meteorClient;\n    ObjectiveDDP *ddp = [[ObjectiveDDP alloc] initWithURLString:@\"wss://ddptester.meteor.com/websocket\" delegate:self.meteorClient];\n    // local testing\n    //ObjectiveDDP *ddp = [[ObjectiveDDP alloc] initWithURLString:@\"ws://localhost:3000/websocket\" delegate:self.meteorClient];\n\n    self.meteorClient.ddp = ddp;\n    [self.meteorClient.ddp connectWebSocket];\n    \n    self.navController = [[UINavigationController alloc] initWithRootViewController:loginController];\n    self.navController.navigationBarHidden = YES;\n    \n    self.window.rootViewController = self.navController;\n    [self.window makeKeyAndVisible];\n    \n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportConnection) name:MeteorClientDidConnectNotification object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportDisconnection) name:MeteorClientDidDisconnectNotification object:nil];\n\n    return YES;\n}\n\n- (void)reportConnection {\n    NSLog(@\"================> connected to server!\");\n}\n\n- (void)reportDisconnection {\n    NSLog(@\"================> disconnected from server!\");    \n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    [self.meteorClient.ddp connectWebSocket];\n}\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/Example/Example/Images.xcassets/green_light.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"green_light.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"green_light@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/Example/Example/Images.xcassets/red_light.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"red_light.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\",\n      \"filename\" : \"red_light@2x.png\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/Example/Example/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.boundsj.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Example/Example/ListViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import <ObjectiveDDP/MeteorClient.h>\n\n@interface ListViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>\n\n@property (nonatomic, strong) MeteorClient *meteor;\n\n- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil\n               meteor:(MeteorClient *)meteor;\n@property (copy, nonatomic) NSString *userId;\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/ListViewController.m",
    "content": "#import \"ListViewController.h\"\n#import \"ViewController.h\"\n#import \"MeteorClient.h\"\n\n@interface ListViewController ()\n\n@property (weak, nonatomic) IBOutlet UITableView *tableview;\n@property (strong, nonatomic) M13MutableOrderedDictionary *lists;\n\n@end\n\n@implementation ListViewController\n\n- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil\n               meteor:(MeteorClient *)meteor {\n    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];\n    if (self) {\n        self.meteor = meteor;\n        self.lists = self.meteor.collections[@\"lists\"];\n    }\n    return self;\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    self.navigationItem.title = @\"My Lists\";\n    self.navigationController.navigationBarHidden = NO;\n    self.navigationItem.hidesBackButton = YES;\n    \n    UIBarButtonItem *logoutButton = [[UIBarButtonItem alloc] initWithTitle:@\"Logout\" style:UIBarButtonItemStylePlain target:self action:@selector(logout)];\n    self.navigationItem.rightBarButtonItem = logoutButton;\n\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveUpdate:)\n                                                 name:@\"added\"\n                                               object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveUpdate:)\n                                                 name:@\"removed\"\n                                               object:nil];\n}\n\n- (void)didReceiveUpdate:(NSNotification *)notification {\n    [self.tableview reloadData];\n}\n\n- (void)logout {\n    [self.meteor logout];\n    [self.navigationController popToRootViewControllerAnimated:YES];\n}\n\n#pragma mark <UITableViewDataSource>\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    return [self.lists count];\n}\n\nstatic NSDictionary *selectedList;\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    static NSString *cellIdentifier = @\"list\";\n\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];\n    if (!cell) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault\n                                      reuseIdentifier:cellIdentifier];\n    }\n\n    NSDictionary *list = self.lists[indexPath.row];\n    selectedList = list;\n    cell.textLabel.text = list[@\"name\"];\n\n    UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom];\n\n    shareButton.frame = CGRectMake(255.0f, 5.0f, 55.0f, 34.0f);\n    shareButton.backgroundColor = [UIColor greenColor];\n    [shareButton setTitle:@\"Share\" forState:UIControlStateNormal];\n    [shareButton addTarget:self action:@selector(didClickShareButton:forEvent:) forControlEvents:UIControlEventTouchUpInside];\n\n    // XXX: shareButton needs to be able to link to its list\n    // shareButton\n\n    [cell addSubview:shareButton];\n\n    return cell;\n}\n\nstatic UITextField *shareWithTF;\n\n- (void)didClickShareButton:(id)sender forEvent:(UIEvent *)event {\n    UITouch *touch = [[event allTouches] anyObject];\n    CGPoint location = [touch locationInView:self.view];\n\n    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0, location.y, 320.0, 100.0)];\n    view.backgroundColor = [UIColor whiteColor];\n    UITextField *shareWithTextField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 50.0, 240.0, 44.0)];\n    shareWithTF = shareWithTextField;\n    shareWithTextField.borderStyle = UITextBorderStyleLine;\n    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];\n    button.frame = CGRectMake(255.0, 50.0, 60.0, 44.0);\n    button.backgroundColor = [UIColor greenColor];\n    [button setTitle:@\"Send\" forState:UIControlStateNormal];\n    [button addTarget:self action:@selector(didClickShareWithButton:) forControlEvents:UIControlEventTouchUpInside];\n    [view addSubview:shareWithTextField];\n    [view addSubview:button];\n\n    UIView *modalBackground = [[UIView alloc] initWithFrame:self.view.frame];\n    modalBackground.backgroundColor = [UIColor blackColor];\n    modalBackground.alpha = 0.7;\n\n    [self.view addSubview:modalBackground];\n    [self.view addSubview:view];\n}\n\n- (void)didClickShareWithButton:(id)sender {\n    NSArray *parameters = @[@{@\"_id\": selectedList[@\"_id\"]}, @{@\"$set\":@{@\"share_with\": shareWithTF.text}}];\n    [self.meteor callMethodName:@\"/lists/update\" parameters:parameters responseCallback:nil];\n    [[[self.view subviews] lastObject] removeFromSuperview];\n    [[[self.view subviews] lastObject] removeFromSuperview];\n}\n\n- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {\n    return YES;\n}\n\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle\n                                            forRowAtIndexPath:(NSIndexPath *)indexPath {\n    NSDictionary *list = self.lists[indexPath.row];\n    [self.meteor callMethodName:@\"/lists/remove\" parameters:@[@{@\"_id\": list[@\"_id\"]}] responseCallback:nil];\n}\n\n#pragma mark <UITableViewDelegate>\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {\n    NSDictionary *list = self.lists[indexPath.row];\n    ViewController *controller = [[ViewController alloc] initWithNibName:@\"ViewController\"\n                                                                  bundle:nil\n                                                                  meteor:self.meteor\n                                                                listName:list[@\"name\"]];\n    controller.userId = self.userId;\n    [self.navigationController pushViewController:controller animated:YES];\n}\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/ListViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"4510\" systemVersion=\"12F37\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment defaultVersion=\"1552\" identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"3742\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ListViewController\">\n            <connections>\n                <outlet property=\"tableview\" destination=\"4\" id=\"23\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"3\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"24\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"26\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"4\" firstAttribute=\"trailing\" secondItem=\"1\" secondAttribute=\"trailing\" id=\"9\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" id=\"11\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"bottom\" secondItem=\"1\" secondAttribute=\"bottom\" id=\"12\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" id=\"28\"/>\n            </constraints>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\"/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n        </view>\n    </objects>\n</document>"
  },
  {
    "path": "Example/Example/Example/LoginViewController.h",
    "content": "#import <UIKit/UIKit.h>\n\n@class MeteorClient;\n\n@interface LoginViewController : UIViewController\n\n@property (weak, nonatomic) IBOutlet UITextField *email;\n@property (weak, nonatomic) IBOutlet UITextField *password;\n@property (weak, nonatomic) IBOutlet UILabel *connectionStatusText;\n@property (weak, nonatomic) IBOutlet UIImageView *connectionStatusLight;\n@property (weak, nonatomic) IBOutlet UIButton *loginButton;\n@property (strong, nonatomic) MeteorClient *meteor;\n@property (weak, nonatomic) IBOutlet UIButton *sayHiButton;\n\n- (IBAction)didTapLoginButton:(id)sender;\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/LoginViewController.m",
    "content": "#import \"LoginViewController.h\"\n#import \"ListViewController.h\"\n#import <ObjectiveDDP/MeteorClient.h>\n\n@implementation LoginViewController\n\n- (void)viewWillAppear:(BOOL)animated {\n    [self.meteor addObserver:self\n                  forKeyPath:@\"websocketReady\"\n                     options:NSKeyValueObservingOptionNew\n                     context:nil];\n}\n\n#pragma mark <NSKeyValueObserving>\n\n- (void)observeValueForKeyPath:(NSString *)keyPath\n                      ofObject:(id)object\n                        change:(NSDictionary *)change\n                       context:(void *)context {\n    if ([keyPath isEqualToString:@\"websocketReady\"] && self.meteor.websocketReady) {\n        self.connectionStatusText.text = @\"Connected to Todo Server\";\n        UIImage *image = [UIImage imageNamed: @\"green_light.png\"];\n        [self.connectionStatusLight setImage:image];\n    }\n}\n\n#pragma mark UI Actions\n\n- (IBAction)didTapLoginButton:(id)sender {\n    if (!self.meteor.websocketReady) {\n        UIAlertView *notConnectedAlert = [[UIAlertView alloc] initWithTitle:@\"Connection Error\"\n                                                                    message:@\"Can't find the Todo server, try again\"\n                                                                   delegate:nil\n                                                          cancelButtonTitle:@\"OK\"\n                                                          otherButtonTitles:nil];\n        [notConnectedAlert show];\n        return;\n    }\n\n    [self.meteor logonWithEmail:self.email.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {\n        if (error) {\n            [self handleFailedAuth:error];\n            return;\n        }\n        [self handleSuccessfulAuth];\n    }];\n}\n\n- (IBAction)didTapSayHiButton {\n    [self.meteor callMethodName:@\"sayHelloTo\" parameters:@[self.email.text] responseCallback:^(NSDictionary *response, NSError *error) {\n        NSString *message = response[@\"result\"];\n        [[[UIAlertView alloc] initWithTitle:@\"Meteor Todos\" message:message delegate:nil cancelButtonTitle:@\"Great\" otherButtonTitles:nil] show];\n    }];\n}\n\n#pragma mark - Internal\n\n- (void)handleSuccessfulAuth {\n    ListViewController *controller = [[ListViewController alloc] initWithNibName:@\"ListViewController\"\n                                                                          bundle:nil\n                                                                          meteor:self.meteor];\n    controller.userId = self.meteor.userId;\n    [self.navigationController pushViewController:controller animated:YES];\n}\n\n- (void)handleFailedAuth:(NSError *)error {\n    [[[UIAlertView alloc] initWithTitle:@\"Meteor Todos\" message:[error localizedDescription] delegate:nil cancelButtonTitle:@\"Try Again\" otherButtonTitles:nil] show];\n}\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/LoginViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"5056\" systemVersion=\"13E28\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment defaultVersion=\"1552\" identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"3733\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"LoginViewController\">\n            <connections>\n                <outlet property=\"connectionStatusLight\" destination=\"95\" id=\"146\"/>\n                <outlet property=\"connectionStatusText\" destination=\"111\" id=\"145\"/>\n                <outlet property=\"email\" destination=\"4\" id=\"WVD-E0-3i7\"/>\n                <outlet property=\"loginButton\" destination=\"33\" id=\"147\"/>\n                <outlet property=\"password\" destination=\"17\" id=\"153\"/>\n                <outlet property=\"sayHiButton\" destination=\"abm-Si-OaD\" id=\"VXX-Ry-XiJ\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"3\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"jesse@rebounds.net\" borderStyle=\"line\" placeholder=\"username\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4\">\n                    <rect key=\"frame\" x=\"20\" y=\"147\" width=\"280\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"46\" id=\"16\"/>\n                    </constraints>\n                    <nil key=\"textColor\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"18\"/>\n                    <textInputTraits key=\"textInputTraits\"/>\n                </textField>\n                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"airport\" borderStyle=\"line\" placeholder=\"password\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"17\">\n                    <rect key=\"frame\" x=\"20\" y=\"201\" width=\"280\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"46\" id=\"18\"/>\n                    </constraints>\n                    <nil key=\"textColor\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"18\"/>\n                    <textInputTraits key=\"textInputTraits\" secureTextEntry=\"YES\"/>\n                </textField>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"33\">\n                    <rect key=\"frame\" x=\"20\" y=\"263\" width=\"280\" height=\"44\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"39\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                    <state key=\"normal\" title=\"Login\">\n                        <color key=\"titleColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <state key=\"highlighted\">\n                        <color key=\"titleColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"didTapLoginButton:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"148\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" ambiguous=\"YES\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"abm-Si-OaD\">\n                    <rect key=\"frame\" x=\"20\" y=\"315\" width=\"280\" height=\"44\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"EVb-Xo-SeN\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                    <state key=\"normal\" title=\"Say Hello\">\n                        <color key=\"titleColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <state key=\"highlighted\">\n                        <color key=\"titleColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"didTapSayHiButton\" destination=\"-1\" eventType=\"touchUpInside\" id=\"Urv-XX-2VO\"/>\n                    </connections>\n                </button>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Meteor TodoS\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"40\">\n                    <rect key=\"frame\" x=\"20\" y=\"82\" width=\"280\" height=\"41\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"41\" id=\"61\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"35\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" image=\"red_light.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"95\">\n                    <rect key=\"frame\" x=\"280\" y=\"528\" width=\"20\" height=\"20\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"106\"/>\n                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"107\"/>\n                    </constraints>\n                </imageView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Not Connected to Todo Server\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"111\">\n                    <rect key=\"frame\" x=\"20\" y=\"528\" width=\"256\" height=\"21\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"256\" id=\"141\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"4\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"13\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"4\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"15\"/>\n                <constraint firstItem=\"17\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"22\"/>\n                <constraint firstItem=\"17\" firstAttribute=\"top\" secondItem=\"4\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"23\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"17\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"24\"/>\n                <constraint firstItem=\"33\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"36\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"33\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"38\"/>\n                <constraint firstItem=\"40\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"46\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"40\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"48\"/>\n                <constraint firstItem=\"33\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"263\" id=\"92\"/>\n                <constraint firstItem=\"40\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"82\" id=\"93\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"147\" id=\"94\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"95\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"109\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"centerY\" secondItem=\"95\" secondAttribute=\"centerY\" id=\"138\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"top\" secondItem=\"95\" secondAttribute=\"top\" id=\"139\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"142\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"95\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"143\"/>\n            </constraints>\n            <simulatedStatusBarMetrics key=\"simulatedStatusBarMetrics\"/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"red_light.png\" width=\"50\" height=\"50\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/Example/Example/ViewController.h",
    "content": "#import <UIKit/UIKit.h>\n#import \"AddViewController.h\"\n#import <ObjectiveDDP/MeteorClient.h>\n\n@interface ViewController : UIViewController <UITableViewDataSource, AddViewControllerDelegate>\n\n@property (strong, nonatomic) MeteorClient *meteor;\n@property (copy, nonatomic) NSString *userId;\n\n- (id)initWithNibName:(NSString *)nibNameOrNil\n               bundle:(NSBundle *)nibBundleOrNil\n               meteor:(MeteorClient *)meteor\n             listName:(NSString *)listName;\n@end\n"
  },
  {
    "path": "Example/Example/Example/ViewController.m",
    "content": "#import \"ViewController.h\"\n#import <ObjectiveDDP/BSONIdGenerator.h>\n\n@interface ViewController ()\n\n@property (weak, nonatomic) IBOutlet UITableView *tableview;\n@property (copy, nonatomic) NSString *listName;\n\n@end\n\n@implementation ViewController\n\n- (id)initWithNibName:(NSString *)nibNameOrNil\n               bundle:(NSBundle *)nibBundleOrNil\n               meteor:(MeteorClient *)meteor\n             listName:(NSString *) listName {\n    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];\n    if (self) {\n        self.meteor = meteor;\n        self.listName = listName;\n    }\n    return self;\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    self.navigationItem.title = self.listName;\n    UIBarButtonItem *addButton = [[UIBarButtonItem alloc ] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd\n                                                                                target:self\n                                                                                action:@selector(didTouchAdd:)];\n    [self.navigationItem setRightBarButtonItem:addButton];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveUpdate:)\n                                                 name:@\"added\"\n                                               object:nil];\n\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveUpdate:)\n                                                 name:@\"removed\"\n                                               object:nil];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (void)didReceiveUpdate:(NSNotification *)notification {\n    [self.tableview reloadData];\n}\n\n- (NSArray *)computedList {\n    NSPredicate *pred = [NSPredicate predicateWithFormat:@\"(listName like %@)\", self.listName];\n    M13MutableOrderedDictionary *things = self.meteor.collections[@\"things\"];\n    return [things.allObjects filteredArrayUsingPredicate:pred];\n}\n\n#pragma mark UI Actions\n\n- (IBAction)didTouchAdd:(id)sender {\n    AddViewController *addController = [[AddViewController alloc] initWithNibName:@\"AddViewController\"\n                                                                           bundle:nil];\n    addController.delegate = self;\n    [self presentViewController:addController animated:YES completion:nil];\n}\n\n#pragma mark <UITableViewDataSource>\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\n    return [self.computedList count];\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {\n    static NSString *cellIdentifier = @\"thing\";\n    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];\n\n    if (cell == nil) {\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault\n                                      reuseIdentifier:cellIdentifier];\n    }\n\n    NSDictionary *thing = self.computedList[indexPath.row];\n    cell.textLabel.text = thing[@\"msg\"];\n\n    return cell;\n}\n\n- (BOOL)tableView:(UITableView *)tableView\n        canEditRowAtIndexPath:(NSIndexPath *)indexPath {\n    return YES;\n}\n\n- (void)tableView:(UITableView *)tableView\n        commitEditingStyle:(UITableViewCellEditingStyle)editingStyle\n        forRowAtIndexPath:(NSIndexPath *)indexPath {\n    if (editingStyle == UITableViewCellEditingStyleDelete) {\n        NSDictionary *thing = self.computedList[indexPath.row];\n        [self.meteor callMethodName:@\"/things/remove\" parameters:@[@{@\"_id\": thing[@\"_id\"]}] responseCallback:nil];\n    }\n}\n\n- (void)didAddThing:(NSString *)message {\n    [self dismissViewControllerAnimated:YES completion:nil];\n    NSArray *parameters = @[@{@\"_id\": [[NSUUID UUID] UUIDString],\n                              @\"msg\": message,\n                              @\"owner\": self.userId,\n                              @\"listName\": self.listName}];\n    [self.meteor callMethodName:@\"/things/insert\" parameters:parameters responseCallback:nil];\n}\n\n@end\n"
  },
  {
    "path": "Example/Example/Example/ViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<archive type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"8.00\">\n\t<data>\n\t\t<int key=\"IBDocument.SystemTarget\">1552</int>\n\t\t<string key=\"IBDocument.SystemVersion\">12D78</string>\n\t\t<string key=\"IBDocument.InterfaceBuilderVersion\">3084</string>\n\t\t<string key=\"IBDocument.AppKitVersion\">1187.37</string>\n\t\t<string key=\"IBDocument.HIToolboxVersion\">626.00</string>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.PluginVersions\">\n\t\t\t<string key=\"NS.key.0\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t<string key=\"NS.object.0\">2083</string>\n\t\t</object>\n\t\t<array key=\"IBDocument.IntegratedClassDependencies\">\n\t\t\t<string>IBNSLayoutConstraint</string>\n\t\t\t<string>IBProxyObject</string>\n\t\t\t<string>IBUITableView</string>\n\t\t\t<string>IBUIView</string>\n\t\t</array>\n\t\t<array key=\"IBDocument.PluginDependencies\">\n\t\t\t<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t</array>\n\t\t<object class=\"NSMutableDictionary\" key=\"IBDocument.Metadata\">\n\t\t\t<string key=\"NS.key.0\">PluginDependencyRecalculationVersion</string>\n\t\t\t<integer value=\"1\" key=\"NS.object.0\"/>\n\t\t</object>\n\t\t<array class=\"NSMutableArray\" key=\"IBDocument.RootObjects\" id=\"1000\">\n\t\t\t<object class=\"IBProxyObject\" id=\"372490531\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFilesOwner</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBProxyObject\" id=\"843779117\">\n\t\t\t\t<string key=\"IBProxiedObjectIdentifier\">IBFirstResponder</string>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t\t<object class=\"IBUIView\" id=\"774585933\">\n\t\t\t\t<reference key=\"NSNextResponder\"/>\n\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t<array class=\"NSMutableArray\" key=\"NSSubviews\">\n\t\t\t\t\t<object class=\"IBUITableView\" id=\"542337920\">\n\t\t\t\t\t\t<reference key=\"NSNextResponder\" ref=\"774585933\"/>\n\t\t\t\t\t\t<int key=\"NSvFlags\">274</int>\n\t\t\t\t\t\t<string key=\"NSFrameSize\">{320, 548}</string>\n\t\t\t\t\t\t<reference key=\"NSSuperview\" ref=\"774585933\"/>\n\t\t\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t\t\t<string key=\"NSReuseIdentifierKey\">_NS:9</string>\n\t\t\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t\t\t<bytes key=\"NSWhite\">MQA</bytes>\n\t\t\t\t\t\t</object>\n\t\t\t\t\t\t<bool key=\"IBUIClipsSubviews\">YES</bool>\n\t\t\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t\t\t\t<bool key=\"IBUIAlwaysBounceVertical\">YES</bool>\n\t\t\t\t\t\t<int key=\"IBUISeparatorStyle\">1</int>\n\t\t\t\t\t\t<int key=\"IBUISectionIndexMinimumDisplayRowCount\">0</int>\n\t\t\t\t\t\t<bool key=\"IBUIShowsSelectionImmediatelyOnTouchBegin\">YES</bool>\n\t\t\t\t\t\t<float key=\"IBUIRowHeight\">44</float>\n\t\t\t\t\t\t<float key=\"IBUISectionHeaderHeight\">22</float>\n\t\t\t\t\t\t<float key=\"IBUISectionFooterHeight\">22</float>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"NSFrame\">{{0, 20}, {320, 548}}</string>\n\t\t\t\t<reference key=\"NSSuperview\"/>\n\t\t\t\t<reference key=\"NSNextKeyView\"/>\n\t\t\t\t<object class=\"NSColor\" key=\"IBUIBackgroundColor\">\n\t\t\t\t\t<int key=\"NSColorSpace\">3</int>\n\t\t\t\t\t<bytes key=\"NSWhite\">MC43NQA</bytes>\n\t\t\t\t\t<object class=\"NSColorSpace\" key=\"NSCustomColorSpace\">\n\t\t\t\t\t\t<int key=\"NSID\">2</int>\n\t\t\t\t\t</object>\n\t\t\t\t</object>\n\t\t\t\t<bool key=\"IBUIClearsContextBeforeDrawing\">NO</bool>\n\t\t\t\t<object class=\"IBUISimulatedStatusBarMetrics\" key=\"IBUISimulatedStatusBarMetrics\"/>\n\t\t\t\t<object class=\"IBUIScreenMetrics\" key=\"IBUISimulatedDestinationMetrics\">\n\t\t\t\t\t<string key=\"IBUISimulatedSizeMetricsClass\">IBUIScreenMetrics</string>\n\t\t\t\t\t<object class=\"NSMutableDictionary\" key=\"IBUINormalizedOrientationToSizeMap\">\n\t\t\t\t\t\t<bool key=\"EncodedWithXMLCoder\">YES</bool>\n\t\t\t\t\t\t<array key=\"dict.sortedKeys\">\n\t\t\t\t\t\t\t<integer value=\"1\"/>\n\t\t\t\t\t\t\t<integer value=\"3\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<array key=\"dict.values\">\n\t\t\t\t\t\t\t<string>{320, 568}</string>\n\t\t\t\t\t\t\t<string>{568, 320}</string>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t</object>\n\t\t\t\t\t<string key=\"IBUITargetRuntime\">IBCocoaTouchFramework</string>\n\t\t\t\t\t<string key=\"IBUIDisplayName\">Retina 4 Full Screen</string>\n\t\t\t\t\t<int key=\"IBUIType\">2</int>\n\t\t\t\t</object>\n\t\t\t\t<string key=\"targetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t\t</object>\n\t\t</array>\n\t\t<object class=\"IBObjectContainer\" key=\"IBDocument.Objects\">\n\t\t\t<array class=\"NSMutableArray\" key=\"connectionRecords\">\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">view</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">7</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">tableview</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"542337920\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">54</int>\n\t\t\t\t</object>\n\t\t\t\t<object class=\"IBConnectionRecord\">\n\t\t\t\t\t<object class=\"IBCocoaTouchOutletConnection\" key=\"connection\">\n\t\t\t\t\t\t<string key=\"label\">dataSource</string>\n\t\t\t\t\t\t<reference key=\"source\" ref=\"542337920\"/>\n\t\t\t\t\t\t<reference key=\"destination\" ref=\"372490531\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<int key=\"connectionID\">53</int>\n\t\t\t\t</object>\n\t\t\t</array>\n\t\t\t<object class=\"IBMutableOrderedSet\" key=\"objectRecords\">\n\t\t\t\t<array key=\"orderedObjects\">\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">0</int>\n\t\t\t\t\t\t<array key=\"object\" id=\"0\"/>\n\t\t\t\t\t\t<reference key=\"children\" ref=\"1000\"/>\n\t\t\t\t\t\t<nil key=\"parent\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-1</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"372490531\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t\t<string key=\"objectName\">File's Owner</string>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">-2</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"843779117\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">6</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"774585933\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\">\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"738600801\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"542337920\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">3</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">3</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">0.0</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"601065340\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"542337920\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">4</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">4</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">0.0</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"1003816812\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"542337920\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">6</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">6</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">0.0</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<object class=\"IBNSLayoutConstraint\" id=\"890703414\">\n\t\t\t\t\t\t\t\t<reference key=\"firstItem\" ref=\"542337920\"/>\n\t\t\t\t\t\t\t\t<int key=\"firstAttribute\">5</int>\n\t\t\t\t\t\t\t\t<int key=\"relation\">0</int>\n\t\t\t\t\t\t\t\t<reference key=\"secondItem\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"secondAttribute\">5</int>\n\t\t\t\t\t\t\t\t<float key=\"multiplier\">1</float>\n\t\t\t\t\t\t\t\t<object class=\"IBLayoutConstant\" key=\"constant\">\n\t\t\t\t\t\t\t\t\t<double key=\"value\">0.0</double>\n\t\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t\t<float key=\"priority\">1000</float>\n\t\t\t\t\t\t\t\t<reference key=\"containingView\" ref=\"774585933\"/>\n\t\t\t\t\t\t\t\t<int key=\"scoringType\">8</int>\n\t\t\t\t\t\t\t\t<float key=\"scoringTypeFloat\">29</float>\n\t\t\t\t\t\t\t\t<int key=\"contentType\">3</int>\n\t\t\t\t\t\t\t</object>\n\t\t\t\t\t\t\t<reference ref=\"542337920\"/>\n\t\t\t\t\t\t</array>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"0\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">22</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"542337920\"/>\n\t\t\t\t\t\t<array class=\"NSMutableArray\" key=\"children\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">29</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"890703414\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">32</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"1003816812\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">84</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"601065340\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t\t<object class=\"IBObjectRecord\">\n\t\t\t\t\t\t<int key=\"objectID\">89</int>\n\t\t\t\t\t\t<reference key=\"object\" ref=\"738600801\"/>\n\t\t\t\t\t\t<reference key=\"parent\" ref=\"774585933\"/>\n\t\t\t\t\t</object>\n\t\t\t\t</array>\n\t\t\t</object>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"flattenedProperties\">\n\t\t\t\t<string key=\"-1.CustomClassName\">ViewController</string>\n\t\t\t\t<string key=\"-1.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"-2.CustomClassName\">UIResponder</string>\n\t\t\t\t<string key=\"-2.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"22.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<boolean value=\"NO\" key=\"22.IBViewMetadataTranslatesAutoresizingMaskIntoConstraints\"/>\n\t\t\t\t<string key=\"29.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"32.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"6.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<array key=\"6.IBViewMetadataConstraints\">\n\t\t\t\t\t<reference ref=\"890703414\"/>\n\t\t\t\t\t<reference ref=\"1003816812\"/>\n\t\t\t\t\t<reference ref=\"601065340\"/>\n\t\t\t\t\t<reference ref=\"738600801\"/>\n\t\t\t\t</array>\n\t\t\t\t<string key=\"84.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t\t<string key=\"89.IBPluginDependency\">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>\n\t\t\t</dictionary>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"unlocalizedProperties\"/>\n\t\t\t<nil key=\"activeLocalization\"/>\n\t\t\t<dictionary class=\"NSMutableDictionary\" key=\"localizations\"/>\n\t\t\t<nil key=\"sourceID\"/>\n\t\t\t<int key=\"maxID\">89</int>\n\t\t</object>\n\t\t<object class=\"IBClassDescriber\" key=\"IBDocument.Classes\"/>\n\t\t<int key=\"IBDocument.localizationMode\">0</int>\n\t\t<string key=\"IBDocument.TargetRuntimeIdentifier\">IBCocoaTouchFramework</string>\n\t\t<bool key=\"IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion\">YES</bool>\n\t\t<int key=\"IBDocument.defaultPropertyAccessControl\">3</int>\n\t\t<bool key=\"IBDocument.UseAutolayout\">YES</bool>\n\t\t<string key=\"IBCocoaTouchPluginVersion\">2083</string>\n\t</data>\n</archive>\n"
  },
  {
    "path": "Example/Example/Example/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Example/Example/Example/main.m",
    "content": "//\n//  main.m\n//  Example\n//\n//  Created by Michael Arthur on 14/10/14.\n//  Copyright (c) 2014 Jesse Bounds. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example/Example/Example.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t0B3B61448B57250B0026C6F1 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8D62AFA66EC41C7B554BB8B /* libPods.a */; };\n\t\tEAC693A319EC94C000F0627B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693A219EC94C000F0627B /* main.m */; };\n\t\tEAC693A619EC94C000F0627B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693A519EC94C000F0627B /* AppDelegate.m */; };\n\t\tEAC693A919EC94C000F0627B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693A819EC94C000F0627B /* ViewController.m */; };\n\t\tEAC693AE19EC94C000F0627B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EAC693AD19EC94C000F0627B /* Images.xcassets */; };\n\t\tEAC693C919EC94EC00F0627B /* AddViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693C719EC94EC00F0627B /* AddViewController.m */; };\n\t\tEAC693CA19EC94EC00F0627B /* AddViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EAC693C819EC94EC00F0627B /* AddViewController.xib */; };\n\t\tEAC693D119EC94F700F0627B /* ListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693CC19EC94F700F0627B /* ListViewController.m */; };\n\t\tEAC693D219EC94F700F0627B /* ListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EAC693CD19EC94F700F0627B /* ListViewController.xib */; };\n\t\tEAC693D319EC94F700F0627B /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EAC693CF19EC94F700F0627B /* LoginViewController.m */; };\n\t\tEAC693D419EC94F700F0627B /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EAC693D019EC94F700F0627B /* LoginViewController.xib */; };\n\t\tEAC693DA19EC95A700F0627B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EAC693D619EC95A700F0627B /* InfoPlist.strings */; };\n\t\tEAC693DD19EC95C800F0627B /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EAC693DC19EC95C800F0627B /* ViewController.xib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXFileReference section */\n\t\t7548EC47874C5A256237302C /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = \"Pods/Target Support Files/Pods/Pods.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t831424A6A73DAFA3814E1212 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = \"Pods/Target Support Files/Pods/Pods.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEAC6939D19EC94C000F0627B /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEAC693A119EC94C000F0627B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tEAC693A219EC94C000F0627B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tEAC693A419EC94C000F0627B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tEAC693A519EC94C000F0627B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tEAC693A719EC94C000F0627B /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tEAC693A819EC94C000F0627B /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tEAC693AD19EC94C000F0627B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\tEAC693C619EC94EC00F0627B /* AddViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddViewController.h; sourceTree = \"<group>\"; };\n\t\tEAC693C719EC94EC00F0627B /* AddViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddViewController.m; sourceTree = \"<group>\"; };\n\t\tEAC693C819EC94EC00F0627B /* AddViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddViewController.xib; sourceTree = \"<group>\"; };\n\t\tEAC693CB19EC94F700F0627B /* ListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListViewController.h; sourceTree = \"<group>\"; };\n\t\tEAC693CC19EC94F700F0627B /* ListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListViewController.m; sourceTree = \"<group>\"; };\n\t\tEAC693CD19EC94F700F0627B /* ListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListViewController.xib; sourceTree = \"<group>\"; };\n\t\tEAC693CE19EC94F700F0627B /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = \"<group>\"; };\n\t\tEAC693CF19EC94F700F0627B /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = \"<group>\"; };\n\t\tEAC693D019EC94F700F0627B /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = \"<group>\"; };\n\t\tEAC693D719EC95A700F0627B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\tEAC693DC19EC95C800F0627B /* ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ViewController.xib; sourceTree = \"<group>\"; };\n\t\tF8D62AFA66EC41C7B554BB8B /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tEAC6939A19EC94C000F0627B /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t0B3B61448B57250B0026C6F1 /* libPods.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t0665AB3D930148AD9C6AF02D /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tF8D62AFA66EC41C7B554BB8B /* libPods.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1CE09A3E15BC83048B99A0FD /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t831424A6A73DAFA3814E1212 /* Pods.debug.xcconfig */,\n\t\t\t\t7548EC47874C5A256237302C /* Pods.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEAC6939419EC94C000F0627B = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC6939F19EC94C000F0627B /* Example */,\n\t\t\t\tEAC6939E19EC94C000F0627B /* Products */,\n\t\t\t\t1CE09A3E15BC83048B99A0FD /* Pods */,\n\t\t\t\t0665AB3D930148AD9C6AF02D /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEAC6939E19EC94C000F0627B /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC6939D19EC94C000F0627B /* Example.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEAC6939F19EC94C000F0627B /* Example */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC693CB19EC94F700F0627B /* ListViewController.h */,\n\t\t\t\tEAC693CC19EC94F700F0627B /* ListViewController.m */,\n\t\t\t\tEAC693CD19EC94F700F0627B /* ListViewController.xib */,\n\t\t\t\tEAC693CE19EC94F700F0627B /* LoginViewController.h */,\n\t\t\t\tEAC693CF19EC94F700F0627B /* LoginViewController.m */,\n\t\t\t\tEAC693D019EC94F700F0627B /* LoginViewController.xib */,\n\t\t\t\tEAC693D519EC95A700F0627B /* en.lproj */,\n\t\t\t\tEAC693C619EC94EC00F0627B /* AddViewController.h */,\n\t\t\t\tEAC693C719EC94EC00F0627B /* AddViewController.m */,\n\t\t\t\tEAC693C819EC94EC00F0627B /* AddViewController.xib */,\n\t\t\t\tEAC693A419EC94C000F0627B /* AppDelegate.h */,\n\t\t\t\tEAC693A519EC94C000F0627B /* AppDelegate.m */,\n\t\t\t\tEAC693A719EC94C000F0627B /* ViewController.h */,\n\t\t\t\tEAC693A819EC94C000F0627B /* ViewController.m */,\n\t\t\t\tEAC693DC19EC95C800F0627B /* ViewController.xib */,\n\t\t\t\tEAC693AD19EC94C000F0627B /* Images.xcassets */,\n\t\t\t\tEAC693A019EC94C000F0627B /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Example;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEAC693A019EC94C000F0627B /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC693A119EC94C000F0627B /* Info.plist */,\n\t\t\t\tEAC693A219EC94C000F0627B /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEAC693D519EC95A700F0627B /* en.lproj */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC693D619EC95A700F0627B /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tpath = en.lproj;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tEAC6939C19EC94C000F0627B /* Example */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EAC693C019EC94C000F0627B /* Build configuration list for PBXNativeTarget \"Example\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tE824E0346DA8AEFE30585424 /* Check Pods Manifest.lock */,\n\t\t\t\tEAC6939919EC94C000F0627B /* Sources */,\n\t\t\t\tEAC6939A19EC94C000F0627B /* Frameworks */,\n\t\t\t\tEAC6939B19EC94C000F0627B /* Resources */,\n\t\t\t\t7E1438145A4311B6E1F83379 /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Example;\n\t\t\tproductName = Example;\n\t\t\tproductReference = EAC6939D19EC94C000F0627B /* Example.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tEAC6939519EC94C000F0627B /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0600;\n\t\t\t\tORGANIZATIONNAME = \"Jesse Bounds\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tEAC6939C19EC94C000F0627B = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = EAC6939819EC94C000F0627B /* Build configuration list for PBXProject \"Example\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = EAC6939419EC94C000F0627B;\n\t\t\tproductRefGroup = EAC6939E19EC94C000F0627B /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tEAC6939C19EC94C000F0627B /* Example */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tEAC6939B19EC94C000F0627B /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEAC693D419EC94F700F0627B /* LoginViewController.xib in Resources */,\n\t\t\t\tEAC693CA19EC94EC00F0627B /* AddViewController.xib in Resources */,\n\t\t\t\tEAC693AE19EC94C000F0627B /* Images.xcassets in Resources */,\n\t\t\t\tEAC693D219EC94F700F0627B /* ListViewController.xib in Resources */,\n\t\t\t\tEAC693DD19EC95C800F0627B /* ViewController.xib in Resources */,\n\t\t\t\tEAC693DA19EC95A700F0627B /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t7E1438145A4311B6E1F83379 /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tE824E0346DA8AEFE30585424 /* Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tEAC6939919EC94C000F0627B /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEAC693D119EC94F700F0627B /* ListViewController.m in Sources */,\n\t\t\t\tEAC693A919EC94C000F0627B /* ViewController.m in Sources */,\n\t\t\t\tEAC693D319EC94F700F0627B /* LoginViewController.m in Sources */,\n\t\t\t\tEAC693A619EC94C000F0627B /* AppDelegate.m in Sources */,\n\t\t\t\tEAC693C919EC94EC00F0627B /* AddViewController.m in Sources */,\n\t\t\t\tEAC693A319EC94C000F0627B /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\tEAC693D619EC95A700F0627B /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tEAC693D719EC95A700F0627B /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tEAC693BE19EC94C000F0627B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEAC693BF19EC94C000F0627B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEAC693C119EC94C000F0627B /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 831424A6A73DAFA3814E1212 /* Pods.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = Example/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEAC693C219EC94C000F0627B /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7548EC47874C5A256237302C /* Pods.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = Example/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tEAC6939819EC94C000F0627B /* Build configuration list for PBXProject \"Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEAC693BE19EC94C000F0627B /* Debug */,\n\t\t\t\tEAC693BF19EC94C000F0627B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEAC693C019EC94C000F0627B /* Build configuration list for PBXNativeTarget \"Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEAC693C119EC94C000F0627B /* Debug */,\n\t\t\t\tEAC693C219EC94C000F0627B /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = EAC6939519EC94C000F0627B /* Project object */;\n}\n"
  },
  {
    "path": "Example/Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Example.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/Example/Example.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Example.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/Example/Podfile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\nplatform :ios, '7.1'\n\npod 'ObjectiveDDP', :git => 'https://github.com/boundsj/ObjectiveDDP.git', :branch => 'master'\n"
  },
  {
    "path": "Example/Example/example.txt",
    "content": "if you intend to do meteor auth with your ios client then add -lcrypto to other linker flags in settings\n"
  },
  {
    "path": "Example/swiftExample/Podfile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\nplatform :ios, '7.1'\n\npod 'ObjectiveDDP', :git => 'https://github.com/boundsj/ObjectiveDDP.git', :branch => 'master'"
  },
  {
    "path": "Example/swiftExample/bridge.m",
    "content": "//\n//  bridge.m\n//  swiftddp\n//\n//  Created by Michael Arthur on 7/6/14.\n//  Copyright (c) 2014 . All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import \"MeteorClient.h\"\n#import \"ObjectiveDDP.h\"\n#import <ObjectiveDDP/MeteorClient.h>\n\n\nMeteorClient* initialiseMeteor(NSString* version, NSString* endpoint) {\n    MeteorClient *meteorClient = [[MeteorClient alloc] initWithDDPVersion:version];\n    ObjectiveDDP *ddp = [[ObjectiveDDP alloc] initWithURLString:endpoint delegate:meteorClient];\n    meteorClient.ddp = ddp;\n    [meteorClient.ddp connectWebSocket];\n    return meteorClient;\n}"
  },
  {
    "path": "Example/swiftExample/swiftddp/AddViewController.swift",
    "content": "//\n//  AddViewController.swift\n//  swiftddp\n//\n//  Created by Michael Arthur on 13/08/14.\n//  Copyright (c) 2014. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass AddViewController : UIViewController {\n    \n    \n    @IBOutlet weak var messageTextView: UITextView!\n    var delegate:AddViewControllerDelegate!\n    \n    required init(coder aDecoder: NSCoder) {\n        fatalError(\"NSCoding not supported\")\n    }\n    \n    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {\n        \n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        \n    }\n    \n    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {\n        self.view.endEditing(true)\n    }    \n    \n    @IBAction func didTouchAddButton(sender: AnyObject!) {\n        self.delegate.didAddThing(self.messageTextView.text)\n    }\n    \n    \n    \n}\n\nprotocol AddViewControllerDelegate {\n    \n    func didAddThing(message:NSString!)\n}\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/AddViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"8191\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8154\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"AddViewController\">\n            <connections>\n                <outlet property=\"messageTextView\" destination=\"11\" id=\"111\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"113\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"11\">\n                    <rect key=\"frame\" x=\"20\" y=\"96\" width=\"280\" height=\"176\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"176\" id=\"107\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <textInputTraits key=\"textInputTraits\" autocapitalizationType=\"sentences\"/>\n                </textView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"NEW TODO\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"27\">\n                    <rect key=\"frame\" x=\"20\" y=\"20\" width=\"280\" height=\"68\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"68\" id=\"80\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"43\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"62\">\n                    <rect key=\"frame\" x=\"20\" y=\"317\" width=\"280\" height=\"51\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"51\" id=\"81\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"31\"/>\n                    <state key=\"normal\" title=\"Add\">\n                        <color key=\"titleColor\" red=\"0.19607843459999999\" green=\"0.30980393290000002\" blue=\"0.52156865600000002\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <state key=\"highlighted\">\n                        <color key=\"titleColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"didTouchAddButton:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"112\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstAttribute=\"trailing\" secondItem=\"11\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"25\"/>\n                <constraint firstItem=\"11\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"26\"/>\n                <constraint firstItem=\"11\" firstAttribute=\"top\" secondItem=\"27\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"34\"/>\n                <constraint firstItem=\"27\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"59\"/>\n                <constraint firstItem=\"27\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"20\" symbolic=\"YES\" id=\"61\"/>\n                <constraint firstItem=\"62\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"67\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"62\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"71\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"27\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"91\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"62\" secondAttribute=\"bottom\" constant=\"200\" id=\"108\"/>\n            </constraints>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  swiftddp\n//\n//  Created by Michael Arthur on 7/6/14.\n//  Copyright (c) 2014 . All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n    \n    var window: UIWindow?\n    var navController: UINavigationController!\n    \n    // Override point for customization after application launch. creates our singleton\n    var meteorClient = initialiseMeteor(\"pre2\", \"wss://ddptester.meteor.com/websocket\");\n    \n    \n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n        \n        \n        \n        meteorClient.addSubscription(\"things\")\n        meteorClient.addSubscription(\"lists\")\n        \n        let loginController:LoginViewController = LoginViewController(nibName: \"LoginViewController\", bundle: nil)\n        loginController.meteor = self.meteorClient\n        \n        self.navController = UINavigationController(rootViewController:loginController)\n        self.navController.navigationBarHidden = true\n        \n        //This needs to be modified to fix the screen size issue. (Currently a Bug)\n        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)\n        self.window!.rootViewController = self.navController\n        self.window!.makeKeyAndVisible()\n        print(self.window?.frame)\n        \n        \n        \n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"reportConnection\", name: MeteorClientDidConnectNotification, object: nil)\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"reportDisconnection\", name: MeteorClientDidDisconnectNotification, object: nil)\n        \n        return true\n    }\n    \n    func reportConnection() {\n        print(\"================> connected to server!\")\n    }\n    \n    func reportDisconnection() {\n        print(\"================> disconnected from server!\")\n    }\n    \n    func applicationWillResignActive(application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n    \n    func applicationDidEnterBackground(application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n    \n    func applicationWillEnterForeground(application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    }\n    \n    func applicationDidBecomeActive(application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n    \n    func applicationWillTerminate(application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n    \n    \n}\n\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/Example-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.rebounds.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/ListViewController.swift",
    "content": "//\n//  ListViewController.swift\n//  swiftddp\n//\n//  Created by Michael Arthur on 13/08/14.\n//  Copyright (c) 2014. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass ListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {\n    \n    @IBOutlet weak var tableview: UITableView!\n    var meteor:MeteorClient!\n    var lists:M13MutableOrderedDictionary!\n    var userId:String?\n    \n    required init(coder aDecoder: NSCoder) {\n        fatalError(\"NSCoding not supported\")\n    }\n    \n    init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!, meteor: MeteorClient!) {\n        \n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        self.meteor = meteor\n        self.lists = self.meteor.collections[\"lists\"] as! M13MutableOrderedDictionary\n        \n    }\n    \n    \n    \n    \n    override func viewWillAppear(animated: Bool) {\n        self.meteor.addObserver(self, forKeyPath: \"websocketReady\", options: NSKeyValueObservingOptions.New, context: nil)\n        self.navigationItem.title = \"My Lists\"\n        self.navigationController?.navigationBarHidden = false\n        self.navigationItem.hidesBackButton = true\n        \n        let logoutButton:UIBarButtonItem = UIBarButtonItem(title: \"Logout\", style: UIBarButtonItemStyle.Plain, target: self, action: \"logout\")\n        \n        self.navigationItem.rightBarButtonItem = logoutButton\n        \n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"didReceiveUpdate:\", name: \"lists_added\", object: nil)\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"didReceiveUpdate:\", name: \"lists_removed\", object: nil)\n        \n        \n    }\n    \n    func didReceiveUpdate(notification:NSNotification) {\n        self.tableview.reloadData()\n    }\n    \n    func logout() {\n        self.meteor.logout()\n        self.navigationController?.popToRootViewControllerAnimated(true)\n    }\n    \n    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return Int(self.lists.count())\n    }\n//\n//    override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject!, change: [NSObject : AnyObject]!, context: UnsafeMutablePointer<()>) {\n//        \n//        if (keyPath == \"websocketReady\" && meteor.websocketReady) {\n//            \n//        }\n//    }\n    \n    \n    \n    var selectedList:[String:String]!\n    \n    \n    \n    \n    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cellIdentifier = \"list\"\n        var cell:UITableViewCell\n        \n        if let tmpCell: AnyObject = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) {\n            cell = tmpCell as! UITableViewCell\n        } else {\n            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier) as UITableViewCell\n        }\n        \n        \n        selectedList  = self.lists.objectAtIndex(UInt(indexPath.row)) as? [String:String]\n        cell.textLabel?.text = selectedList[\"name\"]\n        \n        let shareButton:UIButton = UIButton(type: UIButtonType.Custom) as UIButton\n        \n        shareButton.frame = CGRectMake(255.0, 5.0, 55.0, 34.0)\n        shareButton.backgroundColor = UIColor.greenColor()\n        shareButton.setTitle(\"Share\", forState: UIControlState.Normal)\n        shareButton.addTarget(self, action: \"didClickShareButton:forEvent:\", forControlEvents: .TouchUpInside)\n        \n        cell.addSubview(shareButton)\n        \n        \n        return cell\n    }\n    \n    var shareWithTF:UITextField!\n    \n    func didClickShareButton(sender:AnyObject!,forEvent event:UIEvent!) {\n        let touch = event.allTouches()! as Set<UITouch>\n        let location:CGPoint = touch.first!.locationInView(self.view)\n        \n        let view:UIView = UIView(frame: CGRectMake(0.0, location.y, 320.0, 100.0))\n        view.backgroundColor = UIColor.whiteColor()\n        let shareWithTextField:UITextField = UITextField(frame: CGRectMake(10.0, 50.0, 240.0, 44.0))\n        shareWithTF = shareWithTextField\n        shareWithTextField.borderStyle = UITextBorderStyle.Line\n        let button:UIButton = UIButton(type: UIButtonType.Custom) as UIButton\n        button.frame = CGRectMake(255.0, 50.0, 60.0, 44.0)\n        button.backgroundColor = UIColor.greenColor()\n        button.setTitle(\"Send\", forState: UIControlState.Normal)\n        button.addTarget(self, action: \"didClickShareWithButton:forEvent:\", forControlEvents: .TouchUpInside)\n        view .addSubview(shareWithTextField)\n        view .addSubview(button)\n        \n        let modalBackground:UIView = UIView(frame: self.view.frame)\n        modalBackground.backgroundColor = UIColor.blackColor()\n        modalBackground.alpha = 0.7\n        \n        self.view .addSubview(modalBackground)\n        self.view .addSubview(view)\n        \n    }\n    \n    func didClickShareWithButton(sender: AnyObject!, forEvent event:UIEvent!) {\n        let id = selectedList[\"_id\"] as String!\n        let parameters = [[\"_id\":id!], [\"set\": [\"share_with\":shareWithTF.text!]]] //This has to be an NSArray\n        self.meteor.callMethodName(\"/lists/update\", parameters: parameters, responseCallback: {(response, error) -> Void in\n            \n            if((error) != nil) {\n                self.handleFailedShare(error)\n                return\n            }\n            self.handleSuccessfulShare()\n            }\n        )\n        self.view.subviews.last?.removeFromSuperview()\n        self.view.subviews.last?.removeFromSuperview()\n        \n    }\n    \n    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {\n        return true\n    }\n    \n    func tableView(tableView: UITableView,commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){\n        var list = self.lists.objectAtIndex(UInt(indexPath.row)) as! [String:AnyObject]\n        let id = list[\"_id\"] as! String\n        self.meteor.callMethodName(\"/lists/remove\", parameters: [[\"_id\":id]], responseCallback: nil)\n    }\n    \n    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {\n        var list = self.lists.objectAtIndex(UInt(indexPath.row)) as! [String:AnyObject]\n        let viewController:ViewController = ViewController(nibNameOrNil: \"ViewController\", bundle: nil, meteor: self.meteor, listName: list[\"name\"] as! String)\n        \n        viewController.userId = self.userId\n        self.navigationController?.pushViewController(viewController, animated: true)\n    }\n    \n    func handleSuccessfulShare() {\n        UIAlertView(title: \"Shared\", message:\"Success\", delegate: nil, cancelButtonTitle: \"Dismiss\").show()\n    }\n    \n    func handleFailedShare(error: NSError) {\n        UIAlertView(title: \"Meteor Todos\", message:error.localizedDescription, delegate: nil, cancelButtonTitle: \"Try Again\").show()\n    }\n    \n    \n    \n}"
  },
  {
    "path": "Example/swiftExample/swiftddp/ListViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"8191\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8154\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ListViewController\">\n            <connections>\n                <outlet property=\"tableview\" destination=\"4\" id=\"O2i-je-6bV\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"LOj-w0-8qC\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"4vR-t4-21n\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"qhj-a1-dmf\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"4\" firstAttribute=\"trailing\" secondItem=\"1\" secondAttribute=\"trailing\" id=\"9\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" id=\"11\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"bottom\" secondItem=\"1\" secondAttribute=\"bottom\" id=\"12\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" id=\"28\"/>\n            </constraints>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/LoginViewController.swift",
    "content": "//\n//  LoginViewController.swift\n//  swiftddp\n//\n//  Created by Michael Arthur on 12/08/14.\n//  Copyright (c) 2014. All rights reserved.\n//\n\nimport Foundation\nimport UIKit\n\nclass LoginViewController: UIViewController {\n    \n    \n    @IBOutlet weak var email: UITextField!\n    @IBOutlet weak var password: UITextField!\n    \n    @IBOutlet weak var connectionStatusLight: UIImageView!\n    @IBOutlet weak var connectionStatusText: UILabel!\n    var meteor:MeteorClient!\n    \n    override func viewWillAppear(animated: Bool) {\n        let observingOption = NSKeyValueObservingOptions.New\n        meteor.addObserver(self, forKeyPath:\"websocketReady\", options: observingOption, context:nil)\n    }\n    \n    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {\n        \n        if (keyPath == \"websocketReady\" && meteor.websocketReady) {\n            connectionStatusText.text = \"Connected to Todo Server\"\n            let image:UIImage = UIImage(named: \"green_light.png\")!\n            connectionStatusLight.image = image\n        }\n        \n    }\n\n    \n    \n    @IBAction func didTapLoginButton(sender: AnyObject) {\n        if (!meteor.websocketReady) {\n            let notConnectedAlert = UIAlertView(title: \"Connection Error\", message: \"Can't find the Todo server, try again\", delegate: nil, cancelButtonTitle: \"OK\")\n            notConnectedAlert.show()\n            return\n        }\n        \n        meteor.logonWithEmail(self.email.text, password: self.password.text) {(response, error) -> Void in\n            \n            if((error) != nil) {\n                self.handleFailedAuth(error)\n                return\n            }\n            self.handleSuccessfulAuth()\n        }\n    }\n    \n    func handleSuccessfulAuth() {\n        let listViewController = ListViewController(nibName: \"ListViewController\", bundle: nil, meteor: self.meteor)\n        \n        listViewController.userId = self.meteor.userId\n        self.navigationController?.pushViewController(listViewController, animated: true)\n    }\n    \n    func handleFailedAuth(error: NSError) {\n        UIAlertView(title: \"Meteor Todos\", message:error.localizedDescription, delegate: nil, cancelButtonTitle: \"Try Again\").show()\n    }\n    \n    @IBAction func didTapSayHiButton(sender: AnyObject) {\n        self.meteor.callMethodName(\"sayHelloTo\", parameters:[self.email.text!]) {(response, error) -> Void in\n            \n            if((error) != nil) {\n                self.handleFailedAuth(error)\n                return\n            }\n            let message = response[\"result\"] as! String\n            UIAlertView(title: \"Meteor Todos\", message: message, delegate: nil, cancelButtonTitle:\"Great\").show()\n        }\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {\n        self.view.endEditing(true)\n    }\n    \n    \n}\n\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/LoginViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"8191\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8154\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"LoginViewController\">\n            <connections>\n                <outlet property=\"connectionStatusLight\" destination=\"95\" id=\"KrX-7d-NZI\"/>\n                <outlet property=\"connectionStatusText\" destination=\"111\" id=\"JN1-S9-Wn5\"/>\n                <outlet property=\"email\" destination=\"4\" id=\"BXQ-UI-OUJ\"/>\n                <outlet property=\"password\" destination=\"17\" id=\"aFI-zW-c5Q\"/>\n                <outlet property=\"view\" destination=\"1\" id=\"499-2p-HxI\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"1\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"jesse@rebounds.net\" borderStyle=\"line\" placeholder=\"username\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"4\">\n                    <rect key=\"frame\" x=\"20\" y=\"147\" width=\"280\" height=\"46\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"46\" id=\"16\"/>\n                    </constraints>\n                    <nil key=\"textColor\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"18\"/>\n                    <textInputTraits key=\"textInputTraits\"/>\n                </textField>\n                <textField opaque=\"NO\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"left\" contentVerticalAlignment=\"center\" text=\"airport\" borderStyle=\"line\" placeholder=\"password\" minimumFontSize=\"17\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"17\">\n                    <rect key=\"frame\" x=\"20\" y=\"201\" width=\"280\" height=\"46\"/>\n                    <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"46\" id=\"18\"/>\n                    </constraints>\n                    <nil key=\"textColor\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"18\"/>\n                    <textInputTraits key=\"textInputTraits\" secureTextEntry=\"YES\"/>\n                </textField>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"33\">\n                    <rect key=\"frame\" x=\"20\" y=\"263\" width=\"280\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"39\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                    <state key=\"normal\" title=\"Login\">\n                        <color key=\"titleColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <state key=\"highlighted\">\n                        <color key=\"titleColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"didTapLoginButton:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"SjW-vH-7nE\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"abm-Si-OaD\">\n                    <rect key=\"frame\" x=\"20\" y=\"315\" width=\"280\" height=\"44\"/>\n                    <color key=\"backgroundColor\" red=\"0.90196079019999997\" green=\"0.90196079019999997\" blue=\"0.90196079019999997\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"44\" id=\"EVb-Xo-SeN\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"15\"/>\n                    <state key=\"normal\" title=\"Say Hello\">\n                        <color key=\"titleColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                        <color key=\"titleShadowColor\" white=\"0.5\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <state key=\"highlighted\">\n                        <color key=\"titleColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </state>\n                    <connections>\n                        <action selector=\"didTapSayHiButton:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"47Q-Pl-3X5\"/>\n                    </connections>\n                </button>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Meteor TodoS\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"40\">\n                    <rect key=\"frame\" x=\"20\" y=\"82\" width=\"280\" height=\"41\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"height\" constant=\"41\" id=\"61\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"35\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" image=\"red_light.png\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"95\">\n                    <rect key=\"frame\" x=\"280\" y=\"528\" width=\"20\" height=\"20\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"20\" id=\"106\"/>\n                        <constraint firstAttribute=\"height\" constant=\"20\" id=\"107\"/>\n                    </constraints>\n                </imageView>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" text=\"Not Connected to Todo Server\" textAlignment=\"right\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"111\">\n                    <rect key=\"frame\" x=\"20\" y=\"528\" width=\"256\" height=\"21\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" constant=\"256\" id=\"141\"/>\n                    </constraints>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"15\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"4\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"13\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"4\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"15\"/>\n                <constraint firstItem=\"17\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"22\"/>\n                <constraint firstItem=\"17\" firstAttribute=\"top\" secondItem=\"4\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"23\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"17\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"24\"/>\n                <constraint firstItem=\"33\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"36\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"33\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"38\"/>\n                <constraint firstItem=\"40\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"46\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"40\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"48\"/>\n                <constraint firstItem=\"33\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"263\" id=\"92\"/>\n                <constraint firstItem=\"40\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"82\" id=\"93\"/>\n                <constraint firstItem=\"4\" firstAttribute=\"top\" secondItem=\"1\" secondAttribute=\"top\" constant=\"147\" id=\"94\"/>\n                <constraint firstAttribute=\"trailing\" secondItem=\"95\" secondAttribute=\"trailing\" constant=\"20\" symbolic=\"YES\" id=\"109\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"centerY\" secondItem=\"95\" secondAttribute=\"centerY\" id=\"138\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"top\" secondItem=\"95\" secondAttribute=\"top\" id=\"139\"/>\n                <constraint firstItem=\"111\" firstAttribute=\"leading\" secondItem=\"1\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"142\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"95\" secondAttribute=\"bottom\" constant=\"20\" symbolic=\"YES\" id=\"143\"/>\n                <constraint firstItem=\"abm-Si-OaD\" firstAttribute=\"trailing\" secondItem=\"33\" secondAttribute=\"trailing\" id=\"E8o-Dq-uWz\"/>\n                <constraint firstItem=\"abm-Si-OaD\" firstAttribute=\"top\" secondItem=\"33\" secondAttribute=\"bottom\" constant=\"8\" symbolic=\"YES\" id=\"IcR-I3-Rv4\"/>\n                <constraint firstItem=\"abm-Si-OaD\" firstAttribute=\"leading\" secondItem=\"33\" secondAttribute=\"leading\" id=\"r71-nk-QOW\"/>\n            </constraints>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"red_light.png\" width=\"50\" height=\"50\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/ViewController.swift",
    "content": "//\n//  ViewController.swift\n//  swiftddp\n//\n//  Created by Michael Arthur on 7/6/14.\n//  Copyright (c) 2014. All rights reserved.\n//\n\nimport UIKit\n\nclass ViewController: UIViewController,UITableViewDataSource, AddViewControllerDelegate {\n    \n    var meteor:MeteorClient!\n    var listName:String!\n    var userId:String!\n    \n    @IBOutlet weak var tableview: UITableView!\n    \n    required init(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)!\n        \n        \n    }\n    \n    override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {\n        \n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        \n    }\n    \n    init(nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!, meteor: MeteorClient!, listName:String!) {\n        \n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        // if(self != nil) {\n        self.meteor = meteor\n        self.listName = listName\n        //}\n    }\n    \n    override func viewWillAppear(animated: Bool) {\n        self.navigationItem.title = self.listName\n        let addButton:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: \"didTouchAdd:\")\n        \n        self.navigationItem.setRightBarButtonItem(addButton, animated: true)\n\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"didReceiveUpdate:\", name: \"things_added\", object: nil)\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"didReceiveUpdate:\", name: \"things_changed\", object: nil)\n        NSNotificationCenter.defaultCenter().addObserver(self, selector: \"didReceiveUpdate:\", name: \"things_removed\", object: nil)\n    }\n    \n    override func viewWillDisappear(animated: Bool) {\n        NSNotificationCenter.defaultCenter().removeObserver(self)\n    }\n    \n    \n    func didReceiveUpdate(notification:NSNotification) {\n        self.tableview.reloadData()\n    }\n    \n    func computedList() -> NSArray {\n        \n        \n        let pred:NSPredicate = NSPredicate(format: \"(listName like %@)\", self.listName)\n        let temp = self.meteor.collections[\"things\"] as! M13MutableOrderedDictionary\n        let temp2 = temp.allObjects() as NSArray\n        return temp2.filteredArrayUsingPredicate(pred)\n        \n        \n    }\n    \n    @IBAction func didTouchAdd(sender: AnyObject) {\n        let addController = AddViewController(nibName: \"AddViewController\", bundle: nil)\n        \n        addController.delegate = self\n        self.presentViewController(addController, animated: true, completion: nil)\n    }\n    \n    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        if(self.meteor.collections[\"things\"] != nil){\n            \n            return self.computedList().count\n        }\n        return 0\n    }\n    \n    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cellIdentifier:String! = \"thing\"\n        var cell:UITableViewCell\n        \n        if let tmpCell: AnyObject = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) {\n            cell = tmpCell as! UITableViewCell\n        } else {\n            cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier) as UITableViewCell\n        }\n        \n        if(self.meteor.collections[\"things\"] != nil){\n            let thing:NSDictionary = self.computedList()[indexPath.row] as! NSDictionary\n            cell.textLabel?.text = thing[\"msg\"] as? String\n            return cell\n        }\n        cell.textLabel?.text = \"dummy\"\n        return cell\n        \n    }\n    \n    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {\n        return true\n    }\n    \n    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {\n        if(editingStyle == UITableViewCellEditingStyle.Delete) {\n            //If statement prevents crash\n            if(self.meteor.collections[\"things\"] != nil){\n                let thing:NSDictionary = self.computedList()[indexPath.row] as! NSDictionary\n                let thingy = thing[\"_id\"] as! String\n                self.meteor.callMethodName(\"/things/remove\", parameters: [[\"_id\":thingy]], responseCallback: nil)\n            }\n        }\n    }\n    \n    func didAddThing(message: NSString!) {\n        self.dismissViewControllerAnimated(true, completion: nil)\n        let parameters:NSArray = [[\"_id\": NSUUID().UUIDString,\n            \"msg\":message,\n            \"owner\":self.userId,\n            \"listName\":self.listName]]\n        \n        self.meteor.callMethodName(\"/things/insert\", parameters: parameters as [AnyObject], responseCallback: nil)\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do any additional setup after loading the view, typically from a nib.\n        \n        \n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n    \n}\n\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/ViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"8191\" systemVersion=\"14F27\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"8154\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ViewController\">\n            <connections>\n                <outlet property=\"tableview\" destination=\"22\" id=\"92\"/>\n                <outlet property=\"view\" destination=\"6\" id=\"93\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"6\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"22\" sectionFooterHeight=\"22\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"22\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"96\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"0.75\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"22\" firstAttribute=\"leading\" secondItem=\"6\" secondAttribute=\"leading\" id=\"29\"/>\n                <constraint firstItem=\"22\" firstAttribute=\"trailing\" secondItem=\"6\" secondAttribute=\"trailing\" id=\"32\"/>\n                <constraint firstItem=\"22\" firstAttribute=\"bottom\" secondItem=\"6\" secondAttribute=\"bottom\" id=\"84\"/>\n                <constraint firstItem=\"22\" firstAttribute=\"top\" secondItem=\"6\" secondAttribute=\"top\" id=\"89\"/>\n            </constraints>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp/images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/swiftExample/swiftddp/images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Example/swiftExample/swiftddp-Bridging-Header.h",
    "content": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n#import <SocketRocket/SRWebSocket.h>\n#import \"MeteorClient.h\"\n#import \"ObjectiveDDP.h\"\n#import <ObjectiveDDP/MeteorClient.h>\n#import <ObjectiveDDP/BSONIdGenerator.h>\n\n\n#import \"bridge.m\""
  },
  {
    "path": "Example/swiftExample/swiftddp.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t028E8AFD1969A9E8006F2115 /* bridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 028E8AFC1969A9E8006F2115 /* bridge.m */; };\n\t\t02E399621969A81300E2FE77 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E399611969A81300E2FE77 /* AppDelegate.swift */; };\n\t\t02E399641969A81300E2FE77 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E399631969A81300E2FE77 /* ViewController.swift */; };\n\t\t02E399691969A81300E2FE77 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 02E399681969A81300E2FE77 /* Images.xcassets */; };\n\t\t02E399751969A81300E2FE77 /* swiftddpTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02E399741969A81300E2FE77 /* swiftddpTests.swift */; };\n\t\tEA1C0B47199AEFC4005545A7 /* ListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1C0B46199AEFC4005545A7 /* ListViewController.swift */; };\n\t\tEA8054BE199B5C3B00805893 /* AddViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA8054BD199B5C3B00805893 /* AddViewController.swift */; };\n\t\tEA97639619998E2E00866844 /* ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EA97639519998E2E00866844 /* ViewController.xib */; };\n\t\tEA97639A19998E4500866844 /* AddViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EA97639719998E4500866844 /* AddViewController.xib */; };\n\t\tEA97639B19998E4500866844 /* ListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EA97639819998E4500866844 /* ListViewController.xib */; };\n\t\tEA97639C19998E4500866844 /* LoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = EA97639919998E4500866844 /* LoginViewController.xib */; };\n\t\tEA9763A219998E7600866844 /* green_light.png in Resources */ = {isa = PBXBuildFile; fileRef = EA97639D19998E7600866844 /* green_light.png */; };\n\t\tEA9763A319998E7600866844 /* green_light@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EA97639E19998E7600866844 /* green_light@2x.png */; };\n\t\tEA9763A419998E7600866844 /* red_light.png in Resources */ = {isa = PBXBuildFile; fileRef = EA97639F19998E7600866844 /* red_light.png */; };\n\t\tEA9763A519998E7600866844 /* red_light@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EA9763A019998E7600866844 /* red_light@2x.png */; };\n\t\tEA9763A619998E7600866844 /* Example-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = EA9763A119998E7600866844 /* Example-Info.plist */; };\n\t\tEA9763A81999905400866844 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9763A71999905400866844 /* LoginViewController.swift */; };\n\t\tF085ED994E3844018475E51E /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBABBCC4B77C49EAA6854302 /* libPods.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t02E3996F1969A81300E2FE77 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 02E399541969A81300E2FE77 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 02E3995B1969A81300E2FE77;\n\t\t\tremoteInfo = swiftddp;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t028E8AFB1969A9E8006F2115 /* swiftddp-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"swiftddp-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t028E8AFC1969A9E8006F2115 /* bridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = bridge.m; sourceTree = \"<group>\"; };\n\t\t02E3995C1969A81300E2FE77 /* swiftddp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = swiftddp.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t02E399601969A81300E2FE77 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t02E399611969A81300E2FE77 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t02E399631969A81300E2FE77 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = \"<group>\"; };\n\t\t02E399681969A81300E2FE77 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t02E3996E1969A81300E2FE77 /* swiftddpTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = swiftddpTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t02E399731969A81300E2FE77 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t02E399741969A81300E2FE77 /* swiftddpTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = swiftddpTests.swift; sourceTree = \"<group>\"; };\n\t\t68DC64A1F8BABCBDDEDFBCE4 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = \"Pods/Target Support Files/Pods/Pods.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tEA1C0B46199AEFC4005545A7 /* ListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListViewController.swift; sourceTree = \"<group>\"; };\n\t\tEA8054BD199B5C3B00805893 /* AddViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddViewController.swift; sourceTree = \"<group>\"; };\n\t\tEA97639519998E2E00866844 /* ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ViewController.xib; sourceTree = \"<group>\"; };\n\t\tEA97639719998E4500866844 /* AddViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AddViewController.xib; sourceTree = \"<group>\"; };\n\t\tEA97639819998E4500866844 /* ListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListViewController.xib; sourceTree = \"<group>\"; };\n\t\tEA97639919998E4500866844 /* LoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LoginViewController.xib; sourceTree = \"<group>\"; };\n\t\tEA97639D19998E7600866844 /* green_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = green_light.png; sourceTree = \"<group>\"; };\n\t\tEA97639E19998E7600866844 /* green_light@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"green_light@2x.png\"; sourceTree = \"<group>\"; };\n\t\tEA97639F19998E7600866844 /* red_light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = red_light.png; sourceTree = \"<group>\"; };\n\t\tEA9763A019998E7600866844 /* red_light@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"red_light@2x.png\"; sourceTree = \"<group>\"; };\n\t\tEA9763A119998E7600866844 /* Example-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = \"Example-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tEA9763A71999905400866844 /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = \"<group>\"; };\n\t\tEBABBCC4B77C49EAA6854302 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFAD4C15CAE906A029B1F8C9C /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = \"Pods/Target Support Files/Pods/Pods.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t02E399591969A81300E2FE77 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tF085ED994E3844018475E51E /* libPods.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t02E3996B1969A81300E2FE77 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t02E399531969A81300E2FE77 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t028E8AFB1969A9E8006F2115 /* swiftddp-Bridging-Header.h */,\n\t\t\t\t028E8AFC1969A9E8006F2115 /* bridge.m */,\n\t\t\t\t02E3995E1969A81300E2FE77 /* swiftddp */,\n\t\t\t\t02E399711969A81300E2FE77 /* swiftddpTests */,\n\t\t\t\t02E3995D1969A81300E2FE77 /* Products */,\n\t\t\t\t71997703989144BE8A6BA401 /* Frameworks */,\n\t\t\t\t2ADD1B4FCCC14601FC099EA0 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02E3995D1969A81300E2FE77 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02E3995C1969A81300E2FE77 /* swiftddp.app */,\n\t\t\t\t02E3996E1969A81300E2FE77 /* swiftddpTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02E3995E1969A81300E2FE77 /* swiftddp */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEA8054BD199B5C3B00805893 /* AddViewController.swift */,\n\t\t\t\tEA97639719998E4500866844 /* AddViewController.xib */,\n\t\t\t\tEA1C0B46199AEFC4005545A7 /* ListViewController.swift */,\n\t\t\t\tEA97639819998E4500866844 /* ListViewController.xib */,\n\t\t\t\tEA97639919998E4500866844 /* LoginViewController.xib */,\n\t\t\t\tEA9763A71999905400866844 /* LoginViewController.swift */,\n\t\t\t\tEA97639519998E2E00866844 /* ViewController.xib */,\n\t\t\t\t02E399631969A81300E2FE77 /* ViewController.swift */,\n\t\t\t\t02E399611969A81300E2FE77 /* AppDelegate.swift */,\n\t\t\t\t02E399681969A81300E2FE77 /* Images.xcassets */,\n\t\t\t\t02E3995F1969A81300E2FE77 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = swiftddp;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02E3995F1969A81300E2FE77 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEA97639D19998E7600866844 /* green_light.png */,\n\t\t\t\tEA97639E19998E7600866844 /* green_light@2x.png */,\n\t\t\t\tEA97639F19998E7600866844 /* red_light.png */,\n\t\t\t\tEA9763A019998E7600866844 /* red_light@2x.png */,\n\t\t\t\tEA9763A119998E7600866844 /* Example-Info.plist */,\n\t\t\t\t02E399601969A81300E2FE77 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02E399711969A81300E2FE77 /* swiftddpTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02E399741969A81300E2FE77 /* swiftddpTests.swift */,\n\t\t\t\t02E399721969A81300E2FE77 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = swiftddpTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t02E399721969A81300E2FE77 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t02E399731969A81300E2FE77 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t2ADD1B4FCCC14601FC099EA0 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFAD4C15CAE906A029B1F8C9C /* Pods.debug.xcconfig */,\n\t\t\t\t68DC64A1F8BABCBDDEDFBCE4 /* Pods.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t71997703989144BE8A6BA401 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEBABBCC4B77C49EAA6854302 /* libPods.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t02E3995B1969A81300E2FE77 /* swiftddp */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 02E399781969A81300E2FE77 /* Build configuration list for PBXNativeTarget \"swiftddp\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tF9079674B49640559CB2094C /* Check Pods Manifest.lock */,\n\t\t\t\t02E399581969A81300E2FE77 /* Sources */,\n\t\t\t\t02E399591969A81300E2FE77 /* Frameworks */,\n\t\t\t\t02E3995A1969A81300E2FE77 /* Resources */,\n\t\t\t\t6DD3D46A18134164A66CCBBE /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = swiftddp;\n\t\t\tproductName = swiftddp;\n\t\t\tproductReference = 02E3995C1969A81300E2FE77 /* swiftddp.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t02E3996D1969A81300E2FE77 /* swiftddpTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 02E3997B1969A81300E2FE77 /* Build configuration list for PBXNativeTarget \"swiftddpTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t02E3996A1969A81300E2FE77 /* Sources */,\n\t\t\t\t02E3996B1969A81300E2FE77 /* Frameworks */,\n\t\t\t\t02E3996C1969A81300E2FE77 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t02E399701969A81300E2FE77 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = swiftddpTests;\n\t\t\tproductName = swiftddpTests;\n\t\t\tproductReference = 02E3996E1969A81300E2FE77 /* swiftddpTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t02E399541969A81300E2FE77 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0700;\n\t\t\t\tORGANIZATIONNAME = RainHaven;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t02E3995B1969A81300E2FE77 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t};\n\t\t\t\t\t02E3996D1969A81300E2FE77 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.0;\n\t\t\t\t\t\tTestTargetID = 02E3995B1969A81300E2FE77;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 02E399571969A81300E2FE77 /* Build configuration list for PBXProject \"swiftddp\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 02E399531969A81300E2FE77;\n\t\t\tproductRefGroup = 02E3995D1969A81300E2FE77 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t02E3995B1969A81300E2FE77 /* swiftddp */,\n\t\t\t\t02E3996D1969A81300E2FE77 /* swiftddpTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t02E3995A1969A81300E2FE77 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEA9763A219998E7600866844 /* green_light.png in Resources */,\n\t\t\t\tEA97639C19998E4500866844 /* LoginViewController.xib in Resources */,\n\t\t\t\tEA9763A419998E7600866844 /* red_light.png in Resources */,\n\t\t\t\tEA9763A619998E7600866844 /* Example-Info.plist in Resources */,\n\t\t\t\tEA97639A19998E4500866844 /* AddViewController.xib in Resources */,\n\t\t\t\tEA97639619998E2E00866844 /* ViewController.xib in Resources */,\n\t\t\t\tEA97639B19998E4500866844 /* ListViewController.xib in Resources */,\n\t\t\t\t02E399691969A81300E2FE77 /* Images.xcassets in Resources */,\n\t\t\t\tEA9763A319998E7600866844 /* green_light@2x.png in Resources */,\n\t\t\t\tEA9763A519998E7600866844 /* red_light@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t02E3996C1969A81300E2FE77 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t6DD3D46A18134164A66CCBBE /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF9079674B49640559CB2094C /* Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t02E399581969A81300E2FE77 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEA9763A81999905400866844 /* LoginViewController.swift in Sources */,\n\t\t\t\t028E8AFD1969A9E8006F2115 /* bridge.m in Sources */,\n\t\t\t\tEA8054BE199B5C3B00805893 /* AddViewController.swift in Sources */,\n\t\t\t\t02E399641969A81300E2FE77 /* ViewController.swift in Sources */,\n\t\t\t\tEA1C0B47199AEFC4005545A7 /* ListViewController.swift in Sources */,\n\t\t\t\t02E399621969A81300E2FE77 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t02E3996A1969A81300E2FE77 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t02E399751969A81300E2FE77 /* swiftddpTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t02E399701969A81300E2FE77 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 02E3995B1969A81300E2FE77 /* swiftddp */;\n\t\t\ttargetProxy = 02E3996F1969A81300E2FE77 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t02E399761969A81300E2FE77 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t02E399771969A81300E2FE77 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t02E399791969A81300E2FE77 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = FAD4C15CAE906A029B1F8C9C /* Pods.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tINFOPLIST_FILE = swiftddp/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"bounds.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"swiftddp-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t02E3997A1969A81300E2FE77 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 68DC64A1F8BABCBDDEDFBCE4 /* Pods.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tINFOPLIST_FILE = swiftddp/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"bounds.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"swiftddp-Bridging-Header.h\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t02E3997C1969A81300E2FE77 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/swiftddp.app/swiftddp\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swiftddpTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"bounds.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t02E3997D1969A81300E2FE77 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(BUILT_PRODUCTS_DIR)/swiftddp.app/swiftddp\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = swiftddpTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMETAL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"bounds.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUNDLE_LOADER)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t02E399571969A81300E2FE77 /* Build configuration list for PBXProject \"swiftddp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t02E399761969A81300E2FE77 /* Debug */,\n\t\t\t\t02E399771969A81300E2FE77 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t02E399781969A81300E2FE77 /* Build configuration list for PBXNativeTarget \"swiftddp\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t02E399791969A81300E2FE77 /* Debug */,\n\t\t\t\t02E3997A1969A81300E2FE77 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t02E3997B1969A81300E2FE77 /* Build configuration list for PBXNativeTarget \"swiftddpTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t02E3997C1969A81300E2FE77 /* Debug */,\n\t\t\t\t02E3997D1969A81300E2FE77 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 02E399541969A81300E2FE77 /* Project object */;\n}\n"
  },
  {
    "path": "Example/swiftExample/swiftddp.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:swiftddp.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/swiftExample/swiftddp.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version='1.0' encoding='UTF-8'?><Workspace version='1.0'><FileRef location='group:swiftddp.xcodeproj'/><FileRef location='group:Pods/Pods.xcodeproj'/></Workspace>"
  },
  {
    "path": "Example/swiftExample/swiftddpTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/swiftExample/swiftddpTests/swiftddpTests.swift",
    "content": "//\n//  swiftddpTests.swift\n//  swiftddpTests\n//\n//  Created by Michael Arthur on 7/6/14.\n//  Copyright (c) 2014 . All rights reserved.\n//\n\nimport XCTest\n\nclass swiftddpTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        XCTAssert(true, \"Pass\")\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measureBlock() {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Example/todos/.meteor/.finished-upgraders",
    "content": "# This file contains information which helps Meteor properly upgrade your\n# app when you run 'meteor update'. You should check it into version control\n# with your project.\n\nnotices-for-0.9.0\nnotices-for-0.9.1\n0.9.4-platform-file\n"
  },
  {
    "path": "Example/todos/.meteor/.gitignore",
    "content": "local\n"
  },
  {
    "path": "Example/todos/.meteor/.id",
    "content": "# This file contains a token that is unique to your project.\n# Check it into your repository along with the rest of this directory.\n# It can be used for purposes such as:\n#   - ensuring you don't accidentally deploy one app on top of another\n#   - providing package authors with aggregated statistics\n\n1tbs2bs1n5hbv0mlpjek\n"
  },
  {
    "path": "Example/todos/.meteor/packages",
    "content": "# Meteor packages used by this project, one per line.\n#\n# 'meteor add' and 'meteor remove' will edit this file for you,\n# but you can also edit it by hand.\n\naccounts-password\naccounts-ui\nbootstrap\ninsecure\nstandard-app-packages\n"
  },
  {
    "path": "Example/todos/.meteor/platforms",
    "content": "server\nbrowser\n"
  },
  {
    "path": "Example/todos/.meteor/release",
    "content": "METEOR@1.0\n"
  },
  {
    "path": "Example/todos/.meteor/versions",
    "content": "accounts-base@1.1.2\naccounts-password@1.0.4\naccounts-ui-unstyled@1.1.4\naccounts-ui@1.1.3\napplication-configuration@1.0.3\nautoupdate@1.1.3\nbase64@1.0.1\nbinary-heap@1.0.1\nblaze-tools@1.0.1\nblaze@2.0.3\nboilerplate-generator@1.0.1\nbootstrap@1.0.1\ncallback-hook@1.0.1\ncheck@1.0.2\nctl-helper@1.0.4\nctl@1.0.2\nddp@1.0.11\ndeps@1.0.5\nejson@1.0.4\nemail@1.0.4\nfastclick@1.0.1\nfollower-livedata@1.0.2\ngeojson-utils@1.0.1\nhtml-tools@1.0.2\nhtmljs@1.0.2\nhttp@1.0.8\nid-map@1.0.1\ninsecure@1.0.1\njquery@1.0.1\njson@1.0.1\nlaunch-screen@1.0.0\nless@1.0.11\nlivedata@1.0.11\nlocalstorage@1.0.1\nlogging@1.0.5\nmeteor-platform@1.2.0\nmeteor@1.1.3\nminifiers@1.1.2\nminimongo@1.0.5\nmobile-status-bar@1.0.1\nmongo@1.0.8\nnpm-bcrypt@0.7.7\nobserve-sequence@1.0.3\nordered-dict@1.0.1\nrandom@1.0.1\nreactive-dict@1.0.4\nreactive-var@1.0.3\nreload@1.1.1\nretry@1.0.1\nroutepolicy@1.0.2\nservice-configuration@1.0.2\nsession@1.0.4\nsha@1.0.1\nspacebars-compiler@1.0.3\nspacebars@1.0.3\nsrp@1.0.1\nstandard-app-packages@1.0.3\ntemplating@1.0.9\ntracker@1.0.3\nui@1.0.4\nunderscore@1.0.1\nurl@1.0.2\nwebapp-hashing@1.0.1\nwebapp@1.1.4\n"
  },
  {
    "path": "Example/todos/server.css",
    "content": "/* CSS declarations go here */\n"
  },
  {
    "path": "Example/todos/server.html",
    "content": "<head>\n  <title>TodoS</title>\n</head>\n\n<body>\n  {{> header }}\n  {{> main }}\n</body>\n\n<template name=\"header\">\n<div class=\"navbar\">\n  <div class=\"navbar-inner\">\n    <a class=\"brand\" href=\"#\">TodoS</a>\n    <div style=\"float: right\">\n        {{> loginButtons align=\"right\" }}\n    </div>\n  </div>\n</div>\n</template>\n\n<template name=\"main\">\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"span2\">\n            <h3>Lists:</h3>\n            <ul>\n                {{#each lists}}\n                    <div class=\"row\">\n                    <li class=\"list-name pull-left\">{{name}}</li>\n                    <i class=\"remove-list icon-minus-sign pull-right\"></i>\n                    <i rel=\"popover\" class=\"share-list {{ _id }} icon-share pull-right\"></i>\n                    </div>\n                {{/each}}\n            </ul>\n            <button class=\"add-list\"><i class=\"icon-plus-sign\"></i></button>\n            <input class=\"list-input hidden\" type=\"text\" placeholder=\"List Name\">\n        </div>\n        <div class=\"span10\">\n            <h3>Things:</h3>\n            <ul>\n                {{#each things}}\n                  <div class=\"well\">\n                    <li>{{msg}} <button class=\"remove-item\">Delete</button></li>\n                  </div>\n                {{/each}}\n            </ul>\n            <button class=\"add-item\"><i class=\"icon-plus-sign\"></i></button>\n            <input class=\"todo-input hidden\" type=\"text\" placeholder=\"Remember to brush teeth\">\n        </div>\n    </div>\n</div>\n</template>\n"
  },
  {
    "path": "Example/todos/server.js",
    "content": "Things = new Meteor.Collection('things');\nLists = new Meteor.Collection('lists');\n\nif (Meteor.isClient) {\n  Meteor.subscribe('things');\n  Meteor.subscribe('lists');\n\n  Template.main.helpers({\n    things: function () {\n      return Things.find({listName: Session.get('list-name')});\n    },\n\n    lists: function() {\n      return Lists.find();\n    }\n  });\n\n  Template.main.events({\n    'click .add-item': function () {\n        $('.todo-input').removeClass('hidden');\n    },\n\n    'blur .todo-input': function() {\n        var todoInput = $('.todo-input');\n        todoInput.addClass('hidden');\n        Things.insert({\n            msg: todoInput.val(),\n            owner: Meteor.userId(),\n            listName: Session.get('list-name'),\n            share_with: Session.get('share-with'),\n            listOwner: Session.get('list-owner')\n        });\n    },\n\n    'click .remove-item': function() {\n        Things.remove(this._id);\n    },\n\n    'click .add-list': function () {\n        $('.list-input').removeClass('hidden');\n    },\n\n    'blur .list-input': function() {\n        var listInput = $('.list-input');\n        listInput.addClass('hidden');\n        Lists.insert({\n            name: listInput.val(),\n            owner: Meteor.userId()\n        });\n        Session.set('list-name', listInput.val());\n    },\n\n    'click .list-name': function() {\n        Session.set('list-name', this.name);\n        Session.set('share-with', this.share_with);\n        Session.set('list-owner', this.owner);\n    },\n\n    'click .remove-list': function() {\n        Lists.remove(this._id);\n    },\n\n    'click .share-list': function() {\n        var self = this;\n        $(\".\" + this._id).popover('destroy');\n        var content = '<input class=\"share-input\" value=\"name@email.com\"></input><a href=\"#\" class=\"btn cancel-share\">Cancel</a><a href=\"#\" class=\"btn send-share\">Send</a>';\n        $(\".\" + this._id).popover({ title: 'Invite a Friend! ' + this._id, content: content, html: true });\n        $(\".\" + this._id).popover('show');\n        $(\".cancel-share\").click(function() {\n          $(\".\" + self._id).popover('destroy');\n        });\n        $(\".send-share\").click(function() {\n          $(\".\" + self._id).popover('destroy');\n          var email = $('.share-input').val();\n          Lists.update(self._id, {$set: {share_with: email}});\n          Meteor.call('updateRelatedThings', self.name, email);\n        });\n    }\n  });\n}\n\nif (Meteor.isServer) {\n  Meteor.startup(function () {\n    var getEmailFromUserId = function(userId) {\n      var email = Meteor.users.findOne({_id: userId }, {emails: 1});\n      if (email && email['emails']) {\n        return email['emails'][0]['address'];\n      }\n      return null;\n    }\n    var getUserIdFromEmail = function(email) {\n      return Meteor.users.findOne({\"emails.address\": {$in: [email]}}, {_id: 1})\n    }\n\n    Meteor.publish('things', function() {\n      return Things.find({$or: [{\"share_with\": getEmailFromUserId(this.userId)},\n                                {\"owner\": this.userId},\n                                {\"listOwner\": this.userId}]});\n    });\n\n    Meteor.publish('lists', function() {\n      return Lists.find({$or: [{\"share_with\": getEmailFromUserId(this.userId)},\n                               {\"owner\": this.userId}]});\n    });\n\n    Things.allow({\n      insert: function(userId, doc) {\n        return (userId && doc.owner === userId);\n      },\n\n      remove: function(userId, doc) {\n        return (userId && (doc.owner === userId || doc.share_with === getEmailFromUserId(userId) || doc.listOwner === userId));\n      }\n    });\n\n    Lists.allow({\n      insert: function(userId, doc) {\n        return (userId && doc.owner === userId);\n      },\n\n      remove: function(userId, doc) {\n        var allow = (userId && doc.owner === userId);\n        deleteRelatedThings(allow, doc);\n        return allow;\n      },\n\n      update: function(userId, doc) {\n        return (userId && doc.owner === userId);\n      }\n    });\n  });\n\n  Meteor.methods({\n    updateRelatedThings: function(listName, shareWith) {\n      Things.update({listName: listName}, {$set: {share_with: shareWith}}, {multi: true});\n    },\n\n    sayHelloTo: function(name) {\n      return \"hello \" + name;\n    }\n  });\n\n  var deleteRelatedThings = function(allow, doc) {\n      // this breaks because allow is done for the list, not for the listName\n      // we could lose all Things that have a name \"blarg\" even if \"blarg\"\n      // is on two totally diff lists\n    if (allow) {\n      Things.remove({listName: doc.name});\n    }\n  }\n}\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Jesse Bounds\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "ObjectiveDDP/BSONIdGenerator.h",
    "content": "#import <Foundation/Foundation.h>\n\n@interface BSONIdGenerator : NSObject\n+ (NSString *)generate;\n@end\n"
  },
  {
    "path": "ObjectiveDDP/BSONIdGenerator.m",
    "content": "#import \"BSONIdGenerator.h\"\n\n@implementation BSONIdGenerator\n\nstatic NSInteger methodCallCount = 1;\n+ (NSString *)generate {\n  return [NSString stringWithFormat:@\"%ld\", (long)methodCallCount++];\n}\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/DependencyProvider.h",
    "content": "#import <Foundation/Foundation.h>\n\n@class SRWebSocket;\n\n@interface DependencyProvider : NSObject\n\n+ (DependencyProvider *)sharedProvider;\n- (SRWebSocket *)provideSRWebSocketWithRequest:(NSURLRequest *)request;\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/DependencyProvider.m",
    "content": "#import \"DependencyProvider.h\"\n#import <SocketRocket/SRWebSocket.h>\n\n@implementation DependencyProvider\n\nstatic DependencyProvider *sharedProvider = nil;\n\n+ (DependencyProvider *)sharedProvider {\n    if (!sharedProvider) {\n        sharedProvider = [[DependencyProvider alloc] init];\n    }\n    return sharedProvider;\n}\n\n- (SRWebSocket *)provideSRWebSocketWithRequest:(NSURLRequest *)request {\n    return [[SRWebSocket alloc] initWithURLRequest:request];\n}\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/MeteorClient+Parsing.m",
    "content": "#import \"MeteorClient+Private.h\"\n#import <M13OrderedDictionary/M13OrderedDictionary.h>\n\n@implementation MeteorClient (Parsing)\n\n- (void)_handleMethodResultMessageWithMessageId:(NSString *)messageId message:(NSDictionary *)message msg:(NSString *)msg {\n    if ([_methodIds containsObject:messageId]) {\n        if([msg isEqualToString:@\"result\"]) {\n            MeteorClientMethodCallback callback = _responseCallbacks[messageId];\n            id response;\n            if(message[@\"error\"]) {\n                NSDictionary *errorDesc = message[@\"error\"];\n                NSDictionary *userInfo = @{NSLocalizedDescriptionKey: errorDesc[@\"message\"]};\n                NSError *responseError = [NSError errorWithDomain:errorDesc[@\"errorType\"] code:[errorDesc[@\"error\"] integerValue] userInfo:userInfo];\n                if (callback) {\n                    callback(nil, responseError);\n                }\n                response = responseError;\n            } else {\n                if (callback) {\n                    callback(message, nil);\n                }\n            }\n            NSString *notificationName = [NSString stringWithFormat:@\"response_%@\", messageId];\n            [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:response];\n            [_responseCallbacks removeObjectForKey:messageId];\n            [_methodIds removeObject:messageId];\n        }\n    }\n}\n\n- (void)_handleAddedMessage:(NSDictionary *)message msg:(NSString *)msg {\n    if ([msg isEqualToString:@\"added\"]\n        && message[@\"collection\"]) {\n        NSDictionary *object = [self _parseObjectAndAddToCollection:message];\n        NSString *notificationName = [NSString stringWithFormat:@\"%@_added\", message[@\"collection\"]];\n        [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:object];\n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"added\" object:self userInfo:object];\n    }\n}\n\n- (void)_handleAddedBeforeMessage:(NSDictionary *)message msg:(NSString *)msg {\n    if ([msg isEqualToString:@\"addedBefore\"]\n        && message[@\"collection\"]) {\n        NSDictionary *object = [self _parseObjectAndAddToCollection:message beforeId:[message valueForKey:@\"before\"]];\n        NSString *notificationName = [NSString stringWithFormat:@\"%@_addedBefore\", message[@\"collection\"]];\n        [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:object];\n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"addedBefore\" object:self userInfo:object];\n    }\n}\n\n- (void)_handleMovedBeforeMessage:(NSDictionary *)message msg:(NSString *)msg {\n    \n    if ([msg isEqualToString:@\"movedBefore\"]\n        && message[@\"collection\"]) {\n        NSDictionary *object = [self _parseMovedBefore:message];\n        NSString *notificationName = [NSString stringWithFormat:@\"%@_movedBefore\", message[@\"collection\"]];\n        [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:object];\n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"movedBefore\" object:self userInfo:object];\n    }\n}\n\n\n\n\n- (NSDictionary *)_parseMovedBefore:(NSDictionary *)message {\n    \n    NSMutableDictionary *object = [NSMutableDictionary dictionaryWithDictionary:@{@\"_id\": message[@\"id\"]}];\n    \n    M13MutableOrderedDictionary *collection = self.collections[message[@\"collection\"]];\n    \n    NSString * beforeDocumentId = [message valueForKey:@\"before\"];\n    \n    //if document doesn't exist, add it to end\n    if (!beforeDocumentId) {\n        [collection addObject:object pairedWithKey:message[@\"id\"]];\n    }\n    //move document to before index\n    else{\n\n        NSUInteger currentIndex = [collection indexOfKey:message[@\"id\"]];\n        NSUInteger moveToIndex = [collection indexOfKey:beforeDocumentId];\n\n        if (currentIndex != NSNotFound && moveToIndex != NSNotFound) {\n            \n            //remove object from its current place\n            object = [collection objectForKey:message[@\"id\"]];\n            [collection removeObjectForKey:message[@\"id\"]];\n            \n            //insert object at before index\n            [collection insertObject:object pairedWithKey:message[@\"id\"] atIndex:moveToIndex];\n        }\n    }\n    return object;\n}\n\n\n- (NSUInteger)_indexForDocumentId:(NSString*)documentId inCollection:(NSMutableArray*)collection {\n    \n    //get index of document to insert before\n    NSUInteger documentIndex = [collection indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {\n        if ([[obj valueForKey:@\"_id\"] isEqualToString:documentId]) {\n            *stop = YES;\n            return YES;\n        }\n        return NO;\n    }];\n    \n    if (documentIndex != NSNotFound) {\n        NSLog(@\"The title of category at index %lu is %@\", (unsigned long)documentIndex, [[collection objectAtIndex:documentIndex] valueForKey:@\"_id\"]);\n    }\n    else {\n        NSLog(@\"Not found\");\n    }\n    \n    return documentIndex;\n}\n\n\n\n- (NSDictionary *)_parseObjectAndAddToCollection:(NSDictionary *)message {\n    NSMutableDictionary *object = [NSMutableDictionary dictionaryWithDictionary:@{@\"_id\": message[@\"id\"]}];\n    for (id key in message[@\"fields\"]) {\n        object[key] = message[@\"fields\"][key];\n    }\n    if (!self.collections[message[@\"collection\"]]) {\n        self.collections[message[@\"collection\"]] = [M13MutableOrderedDictionary new];\n    }\n    M13MutableOrderedDictionary *collection = self.collections[message[@\"collection\"]];\n    [collection addObject:object pairedWithKey:message[@\"id\"]];\n    return object;\n}\n\n\n\n- (NSDictionary *)_parseObjectAndAddToCollection:(NSDictionary *)message beforeId:(NSString*)documentId {\n    NSMutableDictionary *object = [NSMutableDictionary dictionaryWithDictionary:@{@\"_id\": message[@\"id\"]}];\n    for (id key in message[@\"fields\"]) {\n        object[key] = message[@\"fields\"][key];\n    }\n\n    M13MutableOrderedDictionary *collection = self.collections[message[@\"collection\"]];\n    \n    //if documentId, insert at beforeId index\n    if (documentId) {\n        NSUInteger documentIndex = [collection indexOfKey:documentId]; // _indexForDocumentId:documentId inCollection:collection];\n        if (documentIndex != NSNotFound) {\n            [collection insertObject:object pairedWithKey:message[@\"id\"] atIndex:documentIndex];\n        }\n    }\n    //if no documentId, insert at end\n    else{\n        [collection addObject:object pairedWithKey:message[@\"id\"]];\n    }\n    return object;\n}\n\n\n\n- (void)_handleRemovedMessage:(NSDictionary *)message msg:(NSString *)msg {\n    if ([msg isEqualToString:@\"removed\"]\n        && message[@\"collection\"]) {\n        [self _parseRemoved:message];\n        NSString *notificationName = [NSString stringWithFormat:@\"%@_removed\", message[@\"collection\"]];\n        [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:@{@\"_id\": message[@\"id\"]}];\n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"removed\" object:self];\n    }\n}\n\n\n\n- (void)_parseRemoved:(NSDictionary *)message {\n    M13MutableOrderedDictionary *collection = self.collections[message[@\"collection\"]];\n    [collection removeObjectForKey:message[@\"id\"]];\n}\n\n\n\n- (void)_handleChangedMessage:(NSDictionary *)message msg:(NSString *)msg {\n    if ([msg isEqualToString:@\"changed\"]\n        && message[@\"collection\"]) {\n        NSDictionary *object = [self _parseObjectAndUpdateCollection:message];\n        NSString *notificationName = [NSString stringWithFormat:@\"%@_changed\", message[@\"collection\"]];\n        [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:object];\n        [[NSNotificationCenter defaultCenter] postNotificationName:@\"changed\" object:self userInfo:object];\n    }\n}\n\n\n\n- (NSDictionary *)_parseObjectAndUpdateCollection:(NSDictionary *)message {\n    M13MutableOrderedDictionary *collection = self.collections[message[@\"collection\"]];\n    NSMutableDictionary *object = [collection objectForKey:message[@\"id\"]];\n    for (id key in message[@\"fields\"]) {\n        object[key] = message[@\"fields\"][key];\n    }\n    for (id key in message[@\"cleared\"]) {\n        [object removeObjectForKey:key];\n    }\n    return object;\n}\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/MeteorClient+Private.h",
    "content": "#import \"MeteorClient.h\"\n\n@interface MeteorClient () {\n@public // for tests. This header is not exported anyway.\n    NSMutableDictionary *_subscriptions;\n    NSMutableSet *_methodIds;\n    NSMutableDictionary *_responseCallbacks;\n    NSString *_userName;\n    NSString *_password;\n    NSMutableDictionary *_subscriptionsParameters;\n    BOOL _disconnecting;\n    double _tries;\n    double _maxRetryIncrement;\n}\n\n// These are public and should be KVO compliant so use accessor instead of direct ivar access\n@property (nonatomic, copy, readwrite) NSString *userId;\n@property (nonatomic, copy, readwrite) NSString *sessionToken;\n@property (nonatomic, assign, readwrite) BOOL connected;\n@property (nonatomic, strong, readwrite) NSMutableDictionary *collections;\n@property (nonatomic, assign, readwrite) BOOL websocketReady;\n@property (nonatomic, assign, readwrite) AuthState authState;\n\n//xxx: temporary methods to corral state vars\n- (void)_setAuthStateToLoggingIn;\n- (void)_setAuthStateToLoggedIn:(NSString *)userId withToken:()token;\n- (void)_setAuthStatetoLoggedOut;\n- (NSDictionary *)_buildUserParametersWithUsername:(NSString *)username password:(NSString *)password;\n- (NSDictionary *)_buildUserParametersWithEmail:(NSString *)email password:(NSString *)password;\n- (NSDictionary *)_buildUserParametersWithUsernameOrEmail:(NSString *)usernameOrEmail password:(NSString *)password;\n\n@end\n\n@interface MeteorClient (Parsing)\n\n- (void)_handleMethodResultMessageWithMessageId:(NSString *)messageId message:(NSDictionary *)message msg:(NSString *)msg;\n- (void)_handleAddedMessage:(NSDictionary *)message msg:(NSString *)msg;\n- (void)_handleAddedBeforeMessage:(NSDictionary *)message msg:(NSString *)msg;\n- (void)_handleMovedBeforeMessage:(NSDictionary *)message msg:(NSString *)msg;\n- (void)_handleRemovedMessage:(NSDictionary *)message msg:(NSString *)msg;\n- (void)_handleChangedMessage:(NSDictionary *)message msg:(NSString *)msg;\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/MeteorClient.h",
    "content": "#import \"ObjectiveDDP.h\"\n\n@protocol DDPAuthDelegate;\n\nextern NSString * const MeteorClientConnectionReadyNotification;\nextern NSString * const MeteorClientDidConnectNotification;\nextern NSString * const MeteorClientDidDisconnectNotification;\n\n/** Errors due to transport (connection) problems will have this domain. For errors being reported\n    from the backend, they will have the \"errorType\" key as their error domain. */\nextern NSString * const MeteorClientTransportErrorDomain;\n\n// xxx:\ntypedef NS_ENUM(NSUInteger, MeteorClientError) {\n    MeteorClientErrorNotConnected,\n    MeteorClientErrorDisconnectedBeforeCallbackComplete,\n    MeteorClientErrorLogonRejected\n};\n\ntypedef NS_ENUM(NSUInteger, AuthState) {\n    AuthStateNoAuth,\n    AuthStateLoggingIn,\n    AuthStateLoggedIn,\n    /* implies using auth but not currently authorized */\n    AuthStateLoggedOut\n};\n\ntypedef void(^MeteorClientMethodCallback)(NSDictionary *response, NSError *error);\n\n@interface MeteorClient : NSObject<ObjectiveDDPDelegate>\n\n@property (nonatomic, strong) ObjectiveDDP *ddp;\n@property (nonatomic, weak) id<DDPAuthDelegate> authDelegate;\n@property (nonatomic, strong, readonly) NSMutableDictionary *collections;\n@property (nonatomic, copy, readonly) NSString *userId;\n@property (nonatomic, copy, readonly) NSString *sessionToken;\n@property (nonatomic, assign, readonly) BOOL websocketReady;\n@property (nonatomic, assign, readonly) BOOL connected;\n@property (nonatomic, assign, readonly) AuthState authState;\n@property (nonatomic, copy, readonly) NSString *ddpVersion;\n@property (nonatomic, strong ,readonly) NSArray *supportedVersions;\n\n// In flux; use \"pre1\" for meteor versions up to v0.8.0.1\n//          use \"pre2\" for meteor versions v0.8.1.1 and above (until they change it again)\n//          use \"1\" for meteor versions v0.8.9 and above\n- (id)initWithDDPVersion:(NSString *)ddpVersion;\n\n// Prevent user from start with this methods\n- (id)init __attribute__((unavailable(\"Must use initWithDDPVersion: instead.\")));\n+ (instancetype)new __attribute__((unavailable(\"Must use initWithDDPVersion: instead.\")));\n\n#pragma mark - Methods\n\n- (void) logonWithSessionToken:(NSString *) sessionToken responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (NSString *)callMethodName:(NSString *)methodName parameters:(NSArray *)parameters responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)logonWithUsername:(NSString *)username password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)logonWithEmail:(NSString *)email password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)logonWithUsernameOrEmail:(NSString *)usernameOrEmail password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)logonWithOAuthAccessToken: (NSString *)accessToken serviceName: (NSString *) serviceName responseCallback: (MeteorClientMethodCallback)responseCallback;\n- (void)logonWithOAuthAccessToken:(NSString *)accessToken serviceName:(NSString *)serviceName optionsKey:(NSString *)key responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)logonWithUserParameters:(NSDictionary *)userParameters responseCallback:(MeteorClientMethodCallback)responseCallback;\n\n- (void)signupWithUsernameAndEmail:(NSString *)username email:(NSString *)email password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback;\n\n- (void)signupWithUsernameAndEmail:(NSString *)username email:(NSString *)email password:(NSString *)password userParameters:(NSDictionary *)userParameters responseCallback:(MeteorClientMethodCallback)responseCallback;\n\n- (void)signupWithUsername:(NSString *)username password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)signupWithEmail:(NSString *)email password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)signupWithEmail:(NSString *)email password:(NSString *)password firstName:(NSString *)firstName lastName:(NSString *)lastName responseCallback:(MeteorClientMethodCallback)responseCallback;\n- (void)signupWithUserParameters:userParameters responseCallback:(MeteorClientMethodCallback) responseCallback;\n- (void)addSubscription:(NSString *)subscriptionName;\n- (void)addSubscription:(NSString *)subscriptionName withParameters:(NSArray *)parameters;\n- (void)removeSubscription:(NSString *)subscriptionName;\n- (void)logout;\n- (void)disconnect;\n- (void)reconnect;\n- (void)ping;\n\n// Deprecated methods\n\n- (void)logonWithUsername:(NSString *)username password:(NSString *)password __attribute__((deprecated(\"use logonWithUsername:password:responseCallback: instead\")));\n- (NSString *)sendWithMethodName:(NSString *)methodName parameters:(NSArray *)parameters notifyOnResponse:(BOOL)notify __attribute__((deprecated(\"use callMethodName:parameters:responseCallback: instead\")));\n- (void)sendWithMethodName:(NSString *)methodName parameters:(NSArray *)parameters __attribute__((deprecated(\"use callMethodName:parameters:responseCallback: instead\")));\n\n@end\n\n#pragma mark - <DDPAuthDelegate>\n\n@protocol DDPAuthDelegate <NSObject>\n\n- (void)authenticationWasSuccessful;\n- (void)authenticationFailedWithError:(NSError *)reason;\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/MeteorClient.m",
    "content": "#import <CommonCrypto/CommonDigest.h>\n#import \"DependencyProvider.h\"\n#import \"MeteorClient.h\"\n#import \"MeteorClient+Private.h\"\n#import \"BSONIdGenerator.h\"\n#import <SocketRocket/SRWebSocket.h>\n\nNSString * const MeteorClientConnectionReadyNotification = @\"bounsj.objectiveddp.ready\";\nNSString * const MeteorClientDidConnectNotification = @\"boundsj.objectiveddp.connected\";\nNSString * const MeteorClientDidDisconnectNotification = @\"boundsj.objectiveddp.disconnected\";\nNSString * const MeteorClientTransportErrorDomain = @\"boundsj.objectiveddp.transport\";\n\ndouble const MeteorClientRetryIncreaseBy = 1;\ndouble const MeteorClientMaxRetryIncrease = 6;\n\n@interface MeteorClient ()\n\n@property (nonatomic, copy, readwrite) NSString *ddpVersion;\n\n@end\n\n@implementation MeteorClient\n\n- (id)initWithDDPVersion:(NSString *)ddpVersion {\n    self = [super init];\n    if (self) {\n        _collections = [NSMutableDictionary dictionary];\n        _subscriptions = [NSMutableDictionary dictionary];\n        _subscriptionsParameters = [NSMutableDictionary dictionary];\n        _methodIds = [NSMutableSet set];\n        _responseCallbacks = [NSMutableDictionary dictionary];\n        _ddpVersion = ddpVersion;\n        _maxRetryIncrement = MeteorClientMaxRetryIncrease;\n        _tries = MeteorClientRetryIncreaseBy;\n        if ([ddpVersion isEqualToString:@\"1\"]) {\n            _supportedVersions = @[@\"1\", @\"pre2\"];\n        } else {\n            _supportedVersions = @[@\"pre2\", @\"pre1\"];\n        }\n    }\n    return self;\n}\n\n#pragma mark MeteorClient public API\n\n- (void)resetCollections {\n    [self.collections removeAllObjects];\n}\n\n- (void)sendWithMethodName:(NSString *)methodName parameters:(NSArray *)parameters {\n    [self sendWithMethodName:methodName parameters:parameters notifyOnResponse:NO];\n}\n\n-(NSString *)sendWithMethodName:(NSString *)methodName parameters:(NSArray *)parameters notifyOnResponse:(BOOL)notify {\n    if (![self okToSend]) {\n        return nil;\n    }\n    return [self _send:notify parameters:parameters methodName:methodName];\n}\n\n- (NSString *)callMethodName:(NSString *)methodName parameters:(NSArray *)parameters responseCallback:(MeteorClientMethodCallback)responseCallback {\n    if ([self _rejectIfNotConnected:responseCallback]) {\n        return nil;\n    };\n    NSString *methodId = [self _send:YES parameters:parameters methodName:methodName];\n    if (responseCallback) {\n        _responseCallbacks[methodId] = [responseCallback copy];\n    }\n    return methodId;\n}\n\n- (void)addSubscription:(NSString *)subscriptionName {\n    [self addSubscription:subscriptionName withParameters:nil];\n}\n\n- (void)addSubscription:(NSString *)subscriptionName withParameters:(NSArray *)parameters {\n    NSString *uid = [BSONIdGenerator generate];\n    [_subscriptions setObject:uid forKey:subscriptionName];\n    if (parameters) {\n        [_subscriptionsParameters setObject:parameters forKey:subscriptionName];\n    }\n    if (![self okToSend]) {\n        return;\n    }\n    [self.ddp subscribeWith:uid name:subscriptionName parameters:parameters];\n}\n\n- (void)removeSubscription:(NSString *)subscriptionName {\n    if (![self okToSend]) {\n        return;\n    }\n    NSString *uid = [_subscriptions objectForKey:subscriptionName];\n    if (uid) {\n        [self.ddp unsubscribeWith:uid];\n        [_subscriptions removeObjectForKey:subscriptionName];\n    }\n}\n\n- (BOOL)okToSend {\n    if (!self.connected) {\n        return NO;\n    }\n    return YES;\n}\n\n- (void)logonWithSessionToken:(NSString *)sessionToken {\n    [self logonWithSessionToken:sessionToken responseCallback:nil];\n}\n// tokenExpires.$date : expiry date\n- (void)logonWithSessionToken:(NSString *) sessionToken responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self logonWithUserParameters:@{@\"resume\": sessionToken} responseCallback:responseCallback];\n}\n\n- (void)logonWithUsername:(NSString *)username password:(NSString *)password {\n    [self logonWithUserParameters:[self _buildUserParametersWithUsername:username password:password] responseCallback:nil];\n}\n\n- (void)logonWithUsername:(NSString *)username password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self logonWithUserParameters:[self _buildUserParametersWithUsername:username password:password] responseCallback:responseCallback];\n}\n\n- (void)logonWithEmail:(NSString *)email password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self logonWithUserParameters:[self _buildUserParametersWithEmail:email password:password] responseCallback:responseCallback];\n}\n\n- (void)logonWithUsernameOrEmail:(NSString *)usernameOrEmail password:(NSString *)password responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self logonWithUserParameters:[self _buildUserParametersWithUsernameOrEmail:usernameOrEmail password:password] responseCallback:responseCallback];\n}\n\n/*\n * Logs in using access token -- this breaks the current convention,\n * but the method call is dependent on some of this class's variables\n * @param serviceName service name i.e facebook, google\n * @param accessToken short-lived one-time code received, or long-lived access token for Facebook login\n * For some logins, such as Facebook, login with OAuth may only work after customizing the accounts-x packages. This is because Facebook only returns long-lived access tokens for mobile clients\n * until meteor decides to change the packages themselves.\n * use https://github.com/jasper-lu/accounts-facebook-ddp and\n *     https://github.com/jasper-lu/facebook-ddp for reference\n *\n * If an sdk only allows login returns long-lived token, modify your accounts-x package,\n * and add your package to the if(serviceName.compare(\"facebook\")) in _buildOAuthRequestStringWithAccessToken\n */\n- (void)logonWithOAuthAccessToken:(NSString *)accessToken serviceName:(NSString *)serviceName responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self logonWithOAuthAccessToken:accessToken serviceName:serviceName optionsKey:@\"oauth\" responseCallback:responseCallback];\n}\n\n// some meteor servers provide a custom login handler with a custom options key. Allow client to configure the key instead of always using \"oauth\"\n- (void)logonWithOAuthAccessToken:(NSString *)accessToken serviceName:(NSString *)serviceName optionsKey:(NSString *)key responseCallback:(MeteorClientMethodCallback)responseCallback {\n    //generates random secret (credentialToken)\n    NSString *url = [self _buildOAuthRequestStringWithAccessToken:accessToken serviceName: serviceName];\n    NSLog(@\"%@\", url);\n    //callback gives an html page in string. credential token & credential secret are stored in a hidden element\n    NSString *callback = [self _makeHTTPRequestAtUrl:url];\n    \n    NSDictionary *jsonData = [self handleOAuthCallback:callback];\n\n    // setCredentialToken gets set to false if the call fails\n    if (jsonData == nil || ![jsonData[@\"setCredentialToken\"] boolValue]) {\n        NSError *logonError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorLogonRejected userInfo:@{NSLocalizedDescriptionKey: @\"Unable to authenticate\"}];\n        if (responseCallback) {\n            responseCallback(nil, logonError);\n        }\n        return;\n    }\n    \n    NSDictionary* options = @{key: @{@\"credentialToken\": [jsonData objectForKey: @\"credentialToken\"], @\"credentialSecret\": [jsonData objectForKey:@\"credentialSecret\"]}};\n    \n    [self logonWithUserParameters:options responseCallback:responseCallback];\n}\n\n- (void)logonWithUserParameters:(NSDictionary *)userParameters responseCallback:(MeteorClientMethodCallback)responseCallback {\n    if (self.authState == AuthStateLoggingIn) {\n        NSString *errorDesc = [NSString stringWithFormat:@\"You must wait for the current logon request to finish before sending another.\"];\n        NSError *logonError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorLogonRejected userInfo:@{NSLocalizedDescriptionKey: errorDesc}];\n        if (responseCallback) {\n            responseCallback(nil, logonError);\n        }\n        return;\n    }\n    \n    if ([self _rejectIfNotConnected:responseCallback]) {\n        return;\n    }\n\n    [self _setAuthStateToLoggingIn];\n    NSMutableDictionary *mutableUserParameters = [userParameters mutableCopy];\n    \n    \n    [self callMethodName:@\"login\" parameters:@[mutableUserParameters] responseCallback:^(NSDictionary *response, NSError *error) {\n\n        if (error) {\n            [self _setAuthStatetoLoggedOut];\n            [self.authDelegate authenticationFailedWithError:error];\n        } else {\n            // tokenExpires.$date : expiry date\n            [self _setAuthStateToLoggedIn:response[@\"result\"][@\"id\"] withToken:response[@\"result\"][@\"token\"]];\n            [self.authDelegate authenticationWasSuccessful];\n        }\n        if (responseCallback) {\n            responseCallback(response, error);\n        }\n    }];\n    \n}\n\n- (void)signupWithUsernameAndEmail:(NSString *)username email:(NSString *)email password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self signupWithUserParameters:[self _buildUserParametersSignup:username email:email password:password fullname:fullname] responseCallback:responseCallback];\n}\n\n- (void)signupWithUsernameAndEmail:(NSString *)username email:(NSString *)email password:(NSString *)password userParameters:(NSDictionary *)userParameters responseCallback:(MeteorClientMethodCallback)responseCallback{\n    NSMutableDictionary *parameters = [[self _buildUserParametersSignup:username email:email password:password] mutableCopy];\n    [parameters addEntriesFromDictionary:userParameters];\n    [self signupWithUserParameters:parameters responseCallback:responseCallback];\n}\n\n- (void)signupWithUsername:(NSString *)username password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self signupWithUserParameters:[self _buildUserParametersSignup:username email:@\"\" password:password fullname:fullname] responseCallback:responseCallback];\n}\n\n- (void)signupWithEmail:(NSString *)email password:(NSString *)password fullname:(NSString *)fullname responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self signupWithUserParameters:[self _buildUserParametersSignup:@\"\" email:email password:password fullname:fullname] responseCallback:responseCallback];\n}\n\n- (void)signupWithEmail:(NSString *)email password:(NSString *)password firstName:(NSString *)firstName lastName:(NSString *)lastName responseCallback:(MeteorClientMethodCallback)responseCallback {\n    [self signupWithUserParameters:[self _buildUserParametersSignup:@\"\" email:email password:password firstName:firstName lastName:lastName] responseCallback:responseCallback];\n}\n\n- (void)signupWithUserParameters:userParameters responseCallback:(MeteorClientMethodCallback) responseCallback {\n\tif (self.authState == AuthStateLoggingIn) {\n        NSString *errorDesc = [NSString stringWithFormat:@\"You must wait for the current signup request to finish before sending another.\"];\n        NSError *logonError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorLogonRejected userInfo:@{NSLocalizedDescriptionKey: errorDesc}];\n        [self.authDelegate authenticationFailedWithError:logonError];\n        if (responseCallback) {\n            responseCallback(nil, logonError);\n        }\n        return;\n    }\n    [self _setAuthStateToLoggingIn];\n    \n\t\n    NSMutableDictionary *mutableUserParameters = [userParameters mutableCopy];\n    \n    [self callMethodName:@\"createUser\" parameters:@[mutableUserParameters] responseCallback:^(NSDictionary *response, NSError *error) {\n        if (error) {\n            [self _setAuthStatetoLoggedOut];\n            [self.authDelegate authenticationFailedWithError:error];\n        } else {\n            [self _setAuthStateToLoggedIn:response[@\"result\"][@\"id\"] withToken:response[@\"result\"][@\"token\"]];\n            [self.authDelegate authenticationWasSuccessful];\n        }\n        responseCallback(response, error);\n    }];\n}\n\n\n// move this to string category\n- (NSString *)sha256:(NSString *)clear {\n    const char *s = [clear cStringUsingEncoding:NSUTF8StringEncoding];\n    NSData *keyData = [NSData dataWithBytes:s length:strlen(s)];\n    \n    uint8_t digest[CC_SHA256_DIGEST_LENGTH] = {0};\n    CC_SHA256(keyData.bytes, (unsigned int)keyData.length, digest);\n    NSData *digestData = [NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];\n    NSString *hash = [digestData description];\n    \n    // refactor this\n    hash = [hash stringByReplacingOccurrencesOfString:@\" \" withString:@\"\"];\n    hash = [hash stringByReplacingOccurrencesOfString:@\"<\" withString:@\"\"];\n    hash = [hash stringByReplacingOccurrencesOfString:@\">\" withString:@\"\"];\n    \n    return hash;\n}\n\n- (void)logout {\n    [self.ddp methodWithId:[BSONIdGenerator generate]\n                    method:@\"logout\"\n                parameters:nil];\n    [self _setAuthStatetoLoggedOut];\n}\n\n- (void)disconnect {\n    _disconnecting = YES;\n    [self.ddp disconnectWebSocket];\n}\n\n- (void)reconnect {\n    if (self.ddp.webSocket.readyState == SR_OPEN) {\n        return;\n    }\n    [self.ddp connectWebSocket];\n}\n\n- (void)ping {\n    if (!self.connected) {\n        return;\n    }\n    [self.ddp ping:[BSONIdGenerator generate]];\n}\n\n#pragma mark <ObjectiveDDPDelegate>\n\n- (void)didReceiveMessage:(NSDictionary *)message {\n    NSString *msg = [message objectForKey:@\"msg\"];\n    \n    if (!msg) return;\n    \n    NSString *messageId = message[@\"id\"];\n    \n    [self _handleMethodResultMessageWithMessageId:messageId message:message msg:msg];\n    [self _handleAddedMessage:message msg:msg];\n    [self _handleAddedBeforeMessage:message msg:msg];\n    [self _handleMovedBeforeMessage:message msg:msg];\n    [self _handleRemovedMessage:message msg:msg];\n    [self _handleChangedMessage:message msg:msg];\n\n    if ([msg isEqualToString:@\"ping\"]) {\n        [self.ddp pong:messageId];\n    }\n    \n    if ([msg isEqualToString:@\"connected\"]) {\n        self.connected = YES;\n        [[NSNotificationCenter defaultCenter] postNotificationName:MeteorClientConnectionReadyNotification object:self];\n        if (self.sessionToken) { //TODO check expiry date\n            [self logonWithSessionToken:self.sessionToken responseCallback:nil];\n        }\n        [self _makeMeteorDataSubscriptions];\n    }\n    \n    if ([msg isEqualToString:@\"ready\"]) {\n        NSArray *subs = message[@\"subs\"];\n        for(NSString *readySubscription in subs) {\n            for(NSString *subscriptionName in _subscriptions) {\n                NSString *curSubId = _subscriptions[subscriptionName];\n                if([curSubId isEqualToString:readySubscription]) {\n                    NSString *notificationName = [NSString stringWithFormat:@\"%@_ready\", subscriptionName];\n                    [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self];\n                    break;\n                }\n            }\n        }\n    }\n    \n    else if ([msg isEqualToString:@\"updated\"]) {\n        NSArray *methods = message[@\"methods\"];\n        for(NSString *updateMethod in methods) {\n            for(NSString *methodId in _methodIds) {\n                if([methodId isEqualToString:updateMethod]) {\n                    NSString *notificationName = [NSString stringWithFormat:@\"%@_update\", methodId];\n                    [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self];\n                    break;\n                }\n            }\n        }\n    }\n    \n    else if ([msg isEqualToString:@\"addedBefore\"]) {\n        \n    }\n    \n    else if ([msg isEqualToString:@\"movedBefore\"]) {\n        \n    }\n    \n    else if ([msg isEqualToString:@\"nosub\"]) {\n        \n    }\n    \n    else if ([msg isEqualToString:@\"error\"]) {\n        \n    }\n}\n\n- (void)didOpen {\n    self.websocketReady = YES;\n    [self _resetBackoff];\n    [self resetCollections];\n    [self.ddp connectWithSession:nil version:self.ddpVersion support:self.supportedVersions];\n    [[NSNotificationCenter defaultCenter] postNotificationName:MeteorClientDidConnectNotification object:self];\n}\n\n- (void)didReceiveConnectionError:(NSError *)error {\n    [self _handleConnectionError];\n}\n\n- (void)didReceiveConnectionClose {\n    [self _handleConnectionError];\n}\n\n#pragma mark - Internal\n\n- (NSString *)_send:(BOOL)notify parameters:(NSArray *)parameters methodName:(NSString *)methodName {\n    NSString *methodId = [BSONIdGenerator generate];\n    if(notify == YES) {\n        [_methodIds addObject:methodId];\n    }\n    [self.ddp methodWithId:methodId\n                    method:methodName\n                parameters:parameters];\n    return methodId;\n}\n\n- (void)_resetBackoff {\n    _tries = 1;\n}\n\n- (void)_handleConnectionError {\n    self.websocketReady = NO;\n    self.connected = NO;\n    [self _invalidateUnresolvedMethods];\n    [[NSNotificationCenter defaultCenter] postNotificationName:MeteorClientDidDisconnectNotification object:self];\n    if (_disconnecting) {\n        _disconnecting = NO;\n        return;\n    }\n//\n    double timeInterval = 5.0 * _tries;\n    \n    if (_tries != _maxRetryIncrement) {\n        _tries++;\n    }\n    [self performSelector:@selector(reconnect) withObject:self afterDelay:timeInterval];\n}\n\n- (void)_invalidateUnresolvedMethods {\n    for (NSString *methodId in _methodIds) {\n        MeteorClientMethodCallback callback = _responseCallbacks[methodId];\n        if (callback) {\n            callback(nil, [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorDisconnectedBeforeCallbackComplete userInfo:@{NSLocalizedDescriptionKey: @\"You were disconnected\"}]);\n         }\n    }\n    [_methodIds removeAllObjects];\n    [_responseCallbacks removeAllObjects];\n}\n\n- (void)_makeMeteorDataSubscriptions {\n    for (NSString *key in [_subscriptions allKeys]) {\n        NSString *uid = [BSONIdGenerator generate];\n        [_subscriptions setObject:uid forKey:key];\n        NSArray *params = _subscriptionsParameters[key];\n        [self.ddp subscribeWith:uid name:key parameters:params];\n    }\n}\n\n- (BOOL)_rejectIfNotConnected:(MeteorClientMethodCallback)responseCallback {\n    if (![self okToSend]) {\n        NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @\"You are not connected\"};\n        NSError *notConnectedError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorNotConnected userInfo:userInfo];\n        if (responseCallback) {\n            responseCallback(nil, notConnectedError);\n        }\n        return YES;\n    }\n    return NO;\n}\n\n- (void)_setAuthStateToLoggingIn {\n    self.authState = AuthStateLoggingIn;\n}\n\n- (void)_setAuthStateToLoggedIn:(NSString *)userId withToken:()token {\n    self.authState = AuthStateLoggedIn;\n    self.userId = userId;\n    self.sessionToken = token;\n}\n\n- (void)_setAuthStatetoLoggedOut {\n    self.authState = AuthStateLoggedOut;\n    self.userId = nil;\n}\n\n- (NSDictionary *)_buildUserParametersSignup:(NSString *)username email:(NSString *)email password:(NSString *)password fullname:(NSString *) fullname\n{\n    return @{ @\"username\": username,@\"email\": email,\n              @\"password\": @{ @\"digest\": [self sha256:password], @\"algorithm\": @\"sha-256\" },\n              @\"profile\": @{ @\"fullname\": fullname,\n                             @\"signupToken\": @\"\"\n                             } };\n}\n\n- (NSDictionary *)_buildUserParametersSignup:(NSString *)username email:(NSString *)email password:(NSString *)password firstName:(NSString *)firstName lastName:(NSString*)lastName\n{\n    return @{ @\"username\": username,@\"email\": email,\n              @\"password\": @{ @\"digest\": [self sha256:password], @\"algorithm\": @\"sha-256\" },\n              @\"profile\": @{ @\"first_name\": firstName,\n                             @\"last_name\": lastName,\n                             @\"signupToken\": @\"\"\n                             } };\n}\n\n- (NSDictionary *)_buildUserParametersSignup:(NSString *)username email:(NSString *)email password:(NSString *)password\n{\n    return @{ @\"username\": username,@\"email\": email,\n              @\"password\": @{ @\"digest\": [self sha256:password], @\"algorithm\": @\"sha-256\" }\n            };\n}\n\n- (NSDictionary *)_buildUserParametersWithUsername:(NSString *)username password:(NSString *)password\n{\n    return @{ @\"user\": @{ @\"username\": username }, @\"password\": @{ @\"digest\": [self sha256:password], @\"algorithm\": @\"sha-256\" } };\n}\n\n- (NSDictionary *)_buildUserParametersWithEmail:(NSString *)email password:(NSString *)password\n{\n    return @{ @\"user\": @{ @\"email\": email }, @\"password\": @{ @\"digest\": [self sha256:password], @\"algorithm\": @\"sha-256\" } };\n}\n\n- (NSDictionary *)_buildUserParametersWithUsernameOrEmail:(NSString *)usernameOrEmail password:(NSString *)password\n{\n    if ([usernameOrEmail rangeOfString:@\"@\"].location == NSNotFound) {\n        return [self _buildUserParametersWithUsername:usernameOrEmail password:password];\n    } else {\n        return [self _buildUserParametersWithEmail:usernameOrEmail password:password];\n    }\n}\n\n- (NSString *)_buildOAuthRequestStringWithAccessToken:(NSString *)accessToken serviceName: (NSString *)serviceName\n{\n    NSString* homeUrl = [[[self ddp] urlString] stringByReplacingOccurrencesOfString:@\"/websocket\" withString:@\"\"];\n    //remove ws/wss and replace with http/https\n    if ([homeUrl hasPrefix:@\"ws\"]) {\n        homeUrl = [@\"http\" stringByAppendingString:[homeUrl substringFromIndex:[@\"ws\" length]]];\n    } else {\n        homeUrl = [@\"https\" stringByAppendingString:[homeUrl substringFromIndex:[@\"wss\" length]]];\n    }\n    \n    NSString* tokenType = @\"\";\n    //facebook sdk can only send access token, others send a one time code\n    if ([serviceName isEqualToString: @\"facebook\"]) {\n        tokenType = @\"accessToken\";\n    } else {\n        tokenType = @\"code\";\n    }\n    \n    return [NSString stringWithFormat: @\"%@/_oauth/%@/?%@=%@&state=%@\", homeUrl, serviceName, tokenType, accessToken, [self _generateStateWithToken: [self _randomSecret]]];\n}\n\n- (NSDictionary *)_buildUserParametersWithOAuthAccessToken:(NSString *)accessToken\n{\n    return @{};\n}\n\n//functions for OAuth\n\n//generates base64 string for json\n- (NSString *)_generateStateWithToken:(NSString *)credentialToken {\n    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{ @\"credentialToken\": credentialToken, @\"loginStyle\": @\"popup\" } options:0 error:NULL];\n    if(!jsonData) {\n        //error\n        return @\"\";\n    }\n    //set jsonString equal to base64 conversion\n    NSString* base64String = [jsonData base64EncodedStringWithOptions: NSDataBase64EncodingEndLineWithLineFeed];\n    NSLog(@\"%@\", base64String);\n    return base64String;\n    \n}\n\n//generates random secret for credential token\n- (NSString *)_randomSecret {\n    NSString *BASE64_CHARS = @\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_\";\n    NSMutableString *s = [NSMutableString stringWithCapacity:20];\n    for (NSUInteger i = 0U; i < 20; i++) {\n        u_int32_t r = arc4random() % [BASE64_CHARS length];\n        unichar c = [BASE64_CHARS characterAtIndex:r];\n        [s appendFormat:@\"%C\", c];\n    }\n    return s;\n}\n\n- (NSString *)_makeHTTPRequestAtUrl:(NSString*)url {\n    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];\n    [request setHTTPMethod:@\"GET\"];\n    [request setURL:[NSURL URLWithString:url]];\n    \n    NSLog(@\"Url is %@\", url);\n    \n    NSError *error = [[NSError alloc] init];\n    NSHTTPURLResponse *responseCode = nil;\n    \n    NSData *oResponseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];\n    \n    if([responseCode statusCode] != 200){\n        NSLog(@\"Error getting %@, HTTP status code %li\", url, (long)[responseCode statusCode]);\n        return nil;\n    }\n    \n    return [[NSString alloc] initWithData:oResponseData encoding:NSUTF8StringEncoding];\n}\n\n- (NSDictionary*)handleOAuthCallback: (NSString *)callback {\n    // it's possible callback is nil\n    if (callback == nil) {\n        return nil;\n    }\n    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@\"<div id=\\\"config\\\" style=\\\"display:none;\\\">(.*?)</div>\" options:0 error:nil];\n    callback = [callback substringWithRange:[[regex firstMatchInString:callback options:0 range:NSMakeRange(0, [callback length])] rangeAtIndex: 1]];\n    \n    NSLog(@\"callback is: %@\", callback);\n    \n    NSDictionary* jsonData = [NSJSONSerialization JSONObjectWithData:[callback dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];\n    return jsonData;\n}\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/ObjectiveDDP-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'ObjectiveDDP' target in the 'ObjectiveDDP' project\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n    #import \"DependencyProvider.h\"\n#endif\n"
  },
  {
    "path": "ObjectiveDDP/ObjectiveDDP.h",
    "content": "#import <Foundation/Foundation.h>\n@class SRWebSocket;\n@protocol SRWebSocketDelegate;\n@protocol ObjectiveDDPDelegate;\n\n@interface ObjectiveDDP : NSObject <SRWebSocketDelegate>\n\n@property (nonatomic, copy) NSString *urlString;\n@property (nonatomic, assign) id <ObjectiveDDPDelegate> delegate;\n@property (nonatomic, strong) SRWebSocket *webSocket;\n\n- (void)ping:(NSString *)id;\n- (void)pong:(NSString *)id;\n\n// Prevent user from start with this methods\n- (id)init __attribute__((unavailable(\"Must use initWithURLString:delegate: instead.\")));\n+ (instancetype)new __attribute__((unavailable(\"Must use initWithURLString:delegate: instead.\")));\n\n- (id)initWithURLString:(NSString *)urlString delegate:(id <ObjectiveDDPDelegate>)delegate;\n- (void)connectWebSocket;\n- (void)disconnectWebSocket;\n- (void)connectWithSession:(NSString *)session version:(NSString *)version support:(NSArray *)support;\n- (void)subscribeWith:(NSString *)id name:(NSString *)name parameters:(NSArray *)parameters;\n- (void)unsubscribeWith:(NSString *)id;\n- (void)methodWithId:(NSString *)id method:(NSString *)method parameters:(NSArray *)parameters;\n\n@end\n\n@protocol ObjectiveDDPDelegate\n\n- (void)didOpen;\n- (void)didReceiveMessage:(NSDictionary *)message;\n- (void)didReceiveConnectionError:(NSError *)error;\n- (void)didReceiveConnectionClose;\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP/ObjectiveDDP.m",
    "content": "#import \"ObjectiveDDP.h\"\n#import \"DependencyProvider.h\"\n#import <SocketRocket/SRWebSocket.h>\n#import <M13OrderedDictionary/M13OrderedDictionary.h>\n\n@implementation ObjectiveDDP\n\n- (id)initWithURLString:(NSString *)urlString\n               delegate:(id <ObjectiveDDPDelegate>)delegate {\n    self = [super init];\n    if (self) {\n        self.urlString = urlString;\n        self.delegate = delegate;\n    }\n    return self;\n}\n\n#pragma mark - Public API\n\n// connect to the underlying websocket\n- (void)connectWebSocket {\n    [self _closeConnection];\n    [self _setupWebSocket];\n    [self.webSocket open];\n}\n\n// disconnect from the websocket\n- (void)disconnectWebSocket {\n    [self _closeConnection];\n}\n\n//ping (client -> server):\n//  id: string (the id for the ping)\n- (void)ping:(NSString *)id {\n    NSDictionary *fields = @{@\"msg\": @\"ping\"};\n    if (id)\n        fields = @{@\"msg\": @\"ping\", @\"id\": id};\n    NSString *json = [self _buildJSONWithFields:fields parameters:nil];\n    [self.webSocket send:json];\n}\n\n//pong (client -> server):\n//  id: string (the id send with the ping)\n- (void)pong:(NSString *)id {\n    NSDictionary *fields = @{@\"msg\": @\"pong\"};\n    if (id)\n        fields = @{@\"msg\": @\"pong\", @\"id\": id};\n    \n    NSString *json = [self _buildJSONWithFields:fields parameters:nil];\n    [self.webSocket send:json];\n}\n\n//connect (client -> server)\n//  session: string (if trying to connectWebSocket to an existing DDP session)\n//  version: string (the proposed protocol version)\n//  support: array of strings (protocol versions supported by the client, in order of preference)\n- (void)connectWithSession:(NSString *)session version:(NSString *)version support:(NSArray *)support {\n    NSDictionary *fields = @{@\"msg\": @\"connect\", @\"version\": version, @\"support\": support};\n    NSString *json = [self _buildJSONWithFields:fields parameters:nil];\n    [self.webSocket send:json];\n}\n\n//sub (client -> server):\n//  id: string (an arbitrary client-determined identifier for this subscription)\n//  name: string (the name of the subscription)\n//  params: optional array of EJSON items (parameters to the subscription)\n- (void)subscribeWith:(NSString *)id name:(NSString *)name parameters:(NSArray *)parameters {\n    NSDictionary *fields = @{@\"msg\": @\"sub\", @\"name\": name, @\"id\": id};\n    NSString *json = [self _buildJSONWithFields:fields parameters:parameters];\n    [self.webSocket send:json];\n}\n\n//unsub (client -> server):\n//  id: string (an arbitrary client-determined identifier for this subscription)\n- (void)unsubscribeWith:(NSString *)id {\n    NSDictionary *fields = @{@\"msg\": @\"unsub\", @\"id\": id};\n    NSString *json = [self _buildJSONWithFields:fields parameters:nil];\n    [self.webSocket send:json];\n}\n\n//method (client -> server):\n//  method: string (method name)\n//  params: optional array of EJSON items (parameters to the method)\n//  id: string (an arbitrary client-determined identifier for this method call)\n- (void)methodWithId:(NSString *)id method:(NSString *)method parameters:(NSArray *)parameters {\n    NSDictionary *fields = @{@\"msg\": @\"method\", @\"method\": method, @\"id\": id};\n    NSString *json = [self _buildJSONWithFields:fields parameters:parameters];\n    [self.webSocket send:json];\n}\n\n#pragma mark - Internal \n\n- (NSString *)_buildJSONWithFields:(NSDictionary *)fields parameters:(NSArray *)parameters {\n    NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:fields];\n    if (parameters)\n        [dict setObject:parameters forKey:@\"params\"];\n    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];\n    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];\n}\n\n- (void)_setupWebSocket {\n    NSURL *url = [NSURL URLWithString:self.urlString];\n    NSURLRequest *request = [NSURLRequest requestWithURL:url];\n    self.webSocket = [[DependencyProvider sharedProvider] provideSRWebSocketWithRequest:request];\n    self.webSocket.delegate = self;\n}\n\n- (void)_closeConnection {\n    [self.webSocket close];\n    self.webSocket.delegate = nil;\n    self.webSocket = nil;\n}\n\n#pragma mark - <SRWebSocketDelegate>\n\n- (void)webSocketDidOpen:(SRWebSocket *)webSocket {\n    [self.delegate didOpen];\n}\n\n- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {\n    [self.delegate didReceiveConnectionError:error];\n}\n\n- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {\n    [self.delegate didReceiveConnectionClose];\n}\n\n- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {\n    // TODO: write test case for parse error (handle)\n    NSData *data = [(NSString *)message dataUsingEncoding:NSUTF8StringEncoding];\n    NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data\n                                                               options:kNilOptions\n                                                                 error:nil];\n    [self.delegate didReceiveMessage:dictionary];\n}\n\n@end\n"
  },
  {
    "path": "ObjectiveDDP.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name           = 'ObjectiveDDP'\n  s.ios.deployment_target = '7.1'\n  s.osx.deployment_target = '10.8'\n  s.version        = '0.2.0'\n  s.license        = 'MIT'\n  s.summary        = 'Facilitates communication between iOS clients and meteor.js servers'\n  s.homepage       = 'https://github.com/boundsj/ObjectiveDDP.git'\n  s.author         = 'Jesse Bounds'\n  s.source         = { :git => 'https://github.com/boundsj/ObjectiveDDP.git', :tag => 'v0.2.0' }\n  s.source_files   = 'ObjectiveDDP/*.{h,m,c}'\n  s.requires_arc   = true\n  s.dependency 'SocketRocket', '0.4.1'\n  s.dependency 'M13OrderedDictionary'\nend\n"
  },
  {
    "path": "ObjectiveDDP.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t4000D63A170E880400296229 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4000D639170E880400296229 /* Foundation.framework */; };\n\t\t4000D63F170E880400296229 /* ObjectiveDDP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4000D63E170E880400296229 /* ObjectiveDDP.h */; };\n\t\t4000D641170E880400296229 /* ObjectiveDDP.m in Sources */ = {isa = PBXBuildFile; fileRef = 4000D640170E880400296229 /* ObjectiveDDP.m */; };\n\t\t4011C80417BD2AA6002AA28E /* DependencyProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4011C80317BD2AA6002AA28E /* DependencyProvider.m */; };\n\t\t4011C80517BD2AA6002AA28E /* DependencyProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4011C80317BD2AA6002AA28E /* DependencyProvider.m */; };\n\t\t4011C80817BD2C06002AA28E /* FakeDependencyProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 4011C80717BD2C06002AA28E /* FakeDependencyProvider.m */; };\n\t\t4011C80B17BD2CA1002AA28E /* DDPSpecHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4011C80A17BD2CA1002AA28E /* DDPSpecHelper.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t4011C80E17BD2E14002AA28E /* DependencyProvider+Spec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4011C80D17BD2E14002AA28E /* DependencyProvider+Spec.m */; };\n\t\t401AEB7E170E9EC7008B38EA /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB7D170E9EC7008B38EA /* libicucore.dylib */; };\n\t\t401AEB80170E9ECC008B38EA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB7F170E9ECC008B38EA /* SystemConfiguration.framework */; };\n\t\t401AEB82170E9ED2008B38EA /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB81170E9ED2008B38EA /* CFNetwork.framework */; };\n\t\t401AEB84170E9EEB008B38EA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB83170E9EEB008B38EA /* Security.framework */; };\n\t\t4079F9DB170EB31D00194B4A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4079F9DA170EB31D00194B4A /* UIKit.framework */; };\n\t\t4079F9DC170EB31D00194B4A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4000D639170E880400296229 /* Foundation.framework */; };\n\t\t4079F9DE170EB31D00194B4A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4079F9DD170EB31D00194B4A /* CoreGraphics.framework */; };\n\t\t4079F9E4170EB31D00194B4A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4079F9E2170EB31D00194B4A /* InfoPlist.strings */; };\n\t\t4079F9E6170EB31D00194B4A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4079F9E5170EB31D00194B4A /* main.m */; };\n\t\t4079F9F1170EB35200194B4A /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB83170E9EEB008B38EA /* Security.framework */; };\n\t\t4079F9F2170EB35800194B4A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB81170E9ED2008B38EA /* CFNetwork.framework */; };\n\t\t4079F9F3170EB36000194B4A /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB7F170E9ECC008B38EA /* SystemConfiguration.framework */; };\n\t\t4079F9F4170EB36700194B4A /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 401AEB7D170E9EC7008B38EA /* libicucore.dylib */; };\n\t\t4079F9F5170EB39200194B4A /* ObjectiveDDP.m in Sources */ = {isa = PBXBuildFile; fileRef = 4000D640170E880400296229 /* ObjectiveDDP.m */; };\n\t\t4079F9F7170EB3B000194B4A /* ObjectiveDDPSpec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4079F9F6170EB3B000194B4A /* ObjectiveDDPSpec.mm */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t40A305F3178D27E800546C1F /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 40A305F2178D27E800546C1F /* Default-568h@2x.png */; };\n\t\t40BAB8CD181EFE550098524C /* NSObject+Spec.m in Sources */ = {isa = PBXBuildFile; fileRef = 40BAB8CC181EFE550098524C /* NSObject+Spec.m */; };\n\t\t40BAB8D0182051500098524C /* MeteorClient+Parsing.m in Sources */ = {isa = PBXBuildFile; fileRef = 40BAB8CF182051500098524C /* MeteorClient+Parsing.m */; };\n\t\t40BAB8D1182051500098524C /* MeteorClient+Parsing.m in Sources */ = {isa = PBXBuildFile; fileRef = 40BAB8CF182051500098524C /* MeteorClient+Parsing.m */; };\n\t\t40F8370C1741C59700AF2340 /* BSONIdGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 888B6DFE173B66EA001EED80 /* BSONIdGenerator.m */; };\n\t\t40F8370D1741C59700AF2340 /* MeteorClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 888B6DFB173B6508001EED80 /* MeteorClient.m */; };\n\t\t40F8370F1741C62800AF2340 /* MeteorClientSpec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 40F8370E1741C62800AF2340 /* MeteorClientSpec.mm */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\t430E014E41C9666E08613FCE /* MockSRWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 430E02ACD0BC78CC53F31D72 /* MockSRWebSocket.m */; };\n\t\t430E08B6E86CA801EE954D0F /* MockObjectiveDDPDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 430E092B95390D2D558E5F3B /* MockObjectiveDDPDelegate.m */; };\n\t\t570DE62F4BD74C18AE51ED8C /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C1F0C9084EA4B2DBD349673 /* libPods.a */; };\n\t\t888B6DFC173B6508001EED80 /* MeteorClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 888B6DFB173B6508001EED80 /* MeteorClient.m */; };\n\t\t888B6DFF173B66EA001EED80 /* BSONIdGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 888B6DFE173B66EA001EED80 /* BSONIdGenerator.m */; };\n\t\t9D3C062D54114FB1AC5700F0 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22BE0B3F1B814D98AAAE26CF /* libPods.a */; };\n\t\tBC2C3115142F54C55A92F9FD /* libPods-ObjectiveDDP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39ACA448F5A7B3CDD0FC5858 /* libPods-ObjectiveDDP.a */; };\n\t\tFD7BC8FE2078D7295BEFE6FA /* libPods-Specs.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 320AA851EDF28E77008B96B8 /* libPods-Specs.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t4000D634170E880400296229 /* CopyFiles */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"include/${PRODUCT_NAME}\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\t4000D63F170E880400296229 /* ObjectiveDDP.h in CopyFiles */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t052BE033183F8655005CBD6E /* MeteorClient+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"MeteorClient+Private.h\"; sourceTree = \"<group>\"; };\n\t\t15654C36C786305476C43A3A /* Pods-Specs.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Specs.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Specs/Pods-Specs.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t194F89D9560FD1856AE79721 /* Pods-ObjectiveDDP.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ObjectiveDDP.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-ObjectiveDDP/Pods-ObjectiveDDP.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t22BE0B3F1B814D98AAAE26CF /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t2C1F0C9084EA4B2DBD349673 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t320AA851EDF28E77008B96B8 /* libPods-Specs.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-Specs.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t39ACA448F5A7B3CDD0FC5858 /* libPods-ObjectiveDDP.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-ObjectiveDDP.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4000D636170E880400296229 /* libObjectiveDDP.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libObjectiveDDP.a; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4000D639170E880400296229 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t4000D63D170E880400296229 /* ObjectiveDDP-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"ObjectiveDDP-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t4000D63E170E880400296229 /* ObjectiveDDP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ObjectiveDDP.h; sourceTree = \"<group>\"; };\n\t\t4000D640170E880400296229 /* ObjectiveDDP.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ObjectiveDDP.m; sourceTree = \"<group>\"; };\n\t\t4011C80217BD2AA6002AA28E /* DependencyProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DependencyProvider.h; sourceTree = \"<group>\"; };\n\t\t4011C80317BD2AA6002AA28E /* DependencyProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DependencyProvider.m; sourceTree = \"<group>\"; };\n\t\t4011C80617BD2C06002AA28E /* FakeDependencyProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FakeDependencyProvider.h; sourceTree = \"<group>\"; };\n\t\t4011C80717BD2C06002AA28E /* FakeDependencyProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FakeDependencyProvider.m; sourceTree = \"<group>\"; };\n\t\t4011C80A17BD2CA1002AA28E /* DDPSpecHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDPSpecHelper.m; sourceTree = \"<group>\"; };\n\t\t4011C80D17BD2E14002AA28E /* DependencyProvider+Spec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"DependencyProvider+Spec.m\"; sourceTree = \"<group>\"; };\n\t\t4011C80F17BD310D002AA28E /* DDPSpecHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDPSpecHelper.h; sourceTree = \"<group>\"; };\n\t\t401AEB7D170E9EC7008B38EA /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = \"compiled.mach-o.dylib\"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; };\n\t\t401AEB7F170E9ECC008B38EA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };\n\t\t401AEB81170E9ED2008B38EA /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };\n\t\t401AEB83170E9EEB008B38EA /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };\n\t\t4079F9D9170EB31D00194B4A /* Specs.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Specs.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t4079F9DA170EB31D00194B4A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t4079F9DD170EB31D00194B4A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t4079F9E1170EB31D00194B4A /* Specs-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Specs-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t4079F9E3170EB31D00194B4A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t4079F9E5170EB31D00194B4A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t4079F9E7170EB31D00194B4A /* Specs-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Specs-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t4079F9F6170EB3B000194B4A /* ObjectiveDDPSpec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ObjectiveDDPSpec.mm; sourceTree = \"<group>\"; };\n\t\t40A305F2178D27E800546C1F /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568h@2x.png\"; sourceTree = \"<group>\"; };\n\t\t40BAB8CC181EFE550098524C /* NSObject+Spec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSObject+Spec.m\"; sourceTree = \"<group>\"; };\n\t\t40BAB8CF182051500098524C /* MeteorClient+Parsing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"MeteorClient+Parsing.m\"; sourceTree = \"<group>\"; };\n\t\t40E901D1183809DF00CFD98C /* ObjectiveDDP.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ObjectiveDDP.podspec; sourceTree = SOURCE_ROOT; };\n\t\t40F8370E1741C62800AF2340 /* MeteorClientSpec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MeteorClientSpec.mm; sourceTree = \"<group>\"; };\n\t\t430E02ACD0BC78CC53F31D72 /* MockSRWebSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MockSRWebSocket.m; sourceTree = \"<group>\"; };\n\t\t430E092B95390D2D558E5F3B /* MockObjectiveDDPDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MockObjectiveDDPDelegate.m; sourceTree = \"<group>\"; };\n\t\t430E0AEA2F4C48D01B0BC222 /* MockSRWebSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockSRWebSocket.h; sourceTree = \"<group>\"; };\n\t\t430E0F1E6C3E7422A8791E24 /* MockObjectiveDDPDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockObjectiveDDPDelegate.h; sourceTree = \"<group>\"; };\n\t\t888B6DFA173B6508001EED80 /* MeteorClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MeteorClient.h; sourceTree = \"<group>\"; };\n\t\t888B6DFB173B6508001EED80 /* MeteorClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MeteorClient.m; sourceTree = \"<group>\"; };\n\t\t888B6DFD173B66EA001EED80 /* BSONIdGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BSONIdGenerator.h; sourceTree = \"<group>\"; };\n\t\t888B6DFE173B66EA001EED80 /* BSONIdGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BSONIdGenerator.m; sourceTree = \"<group>\"; };\n\t\tD05E1D000A1228EEFAD5C7A9 /* Pods-ObjectiveDDP.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-ObjectiveDDP.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-ObjectiveDDP/Pods-ObjectiveDDP.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tF50CB09B9E9DA61FFDCC00AF /* Pods-Specs.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Specs.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Specs/Pods-Specs.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t4000D633170E880400296229 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t401AEB84170E9EEB008B38EA /* Security.framework in Frameworks */,\n\t\t\t\t401AEB82170E9ED2008B38EA /* CFNetwork.framework in Frameworks */,\n\t\t\t\t401AEB80170E9ECC008B38EA /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t4000D63A170E880400296229 /* Foundation.framework in Frameworks */,\n\t\t\t\t401AEB7E170E9EC7008B38EA /* libicucore.dylib in Frameworks */,\n\t\t\t\t9D3C062D54114FB1AC5700F0 /* libPods.a in Frameworks */,\n\t\t\t\tBC2C3115142F54C55A92F9FD /* libPods-ObjectiveDDP.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4079F9D6170EB31D00194B4A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4079F9F4170EB36700194B4A /* libicucore.dylib in Frameworks */,\n\t\t\t\t4079F9F3170EB36000194B4A /* SystemConfiguration.framework in Frameworks */,\n\t\t\t\t4079F9F2170EB35800194B4A /* CFNetwork.framework in Frameworks */,\n\t\t\t\t4079F9F1170EB35200194B4A /* Security.framework in Frameworks */,\n\t\t\t\t4079F9DB170EB31D00194B4A /* UIKit.framework in Frameworks */,\n\t\t\t\t4079F9DC170EB31D00194B4A /* Foundation.framework in Frameworks */,\n\t\t\t\t4079F9DE170EB31D00194B4A /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t570DE62F4BD74C18AE51ED8C /* libPods.a in Frameworks */,\n\t\t\t\tFD7BC8FE2078D7295BEFE6FA /* libPods-Specs.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t4000D62D170E880400296229 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t40A305F2178D27E800546C1F /* Default-568h@2x.png */,\n\t\t\t\t4000D63B170E880400296229 /* ObjectiveDDP */,\n\t\t\t\t4079F9DF170EB31D00194B4A /* Specs */,\n\t\t\t\t4000D638170E880400296229 /* Frameworks */,\n\t\t\t\t4000D637170E880400296229 /* Products */,\n\t\t\t\t95540A0277F183BFDC9822E6 /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4000D637170E880400296229 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4000D636170E880400296229 /* libObjectiveDDP.a */,\n\t\t\t\t4079F9D9170EB31D00194B4A /* Specs.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4000D638170E880400296229 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t401AEB7D170E9EC7008B38EA /* libicucore.dylib */,\n\t\t\t\t4079F9DD170EB31D00194B4A /* CoreGraphics.framework */,\n\t\t\t\t401AEB83170E9EEB008B38EA /* Security.framework */,\n\t\t\t\t401AEB81170E9ED2008B38EA /* CFNetwork.framework */,\n\t\t\t\t401AEB7F170E9ECC008B38EA /* SystemConfiguration.framework */,\n\t\t\t\t4000D639170E880400296229 /* Foundation.framework */,\n\t\t\t\t4079F9DA170EB31D00194B4A /* UIKit.framework */,\n\t\t\t\t2C1F0C9084EA4B2DBD349673 /* libPods.a */,\n\t\t\t\t39ACA448F5A7B3CDD0FC5858 /* libPods-ObjectiveDDP.a */,\n\t\t\t\t320AA851EDF28E77008B96B8 /* libPods-Specs.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4000D63B170E880400296229 /* ObjectiveDDP */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4011C80217BD2AA6002AA28E /* DependencyProvider.h */,\n\t\t\t\t4011C80317BD2AA6002AA28E /* DependencyProvider.m */,\n\t\t\t\t888B6DFD173B66EA001EED80 /* BSONIdGenerator.h */,\n\t\t\t\t888B6DFE173B66EA001EED80 /* BSONIdGenerator.m */,\n\t\t\t\t888B6DFA173B6508001EED80 /* MeteorClient.h */,\n\t\t\t\t888B6DFB173B6508001EED80 /* MeteorClient.m */,\n\t\t\t\t052BE033183F8655005CBD6E /* MeteorClient+Private.h */,\n\t\t\t\t40BAB8CF182051500098524C /* MeteorClient+Parsing.m */,\n\t\t\t\t4000D63E170E880400296229 /* ObjectiveDDP.h */,\n\t\t\t\t4000D640170E880400296229 /* ObjectiveDDP.m */,\n\t\t\t\t4000D63C170E880400296229 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ObjectiveDDP;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4000D63C170E880400296229 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t40E901D1183809DF00CFD98C /* ObjectiveDDP.podspec */,\n\t\t\t\t4000D63D170E880400296229 /* ObjectiveDDP-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4079F9DF170EB31D00194B4A /* Specs */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4011C80D17BD2E14002AA28E /* DependencyProvider+Spec.m */,\n\t\t\t\t40BAB8CC181EFE550098524C /* NSObject+Spec.m */,\n\t\t\t\t4011C80F17BD310D002AA28E /* DDPSpecHelper.h */,\n\t\t\t\t4011C80A17BD2CA1002AA28E /* DDPSpecHelper.m */,\n\t\t\t\t40F8370E1741C62800AF2340 /* MeteorClientSpec.mm */,\n\t\t\t\t4079F9F6170EB3B000194B4A /* ObjectiveDDPSpec.mm */,\n\t\t\t\t430E092A40EC4FAED3B6C76B /* Mocks */,\n\t\t\t\t4079F9E0170EB31D00194B4A /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Specs;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t4079F9E0170EB31D00194B4A /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t4079F9E1170EB31D00194B4A /* Specs-Info.plist */,\n\t\t\t\t4079F9E2170EB31D00194B4A /* InfoPlist.strings */,\n\t\t\t\t4079F9E5170EB31D00194B4A /* main.m */,\n\t\t\t\t4079F9E7170EB31D00194B4A /* Specs-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t430E092A40EC4FAED3B6C76B /* Mocks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t430E092B95390D2D558E5F3B /* MockObjectiveDDPDelegate.m */,\n\t\t\t\t430E0F1E6C3E7422A8791E24 /* MockObjectiveDDPDelegate.h */,\n\t\t\t\t4011C80617BD2C06002AA28E /* FakeDependencyProvider.h */,\n\t\t\t\t430E02ACD0BC78CC53F31D72 /* MockSRWebSocket.m */,\n\t\t\t\t430E0AEA2F4C48D01B0BC222 /* MockSRWebSocket.h */,\n\t\t\t\t4011C80717BD2C06002AA28E /* FakeDependencyProvider.m */,\n\t\t\t);\n\t\t\tpath = Mocks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t95540A0277F183BFDC9822E6 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t194F89D9560FD1856AE79721 /* Pods-ObjectiveDDP.debug.xcconfig */,\n\t\t\t\tD05E1D000A1228EEFAD5C7A9 /* Pods-ObjectiveDDP.release.xcconfig */,\n\t\t\t\tF50CB09B9E9DA61FFDCC00AF /* Pods-Specs.debug.xcconfig */,\n\t\t\t\t15654C36C786305476C43A3A /* Pods-Specs.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t4000D635170E880400296229 /* ObjectiveDDP */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4000D644170E880400296229 /* Build configuration list for PBXNativeTarget \"ObjectiveDDP\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t04C9623BA89EC364FD90CD3D /* Check Pods Manifest.lock */,\n\t\t\t\t4000D632170E880400296229 /* Sources */,\n\t\t\t\t4000D633170E880400296229 /* Frameworks */,\n\t\t\t\t4000D634170E880400296229 /* CopyFiles */,\n\t\t\t\t648CA590930A4D87BE530DBD /* Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ObjectiveDDP;\n\t\t\tproductName = ObjectiveDDP;\n\t\t\tproductReference = 4000D636170E880400296229 /* libObjectiveDDP.a */;\n\t\t\tproductType = \"com.apple.product-type.library.static\";\n\t\t};\n\t\t4079F9D8170EB31D00194B4A /* Specs */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 4079F9EC170EB31E00194B4A /* Build configuration list for PBXNativeTarget \"Specs\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tCE13F78A2A3541BFB51C1FA9 /* Check Pods Manifest.lock */,\n\t\t\t\t4079F9D5170EB31D00194B4A /* Sources */,\n\t\t\t\t4079F9D6170EB31D00194B4A /* Frameworks */,\n\t\t\t\t4079F9D7170EB31D00194B4A /* Resources */,\n\t\t\t\t063296B82B464E808F5E3E74 /* Copy Pods Resources */,\n\t\t\t\tB4B4E8EB045D267FC8470639 /* Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Specs;\n\t\t\tproductName = Specs;\n\t\t\tproductReference = 4079F9D9170EB31D00194B4A /* Specs.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t4000D62E170E880400296229 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0460;\n\t\t\t\tORGANIZATIONNAME = Rebounds;\n\t\t\t};\n\t\t\tbuildConfigurationList = 4000D631170E880400296229 /* Build configuration list for PBXProject \"ObjectiveDDP\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 4000D62D170E880400296229;\n\t\t\tproductRefGroup = 4000D637170E880400296229 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t4000D635170E880400296229 /* ObjectiveDDP */,\n\t\t\t\t4079F9D8170EB31D00194B4A /* Specs */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t4079F9D7170EB31D00194B4A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4079F9E4170EB31D00194B4A /* InfoPlist.strings in Resources */,\n\t\t\t\t40A305F3178D27E800546C1F /* Default-568h@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t04C9623BA89EC364FD90CD3D /* Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t063296B82B464E808F5E3E74 /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Specs/Pods-Specs-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t648CA590930A4D87BE530DBD /* Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-ObjectiveDDP/Pods-ObjectiveDDP-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB4B4E8EB045D267FC8470639 /* Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Specs/Pods-Specs-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tCE13F78A2A3541BFB51C1FA9 /* Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t4000D632170E880400296229 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t4000D641170E880400296229 /* ObjectiveDDP.m in Sources */,\n\t\t\t\t888B6DFC173B6508001EED80 /* MeteorClient.m in Sources */,\n\t\t\t\t40BAB8D0182051500098524C /* MeteorClient+Parsing.m in Sources */,\n\t\t\t\t888B6DFF173B66EA001EED80 /* BSONIdGenerator.m in Sources */,\n\t\t\t\t4011C80417BD2AA6002AA28E /* DependencyProvider.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t4079F9D5170EB31D00194B4A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t40F8370C1741C59700AF2340 /* BSONIdGenerator.m in Sources */,\n\t\t\t\t40F8370D1741C59700AF2340 /* MeteorClient.m in Sources */,\n\t\t\t\t40BAB8D1182051500098524C /* MeteorClient+Parsing.m in Sources */,\n\t\t\t\t4079F9F5170EB39200194B4A /* ObjectiveDDP.m in Sources */,\n\t\t\t\t4079F9E6170EB31D00194B4A /* main.m in Sources */,\n\t\t\t\t4079F9F7170EB3B000194B4A /* ObjectiveDDPSpec.mm in Sources */,\n\t\t\t\t430E08B6E86CA801EE954D0F /* MockObjectiveDDPDelegate.m in Sources */,\n\t\t\t\t40BAB8CD181EFE550098524C /* NSObject+Spec.m in Sources */,\n\t\t\t\t430E014E41C9666E08613FCE /* MockSRWebSocket.m in Sources */,\n\t\t\t\t40F8370F1741C62800AF2340 /* MeteorClientSpec.mm in Sources */,\n\t\t\t\t4011C80517BD2AA6002AA28E /* DependencyProvider.m in Sources */,\n\t\t\t\t4011C80817BD2C06002AA28E /* FakeDependencyProvider.m in Sources */,\n\t\t\t\t4011C80B17BD2CA1002AA28E /* DDPSpecHelper.m in Sources */,\n\t\t\t\t4011C80E17BD2E14002AA28E /* DependencyProvider+Spec.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t4079F9E2170EB31D00194B4A /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t4079F9E3170EB31D00194B4A /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t4000D642170E880400296229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.1;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4000D643170E880400296229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 6.1;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4000D645170E880400296229 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 194F89D9560FD1856AE79721 /* Pods-ObjectiveDDP.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDSTROOT = /tmp/ObjectiveDDP.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ObjectiveDDP/ObjectiveDDP-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"${PODS_HEADERS_SEARCH_PATHS}\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\\\\\"$(SDKROOT)/usr/lib/system\\\\\\\"\",\n\t\t\t\t\t\"\\\\\\\"$(SRCROOT)/ObjectiveDDP\\\\\\\"\",\n\t\t\t\t\t/Users/boundsj/workspace/ios/ObjectiveDDP/ObjectiveDDP,\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4000D646170E880400296229 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D05E1D000A1228EEFAD5C7A9 /* Pods-ObjectiveDDP.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tDSTROOT = /tmp/ObjectiveDDP.dst;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"ObjectiveDDP/ObjectiveDDP-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"${PODS_HEADERS_SEARCH_PATHS}\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\\\\\"$(SDKROOT)/usr/lib/system\\\\\\\"\",\n\t\t\t\t\t\"\\\\\\\"$(SRCROOT)/ObjectiveDDP\\\\\\\"\",\n\t\t\t\t\t/Users/boundsj/workspace/ios/ObjectiveDDP/ObjectiveDDP,\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t4079F9ED170EB31E00194B4A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F50CB09B9E9DA61FFDCC00AF /* Pods-Specs.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Specs/Specs-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = \"Specs/Specs-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SDKROOT)/usr/lib/system\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)/ObjectiveDDP\\\"\",\n\t\t\t\t);\n\t\t\t\tOTHER_CPLUSPLUSFLAGS = (\n\t\t\t\t\t\"$(OTHER_CFLAGS)\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVALID_ARCHS = \"arm64 armv7 arm7s\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t4079F9EE170EB31E00194B4A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 15654C36C786305476C43A3A /* Pods-Specs.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Specs/Specs-Prefix.pch\";\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = \"Specs/Specs-Info.plist\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.1;\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"$(SDKROOT)/usr/lib/system\\\"\",\n\t\t\t\t\t\"\\\"$(SRCROOT)/ObjectiveDDP\\\"\",\n\t\t\t\t);\n\t\t\t\tOTHER_CFLAGS = \"-DNS_BLOCK_ASSERTIONS=1\";\n\t\t\t\tOTHER_LDFLAGS = \"$(inherited)\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVALID_ARCHS = \"arm64 armv7 arm7s\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t4000D631170E880400296229 /* Build configuration list for PBXProject \"ObjectiveDDP\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4000D642170E880400296229 /* Debug */,\n\t\t\t\t4000D643170E880400296229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4000D644170E880400296229 /* Build configuration list for PBXNativeTarget \"ObjectiveDDP\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4000D645170E880400296229 /* Debug */,\n\t\t\t\t4000D646170E880400296229 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t4079F9EC170EB31E00194B4A /* Build configuration list for PBXNativeTarget \"Specs\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t4079F9ED170EB31E00194B4A /* Debug */,\n\t\t\t\t4079F9EE170EB31E00194B4A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 4000D62E170E880400296229 /* Project object */;\n}\n"
  },
  {
    "path": "ObjectiveDDP.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ObjectiveDDP.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ObjectiveDDP.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version='1.0' encoding='UTF-8'?><Workspace version='1.0'><FileRef location='group:ObjectiveDDP.xcodeproj'/><FileRef location='group:Pods/Pods.xcodeproj'/></Workspace>"
  },
  {
    "path": "Podfile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\nplatform :ios, '7.1'\nplatform :osx, '10.7'\n\ntarget :ObjectiveDDP do\n    pod 'SocketRocket', '= 0.3.1-beta2'\n    pod 'M13OrderedDictionary'\nend\n\ntarget :Specs do\n    pod 'Cedar'\nend\n"
  },
  {
    "path": "README.md",
    "content": "ObjectiveDDP\n============\n\n[![Join the chat at https://gitter.im/boundsj/ObjectiveDDP](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/boundsj/ObjectiveDDP?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n[![Build Status](https://travis-ci.org/boundsj/ObjectiveDDP.png)](https://travis-ci.org/boundsj/ObjectiveDDP)\n\nConnect your iOS/OSX applications written in Objective-C or Swift to server applications that communicate with the [DDP protocol created by Meteor](https://github.com/meteor/meteor/blob/devel/packages/ddp/DDP.md) and, if required by your server, authenticate with it.\n\n```\nNote:\nsupports meteor 0.8.2 and above.\nIf you need to migrate please see the srp-upgrade-support branch\n```\n\n###### Now with support for OAuth with Facebook and other services [experiemental]\n\nThis is unsupported so don't come crying if it eats your cat! or destroys any data.\n\n```\n(void)logonWithOAuthAccessToken: (NSString *)accessToken serviceName: (NSString *) serviceName responseCallback: (MeteorClientMethodCallback)responseCallback;\n```\n\nPlease require the following project to your meteor server for this to work.\n```\nhttps://github.com/jasper-lu/facebook-ddp\n```\n\nHopefully meteor will support this natively in the future https://github.com/meteor/meteor/pull/3515\n\n\n\nWhat's Inside\n-------------\n\nObjectiveDDP should run well with iOS projects using ARC and iOS 7.1 or above. __**Check out the [example application](https://github.com/boundsj/ObjectiveDDP/wiki/Example-Application) and the [project wiki](https://github.com/boundsj/ObjectiveDDP/wiki) for more information.**__ Here is a sneak peak:\n\n##### Integrate it with your project using CocoaPods:\n\n```\npod 'ObjectiveDDP', '~> 0.2.0'\n```\nFor more information about this, check out [Linking and Building](https://github.com/boundsj/ObjectiveDDP/wiki/Linking-and-using-ObjectiveDDP) in the wiki.\n\n##### Load the library and connect to a meteor server:\n\n```objective-c\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    self.meteorClient = [[MeteorClient alloc] init];\n    [self.meteorClient addSubscription:@\"awesome_server_mongo_collection\"];\n    ObjectiveDDP *ddp = [[ObjectiveDDP alloc] initWithURLString:@\"wss://awesomeapp.meteor.com/websocket\" delegate:self.meteorClient];\n    self.meteorClient.ddp = ddp;\n    [self.meteorClient.ddp connectWebSocket];\n}\n```\n\n##### Signup with username:\n\n```objective-c\n[self.meteor signupWithUsername:self.username.text password:self.password.text fullname:self.fullname responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\nor with email\n\n```objective-c\n[self.meteor signupWithEmail:self.email.text password:self.password.text fullname:self.fullname.text responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\nor with both\n\n```objective-c\n[self.meteor signupWithUsernameAndEmail:self.username.text email:self.email.text password:self.password.text fullname:self.fullname.text responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\n\n\n##### Logon using authentication:\n\n```objective-c\n[self.meteor logonWithUsername:self.username.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\nor with email\n\n```objective-c\n[self.meteor logonWithEmail:self.email.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\nor if you accept both\n\n```objective-c\n[self.meteor logonWithUsernameOrEmail:self.usernameOrEmail.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {\n    if (error) {\n        [self handleFailedAuth:error];\n        return;\n    }\n    [self handleSuccessfulAuth];\n}];\n```\n\n##### Call a remote function on the server:\n\n```objecctive-c\n[self.meteor callMethodName:@\"sayHelloTo\" parameters:@[self.username.text] responseCallback:^(NSDictionary *response, NSError *error) {\n    NSString *message = response[@\"result\"];\n    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Meteor Todos\"\n                                                    message:message\n                                                   delegate:nil\n                                          cancelButtonTitle:@\"Great\"\n                                          otherButtonTitles:nil];\n    [alert show];\n}];\n```\n\n##### Listen for updates that meteor sends regarding the collection previously subscribed to:\n\n```objective-c\n- (void)viewWillAppear:(BOOL)animated {\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveAddedUpdate:)\n                                                 name:@\"awesome_server_mongo_collection_added\"\n                                               object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveRemovedUpdate:)\n                                                 name:@\"awesome_server_mongo_collection_removed\"\n                                               object:nil];\n    [[NSNotificationCenter defaultCenter] addObserver:self\n                                             selector:@selector(didReceiveChangeUpdate:)\n                                                 name:@\"awesome_server_mongo_collection_changed\"\n                                               object:nil];\n}\n```\n\n##### Send CRUD updates to the meteor server to change the collection:\n\n```objective-c\nNSString *message = @\"I am the walrus\";\nNSString *anId = [[NSUUID UUID] UUIDString];\nNSArray *parameters = @[@{@\"_id\": anId,\n                          @\"msg\": message,\n                          @\"owner\": self.userId,\n                          @\"info\": self.importantInformation}];\n\n// add a document\n[self.meteor callMethodName:@\"/awesome_server_mongo_collection/insert\"\n                 parameters:parameters\n           responseCallback:nil];\n\n// then remove it\n[self.meteor callMethodName:@\"/awesome_server_mongo_collection/remove\"\n                 parameters:@[@{@\"_id\": anId}]\n           responseCallback:nil];\n```\n\n##### Listen for notifications:\n\nMeteorClientConnectionReadyNotification - When the server responds as accepting the DDP protocol version to communicate on, you won't be able to call any methods to meteor until this happens\n\n```objective-c\n\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportConnection) name:MeteorClientDidConnectNotification object:nil];\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportConnectionReady) name:MeteorClientConnectionReadyNotification object:nil];\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportDisconnection) name:MeteorClientDidDisconnectNotification object:nil];\n\n```\n\n\nLicense\n--------------\n**[MIT]**\n\n[MIT]: http://opensource.org/licenses/MIT\n"
  },
  {
    "path": "Rakefile",
    "content": "require 'thrust/tasks'\nrequire 'thrust/tasks'\n"
  },
  {
    "path": "Specs/DDPSpecHelper.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"FakeDependencyProvider.h\"\n\nextern FakeDependencyProvider *fakeProvider;\n\n@interface DDPSpecHelper : NSObject\n\n@end\n"
  },
  {
    "path": "Specs/DDPSpecHelper.m",
    "content": "#import \"DDPSpecHelper.h\"\n#import \"FakeDependencyProvider.h\"\n\nFakeDependencyProvider *fakeProvider = nil;\n\n@implementation DDPSpecHelper\n\n+ (void)beforeEach {\n    fakeProvider = [[[FakeDependencyProvider alloc] init] autorelease];\n}\n\n@end\n"
  },
  {
    "path": "Specs/DependencyProvider+Spec.m",
    "content": "#import \"DependencyProvider.h\"\n\n@implementation DependencyProvider (Spec)\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wobjc-protocol-method-implementation\"\n\n// This will create a linker warning for the Specs target but it is harmless under test\n\n+ (DependencyProvider *)sharedProvider {\n    return fakeProvider;\n}\n\n#pragma clang diagnostic pop\n\n@end\n"
  },
  {
    "path": "Specs/MeteorClientSpec.mm",
    "content": "#import \"MeteorClient+Private.h\"\n#import \"ObjectiveDDP.h\"\n#import <M13OrderedDictionary/M13OrderedDictionary.h>\n\nusing namespace Cedar::Matchers;\nusing namespace Cedar::Doubles;\nusing namespace Arguments;\n\nSPEC_BEGIN(MeteorClientSpec)\n\ndescribe(@\"MeteorClient\", ^{\n    __block MeteorClient *meteorClient;\n    __block ObjectiveDDP *ddp;\n    __block NSString *bestDDPVersion;\n\n    beforeEach(^{\n        bestDDPVersion = @\"best_version_ever\";\n        ddp = nice_fake_for([ObjectiveDDP class]);\n        meteorClient = [[[MeteorClient alloc] initWithDDPVersion:bestDDPVersion] autorelease];\n        ddp.delegate = meteorClient;\n        meteorClient.ddp = ddp;\n        meteorClient.authDelegate = nice_fake_for(@protocol(DDPAuthDelegate));\n        spy_on(ddp);\n    });\n\n    it(@\"is correctly initialized\", ^{\n        meteorClient.websocketReady should_not be_truthy;\n        meteorClient.connected should_not be_truthy;\n        meteorClient.collections should_not be_nil;\n        meteorClient->_subscriptions should_not be_nil;\n        meteorClient.authState should equal(AuthStateNoAuth);\n        meteorClient.ddpVersion should equal(bestDDPVersion);\n    });\n    \n    describe(@\"#disconnect\", ^{\n        beforeEach(^{\n            [meteorClient disconnect];\n        });\n        \n        it(@\"tells ddp to disconnect\", ^{\n            ddp should have_received(@selector(disconnectWebSocket));\n        });        \n    });\n    \n//    describe(@\"#signupWithEmail:password:fullname:responseCallback:\", ^{\n//        \n//        context(@\"when connected\", ^{\n//            beforeEach(^{\n//                meteorClient.connected = YES;\n//                [meteorClient signupWithEmail:@\"mrt@ateam.com\" password:@\"password\" fullname:@\"mr bean\" responseCallback:nil];\n//            });\n//            \n//            it(@\"sends signup message correctly\", ^{\n//                NSArray *sentMessages = [(id<CedarDouble>)ddp sent_messages];\n//                NSInvocation *invocation = sentMessages[1];\n//                NSArray *sentParameters;\n//                [invocation getArgument:&sentParameters atIndex:4];\n//                ddp should have_received(@selector(methodWithId:method:parameters:)).with(@\"1\").and_with(@\"createUser\").and_with(@[@{ @\"username\": @\"\",\n//                @\"email\": @\"mrt@ateam.com\", @\"password\": @{ @\"digest\": [meteorClient sha256:@\"password\"], @\"algorithm\": @\"sha-256\" },\n//                @\"profile\": @{ @\"fullname\": @\"mr bean\",@\"signupToken\": @\"\" } }]);\n//            });\n//            \n//        });\n//        \n//        afterEach(^{\n//            [meteorClient logout];\n//            meteorClient.connected = NO;\n//        \n//        });\n//    });\n    \n//    describe(@\"#signupWithUsername:password:fullname:responseCallback:\", ^{\n//        \n//        context(@\"with username\", ^{\n//            beforeEach(^{\n//                meteorClient.connected = YES;\n//                [meteorClient signupWithUsername:@\"fox\" password:@\"fool\" fullname:@\"mr fox\" responseCallback:nil];\n//            });\n//            \n//            \n//            it(@\"sends signup message correctly\", ^{\n//                NSArray *sentMessages = [(id<CedarDouble>)ddp sent_messages];\n//                NSInvocation *invocation = sentMessages[1];\n//                NSArray *sentParameters;\n//                [invocation getArgument:&sentParameters atIndex:4];\n////                NSLog(@\"%@\", [sentParameters debugDescription]);\n//                ddp should have_received(@selector(methodWithId:method:parameters:)).with(@\"1\").and_with(@\"createUser\").and_with(@[@{ @\"username\": @\"fox\",\n//                @\"email\": @\"\", @\"password\":@{ @\"digest\": [meteorClient sha256:@\"fool\"], @\"algorithm\": @\"sha-256\" },\n//                @\"profile\": @{ @\"fullname\": @\"mr fox\",@\"signupToken\": @\"\" }}]);\n//            });\n//            \n//        });\n//    });\n    \n    describe(@\"#logonWithUserParameters:\", ^{\n        context(@\"when connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = YES;\n                [meteorClient logonWithUserParameters:@{ @\"user\": @{ @\"email\": @\"mrt@ateam.com\" }, @\"password\": @{ @\"digest\": [meteorClient sha256:@\"fool\"], @\"algorithm\": @\"sha-256\" } } responseCallback:nil];\n            });\n            \n            it(@\"sends logon message correctly\", ^{\n                NSArray *sentMessages = [(id<CedarDouble>)ddp sent_messages];\n                NSInvocation *invocation = sentMessages[1];\n                NSArray *sentParameters;\n                [invocation getArgument:&sentParameters atIndex:4];\n                ddp should have_received(@selector(methodWithId:method:parameters:)).with(@\"1\").and_with(@\"login\").and_with(@[@{ @\"user\": @{ @\"email\": @\"mrt@ateam.com\" }, @\"password\": @{ @\"digest\": [meteorClient sha256:@\"fool\"], @\"algorithm\": @\"sha-256\" } }]);\n            });\n        });\n    });\n    \n    describe(@\"#logonWithUsername:password:responseCallback:\", ^{\n        __block NSDictionary *successResponse = nil;\n        __block NSError *errorResponse = nil;\n        \n        context(@\"when connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = YES;\n                [meteorClient logonWithUsername:@\"fox\" password:@\"wh4tdo1Say?\" responseCallback:^(NSDictionary *response, NSError *error) {\n                    successResponse = response;\n                    errorResponse = error;\n                }];\n            });\n            \n            context(@\"when the user is not already logging in\", ^{\n                it(@\"sends logon message correctly\", ^{\n                    ddp should have_received(@selector(methodWithId:method:parameters:)).with(anything).and_with(@\"login\").and_with(anything);\n                });\n                \n                context(@\"if the user tries to logon before current attempt finishes\", ^{\n                    beforeEach(^{\n                        [(id<CedarDouble>)ddp reset_sent_messages];\n                        [meteorClient logonWithUsername:@\"fox\" password:@\"wh4tdo1Say?\" responseCallback:^(NSDictionary *response, NSError *error) {\n                            successResponse = response;\n                            errorResponse = error;\n                        }];\n                    });\n                    \n                    it(@\"does not allow the second attempt\", ^{\n                        ddp should_not have_received(@selector(methodWithId:method:parameters:));\n                    });\n                    \n                    it(@\"rejects the callback with the correct error\", ^{\n                        NSString *errorDesc = [NSString stringWithFormat:@\"You must wait for the current logon request to finish before sending another.\"];\n                        NSError *expectedError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorLogonRejected userInfo:@{NSLocalizedDescriptionKey: errorDesc}];\n                        errorResponse should equal(expectedError);\n                        successResponse should be_nil;\n                    });\n                });\n              \n                context(@\"when the logon request succeeds\", ^{\n                    beforeEach(^{\n                        NSDictionary *message = @{@\"id\": @\"blarg\"};\n                        NSDictionary *logonSuccessfulResponse = @{@\"id\": @\"5\", @\"msg\": @\"result\", @\"result\": message};\n                        [meteorClient didReceiveMessage:logonSuccessfulResponse];\n                    });\n                    \n                    it(@\"calls the response callback correctly\", ^{\n                        successResponse should_not be_nil;\n                        errorResponse should be_nil;\n                        meteorClient.userId should equal(@\"blarg\");\n                    });\n                });\n            \n                context(@\"when the logon request fails\", ^{\n                    beforeEach(^{\n                        NSDictionary *loginErrorMessage = @{@\"error\": @403, @\"message\": @\"you suck\", @\"errorType\": @\"screwed\"};\n                        NSDictionary *logonSuccessfulResponse = @{@\"id\": @\"6\", @\"msg\": @\"result\", @\"error\": loginErrorMessage};\n                        [meteorClient didReceiveMessage:logonSuccessfulResponse];\n                    });\n                    \n//                    it(@\"calls the response callback correctly\", ^{\n//                        NSError *expectedError = [NSError errorWithDomain:@\"screwed\" code:403 userInfo:@{NSLocalizedDescriptionKey: @\"you suck\"}];\n//                        errorResponse should equal(expectedError);\n//                        successResponse should be_nil;\n//                    });\n                });\n            });\n        });\n        \n        context(@\"when not connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = NO;\n                [meteorClient logonWithUsername:@\"fox\" password:@\"wh4tdo1Say?\" responseCallback:^(NSDictionary *response, NSError *error) {\n                    successResponse = response;\n                    errorResponse = error;\n                }];\n            });\n            \n            it(@\"does not send\", ^{\n                ddp should_not have_received(@selector(methodWithId:method:parameters:));\n            });\n            \n            it(@\"rejects the callback with the correct error\", ^{\n                NSString *errorDesc = [NSString stringWithFormat:@\"You are not connected\"];\n                NSError *expectedError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorNotConnected userInfo:@{NSLocalizedDescriptionKey: errorDesc}];\n                errorResponse should equal(expectedError);\n                successResponse should be_nil;\n            });\n        });\n    });\n    \n    describe(@\"#addSubscription:\", ^{\n        context(@\"when connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = YES;\n                [meteorClient addSubscription:@\"a fancy subscription\"];\n            });\n\n            it(@\"should call ddp subscribe method\", ^{\n                ddp should have_received(\"subscribeWith:name:parameters:\").with(anything)\n                .and_with(@\"a fancy subscription\")\n                .and_with(nil);\n            });\n        });\n\n        context(@\"when not connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = NO;\n                [meteorClient addSubscription:@\"a fancy subscription\"];\n            });\n\n            it(@\"should not call ddp subscribe method\", ^{\n                ddp should_not have_received(\"subscribeWith:name:parameters:\");\n            });\n        });\n    });\n\n    describe(@\"#removeSubscription:\", ^{\n        context(@\"when not connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = YES;\n                [meteorClient->_subscriptions setObject:@\"id1\"\n                                               forKey:@\"fancySubscriptionName\"];\n                [meteorClient->_subscriptions count] should equal(1);\n                [meteorClient removeSubscription:@\"fancySubscriptionName\"];\n            });\n\n            it(@\"removes subscription correctly\", ^{\n                ddp should have_received(@selector(unsubscribeWith:));\n                [meteorClient->_subscriptions count] should equal(0);\n            });\n        });\n\n        context(@\"when not connected\", ^{\n            beforeEach(^{\n                meteorClient.connected = NO;\n                [meteorClient->_subscriptions setObject:@\"id1\"\n                                               forKey:@\"fancySubscriptionName\"];\n                [meteorClient->_subscriptions count] should equal(1);\n                [meteorClient removeSubscription:@\"fancySubscriptionName\"];\n            });\n\n            it(@\"does not remove subscription\", ^{\n                ddp should_not have_received(@selector(unsubscribeWith:));\n                [meteorClient->_subscriptions count] should equal(1);\n            });\n        });\n    });\n\n    describe(@\"#didOpen\", ^{\n        beforeEach(^{\n            spy_on([NSNotificationCenter defaultCenter]);\n            M13MutableOrderedDictionary *array = [[[M13MutableOrderedDictionary alloc] init] autorelease];\n            meteorClient.collections = [NSMutableDictionary dictionaryWithDictionary:@{@\"col1\": array}];\n            [meteorClient.collections count] should equal(1);\n            [meteorClient didOpen];\n        });\n\n        it(@\"sets the web socket state to ready\", ^{\n            meteorClient.websocketReady should be_truthy;\n            [meteorClient.collections count] should equal(0);\n            ddp should have_received(@selector(connectWithSession:version:support:));\n        });\n\n        it(@\"sends a notification\", ^{\n            [NSNotificationCenter defaultCenter] should have_received(@selector(postNotificationName:object:))\n            .with(MeteorClientDidConnectNotification)\n            .and_with(meteorClient);\n        });\n    });\n\n    describe(@\"#didReceiveConnectionClose\", ^{\n        beforeEach(^{\n            meteorClient.websocketReady = YES;\n            meteorClient.connected = YES;\n        });\n        \n        context(@\"when websocket is not disconnecting\", ^{\n            beforeEach(^{\n                [meteorClient didReceiveConnectionClose];\n            });\n            \n            it(@\"resets collections and reconnects web socket\", ^{\n                meteorClient.websocketReady should_not be_truthy;\n                meteorClient.connected should_not be_truthy;\n                ddp should have_received(@selector(connectWebSocket));\n            });\n        });\n        \n        context(@\"when websocket is disconnecting\", ^{\n            beforeEach(^{\n                [meteorClient disconnect];\n                [meteorClient didReceiveConnectionClose];\n            });\n            \n            it(@\"does not attempt to reconnect\", ^{\n                ddp should_not have_received(@selector(connectWebSocket));\n            });\n        });\n    });\n    \n    describe(@\"#didReceiveConnectionError\", ^{\n        __block NSError *rejectError;\n        \n        beforeEach(^{\n            spy_on([NSNotificationCenter defaultCenter]);\n            meteorClient.websocketReady = YES;\n            meteorClient.connected = YES;\n            [meteorClient callMethodName:@\"robots\" parameters:nil responseCallback:^(NSDictionary *response, NSError *error) {\n                rejectError = error;\n            }];\n            meteorClient->_methodIds.count should equal(1);\n            meteorClient->_responseCallbacks.count should equal(1);\n        });\n        \n        context(@\"when websocket is not disconnecting\", ^{\n            beforeEach(^{\n                [meteorClient didReceiveConnectionError:nil];\n                [meteorClient callMethodName:@\"robots\" parameters:nil responseCallback:^(NSDictionary *response, NSError *error) {\n                    rejectError = error;\n                }];\n            });\n            \n            it(@\"resets collections and reconnects web socket\", ^{\n                meteorClient.websocketReady should_not be_truthy;\n                meteorClient.connected should_not be_truthy;\n                meteorClient->_methodIds.count should equal(0);\n                meteorClient->_responseCallbacks.count should equal(0);\n                ddp should have_received(@selector(connectWebSocket));\n            });\n            \n            it(@\"rejects unresolved callbacks\", ^{\n                NSError *expectedError = [NSError errorWithDomain:MeteorClientTransportErrorDomain code:MeteorClientErrorDisconnectedBeforeCallbackComplete userInfo:@{NSLocalizedDescriptionKey: @\"You were disconnected\"}];\n                rejectError should equal(expectedError);\n            });\n            \n            it(@\"sends a notification\", ^{\n                [NSNotificationCenter defaultCenter] should have_received(@selector(postNotificationName:object:))\n                .with(MeteorClientDidDisconnectNotification)\n                .and_with(meteorClient);\n            });\n        });\n        \n        context(@\"when the websocket is disconnecting\", ^{\n            beforeEach(^{\n                [meteorClient disconnect];\n                [meteorClient didReceiveConnectionError:nil];\n            });\n            \n            it(@\"does not attempt to reconnect\", ^{\n                ddp should_not have_received(@selector(connectWebSocket));\n            });\n        });\n    });\n\n    describe(@\"#didReceiveMessage\", ^{\n        __block NSString *key;\n        \n        describe(@\"RPC async method response\", ^{\n            __block NSDictionary *returnedResponse;\n            __block NSError *returnedError;\n            \n            beforeEach(^{\n                meteorClient.connected = YES;\n            });\n            \n            context(@\"when the response is successful\", ^{\n                beforeEach(^{\n                    key = [meteorClient callMethodName:@\"robots\" parameters:nil responseCallback:^(NSDictionary *response, NSError *error) {\n                        returnedResponse = response;\n                    }];\n                    \n                    [meteorClient didReceiveMessage:@{@\"msg\": @\"result\",\n                                                      @\"result\": @\"rule\",\n                                                      @\"id\": key\n                                                     }];\n                });\n                \n                it(@\"has the correct returned response\", ^{\n                    returnedResponse[@\"result\"] should equal(@\"rule\");\n                });\n            });\n        \n            context(@\"when the response fails\", ^{\n                beforeEach(^{\n                    key = [meteorClient callMethodName:@\"robots\" parameters:nil responseCallback:^(NSDictionary *response, NSError *error) {\n                        returnedError = error;\n                    }];\n                    [meteorClient didReceiveMessage:@{@\"msg\": @\"result\",\n                                                      @\"error\": @{@\"errorType\": @\"lamesauce\", @\"error\": @500, @\"message\": @\"you suck\"},\n                                                      @\"id\": key}];\n                });\n                \n                it(@\"has the correct returned response\", ^{\n                    NSDictionary *errorDic = @{@\"errorType\": @\"lamesauce\", @\"error\": @500, @\"message\": @\"you suck\"};\n                    NSDictionary *userInfo = @{NSLocalizedDescriptionKey: errorDic[@\"message\"]};\n                    NSError *expectedError = [NSError errorWithDomain:errorDic[@\"errorType\"] code:[errorDic[@\"error\"]integerValue] userInfo:userInfo];\n                    \n                    returnedError should equal(expectedError);\n\n                });\n            });\n        });\n                    \n        context(@\"when subscription is ready\", ^{\n            beforeEach(^{\n                [meteorClient->_subscriptions setObject:@\"subid\" forKey:@\"subscriptionName\"];\n                NSDictionary *readyMessage = @{@\"msg\": @\"ready\", @\"subs\": @[@\"subid\"]};\n                [meteorClient didReceiveMessage:readyMessage];\n            });\n            \n            it(@\"processes the message correctly\", ^{\n                SEL postSel = @selector(postNotificationName:object:);\n                [NSNotificationCenter defaultCenter] should have_received(postSel)\n                    .with(@\"subscriptionName_ready\")\n                    .and_with(meteorClient);\n            });\n        });\n        \n\n        context(@\"when called with an 'added' message\", ^{\n            beforeEach(^{\n                NSDictionary *addedMessage = @{\n                    @\"msg\": @\"added\",\n                    @\"id\": @\"id1\",\n                    @\"collection\": @\"phrases\",\n                    @\"fields\": @{@\"text\": @\"this is ridiculous\"}\n                };\n\n                [meteorClient didReceiveMessage:addedMessage];\n            });\n\n            it(@\"processes the message correctly\", ^{\n                [meteorClient.collections[@\"phrases\"] count] should equal(1);\n                NSDictionary *phrase = meteorClient.collections[@\"phrases\"][0];\n                phrase[@\"text\"] should equal(@\"this is ridiculous\");\n                SEL postSel = @selector(postNotificationName:object:userInfo:);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"added\")\n                                                                                  .and_with(meteorClient)\n                                                                                  .and_with(phrase);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"phrases_added\")\n                                                                                  .and_with(meteorClient)\n                                                                                  .and_with(phrase);\n            });\n            \n            context(@\"when called with a changed message\", ^{\n                beforeEach(^{\n                    NSDictionary *changedMessage = @{\n                        @\"msg\": @\"changed\",\n                        @\"id\": @\"id1\",\n                        @\"collection\": @\"phrases\",\n                        @\"fields\": @{@\"text\": @\"this is really ridiculous\"}\n                    };\n\n                    [meteorClient didReceiveMessage:changedMessage];\n                });\n\n                it(@\"processes the message correctly\", ^{\n                    [meteorClient.collections[@\"phrases\"] count] should equal(1);\n                    NSDictionary *phrase = meteorClient.collections[@\"phrases\"][0];\n                    phrase[@\"text\"] should equal(@\"this is really ridiculous\");\n                    SEL postSel = @selector(postNotificationName:object:userInfo:);\n                    [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"changed\")\n                                                                                       .and_with(meteorClient)\n                                                                                       .and_with(phrase);\n                    [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"phrases_changed\")\n                                                                                       .and_with(meteorClient)\n                                                                                       .and_with(phrase);\n                });\n            });\n            \n            \n\n            context(@\"when called with a removed message\", ^{\n                beforeEach(^{\n                    NSDictionary *removedMessage = @{\n                        @\"msg\": @\"removed\",\n                        @\"id\": @\"id1\",\n                        @\"collection\": @\"phrases\",\n                    };\n\n                    [meteorClient didReceiveMessage:removedMessage];\n                });\n\n                it(@\"processes the message correctly\", ^{\n                    [meteorClient.collections[@\"phrases\"] count] should equal(0);\n                    SEL postSel = @selector(postNotificationName:object:);\n                    SEL postObjSel = @selector(postNotificationName:object:userInfo:);\n                    [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"removed\")\n                                                                                      .and_with(meteorClient);\n                    [NSNotificationCenter defaultCenter] should have_received(postObjSel).with(@\"phrases_removed\")\n                                                                                         .and_with(meteorClient)\n                                                                                         .and_with(@{@\"_id\": @\"id1\"});\n                });\n            });\n        });\n        \n        context(@\"when called with an 'addedBefore' message\", ^{\n            beforeEach(^{\n                NSDictionary *addedMessage = @{\n                                               @\"msg\": @\"added\",\n                                               @\"id\": @\"id0\",\n                                               @\"collection\": @\"phrases\",\n                                               @\"fields\": @{@\"text\": @\"this is ridiculous\"}\n                                               };\n                \n                [meteorClient didReceiveMessage:addedMessage];\n                \n                NSDictionary *addedBeforeMessage = @{\n                                               @\"msg\": @\"addedBefore\",\n                                               @\"id\": @\"id1\",\n                                               @\"collection\": @\"phrases\",\n                                               @\"fields\": @{@\"text\": @\"this is before ridiculous\"},\n                                               @\"before\":@\"id0\"\n                                               };\n                \n                [meteorClient didReceiveMessage:addedBeforeMessage];\n            });\n            \n            it(@\"processes the message correctly\", ^{\n                [meteorClient.collections[@\"phrases\"] count] should equal(2);\n                //check the order\n                NSDictionary *phrase = meteorClient.collections[@\"phrases\"][0];\n                phrase[@\"text\"] should equal(@\"this is before ridiculous\");\n                SEL postSel = @selector(postNotificationName:object:userInfo:);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"addedBefore\")\n                .and_with(meteorClient)\n                .and_with(phrase);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"phrases_addedBefore\")\n                .and_with(meteorClient)\n                .and_with(phrase);\n            });\n        });\n        \n        context(@\"when called with an 'movedBefore' message\", ^{\n            beforeEach(^{\n                NSDictionary *addedMessage = @{\n                                               @\"msg\": @\"added\",\n                                               @\"id\": @\"id0\",\n                                               @\"collection\": @\"phrases\",\n                                               @\"fields\": @{@\"text\": @\"this is ridiculous\"}\n                                               };\n                \n                [meteorClient didReceiveMessage:addedMessage];\n                \n                NSDictionary *addedNextMessage = @{\n                                               @\"msg\": @\"added\",\n                                               @\"id\": @\"id1\",\n                                               @\"collection\": @\"phrases\",\n                                               @\"fields\": @{@\"text\": @\"this is before ridiculous\"}\n                                               };\n                \n                [meteorClient didReceiveMessage:addedNextMessage];\n                \n                NSDictionary *movedBeforeMessage = @{\n                                                     @\"msg\": @\"movedBefore\",\n                                                     @\"id\": @\"id1\",\n                                                     @\"collection\": @\"phrases\",\n                                                     @\"before\":@\"id0\"\n                                                     };\n                \n                [meteorClient didReceiveMessage:movedBeforeMessage];\n            });\n            \n            it(@\"processes the message correctly\", ^{\n                [meteorClient.collections[@\"phrases\"] count] should equal(2);\n                //check the order\n                NSDictionary *phrase = meteorClient.collections[@\"phrases\"][0];\n                phrase[@\"text\"] should equal(@\"this is before ridiculous\");\n                SEL postSel = @selector(postNotificationName:object:userInfo:);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"movedBefore\")\n                .and_with(meteorClient)\n                .and_with(phrase);\n                [NSNotificationCenter defaultCenter] should have_received(postSel).with(@\"phrases_movedBefore\")\n                .and_with(meteorClient)\n                .and_with(phrase);\n            });\n        });\n\n    });\n});\n\nSPEC_END\n"
  },
  {
    "path": "Specs/Mocks/FakeDependencyProvider.h",
    "content": "#import \"DependencyProvider.h\"\n\n@class MockSRWebSocket;\n\n@interface FakeDependencyProvider : DependencyProvider\n\n@property (nonatomic, assign) MockSRWebSocket *fakeSRWebSocket;\n\n@end\n"
  },
  {
    "path": "Specs/Mocks/FakeDependencyProvider.m",
    "content": "#import \"FakeDependencyProvider.h\"\n#import \"MockSRWebSocket.h\"\n\n@implementation FakeDependencyProvider\n\n- (SRWebSocket *)provideSRWebSocketWithRequest:(NSURLRequest *)request {\n    if (self.fakeSRWebSocket) {\n        return self.fakeSRWebSocket;\n    }\n    \n    return [super provideSRWebSocketWithRequest:request];\n}\n\n@end\n"
  },
  {
    "path": "Specs/Mocks/MockObjectiveDDPDelegate.h",
    "content": "#import <Foundation/Foundation.h>\n#import \"ObjectiveDDP.h\"\n\n@interface MockObjectiveDDPDelegate : NSObject <ObjectiveDDPDelegate>\n@end"
  },
  {
    "path": "Specs/Mocks/MockObjectiveDDPDelegate.m",
    "content": "#import \"MockObjectiveDDPDelegate.h\"\n\n@implementation MockObjectiveDDPDelegate\n\n- (void)didOpen {\n\n}\n\n- (void)didReceiveMessage:(NSDictionary *)message {\n\n}\n\n- (void)didReceiveConnectionError:(NSError *)error {\n\n}\n\n- (void)didReceiveConnectionClose {\n    \n}\n\n\n@end"
  },
  {
    "path": "Specs/Mocks/MockSRWebSocket.h",
    "content": "#import <Foundation/Foundation.h>\n#import <SocketRocket/SRWebSocket.h>\n\n@interface MockSRWebSocket : SRWebSocket\n\n- (void)connectionSuccess;\n- (void)connectionFailure;\n- (void)respondWithJSONString:(NSString *)json;\n\n@property (nonatomic, assign) id <SRWebSocketDelegate> delegate;\n\n@end"
  },
  {
    "path": "Specs/Mocks/MockSRWebSocket.m",
    "content": "#import \"MockSRWebSocket.h\"\n\n@implementation MockSRWebSocket\n\n- (void)connectionSuccess {\n   [self.delegate webSocketDidOpen:self];\n}\n\n- (void)connectionFailure {\n    NSError *error = [[NSError alloc] initWithDomain:@\"domain\"\n                                                code:42\n                                            userInfo:nil];\n    [self.delegate webSocket:self didFailWithError:error];\n}\n\n- (void)respondWithJSONString:(NSString *)json {\n    [self.delegate webSocket:self didReceiveMessage:json];\n}\n\n- (void)open { /* mock no op */ }\n- (void)send:(id)data { /* mock no op */ }\n- (void)close { /* mock no op */ }\n\n@end"
  },
  {
    "path": "Specs/NSObject+Spec.m",
    "content": "@implementation NSObject (Spec)\n\n- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay {\n    [self performSelectorOnMainThread:aSelector withObject:self waitUntilDone:YES];\n}\n\n@end\n"
  },
  {
    "path": "Specs/ObjectiveDDPSpec.mm",
    "content": "#import \"ObjectiveDDP.h\"\n#import \"MockObjectiveDDPDelegate.h\"\n#import \"MockSRWebSocket.h\"\n\nusing namespace Cedar::Matchers;\nusing namespace Cedar::Doubles;\n\nSPEC_BEGIN(ObjectiveDDPSpec)\n\ndescribe(@\"ObjectiveDDP\", ^{\n    __block ObjectiveDDP *ddp;\n    __block MockSRWebSocket *fakeSRWebSocket;\n    __block MockObjectiveDDPDelegate<CedarDouble> *fakeDDPDelegate;\n\n    describe(@\"when the framework is initialized\", ^{\n        beforeEach(^{\n            fakeSRWebSocket = [[MockSRWebSocket alloc] init];\n            fakeProvider.fakeSRWebSocket = fakeSRWebSocket;\n            \n            fakeDDPDelegate = nice_fake_for(@protocol(ObjectiveDDPDelegate));\n\n            spy_on(fakeSRWebSocket);\n            spy_on(fakeDDPDelegate);\n\n            ddp = [[ObjectiveDDP alloc] initWithURLString:@\"websocket\"\n                                                 delegate:fakeDDPDelegate];\n            fakeSRWebSocket.delegate = ddp;\n        });\n        \n        it(@\"should have the correct url string\", ^{\n            ddp.urlString should equal(@\"websocket\");\n        });\n\n        describe(@\"when the web socket closes\", ^{\n            beforeEach(^{\n                [ddp webSocket:nil didCloseWithCode:0 reason:@\"reason\" wasClean:YES];\n            });\n\n            it(@\"tells its delegate\", ^{\n                fakeDDPDelegate should have_received(\"didReceiveConnectionClose\");\n            });\n        });\n\n        describe(@\"when connectWebSocket is called \", ^{\n            beforeEach(^{\n                [ddp connectWebSocket];\n            });\n\n            it(@\"should open the websocket\", ^{\n                fakeSRWebSocket should have_received(\"open\");\n            });\n\n            describe(@\"when the websocket is opened successfully\", ^{\n                beforeEach(^{\n                    [fakeSRWebSocket connectionSuccess];\n                });\n\n                it(@\"should notify its delegate\", ^{\n                    fakeDDPDelegate should have_received(\"didOpen\");\n                });\n            });\n\n            describe(@\"when the websocket open fails\", ^{\n                beforeEach(^{\n                    [fakeSRWebSocket connectionFailure];\n                });\n\n                it(@\"should notify its delegate\", ^{\n                    fakeDDPDelegate should have_received(\"didReceiveConnectionError:\");\n                });\n            });\n            \n            describe(@\"when disconnectWebSocket is called\", ^{\n                beforeEach(^{\n                    [ddp disconnectWebSocket];\n                });\n                \n                it(@\"closes the web socket\", ^{\n                    fakeSRWebSocket should have_received(@selector(close));\n                });\n            });\n        });\n        \n        describe(@\"when connect is called with no session or support\", ^{\n            beforeEach(^{\n                [ddp connectWebSocket];\n                [fakeSRWebSocket connectionSuccess];\n                [ddp connectWithSession:nil version:@\"smersion\" support:@[@\"smersion\"]];\n            });\n\n            it(@\"should call the web socket with correct JSON\", ^{\n                NSString *expected = @\"{\\\"msg\\\":\\\"connect\\\",\\\"version\\\":\\\"smersion\\\",\\\"support\\\":[\\\"smersion\\\"]}\";\n                fakeSRWebSocket should have_received(\"send:\").with(expected);\n            });\n\n            describe(@\"when the websocket is opened successfully\", ^{\n                beforeEach(^{\n                    [fakeSRWebSocket connectionSuccess];\n                });\n\n                it(@\"should notify its delegate\", ^{\n                    fakeDDPDelegate should have_received(\"didOpen\");\n                });\n            });\n\n            describe(@\"when the call is successful\", ^{\n                beforeEach(^{\n                    [fakeSRWebSocket respondWithJSONString:@\"{\\\"msg\\\":\\\"connected\\\",\\\"session\\\":\\\"SERVER-GEN-SESSION-ID-VAL\\\"}\"];\n                });\n\n                it(@\"it should notify its delegate\", ^{\n                    NSDictionary *expected = @{@\"msg\": @\"connected\", @\"session\":@\"SERVER-GEN-SESSION-ID-VAL\"};\n                    fakeDDPDelegate should have_received(\"didReceiveMessage:\").with(expected);\n                });\n            });\n\n            describe(@\"when the call is not successful\", ^{\n                beforeEach(^{\n                    [fakeSRWebSocket respondWithJSONString:@\"{\\\"msg\\\":\\\"failed\\\",\\\"version\\\":\\\"smersion2\\\"}\"];\n                });\n\n                it(@\"should notify its delegate\", ^{\n                    NSDictionary *expected = @{@\"msg\": @\"failed\", @\"version\":@\"smersion2\"};\n                    fakeDDPDelegate should have_received(\"didReceiveMessage:\").with(expected);\n                });\n            });\n        });\n\n        describe(@\"when subscribe is called with nil parameters\", ^{\n            beforeEach(^{\n                [ddp connectWebSocket];\n                [fakeSRWebSocket connectionSuccess];\n                [ddp subscribeWith:@\"id1\"\n                              name:@\"publishedCollection\"\n                        parameters:nil];\n            });\n\n            it(@\"should call the websocket correctly\", ^{\n                NSString *expected = @\"{\\\"msg\\\":\\\"sub\\\",\\\"name\\\":\\\"publishedCollection\\\",\\\"id\\\":\\\"id1\\\"}\";\n                fakeSRWebSocket should have_received(\"send:\").with(expected);\n            });\n        });\n\n        describe(@\"when method is called\", ^{\n            beforeEach(^{\n                [ddp connectWebSocket];\n                [fakeSRWebSocket connectionSuccess];\n                NSArray *params = @[@{@\"_id\": @\"abc\", @\"msg\": @\"ohai\"}];\n                [ddp methodWithId:@\"id\" method:@\"/do/something\" parameters:params];\n            });\n\n            it(@\"should call the websocket correctly\", ^{\n                NSString *expected = @\"{\\\"method\\\":\\\"\\\\/do\\\\/something\\\",\\\"id\\\":\\\"id\\\",\\\"params\\\":[{\\\"_id\\\":\\\"abc\\\",\\\"msg\\\":\\\"ohai\\\"}],\\\"msg\\\":\\\"method\\\"}\";\n                fakeSRWebSocket should have_received(\"send:\").with(expected);\n            });\n        });\n\n        describe(@\"when unsubscribeWith is called\", ^{\n            beforeEach(^{\n                [ddp connectWebSocket];\n                [fakeSRWebSocket connectionSuccess];\n                [ddp unsubscribeWith:@\"id1\"];\n            });\n\n            it(@\"calls the websocket correctly\", ^{\n                NSString *expected = @\"{\\\"msg\\\":\\\"unsub\\\",\\\"id\\\":\\\"id1\\\"}\";\n                fakeSRWebSocket should have_received(\"send:\").with(expected);\n            });\n        });\n    });\n});\n\nSPEC_END\n"
  },
  {
    "path": "Specs/Specs-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.rebounds.${PRODUCT_NAME:rfc1034identifier}</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Specs/Specs-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'Specs' target in the 'Specs' project\n//\n\n#ifdef __OBJC__\n    #import <UIKit/UIKit.h>\n    #import <Foundation/Foundation.h>\n    #import <Cedar.h>\n    #import \"DDPSpecHelper.h\"\n#endif\n"
  },
  {
    "path": "Specs/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Specs/main.m",
    "content": "//\n//  main.m\n//  Specs\n//\n//  Created by Jesse Bounds on 4/5/13.\n//  Copyright (c) 2013 Rebounds. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\nint main(int argc, char *argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, @\"CedarApplicationDelegate\");\n    }\n}\n"
  },
  {
    "path": "thrust.yml",
    "content": "thrust_version: 0.5\nworkspace_name: ObjectiveDDP # use if building with an xcode workspace\napp_name: ObjectiveDDP\nios_sim_binary: 'ios-sim' # or wax-sim. iOS only.\n\ntestflight:\n  api_token: 'testflight api token' # To find your App Token, follow the instructions at: http://help.testflightapp.com/customer/portal/articles/829956-what-does-the-api-token-do-\n  team_token: 'testflight team token' # To find your Team Token, follow the instructions at: http://help.testflightapp.com/customer/portal/articles/829942-how-do-i-find-my-team-token-\n\ndeployment_targets:\n  staging:\n    distribution_list: Developers # This is the name of a TestFlight distribution list\n    notify: true # Whether to notify people on the distribution list about this deployment\n    note_generation_method: autotag  # If you set this value, it will auto-generate the deploy notes from the commit history. Optional.\n    ios_target: MyGreatAppTarget # Name of the build target. Optional, defaults to app name. iOS only.\n    ios_build_configuration: Release # iOS only\n    ios_provisioning_search_query: 'query to find Provisioning Profile' # iOS only. Optional.\n\n  demo:\n    distribution_list: Beta Testers\n    notify: true\n\nios_spec_targets:\n  specs: # This is the name of the rake task: `rake specs`\n    target: Specs # name of the build target\n    scheme: Specs # use in addition to target when you want to use a scheme (necessary if you are building with an xcode workspace)\n    build_configuration: Debug # name of the build configuration\n    build_sdk: iphonesimulator # SDK used to build the target. Optional, defaults to latest iphonesimulator.\n    runtime_sdk: 7.1 # SDK used to run the target. Not optional.\n    device: iPhone # Device to run the specs on. Optional, defaults to iPhone.\n\n  #integration:\n  #  target: IntegrationSpecs\n# #   scheme: IntegrationSpecs (My Great App) # use in addition to target when you want to use a scheme (necessary if you are building with an xcode workspace)\n  #  build_configuration: Release\n  #  build_sdk: macosx\n  #  runtime_sdk: macosx\n"
  }
]