You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/09/01 23:52:12 UTC

[51/51] [partial] usergrid-swift git commit: Initial commit of Usergrid Swift SDK.

Initial commit of Usergrid Swift SDK.


Project: http://git-wip-us.apache.org/repos/asf/usergrid-swift/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid-swift/commit/8283a6dd
Tree: http://git-wip-us.apache.org/repos/asf/usergrid-swift/tree/8283a6dd
Diff: http://git-wip-us.apache.org/repos/asf/usergrid-swift/diff/8283a6dd

Branch: refs/heads/master
Commit: 8283a6dd0e9fff7ffde5ad21e1dda80e569f08d6
Parents: 
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Sep 1 16:50:54 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Sep 1 16:50:54 2016 -0700

----------------------------------------------------------------------
 .gitignore                                      |   28 +
 LICENSE.txt                                     |   19 +
 Package.swift                                   |   30 +
 README.md                                       |  802 ++++
 .../ActivityFeed.xcodeproj/project.pbxproj      |  827 ++++
 .../contents.xcworkspacedata                    |    7 +
 .../contents.xcworkspacedata                    |    7 +
 .../xcshareddata/ActivityFeed.xcscmblueprint    |   30 +
 Samples/ActivityFeed/Podfile                    |    8 +
 Samples/ActivityFeed/Readme.md                  |   29 +
 .../ActivityFeed/Source/ActivityEntity.swift    |   60 +
 Samples/ActivityFeed/Source/AppDelegate.swift   |   65 +
 .../AppIcon.appiconset/Contents.json            |   38 +
 .../Source/Assets.xcassets/Contents.json        |    6 +
 .../UsergridGuy.imageset/Contents.json          |   21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |  Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |   27 +
 .../Source/Base.lproj/Main.storyboard           |  371 ++
 .../Source/FollowViewController.swift           |   50 +
 Samples/ActivityFeed/Source/FormTextField.swift |   71 +
 Samples/ActivityFeed/Source/Info.plist          |   43 +
 .../Source/LoginViewController.swift            |   77 +
 .../Source/MessageTableViewCell.swift           |  101 +
 .../ActivityFeed/Source/MessageTextView.swift   |   39 +
 .../Source/MessageViewController.swift          |  224 +
 .../Source/RegisterViewController.swift         |   62 +
 .../ActivityFeed/Source/UsergridManager.swift   |   78 +
 .../Source/ViewControllerExtensions.swift       |   36 +
 .../Assets.xcassets/README__ignoredByTemplate__ |    1 +
 .../ExtensionDelegate.swift                     |   45 +
 .../WatchSample Extension/Info.plist            |   45 +
 .../InterfaceController.swift                   |   81 +
 .../AppIcon.appiconset/Contents.json            |   55 +
 .../WatchSample/Base.lproj/Interface.storyboard |   46 +
 Samples/ActivityFeed/WatchSample/Info.plist     |   35 +
 Samples/Push/Push.xcodeproj/project.pbxproj     |  473 +++
 .../contents.xcworkspacedata                    |    7 +
 .../Push.xcworkspace/contents.xcworkspacedata   |    7 +
 Samples/Push/Readme.md                          |   21 +
 Samples/Push/Source/AppDelegate.swift           |   53 +
 .../AppIcon.appiconset/Contents.json            |   38 +
 .../Push/Source/Assets.xcassets/Contents.json   |    6 +
 .../UsergridGuy.imageset/Contents.json          |   21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |  Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |   27 +
 Samples/Push/Source/Base.lproj/Main.storyboard  |   75 +
 Samples/Push/Source/Info.plist                  |   38 +
 Samples/Push/Source/UsergridManager.swift       |   72 +
 Samples/Push/Source/ViewController.swift        |   39 +
 Samples/Readme.md                               |   27 +
 Source/Info.plist                               |   26 +
 Source/Usergrid.swift                           |  637 +++
 Source/UsergridAsset.swift                      |  198 +
 Source/UsergridAssetRequestWrapper.swift        |   48 +
 Source/UsergridAuth.swift                       |  276 ++
 Source/UsergridClient.swift                     |  931 +++++
 Source/UsergridClientConfig.swift               |  149 +
 Source/UsergridDevice.swift                     |  213 +
 Source/UsergridEntity.swift                     |  635 +++
 Source/UsergridEnums.swift                      |  417 ++
 Source/UsergridExtensions.swift                 |  112 +
 Source/UsergridFileMetaData.swift               |  114 +
 Source/UsergridKeychainHelpers.swift            |  196 +
 Source/UsergridQuery.swift                      |  591 +++
 Source/UsergridRequest.swift                    |  245 ++
 Source/UsergridRequestManager.swift             |  176 +
 Source/UsergridResponse.swift                   |  203 +
 Source/UsergridResponseError.swift              |   90 +
 Source/UsergridSDK.h                            |   37 +
 Source/UsergridSessionDelegate.swift            |   90 +
 Source/UsergridUser.swift                       |  523 +++
 Tests/ASSET_Tests.swift                         |  280 ++
 Tests/AUTH_Tests.swift                          |  132 +
 Tests/CONNECTION_Tests.swift                    |  105 +
 Tests/ClientCreationTests.swift                 |   74 +
 Tests/Entity_Tests.swift                        |  173 +
 Tests/GET_Tests.swift                           |  113 +
 Tests/Info.plist                                |   24 +
 Tests/PUT_Tests.swift                           |  158 +
 Tests/TestAssets/UsergridGuy.jpg                |  Bin 0 -> 12981 bytes
 Tests/TestAssets/logo_apigee.png                |  Bin 0 -> 10696 bytes
 Tests/TestAssets/test.png                       |  Bin 0 -> 1417937 bytes
 Tests/User_Tests.swift                          |  399 ++
 UsergridSDK.xcodeproj/project.pbxproj           | 1179 ++++++
 .../contents.xcworkspacedata                    |    7 +
 .../xcshareddata/WorkspaceSettings.xcsettings   |    8 +
 .../xcschemes/UsergridSDK OSX.xcscheme          |  100 +
 .../xcschemes/UsergridSDK iOS.xcscheme          |  100 +
 .../xcschemes/UsergridSDK tvOS.xcscheme         |  114 +
 .../xcschemes/UsergridSDK watchOS.xcscheme      |   80 +
 .../xcschemes/UsergridSDK_OSX_Tests.xcscheme    |   56 +
 .../xcschemes/UsergridSDK_TVOS_Tests.xcscheme   |   56 +
 .../xcschemes/UsergridSDK_iOS_Tests.xcscheme    |   57 +
 docs/Classes.html                               |  702 ++++
 docs/Classes/Usergrid.html                      | 3798 +++++++++++++++++
 docs/Classes/UsergridAppAuth.html               |  410 ++
 docs/Classes/UsergridAsset.html                 |  702 ++++
 docs/Classes/UsergridAssetUploadRequest.html    |  356 ++
 docs/Classes/UsergridAuth.html                  |  558 +++
 docs/Classes/UsergridClient.html                | 3873 ++++++++++++++++++
 docs/Classes/UsergridClientConfig.html          |  744 ++++
 docs/Classes/UsergridDevice.html                |  763 ++++
 docs/Classes/UsergridEntity.html                | 2683 ++++++++++++
 docs/Classes/UsergridFileMetaData.html          |  532 +++
 docs/Classes/UsergridQuery.html                 | 2278 ++++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 docs/Classes/UsergridRequest.html               |  619 +++
 docs/Classes/UsergridResponse.html              |  969 +++++
 docs/Classes/UsergridResponseError.html         |  473 +++
 docs/Classes/UsergridUser.html                  | 2434 +++++++++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 docs/Classes/UsergridUserAuth.html              |  410 ++
 docs/Enums.html                                 |  435 ++
 docs/Enums/UsergridAuthFallback.html            |  248 ++
 docs/Enums/UsergridAuthMode.html                |  283 ++
 docs/Enums/UsergridDeviceProperties.html        |  369 ++
 docs/Enums/UsergridDirection.html               |  286 ++
 docs/Enums/UsergridEntityProperties.html        |  514 +++
 docs/Enums/UsergridHttpMethod.html              |  341 ++
 docs/Enums/UsergridImageContentType.html        |  286 ++
 docs/Enums/UsergridQueryOperator.html           |  431 ++
 docs/Enums/UsergridQuerySortOrder.html          |  338 ++
 docs/Enums/UsergridUserProperties.html          |  524 +++
 docs/Extensions.html                            |  203 +
 docs/Extensions/NSDate.html                     |  448 ++
 docs/Extensions/UsergridAsset.html              |  184 +
 docs/Extensions/UsergridAuth.html               |  260 ++
 docs/Extensions/UsergridClient.html             | 1962 +++++++++
 docs/Global Variables.html                      |  210 +
 docs/Protocols.html                             |  146 +
 docs/Protocols/UsergridAuth.html                |  260 ++
 docs/Typealiases.html                           |  411 ++
 docs/css/highlight.css                          |  200 +
 docs/css/jazzy.css                              |  331 ++
 docs/docsets/.docset/Contents/Info.plist        |   20 +
 .../Contents/Resources/Documents/Classes.html   |  702 ++++
 .../Resources/Documents/Classes/Usergrid.html   | 3798 +++++++++++++++++
 .../Documents/Classes/UsergridAppAuth.html      |  410 ++
 .../Documents/Classes/UsergridAsset.html        |  702 ++++
 .../Classes/UsergridAssetUploadRequest.html     |  356 ++
 .../Documents/Classes/UsergridAuth.html         |  558 +++
 .../Documents/Classes/UsergridClient.html       | 3873 ++++++++++++++++++
 .../Documents/Classes/UsergridClientConfig.html |  744 ++++
 .../Documents/Classes/UsergridDevice.html       |  763 ++++
 .../Documents/Classes/UsergridEntity.html       | 2683 ++++++++++++
 .../Documents/Classes/UsergridFileMetaData.html |  532 +++
 .../Documents/Classes/UsergridQuery.html        | 2278 ++++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 .../Documents/Classes/UsergridRequest.html      |  619 +++
 .../Documents/Classes/UsergridResponse.html     |  969 +++++
 .../Classes/UsergridResponseError.html          |  473 +++
 .../Documents/Classes/UsergridUser.html         | 2434 +++++++++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 .../Documents/Classes/UsergridUserAuth.html     |  410 ++
 .../Contents/Resources/Documents/Enums.html     |  435 ++
 .../Documents/Enums/UsergridAuthFallback.html   |  248 ++
 .../Documents/Enums/UsergridAuthMode.html       |  283 ++
 .../Enums/UsergridDeviceProperties.html         |  369 ++
 .../Documents/Enums/UsergridDirection.html      |  286 ++
 .../Enums/UsergridEntityProperties.html         |  514 +++
 .../Documents/Enums/UsergridHttpMethod.html     |  341 ++
 .../Enums/UsergridImageContentType.html         |  286 ++
 .../Documents/Enums/UsergridQueryOperator.html  |  431 ++
 .../Documents/Enums/UsergridQuerySortOrder.html |  338 ++
 .../Documents/Enums/UsergridUserProperties.html |  524 +++
 .../Resources/Documents/Extensions.html         |  203 +
 .../Resources/Documents/Extensions/NSDate.html  |  448 ++
 .../Documents/Extensions/UsergridAsset.html     |  184 +
 .../Documents/Extensions/UsergridAuth.html      |  260 ++
 .../Documents/Extensions/UsergridClient.html    | 1962 +++++++++
 .../Resources/Documents/Global Variables.html   |  210 +
 .../Contents/Resources/Documents/Protocols.html |  146 +
 .../Documents/Protocols/UsergridAuth.html       |  260 ++
 .../Resources/Documents/Typealiases.html        |  411 ++
 .../Resources/Documents/css/highlight.css       |  200 +
 .../Contents/Resources/Documents/css/jazzy.css  |  331 ++
 .../Contents/Resources/Documents/img/carat.png  |  Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |  Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |  Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |  927 +++++
 .../Contents/Resources/Documents/js/jazzy.js    |   40 +
 .../Resources/Documents/js/jquery.min.js        |    4 +
 .../Resources/Documents/undocumented.txt        |    0
 .../.docset/Contents/Resources/docSet.dsidx     |  Bin 0 -> 147456 bytes
 docs/docsets/.tgz                               |  Bin 0 -> 148251 bytes
 .../UsergridSDK.docset/Contents/Info.plist      |   20 +
 .../Contents/Resources/Documents/Classes.html   |  694 ++++
 .../Resources/Documents/Classes/Usergrid.html   | 3704 +++++++++++++++++
 .../Documents/Classes/UsergridAppAuth.html      |  402 ++
 .../Documents/Classes/UsergridAsset.html        |  694 ++++
 .../Classes/UsergridAssetUploadRequest.html     |  348 ++
 .../Documents/Classes/UsergridAuth.html         |  550 +++
 .../Documents/Classes/UsergridClient.html       | 3800 +++++++++++++++++
 .../Documents/Classes/UsergridClientConfig.html |  736 ++++
 .../Documents/Classes/UsergridDevice.html       |  644 +++
 .../Documents/Classes/UsergridEntity.html       | 2612 ++++++++++++
 .../Documents/Classes/UsergridFileMetaData.html |  524 +++
 .../Documents/Classes/UsergridQuery.html        | 2270 ++++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 .../Documents/Classes/UsergridRequest.html      |  611 +++
 .../Documents/Classes/UsergridResponse.html     |  961 +++++
 .../Classes/UsergridResponseError.html          |  465 +++
 .../Documents/Classes/UsergridUser.html         | 2319 +++++++++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 .../Documents/Classes/UsergridUserAuth.html     |  402 ++
 .../Contents/Resources/Documents/Enums.html     |  427 ++
 .../Documents/Enums/UsergridAuthFallback.html   |  248 ++
 .../Enums/UsergridDeviceProperties.html         |  361 ++
 .../Documents/Enums/UsergridDirection.html      |  278 ++
 .../Enums/UsergridEntityProperties.html         |  506 +++
 .../Documents/Enums/UsergridHttpMethod.html     |  333 ++
 .../Enums/UsergridImageContentType.html         |  278 ++
 .../Documents/Enums/UsergridQueryOperator.html  |  423 ++
 .../Documents/Enums/UsergridQuerySortOrder.html |  330 ++
 .../Documents/Enums/UsergridUserProperties.html |  516 +++
 .../Resources/Documents/Extensions.html         |  175 +
 .../Documents/Extensions/UsergridAsset.html     |  184 +
 .../Documents/Extensions/UsergridAuth.html      |  260 ++
 .../Documents/Extensions/UsergridClient.html    | 1962 +++++++++
 .../Resources/Documents/Global Variables.html   |  202 +
 .../Contents/Resources/Documents/Protocols.html |  146 +
 .../Documents/Protocols/UsergridAuth.html       |  260 ++
 .../Resources/Documents/Typealiases.html        |  403 ++
 .../Resources/Documents/css/highlight.css       |  200 +
 .../Contents/Resources/Documents/css/jazzy.css  |  331 ++
 .../Contents/Resources/Documents/img/carat.png  |  Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |  Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |  Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |  919 +++++
 .../Contents/Resources/Documents/js/jazzy.js    |   40 +
 .../Resources/Documents/js/jquery.min.js        |    4 +
 .../Resources/Documents/undocumented.txt        |    0
 .../Contents/Resources/docSet.dsidx             |  Bin 0 -> 151552 bytes
 docs/docsets/UsergridSDK.tgz                    |  Bin 0 -> 145485 bytes
 docs/img/carat.png                              |  Bin 0 -> 274 bytes
 docs/img/dash.png                               |  Bin 0 -> 1338 bytes
 docs/img/gh.png                                 |  Bin 0 -> 1571 bytes
 docs/index.html                                 |  927 +++++
 docs/js/jazzy.js                                |   40 +
 docs/js/jquery.min.js                           |    4 +
 docs/undocumented.txt                           |    0
 244 files changed, 110405 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8fbb5c4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,28 @@
+# Mac OS X
+.DS_Store
+
+# Xcode
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# Carthage
+Carthage/Build
+ActivityFeed/ActivityFeed.xcworkspace/xcuserdata/ApigeeCorporation.xcuserdatad/xcdebugger
+.build
+
+#Intellij
+.idea
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/LICENSE.txt
----------------------------------------------------------------------
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..34193ba
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,19 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ *
+ */

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Package.swift
----------------------------------------------------------------------
diff --git a/Package.swift b/Package.swift
new file mode 100644
index 0000000..73f2c87
--- /dev/null
+++ b/Package.swift
@@ -0,0 +1,30 @@
+//
+// Package.swift
+//
+//  Created by Robert Walsh on 10/23/15.
+//
+/*
+*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  The ASF licenses this file to You
+* under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*
+*/
+
+import PackageDescription
+
+let package = Package(
+  name: "UsergridSDK"
+)

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cf1f071
--- /dev/null
+++ b/README.md
@@ -0,0 +1,802 @@
+# Usergrid Swift SDK
+
+[![Platform](https://img.shields.io/cocoapods/p/UsergridSDK.svg?style=flat)](http://cocoadocs.org/docsets/UsergridSDK)
+[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/UsergridSDK.svg)](https://cocoapods.org/pods/UsergridSDK)
+
+Usergrid SDK written in Swift 
+
+## Requirements
+
+> **While the Usergrid SDK is written in Swift, the functionality remains compatible with Objective-C.**
+    
+> **Use `#import <UsergridSDK/UsergridSDK-Swift.h>` in your Objective-C files to enable the use of the SDK.**
+
+- iOS 8.0+ / Mac OS X 10.11+ / tvOS 9.1+ / watchOS 2.1+
+- Xcode 7.1+
+
+## Installation
+
+> **Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks (10.9).**
+
+### CocoaPods
+
+> **CocoaPods 0.39.0+ is required to build the UsergridSDK library.**
+
+To integrate the UsergridSDK into your Xcode project using CocoaPods, specify it in your `Podfile`:
+
+```ruby
+platform :ios, '8.0'
+use_frameworks!
+
+pod 'UsergridSDK'
+```
+
+Then, run the following command:
+
+```bash
+$ pod install
+```
+
+### Embedded Framework
+
+- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:
+
+```bash
+$ git init
+```
+
+- Add UsergridSDK as a git submodule by running the following command:
+
+```bash
+$ git submodule add https://github.com/apache/usergrid
+```
+
+- Open the `sdks/swift` folder, and drag the `UsergridSDK.xcodeproj` into the Project Navigator of your application's Xcode project.
+
+> It should appear nested underneath your application's blue project icon.
+
+- Select the `UsergridSDK.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target.
+- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.
+- In the tab bar at the top of that window, open the "General" panel.
+- Click on the `+` button under the "Embedded Binaries" section.
+- Select the `UsergridSDK.framework`.
+
+> The `UsergridSDK.framework` is automatically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.
+
+## Documentation
+
+The documentation for this library is available [here](http://cocoadocs.org/docsets/UsergridSDK).
+
+## Initialization
+
+There are two different ways of initializing the Usergrid Swift SDK: 
+
+1. The singleton pattern is both convenient and enables the developer to use a globally available and always-initialized instance of Usergrid. 
+
+```swift
+Usergrid.initSharedInstance(orgId: "orgId", appId: "appId")
+```
+
+2. The Instance pattern enables the developer to manage instances of the Usergrid client independently and in an isolated fashion. The primary use-case for this is when an application connects to multiple Usergrid targets.
+
+```swift
+let client = UsergridClient(orgId: "orgId", appId: "appId")
+```
+
+_Note: Examples in this readme assume you are using the `Usergrid` shared instance. If you've implemented the instance pattern instead, simply replace `Usergrid` with your client instance variable._
+
+## Push Notifications
+
+_Note: You must have an Apple Developer account along with valid provisioning profiles set in order to receive push notifications._
+
+In order to utilize Usergrid push notifications, you must register the device with an Usergrid push notifier identifier.
+
+> For a more thorough example of recieving push notifications and sending push notifications (from the device) refer to the Push sample app located in the `/Samples` folder.
+
+The following code snippet shows how you would register for push notifications and apply the push token within the application delegate.
+
+```swift
+import UsergridSDK
+
+@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {
+
+    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
+
+        // Initialize the shared instance of Usergrid.
+        Usergrid.initSharedInstance(orgId:"orgId", appId: "appId")
+
+        // Register for APN
+        application.registerUserNotificationSettings(UIUserNotificationSettings( forTypes: [.Alert, .Badge, .Sound], categories: nil))
+        application.registerForRemoteNotifications()
+
+        return true
+    }
+
+    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
+        Usergrid.applyPushToken(deviceToken, notifierID: "notifierId") { response in
+            // The push notification is now added to Usergrid for this device and this device will now be able to recieve notifications.
+        }
+    }
+}
+```
+
+## RESTful operations
+
+When making any RESTful call, a `type` parameter (or `path`) is always required. Whether you specify this as an argument or in an object as a parameter is up to you.
+
+### GET
+
+- To get entities in a collection:
+
+```swift
+Usergrid.GET("collection") { response in
+    var entities: [UsergridEntity]? = response.entities
+}
+```
+
+- To get a specific entity in a collection by uuid or name:
+
+```swift
+Usergrid.GET("collection", uuidOrName:"<uuid-or-name>") { response in
+    var entity: UsergridEntity? = response.entity?
+}
+```
+
+- To get specific entities in a collection by passing a `UsergridQuery` object:
+
+```swift
+var query = UsergridQuery("cats").gt("weight", value: 2.4)
+                                 .contains("color", value:"bl*")
+                                 .not()
+                                 .eq("color", value:"blue")
+                                 .or()
+                                 .eq("color", value:"orange")
+	
+// this will build out the following query:
+// select * where weight > 2.4 and color contains 'bl*' and not color = 'blue' or color = 'orange'
+	
+Usergrid.GET(query) { response in
+    var entities: [UsergridEntity]? = response.entities
+}
+```
+
+### POST and PUT
+
+POST and PUT requests both require a JSON body payload. You can pass either a Swift object or a `UsergridEntity` instance. While the former works in principle, best practise is to use a `UsergridEntity` wherever practical. When an entity has a uuid or name property and already exists on the server, use a PUT request to update it. If it does not, use POST to create it.
+
+- To create a new entity in a collection (**POST**):
+
+```swift
+var entity = UsergridEntity(type: "restaurant", propertyDict: ["restaurant": "Dino's Deep Dish","cuisine": "pizza"])
+	
+Usergrid.POST(entity) { response in
+    // entity should now have a uuid property and be created
+}
+	
+// you can also POST an array of entities:
+	
+var entities = [UsergridEntity(type: "restaurant", propertyDict:["restaurant": "Dino's Deep Dish","cuisine": "pizza"]), 
+                UsergridEntity(type: "restaurant", propertyDict:["restaurant": "Pizza da Napoli","cuisine": "pizza"])]
+	
+Usergrid.POST(entities) { response in
+    // response.entities should now contain now valid posted entities.
+}
+```
+
+- To update an entity in a collection (**PUT**):
+
+```swift
+var entity = UsergridEntity(type: "restaurant", propertyDict:["restaurant": "Dino's Deep Dish", "cuisine": "pizza"])
+	
+Usergrid.POST(entity) { response in
+    if let responseEntity = response.entity {
+        responseEntity["owner"] = "Mia Carrara"
+        Usergrid.PUT(responseEntity) { (response) -> Void in
+            // entity now has the property 'owner'
+        }
+    }
+}
+	
+// or update a set of entities by passing a UsergridQuery object
+	
+var query = UsergridQuery("restaurants").eq("cuisine", value:"italian")
+	
+Usergrid.PUT(query, jsonBody: ["keywords":["pasta"]]) { response in
+	
+    /* the first 10 entities matching this query criteria will be updated:
+    e.g.:
+        [
+            {
+                "type": "restaurant",
+                "restaurant": "Il Tarazzo",
+                "cuisine": "italian",
+                "keywords": ["pasta"]
+            },
+            {
+                "type": "restaurant",
+                "restaurant": "Cono Sur Pizza & Pasta",
+                "cuisine": "italian",
+                "keywords": ["pasta"]
+            }
+        ]
+    */
+}
+```
+
+### DELETE
+
+DELETE requests require either a specific entity or a `UsergridQuery` object to be passed as an argument.
+
+- To delete a specific entity in a collection by uuid or name:
+
+```swift
+Usergrid.DELETE("collection", uuidOrName: "<uuid-or-name>") { response in
+    // if successful, entity will now be deleted
+})
+```
+
+- To specific entities in a collection to delete by passing a `UsergridQuery` object:
+
+```swift
+let query = UsergridQuery("cats").eq("color", value:"black")
+                                 .or()
+                                 .eq("color", value:"white")
+	
+// this will build out the following query:
+// select * where color = 'black' or color = 'white'
+	
+Usergrid.DELETE(query) { response in
+    // the first 10 entities matching this query criteria will be deleted
+}
+```
+
+## Entity operations and convenience methods
+
+`UsergridEntity` has a number of helper/convenience methods to make working with entities more convenient.
+
+### reload()
+
+Reloads the entity from the server:
+
+```swift
+entity.reload() { response in
+    // entity is now reloaded from the server
+}
+```
+
+### save()
+
+Saves (or creates) the entity on the server:
+
+
+```swift
+entity["aNewProperty"] = "A new value"
+entity.save() { response in
+    // entity is now updated on the server
+}
+```
+
+### remove()
+
+Deletes the entity from the server:
+
+```swift
+entity.remove() { response in
+    // entity is now deleted on the server and the local instance should be destroyed
+}
+```
+
+## Authentication, current user, and auth-fallback
+
+### appAuth and authenticateApp()
+
+`Usergrid` can use the app client ID and secret that were passed upon initialization and automatically retrieve an app-level token for these credentials.
+
+```swift
+Usergrid.setAppAuth("<client-id>", "<client-secret>")
+Usergrid.authenticateApp() { response in
+    // Usergrid.appAuth is authenticated automatically when this call is successful
+}
+```
+
+### currentUser, userAuth,  and authenticateUser()
+
+`Usergrid` has a special `currentUser` property. 
+
+> The current user is stored within the keychain so app relaunches will persist the user's login and token information.  To adjust this feature edit the `Usergrid.persistCurrentUserInKeychain` property upon initialization.
+
+By default, when calling `authenticateUser()`, `.currentUser` will be set to this user if the authentication flow is successful.
+
+```swift
+let userAuth = UsergridUserAuth(username: "<username>", password: "<password>")
+Usergrid.authenticateUser(userAuth) { auth, user, error in
+    // Usergrid.currentUser is set to the authenticated user and the token is stored within that context
+}
+```
+    
+If you want to utilize authenticateUser without setting as the current user, simply pass a `false` boolean value as the second parameter:
+
+```swift
+let userAuth = UsergridUserAuth(username: "<username>", password: "<password>")
+Usergrid.authenticateUser(userAuth,setAsCurrentUser: false) { auth, user, error in
+    // user is authenticated but Usergrid.currentUser is not set.
+}
+```
+
+### authFallback
+
+Auth-fallback defines what the client should do when a user token is not present. 
+
+By default, `Usergrid.authFallback` is set to `.None`, whereby when a token is *not* present, an API call will be performed unauthenticated. 
+
+If instead `Usergrid.authFallback` is set to `.App`, the API call will instead be performed using client credentials, _if_ they're available (i.e. `authenticateApp()` was performed at some point). 
+
+### usingAuth()
+
+At times it is desireable to have complete, granular control over the authentication context of an API call. 
+
+To facilitate this, the passthrough function `.usingAuth()` allows you to pre-define the auth context of the next API call.
+
+```swift
+// assume Usergrid.authFallback = .None
+    
+Usergrid.usingAuth(Usergrid.appAuth!).POST("roles/guest/permissions", jsonBody: ["permission" : "get,post,put,delete:/**"] ) { response in
+    // here we've temporarily used the client credentials to modify permissions
+    // subsequent calls will not use this auth context
+}
+```
+
+## User operations and convenience methods
+
+`UsergridUser` has a number of helper/convenience methods to make working with user entities more convenient. If you are _not_ utilizing the `Usergrid` shared instance, you must pass an instance of `UsergridClient` as the first argument to any of these helper methods.
+    
+### create()
+
+Creating a new user:
+
+```swift
+let user = UsergridUser(username: "username", password: "password")
+user.create() { response in
+    // user has now been created and should have a valid uuid
+}
+```
+
+### login()
+
+A simpler means of retrieving a user-level token:
+
+```swift
+user.login("username", password: "password") { auth, user, error in
+	// user is now logged in
+}
+```
+
+### logout()
+
+Logs out the selected user. You can also use this convenience method on `Usergrid.currentUser`.
+
+```swift
+user.logout() { response in
+	// user is now logged out
+}
+```
+
+### resetPassword()
+
+Resets the password for the selected user.
+
+```swift
+user.resetPassword("oldPassword", new: "newPassword") { error, didSucceed in
+    // if it was done correctly, the new password will be changed
+    // 'didSucceed' is a boolean value that indicates whether it was changed successfully
+}
+```
+
+### UsergridUser.CheckAvailable()
+
+This is a class (static) method that allows you to check whether a username or email address is available or not.
+
+```swift
+UsergridUser.checkAvailable("email", username: nil) { error, available in
+    // 'available' == whether an email already exists for a user
+}
+
+UsergridUser.checkAvailable(nil, username: "username") { error, available in
+    // 'available' == whether an username already exists for a user
+}
+
+UsergridUser.checkAvailable("email", username: "username") { error, available in
+    // 'available' == whether an email or username already exist for a user
+}
+```
+
+## Querying and filtering data
+
+### UsergridQuery initialization
+
+The `UsergridQuery` class allows you to build out complex query filters using the Usergrid [query syntax](http://docs.apigee.com/app-services/content/querying-your-data).
+
+The first parameter of the `UsergridQuery` builder pattern should be the collection (or type) you intend to query. You can either pass this as an argument, or as the first builder object:
+
+```swift
+var query = UsergridQuery("cats")
+// or
+var query = UsergridQuery().collection("cats")
+```
+
+You then can layer on additional queries:
+
+```swift
+var query = UsergridQuery("cats").gt("weight", value: 2.4)
+                                 .contains("color", value: "bl*")
+                                 .not()
+                                 .eq("color", value:"white")
+                                 .or()
+                                 .eq("color", value:"orange")
+```
+
+You can also adjust the number of results returned:
+
+```swift
+var query = UsergridQuery("cats").eq("color", value: "black")
+                                 .limit(100)
+                                 
+// returns a maximum of 100 entiteis
+```
+
+And sort the results:
+
+```swift
+var query = UsergridQuery("cats").eq("color", value: "black")
+                                 .limit(100)
+                                 .asc("name")
+                                 
+// sorts by 'name', ascending
+```
+
+And you can do geo-location queries:
+
+```swift
+var query = UsergridQuery("devices").locationWithin(<distance>, latitude: <lat>, longitude: <long>)
+```
+
+### Using a query in a request
+
+Queries can be passed as parameters to GET, PUT, and DELETE requests:
+
+```swift
+Usergrid.GET("type", query: query) { response in
+    // Gets entities of a given type matching the query.
+}
+
+Usergrid.PUT(query, jsonBody: ["aNewProperty":"A new value"]) { response in
+    // Updates the entities matching the query with the new property.
+}
+
+Usergrid.DELETE(query) { response in
+    // Deletes entities of a given type matching the query.
+}
+```
+### List of query builder objects
+
+`type("string")`
+
+> The collection name to query
+
+`collection("string")`
+
+> An alias for `type`
+
+`eq("key", value: "value")` or 
+`equals("key", value: "value")` or 
+`filter("key", value: "value")` 
+
+> Equal to (e.g. `where color = 'black'`)
+
+`contains("key", value: "value")` or
+`containsString("key", value: "value")` or
+`containsWord("key", value: "value")`
+
+> Contains a string (e.g.` where color contains 'bl*'`)
+
+`gt("key", value: "value")` or
+`greaterThan("key", value: "value")`
+
+> Greater than (e.g. `where weight > 2.4`)
+
+`gte("key", value: "value")` or 
+`greaterThanOrEqual("key", value: "value")`
+
+> Greater than or equal to (e.g. `where weight >= 2.4`)
+
+`lt("key", value: "value")` or `lessThan("key", value: "value")`
+
+> Less than (e.g. `where weight < 2.4`)
+
+`lte("key", value: "value")` or `lessThanOrEqual("key", value: "value")`
+
+> Less than or equal to (e.g. `where weight <= 2.4`)
+
+`not()`
+
+> Negates the next block in the builder pattern, e.g.:
+
+```swift
+var query = UsergridQuery("cats").not().eq("color", value: "black")
+// select * from cats where not color = 'black'
+```
+
+`and()`
+
+> Joins two queries by requiring both of them. `and` is also implied when joining two queries _without_ an operator. E.g.:
+
+```swift
+var query = UsergridQuery("cats").eq("color", value:"black").eq("fur", value:"longHair")
+// is identical to:
+var query = UsergridQuery("cats").eq("color", value:"black").and().eq("fur", value:"longHair")  
+```
+
+`or()`
+
+> Joins two queries by requiring only one of them. `or` is never implied. e.g.:
+
+```swift
+var query = UsergridQuery("cats").eq("color",value: "black").or().eq("color", value: "white")
+```
+    
+> When using `or()` and `and()` operators, `and()` joins will take precedence over `or()` joins. You can read more about query operators and precedence [here](http://docs.apigee.com/api-baas/content/supported-query-operators-data-types).
+
+`locationWithin(distanceInMeters, latitude: latitude, longitude: longitude)`
+
+> Returns entities which have a location within the specified radius. Arguments can be `float` or `int`.
+
+`asc("key")` or `ascending("key")`
+
+> Sorts the results by the specified property, ascending
+
+`desc("key")` or `descending("key")`
+
+> Sorts the results by the specified property, descending
+
+`sort("key", value: .Asc)`
+
+> Sorts the results by the specified property, in the specified `UsergridQuerySortOrder` (`.Asc` or `.Desc`).
+ 
+`limit(int)`
+
+> The maximum number of entities to return
+
+`cursor("string")`
+
+> A pagination cursor string
+
+`fromString("query string")`
+
+> A special builder property that allows you to input a pre-defined query string. All builder properties will be ignored when this property is defined. For example:
+    
+```swift
+var query = UsergridQuery().fromString("select * where color = 'black' order by name asc")
+```
+
+## UsergridResponse object
+
+`UsergridResponse` is the core class that handles both successful and unsuccessful HTTP responses from Usergrid. 
+
+If a request is successful, any entities returned in the response will be automatically parsed into `UsergridEntity` objects and pushed to the `entities` property.
+
+If a request fails, the `error` property will contain information about the problem encountered.
+
+### ok
+
+You can check `UsergridResponse.ok`, a `Bool` value, to see if the response was successful. Any status code `< 400` returns true.
+
+```swift
+Usergrid.GET("collection") { response in
+    if response.ok {
+        // woo!
+    }
+}
+```
+    
+### entity, entities, user, users, first, last
+
+Depending on the call you make, any entities returned in the response will be automatically parsed into `UsergridEntity` objects and pushed to the `entities` property. If you're querying the `users` collection, these will also be `UsergridUser` objects, a subclass of `UsergridEntity`.
+
+- `.first` returns the first entity in an array of entities; `.entity` is an alias to `.first`. If there are no entities, both of these will be undefined.
+
+- `.last` returns the last entity in an array of entities; if there is only one entity in the array, this will be the same as `.first` _and_ `.entity`, and will be undefined if there are no entities in the response.
+
+- `.entities` will either be an array of entities in the response, or an empty array.
+
+- `.user` is a special alias for `.entity` for when querying the `users` collection. Instead of being a `UsergridEntity`, it will be its subclass, `UsergridUser`.
+
+- `.users` is the same as `.user`, though behaves as `.entities` does by returning either an array of UsergridUser objects or an empty array.
+
+Examples:
+
+```swift
+Usergrid.GET("collection") { response in
+    // you can access:
+    //     response.entities (the returned entities)
+    //     response.first (the first entity)
+    //     response.entity (same as response.first)
+    //     response.last (the last entity returned)
+}
+
+Usergrid.GET("collection", uuidOrName:"<uuid-or-name>") { response in
+    // you can access:
+    //     response.entity (the returned entity) 
+    //     response.entities (containing only the returned entity)
+    //     response.first (same as response.entity)
+    //     response.last (same as response.entity)
+}
+
+Usergrid.GET("users") { response in
+    // you can access:
+    //     response.users (the returned users)
+    //     response.entities (same as response.users)
+    //     response.user (the first user)    
+    //     response.entity (same as response.user)   
+    //     response.first (same as response.user)  
+    //     response.last (the last user)
+}
+
+Usergrid.GET("users", uuidOrName:"<uuid-or-name>") { response in
+    // you can access;
+    //     response.users (containing only the one user)
+    //     response.entities (same as response.users)
+    //     response.user (the returned user)    
+    //     response.entity (same as response.user)   
+    //     response.first (same as response.user)  
+    //     response.last (same as response.user)  
+}
+```
+
+## Connections
+
+Connections can be managed using `Usergrid.connect()`, `Usergrid.disconnect()`, and `Usergrid.getConnections()`, or entity convenience methods of the same name. 
+
+When retrieving connections via `Usergrid.getConnections()`, you can pass in a optional `UsergridQuery` object in order to filter the connectioned entities returned.
+
+### Connect
+
+Create a connection between two entities:
+
+```swift
+Usergrid.connect(entity1, relationship: "relationship", to: entity2) { response in
+    // entity1 now has an outbound connection to entity2
+}
+```
+
+### Retrieve Connections
+
+Retrieve outbound connections:
+
+```swift
+Usergrid.getConnections(.Out, entity: entity1, relationship: "relationship", query: nil) { response in
+    // entities is an array of entities that entity1 is connected to via 'relationship'
+    // in this case, we'll see entity2 in the array
+}
+```
+
+Retrieve inbound connections:
+
+```swift
+Usergrid.getConnections(.In, entity: entity2, relationship: "relationship", query: nil) { response in
+    // entities is an array of entities that connect to entity2 via 'relationship'
+    // in this case, we'll see entity1 in the array
+}
+```
+
+### Disconnect
+
+Delete a connection between two entities:
+
+```swift
+Usergrid.disconnect(entity1, relationship: "relationship", from: entity2) { response in
+    // entity1's outbound connection to entity2 has been destroyed
+}
+```
+
+## Assets
+
+Assets can be uploaded and downloaded either directly using `Usergrid.uploadAsset()` or `Usergrid.downloadAsset()`, or via `UsergridEntity` convenience methods with the same names. Before uploading an asset, you will need to initialize a `UsergridAsset` instance.
+
+### Initialization
+
+_Note: When initializing a `UsergridAsset` object specifying a file name is optional._
+
+- Using NSData:
+
+```swift
+let image = UIImage(contentsOfFile: "path/to/image")
+let data = UIImagePNGRepresentation(image)
+let asset = UsergridAsset(fileName:"<file-name-or-nil>", data: data!, contentType:"image/png")
+```
+
+- Using an UIImage object:
+
+```swift
+let image = UIImage(contentsOfFile: "path/to/image")
+let asset = UsergridAsset(fileName:"<file-name-or-nil>", image: image!, imageContentType: .Png)
+```
+
+- Using a file URL:
+
+```swift
+let fileUrl = NSURL(string: "local/path/to/file")
+if fileUrl.isFileReferenceURL() {  // This must be a file reference url.
+    let asset = UsergridAsset(fileName:"<file-name-or-nil>", fileUrl: fileUrl!, contentType:"<content-type>")
+}
+```
+
+### Uploading
+
+Upload an image and connect it to an entity:
+
+```swift
+let image = UIImage(contentsOfFile: "path/to/image")
+let asset = UsergridAsset(fileName:"<file-name-or-nil>", image: image!, imageContentType: .Png)!
+Usergrid.uploadAsset(entity,
+                     asset: asset,
+                     progress: { bytesFinished, bytesExpected in
+                        // Monitor the upload progress
+                     },
+                     completion: { asset, response in
+                        // The asset is now uploaded to Usergrid and entity.asset == asset
+})
+```
+
+### Downloading
+
+Download an image which is connected to an entity:
+
+```swift
+Usergrid.downloadAsset(entity,
+                       contentType: "<expected-content-type>",
+                       progress: { bytesFinished, bytesExpected in
+                            // Monitor the download progress
+                       },
+                       completion:{ asset, error in
+                            // The asset is now downloaded from Usergrid and entity.asset == asset
+})
+```
+
+## Custom UsergridEntity Subclasses
+
+Creating custom subclasses of the base `UsergridEntity` class (just like `UsergridUser` and `UsergridDevice`) is possible.
+
+> For a working example of creating a custom subclass refer to the ActivityFeed sample app located in the `/Samples` folder.  The custom subclass there is named `ActivityEntity`.
+
+- To do so, subclass `UsergridEntity` and implement the required methods:
+
+```swift
+import UsergridSDK
+	
+public class ActivityEntity: UsergridEntity {
+	
+    required public init(type: String, name: String?, propertyDict: [String : AnyObject]?) {
+        super.init(type: type, name: name, propertyDict: propertyDict)
+    }
+	
+    required public init?(coder aDecoder: NSCoder) {
+        super.init(coder: aDecoder)
+    }
+}
+```
+- You will also need to register the custom subclass:
+
+```swift
+Usergrid.initSharedInstance(orgId: "orgId", appId: "appId")
+UsergridEntity.mapCustomType("activity", toSubclass: ActivityEntity.self)
+```
+
+By registering your custom subclass, the `UsergridEntity` and `UsergridResponse` classes are able to generate instances of these classes based on the an entities `type`.
+
+In the above example, entities which have a `type` value of `activity` can now be cast as `ActivityEntity` objects. e.g.:
+
+```swift
+Usergrid.GET("activity") { response in
+    var activityEntities: [ActivityEntity]? = response.entities as? [ActivityEntity]
+}
+```

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..215ca87
--- /dev/null
+++ b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj
@@ -0,0 +1,827 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		634855401C726AE9005FE016 /* UsergridSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 634855331C726AD3005FE016 /* UsergridSDK.framework */; };
+		634855411C726AE9005FE016 /* UsergridSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 634855331C726AD3005FE016 /* UsergridSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		634855451C726AF7005FE016 /* UsergridSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 634855351C726AD3005FE016 /* UsergridSDK.framework */; };
+		634855461C726AF7005FE016 /* UsergridSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 634855351C726AD3005FE016 /* UsergridSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		6348D95F1C4EAC0B005C978C /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6348D95D1C4EAC0B005C978C /* Interface.storyboard */; };
+		6348D9611C4EAC0B005C978C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6348D9601C4EAC0B005C978C /* Assets.xcassets */; };
+		6348D9681C4EAC0B005C978C /* WatchSample Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 6348D9671C4EAC0B005C978C /* WatchSample Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+		6348D96D1C4EAC0B005C978C /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6348D96C1C4EAC0B005C978C /* InterfaceController.swift */; };
+		6348D96F1C4EAC0B005C978C /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6348D96E1C4EAC0B005C978C /* ExtensionDelegate.swift */; };
+		6348D9711C4EAC0C005C978C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6348D9701C4EAC0C005C978C /* Assets.xcassets */; };
+		6348D9751C4EAC0C005C978C /* WatchSample.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 6348D95B1C4EAC0B005C978C /* WatchSample.app */; };
+		6348D9861C4EC1FD005C978C /* UsergridManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6348D9851C4EC1FD005C978C /* UsergridManager.swift */; };
+		6348D9871C4EC1FD005C978C /* UsergridManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6348D9851C4EC1FD005C978C /* UsergridManager.swift */; };
+		6355FEC51BFE4FC600E07170 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6355FEC41BFE4FC600E07170 /* AppDelegate.swift */; };
+		6355FEC71BFE4FC600E07170 /* ViewControllerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6355FEC61BFE4FC600E07170 /* ViewControllerExtensions.swift */; };
+		6355FECA1BFE4FC600E07170 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6355FEC81BFE4FC600E07170 /* Main.storyboard */; };
+		6355FECC1BFE4FC600E07170 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6355FECB1BFE4FC600E07170 /* Assets.xcassets */; };
+		6355FECF1BFE4FC600E07170 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6355FECD1BFE4FC600E07170 /* LaunchScreen.storyboard */; };
+		63C9E52A1C04F3B900C65F81 /* MessageTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63C9E5291C04F3B900C65F81 /* MessageTableViewCell.swift */; };
+		63C9E5311C05184900C65F81 /* MessageTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63C9E5301C05184900C65F81 /* MessageTextView.swift */; };
+		63CD143D1C505EC500C00076 /* ActivityEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CD143C1C505EC500C00076 /* ActivityEntity.swift */; };
+		63CD143E1C505EC500C00076 /* ActivityEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CD143C1C505EC500C00076 /* ActivityEntity.swift */; };
+		63E7DD741C518BAD00D84B12 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E7DD731C518BAD00D84B12 /* LoginViewController.swift */; };
+		63E7DD761C518C9000D84B12 /* RegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E7DD751C518C9000D84B12 /* RegisterViewController.swift */; };
+		63E7DD781C518E0400D84B12 /* MessageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E7DD771C518E0400D84B12 /* MessageViewController.swift */; };
+		63E7DD7A1C518F1700D84B12 /* FollowViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E7DD791C518F1700D84B12 /* FollowViewController.swift */; };
+		63E7DD7E1C518FDD00D84B12 /* FormTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E7DD7D1C518FDD00D84B12 /* FormTextField.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		634855321C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 63AF0E881BBC38FB009D4196;
+			remoteInfo = "UsergridSDK iOS";
+		};
+		634855341C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 639B4BEB1C3DD6CF005E26E7;
+			remoteInfo = "UsergridSDK watchOS";
+		};
+		634855361C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 63EE610B1C406E1600AFC2CF;
+			remoteInfo = "UsergridSDK tvOS";
+		};
+		634855381C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 631920451C48436500F99E86;
+			remoteInfo = "UsergridSDK OSX";
+		};
+		6348553A1C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 6319204B1C49BC0700F99E86;
+			remoteInfo = UsergridSDK_TVOS_Tests;
+		};
+		6348553C1C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 630A219F1C49BFFC008BE87F;
+			remoteInfo = UsergridSDK_OSX_Tests;
+		};
+		6348553E1C726AD3005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 630A21B81C49C473008BE87F;
+			remoteInfo = UsergridSDK_iOS_Tests;
+		};
+		634855421C726AE9005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 63AF0E871BBC38FB009D4196;
+			remoteInfo = "UsergridSDK iOS";
+		};
+		634855471C726AF7005FE016 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+			proxyType = 1;
+			remoteGlobalIDString = 639B4BEA1C3DD6CF005E26E7;
+			remoteInfo = "UsergridSDK watchOS";
+		};
+		6348D9691C4EAC0B005C978C /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 6355FEB91BFE4FC600E07170 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 6348D9661C4EAC0B005C978C;
+			remoteInfo = "WatchSample Extension";
+		};
+		6348D9731C4EAC0C005C978C /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 6355FEB91BFE4FC600E07170 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 6348D95A1C4EAC0B005C978C;
+			remoteInfo = WatchSample;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		634855441C726AE9005FE016 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				634855411C726AE9005FE016 /* UsergridSDK.framework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		634855491C726AF8005FE016 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				634855461C726AF7005FE016 /* UsergridSDK.framework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6348D97B1C4EAC0C005C978C /* Embed App Extensions */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 13;
+			files = (
+				6348D9681C4EAC0B005C978C /* WatchSample Extension.appex in Embed App Extensions */,
+			);
+			name = "Embed App Extensions";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6348D97D1C4EAC0C005C978C /* Embed Watch Content */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "$(CONTENTS_FOLDER_PATH)/Watch";
+			dstSubfolderSpec = 16;
+			files = (
+				6348D9751C4EAC0C005C978C /* WatchSample.app in Embed Watch Content */,
+			);
+			name = "Embed Watch Content";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = UsergridSDK.xcodeproj; path = ../../UsergridSDK.xcodeproj; sourceTree = "<group>"; };
+		6348D95B1C4EAC0B005C978C /* WatchSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WatchSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		6348D95E1C4EAC0B005C978C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = "<group>"; };
+		6348D9601C4EAC0B005C978C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		6348D9621C4EAC0B005C978C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		6348D9671C4EAC0B005C978C /* WatchSample Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "WatchSample Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+		6348D96C1C4EAC0B005C978C /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = "<group>"; };
+		6348D96E1C4EAC0B005C978C /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = "<group>"; };
+		6348D9701C4EAC0C005C978C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		6348D9721C4EAC0C005C978C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		6348D9851C4EC1FD005C978C /* UsergridManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsergridManager.swift; sourceTree = "<group>"; };
+		6355FEC11BFE4FC600E07170 /* ActivityFeed.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ActivityFeed.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		6355FEC41BFE4FC600E07170 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
+		6355FEC61BFE4FC600E07170 /* ViewControllerExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewControllerExtensions.swift; sourceTree = "<group>"; };
+		6355FEC91BFE4FC600E07170 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		6355FECB1BFE4FC600E07170 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		6355FECE1BFE4FC600E07170 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		6355FED01BFE4FC600E07170 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		63C9E5291C04F3B900C65F81 /* MessageTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageTableViewCell.swift; sourceTree = "<group>"; };
+		63C9E5301C05184900C65F81 /* MessageTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageTextView.swift; sourceTree = "<group>"; };
+		63CD143C1C505EC500C00076 /* ActivityEntity.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActivityEntity.swift; sourceTree = "<group>"; };
+		63E7DD731C518BAD00D84B12 /* LoginViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginViewController.swift; sourceTree = "<group>"; };
+		63E7DD751C518C9000D84B12 /* RegisterViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterViewController.swift; sourceTree = "<group>"; };
+		63E7DD771C518E0400D84B12 /* MessageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MessageViewController.swift; sourceTree = "<group>"; };
+		63E7DD791C518F1700D84B12 /* FollowViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FollowViewController.swift; sourceTree = "<group>"; };
+		63E7DD7D1C518FDD00D84B12 /* FormTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormTextField.swift; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		6348D9641C4EAC0B005C978C /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				634855451C726AF7005FE016 /* UsergridSDK.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6355FEBE1BFE4FC600E07170 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				634855401C726AE9005FE016 /* UsergridSDK.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		634855291C726AD3005FE016 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				634855331C726AD3005FE016 /* UsergridSDK.framework */,
+				634855351C726AD3005FE016 /* UsergridSDK.framework */,
+				634855371C726AD3005FE016 /* UsergridSDK.framework */,
+				634855391C726AD3005FE016 /* UsergridSDK.framework */,
+				6348553B1C726AD3005FE016 /* UsergridSDK_TVOS_Tests.xctest */,
+				6348553D1C726AD3005FE016 /* UsergridSDK_OSX_Tests.xctest */,
+				6348553F1C726AD3005FE016 /* UsergridSDK_iOS_Tests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		6348D95C1C4EAC0B005C978C /* WatchSample */ = {
+			isa = PBXGroup;
+			children = (
+				6348D95D1C4EAC0B005C978C /* Interface.storyboard */,
+				6348D9601C4EAC0B005C978C /* Assets.xcassets */,
+				6348D9621C4EAC0B005C978C /* Info.plist */,
+			);
+			path = WatchSample;
+			sourceTree = "<group>";
+		};
+		6348D96B1C4EAC0B005C978C /* WatchSample Extension */ = {
+			isa = PBXGroup;
+			children = (
+				6348D96C1C4EAC0B005C978C /* InterfaceController.swift */,
+				6348D96E1C4EAC0B005C978C /* ExtensionDelegate.swift */,
+				6348D9701C4EAC0C005C978C /* Assets.xcassets */,
+				6348D9721C4EAC0C005C978C /* Info.plist */,
+			);
+			path = "WatchSample Extension";
+			sourceTree = "<group>";
+		};
+		6355FEB81BFE4FC600E07170 = {
+			isa = PBXGroup;
+			children = (
+				634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */,
+				6355FEC31BFE4FC600E07170 /* Source */,
+				6348D95C1C4EAC0B005C978C /* WatchSample */,
+				6348D96B1C4EAC0B005C978C /* WatchSample Extension */,
+				6355FEC21BFE4FC600E07170 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		6355FEC21BFE4FC600E07170 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				6355FEC11BFE4FC600E07170 /* ActivityFeed.app */,
+				6348D95B1C4EAC0B005C978C /* WatchSample.app */,
+				6348D9671C4EAC0B005C978C /* WatchSample Extension.appex */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		6355FEC31BFE4FC600E07170 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				6355FEC41BFE4FC600E07170 /* AppDelegate.swift */,
+				6348D9851C4EC1FD005C978C /* UsergridManager.swift */,
+				63CD143C1C505EC500C00076 /* ActivityEntity.swift */,
+				63E7DD7B1C518F9600D84B12 /* View Controllers */,
+				63E7DD7C1C518FC300D84B12 /* Custom Views */,
+				63E7DD801C51903A00D84B12 /* Storyboards */,
+				63E7DD7F1C51902F00D84B12 /* Supporting Files */,
+			);
+			path = Source;
+			sourceTree = "<group>";
+		};
+		63E7DD7B1C518F9600D84B12 /* View Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				63E7DD791C518F1700D84B12 /* FollowViewController.swift */,
+				63E7DD731C518BAD00D84B12 /* LoginViewController.swift */,
+				63E7DD771C518E0400D84B12 /* MessageViewController.swift */,
+				63E7DD751C518C9000D84B12 /* RegisterViewController.swift */,
+				6355FEC61BFE4FC600E07170 /* ViewControllerExtensions.swift */,
+			);
+			name = "View Controllers";
+			sourceTree = "<group>";
+		};
+		63E7DD7C1C518FC300D84B12 /* Custom Views */ = {
+			isa = PBXGroup;
+			children = (
+				63E7DD7D1C518FDD00D84B12 /* FormTextField.swift */,
+				63C9E5291C04F3B900C65F81 /* MessageTableViewCell.swift */,
+				63C9E5301C05184900C65F81 /* MessageTextView.swift */,
+			);
+			name = "Custom Views";
+			sourceTree = "<group>";
+		};
+		63E7DD7F1C51902F00D84B12 /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				6355FECB1BFE4FC600E07170 /* Assets.xcassets */,
+				6355FED01BFE4FC600E07170 /* Info.plist */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		63E7DD801C51903A00D84B12 /* Storyboards */ = {
+			isa = PBXGroup;
+			children = (
+				6355FEC81BFE4FC600E07170 /* Main.storyboard */,
+				6355FECD1BFE4FC600E07170 /* LaunchScreen.storyboard */,
+			);
+			name = Storyboards;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		6348D95A1C4EAC0B005C978C /* WatchSample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 6348D97C1C4EAC0C005C978C /* Build configuration list for PBXNativeTarget "WatchSample" */;
+			buildPhases = (
+				6348D9591C4EAC0B005C978C /* Resources */,
+				6348D97B1C4EAC0C005C978C /* Embed App Extensions */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				6348D96A1C4EAC0B005C978C /* PBXTargetDependency */,
+			);
+			name = WatchSample;
+			productName = WatchSample;
+			productReference = 6348D95B1C4EAC0B005C978C /* WatchSample.app */;
+			productType = "com.apple.product-type.application.watchapp2";
+		};
+		6348D9661C4EAC0B005C978C /* WatchSample Extension */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 6348D97A1C4EAC0C005C978C /* Build configuration list for PBXNativeTarget "WatchSample Extension" */;
+			buildPhases = (
+				6348D9631C4EAC0B005C978C /* Sources */,
+				6348D9641C4EAC0B005C978C /* Frameworks */,
+				6348D9651C4EAC0B005C978C /* Resources */,
+				634855491C726AF8005FE016 /* Embed Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				634855481C726AF7005FE016 /* PBXTargetDependency */,
+			);
+			name = "WatchSample Extension";
+			productName = "WatchSample Extension";
+			productReference = 6348D9671C4EAC0B005C978C /* WatchSample Extension.appex */;
+			productType = "com.apple.product-type.watchkit2-extension";
+		};
+		6355FEC01BFE4FC600E07170 /* ActivityFeed */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 6355FED31BFE4FC600E07170 /* Build configuration list for PBXNativeTarget "ActivityFeed" */;
+			buildPhases = (
+				6355FEBD1BFE4FC600E07170 /* Sources */,
+				6355FEBE1BFE4FC600E07170 /* Frameworks */,
+				6355FEBF1BFE4FC600E07170 /* Resources */,
+				6348D97D1C4EAC0C005C978C /* Embed Watch Content */,
+				634855441C726AE9005FE016 /* Embed Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				6348D9741C4EAC0C005C978C /* PBXTargetDependency */,
+				634855431C726AE9005FE016 /* PBXTargetDependency */,
+			);
+			name = ActivityFeed;
+			productName = SDKSample;
+			productReference = 6355FEC11BFE4FC600E07170 /* ActivityFeed.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		6355FEB91BFE4FC600E07170 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastSwiftUpdateCheck = 0720;
+				LastUpgradeCheck = 0710;
+				ORGANIZATIONNAME = "Apigee Inc.";
+				TargetAttributes = {
+					6348D95A1C4EAC0B005C978C = {
+						CreatedOnToolsVersion = 7.2;
+					};
+					6348D9661C4EAC0B005C978C = {
+						CreatedOnToolsVersion = 7.2;
+					};
+					6355FEC01BFE4FC600E07170 = {
+						CreatedOnToolsVersion = 7.1.1;
+					};
+				};
+			};
+			buildConfigurationList = 6355FEBC1BFE4FC600E07170 /* Build configuration list for PBXProject "ActivityFeed" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 6355FEB81BFE4FC600E07170;
+			productRefGroup = 6355FEC21BFE4FC600E07170 /* Products */;
+			projectDirPath = "";
+			projectReferences = (
+				{
+					ProductGroup = 634855291C726AD3005FE016 /* Products */;
+					ProjectRef = 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */;
+				},
+			);
+			projectRoot = "";
+			targets = (
+				6355FEC01BFE4FC600E07170 /* ActivityFeed */,
+				6348D95A1C4EAC0B005C978C /* WatchSample */,
+				6348D9661C4EAC0B005C978C /* WatchSample Extension */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+		634855331C726AD3005FE016 /* UsergridSDK.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = UsergridSDK.framework;
+			remoteRef = 634855321C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		634855351C726AD3005FE016 /* UsergridSDK.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = UsergridSDK.framework;
+			remoteRef = 634855341C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		634855371C726AD3005FE016 /* UsergridSDK.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = UsergridSDK.framework;
+			remoteRef = 634855361C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		634855391C726AD3005FE016 /* UsergridSDK.framework */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.framework;
+			path = UsergridSDK.framework;
+			remoteRef = 634855381C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		6348553B1C726AD3005FE016 /* UsergridSDK_TVOS_Tests.xctest */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.cfbundle;
+			path = UsergridSDK_TVOS_Tests.xctest;
+			remoteRef = 6348553A1C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		6348553D1C726AD3005FE016 /* UsergridSDK_OSX_Tests.xctest */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.cfbundle;
+			path = UsergridSDK_OSX_Tests.xctest;
+			remoteRef = 6348553C1C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		6348553F1C726AD3005FE016 /* UsergridSDK_iOS_Tests.xctest */ = {
+			isa = PBXReferenceProxy;
+			fileType = wrapper.cfbundle;
+			path = UsergridSDK_iOS_Tests.xctest;
+			remoteRef = 6348553E1C726AD3005FE016 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+		6348D9591C4EAC0B005C978C /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				6348D9611C4EAC0B005C978C /* Assets.xcassets in Resources */,
+				6348D95F1C4EAC0B005C978C /* Interface.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6348D9651C4EAC0B005C978C /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				6348D9711C4EAC0C005C978C /* Assets.xcassets in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6355FEBF1BFE4FC600E07170 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				6355FECF1BFE4FC600E07170 /* LaunchScreen.storyboard in Resources */,
+				6355FECC1BFE4FC600E07170 /* Assets.xcassets in Resources */,
+				6355FECA1BFE4FC600E07170 /* Main.storyboard in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		6348D9631C4EAC0B005C978C /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				6348D9871C4EC1FD005C978C /* UsergridManager.swift in Sources */,
+				63CD143E1C505EC500C00076 /* ActivityEntity.swift in Sources */,
+				6348D96F1C4EAC0B005C978C /* ExtensionDelegate.swift in Sources */,
+				6348D96D1C4EAC0B005C978C /* InterfaceController.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		6355FEBD1BFE4FC600E07170 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				63E7DD741C518BAD00D84B12 /* LoginViewController.swift in Sources */,
+				63E7DD781C518E0400D84B12 /* MessageViewController.swift in Sources */,
+				6348D9861C4EC1FD005C978C /* UsergridManager.swift in Sources */,
+				6355FEC71BFE4FC600E07170 /* ViewControllerExtensions.swift in Sources */,
+				63E7DD761C518C9000D84B12 /* RegisterViewController.swift in Sources */,
+				6355FEC51BFE4FC600E07170 /* AppDelegate.swift in Sources */,
+				63E7DD7A1C518F1700D84B12 /* FollowViewController.swift in Sources */,
+				63CD143D1C505EC500C00076 /* ActivityEntity.swift in Sources */,
+				63C9E5311C05184900C65F81 /* MessageTextView.swift in Sources */,
+				63C9E52A1C04F3B900C65F81 /* MessageTableViewCell.swift in Sources */,
+				63E7DD7E1C518FDD00D84B12 /* FormTextField.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		634855431C726AE9005FE016 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "UsergridSDK iOS";
+			targetProxy = 634855421C726AE9005FE016 /* PBXContainerItemProxy */;
+		};
+		634855481C726AF7005FE016 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			name = "UsergridSDK watchOS";
+			targetProxy = 634855471C726AF7005FE016 /* PBXContainerItemProxy */;
+		};
+		6348D96A1C4EAC0B005C978C /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 6348D9661C4EAC0B005C978C /* WatchSample Extension */;
+			targetProxy = 6348D9691C4EAC0B005C978C /* PBXContainerItemProxy */;
+		};
+		6348D9741C4EAC0C005C978C /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 6348D95A1C4EAC0B005C978C /* WatchSample */;
+			targetProxy = 6348D9731C4EAC0C005C978C /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		6348D95D1C4EAC0B005C978C /* Interface.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				6348D95E1C4EAC0B005C978C /* Base */,
+			);
+			name = Interface.storyboard;
+			sourceTree = "<group>";
+		};
+		6355FEC81BFE4FC600E07170 /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				6355FEC91BFE4FC600E07170 /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		6355FECD1BFE4FC600E07170 /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				6355FECE1BFE4FC600E07170 /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		6348D9761C4EAC0C005C978C /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				IBSC_MODULE = WatchSample_Extension;
+				INFOPLIST_FILE = WatchSample/Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed.watchkitapp;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = watchos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = 4;
+				WATCHOS_DEPLOYMENT_TARGET = 2.1;
+			};
+			name = Debug;
+		};
+		6348D9771C4EAC0C005C978C /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				IBSC_MODULE = WatchSample_Extension;
+				INFOPLIST_FILE = WatchSample/Info.plist;
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed.watchkitapp;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = watchos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = 4;
+				WATCHOS_DEPLOYMENT_TARGET = 2.1;
+			};
+			name = Release;
+		};
+		6348D9781C4EAC0C005C978C /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				INFOPLIST_FILE = "WatchSample Extension/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed.watchkitapp.watchkitextension;
+				PRODUCT_NAME = "${TARGET_NAME}";
+				SDKROOT = watchos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = 4;
+				WATCHOS_DEPLOYMENT_TARGET = 2.1;
+			};
+			name = Debug;
+		};
+		6348D9791C4EAC0C005C978C /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				INFOPLIST_FILE = "WatchSample Extension/Info.plist";
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed.watchkitapp.watchkitextension;
+				PRODUCT_NAME = "${TARGET_NAME}";
+				SDKROOT = watchos;
+				SKIP_INSTALL = YES;
+				TARGETED_DEVICE_FAMILY = 4;
+				WATCHOS_DEPLOYMENT_TARGET = 2.1;
+			};
+			name = Release;
+		};
+		6355FED11BFE4FC600E07170 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Debug;
+		};
+		6355FED21BFE4FC600E07170 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		6355FED41BFE4FC600E07170 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				INFOPLIST_FILE = Source/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed;
+				PRODUCT_NAME = ActivityFeed;
+				PROVISIONING_PROFILE = "";
+				SWIFT_INSTALL_OBJC_HEADER = NO;
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Debug;
+		};
+		6355FED51BFE4FC600E07170 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_MODULES = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;
+				INFOPLIST_FILE = Source/Info.plist;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				PRODUCT_BUNDLE_IDENTIFIER = com.usergrid.activityfeed;
+				PRODUCT_NAME = ActivityFeed;
+				PROVISIONING_PROFILE = "";
+				SWIFT_INSTALL_OBJC_HEADER = NO;
+				SWIFT_OBJC_BRIDGING_HEADER = "";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		6348D97A1C4EAC0C005C978C /* Build configuration list for PBXNativeTarget "WatchSample Extension" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				6348D9781C4EAC0C005C978C /* Debug */,
+				6348D9791C4EAC0C005C978C /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		6348D97C1C4EAC0C005C978C /* Build configuration list for PBXNativeTarget "WatchSample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				6348D9761C4EAC0C005C978C /* Debug */,
+				6348D9771C4EAC0C005C978C /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		6355FEBC1BFE4FC600E07170 /* Build configuration list for PBXProject "ActivityFeed" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				6355FED11BFE4FC600E07170 /* Debug */,
+				6355FED21BFE4FC600E07170 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		6355FED31BFE4FC600E07170 /* Build configuration list for PBXNativeTarget "ActivityFeed" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				6355FED41BFE4FC600E07170 /* Debug */,
+				6355FED51BFE4FC600E07170 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 6355FEB91BFE4FC600E07170 /* Project object */;
+}

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata
----------------------------------------------------------------------
diff --git a/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..3603482
--- /dev/null
+++ b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:SDKSample.xcodeproj">
+   </FileRef>
+</Workspace>

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata
----------------------------------------------------------------------
diff --git a/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata b/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1344aa3
--- /dev/null
+++ b/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:ActivityFeed.xcodeproj">
+   </FileRef>
+</Workspace>

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Samples/ActivityFeed/ActivityFeed.xcworkspace/xcshareddata/ActivityFeed.xcscmblueprint
----------------------------------------------------------------------
diff --git a/Samples/ActivityFeed/ActivityFeed.xcworkspace/xcshareddata/ActivityFeed.xcscmblueprint b/Samples/ActivityFeed/ActivityFeed.xcworkspace/xcshareddata/ActivityFeed.xcscmblueprint
new file mode 100644
index 0000000..cd872fc
--- /dev/null
+++ b/Samples/ActivityFeed/ActivityFeed.xcworkspace/xcshareddata/ActivityFeed.xcscmblueprint
@@ -0,0 +1,30 @@
+{
+  "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "E28DB29D4B8B9FB468FB340D2257B16682332D89",
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
+
+  },
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
+    "E28DB29D4B8B9FB468FB340D2257B16682332D89" : 0,
+    "AD57BFF635DD66DF5DF78257082332592EB51D31" : 0
+  },
+  "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "F8EC72FE-9B21-4617-8470-0D30DC16A66E",
+  "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
+    "E28DB29D4B8B9FB468FB340D2257B16682332D89" : "swift\/",
+    "AD57BFF635DD66DF5DF78257082332592EB51D31" : ".."
+  },
+  "DVTSourceControlWorkspaceBlueprintNameKey" : "ActivityFeed",
+  "DVTSourceControlWorkspaceBlueprintVersion" : 204,
+  "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Samples\/ActivityFeed\/ActivityFeed.xcworkspace",
+  "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
+    {
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:RobertWalsh\/usergrid.git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "AD57BFF635DD66DF5DF78257082332592EB51D31"
+    },
+    {
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:RobertWalsh\/UsergridSDK.git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
+      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "E28DB29D4B8B9FB468FB340D2257B16682332D89"
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/usergrid-swift/blob/8283a6dd/Samples/ActivityFeed/Podfile
----------------------------------------------------------------------
diff --git a/Samples/ActivityFeed/Podfile b/Samples/ActivityFeed/Podfile
new file mode 100644
index 0000000..23d5db6
--- /dev/null
+++ b/Samples/ActivityFeed/Podfile
@@ -0,0 +1,8 @@
+use_frameworks!
+inhibit_all_warnings!
+
+target 'ActivityFeed' do
+    platform :ios, '9.0'
+    pod 'SlackTextViewController'
+end
+