You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2016/02/16 14:15:49 UTC
[57/75] usergrid git commit: Major Updates. See commit details.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridRequestManager.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridRequestManager.swift b/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridRequestManager.swift
deleted file mode 100644
index ccd41e5..0000000
--- a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridRequestManager.swift
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// UsergridRequestManager.swift
-// UsergridSDK
-//
-// Created by Robert Walsh on 9/22/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 Foundation
-
-final class UsergridRequestManager {
-
- unowned let client: UsergridClient
-
- let session: NSURLSession
-
- var sessionDelegate : UsergridSessionDelegate {
- return session.delegate as! UsergridSessionDelegate
- }
-
- init(client:UsergridClient) {
- self.client = client
-
- let config = NSURLSessionConfiguration.defaultSessionConfiguration()
-
- #if os(tvOS)
- config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-tvOS/v\(UsergridSDKVersion)"]
- #elseif os(iOS)
- config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-ios/v\(UsergridSDKVersion)"]
- #elseif os(watchOS)
- config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-watchOS/v\(UsergridSDKVersion)"]
- #elseif os(OSX)
- config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-osx/v\(UsergridSDKVersion)"]
- #endif
-
- self.session = NSURLSession(configuration: config,
- delegate: UsergridSessionDelegate(),
- delegateQueue: NSOperationQueue.mainQueue())
- }
-
- deinit {
- session.invalidateAndCancel()
- }
-
- func performRequest(request:UsergridRequest, completion:UsergridResponseCompletion?) {
- session.dataTaskWithRequest(request.buildNSURLRequest()) { [weak self] (data, response, error) -> Void in
- completion?(response: UsergridResponse(client:self?.client, data: data, response: response as? NSHTTPURLResponse, error: error))
- }.resume()
- }
-}
-
-
-// MARK: - Authentication -
-extension UsergridRequestManager {
-
- static func getTokenAndExpiryFromResponseJSON(jsonDict:[String:AnyObject]) -> (String?,NSDate?) {
- var token: String? = nil
- var expiry: NSDate? = nil
- if let accessToken = jsonDict["access_token"] as? String {
- token = accessToken
- }
- if let expiresIn = jsonDict["expires_in"] as? Int {
- let expiresInAdjusted = expiresIn - 5000
- expiry = NSDate(timeIntervalSinceNow: Double(expiresInAdjusted))
- }
- return (token,expiry)
- }
-
- func performUserAuthRequest(userAuth:UsergridUserAuth, request:UsergridRequest, completion:UsergridUserAuthCompletionBlock?) {
- session.dataTaskWithRequest(request.buildNSURLRequest()) { (data, response, error) -> Void in
- let dataAsJSON = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
- if let jsonDict = dataAsJSON as? [String:AnyObject] {
- let tokenAndExpiry = UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict)
- userAuth.accessToken = tokenAndExpiry.0
- userAuth.expiry = tokenAndExpiry.1
-
- var user: UsergridUser?
- if let userDict = jsonDict[UsergridUser.USER_ENTITY_TYPE] as? [String:AnyObject] {
- if let createdUser = UsergridEntity.entity(jsonDict: userDict) as? UsergridUser {
- createdUser.auth = userAuth
- user = createdUser
- }
- }
- if let createdUser = user {
- completion?(auth: userAuth, user:createdUser, error: nil)
- } else {
- let error = UsergridResponseError(jsonDictionary: jsonDict) ?? UsergridResponseError(errorName: "Auth Failed.", errorDescription: "Error Description: \(error?.localizedDescription).")
- completion?(auth: userAuth, user:nil, error:error)
- }
- } else {
- let error = UsergridResponseError(errorName: "Auth Failed.", errorDescription: "Error Description: \(error?.localizedDescription).")
- completion?(auth: userAuth, user:nil, error: error)
- }
- }.resume()
- }
-
- func performAppAuthRequest(appAuth: UsergridAppAuth, request: UsergridRequest, completion: UsergridAppAuthCompletionBlock?) {
- session.dataTaskWithRequest(request.buildNSURLRequest()) { (data, response, error) -> Void in
- let dataAsJSON = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
- if let jsonDict = dataAsJSON as? [String:AnyObject] {
- let tokenAndExpiry = UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict)
- appAuth.accessToken = tokenAndExpiry.0
- appAuth.expiry = tokenAndExpiry.1
- completion?(auth: appAuth, error: nil)
- } else {
- let error = UsergridResponseError(errorName: "Auth Failed.", errorDescription: "Error Description: \(error?.localizedDescription).")
- completion?(auth: nil, error: error)
- }
- }.resume()
- }
-}
-
-// MARK: - Asset Management -
-extension UsergridRequestManager {
-
- func performAssetDownload(contentType:String, usergridRequest:UsergridRequest, progress: UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) {
- let downloadTask = session.downloadTaskWithRequest(usergridRequest.buildNSURLRequest())
- let requestWrapper = UsergridAssetRequestWrapper(session: self.session, sessionTask: downloadTask, progress: progress) { (request) -> Void in
- if let assetData = request.responseData where assetData.length > 0 {
- let asset = UsergridAsset(data: assetData, contentType: contentType)
- completion?(asset: asset, error:nil)
- } else {
- completion?(asset: nil, error: "Downloading asset failed. No data was recieved.")
- }
- }
- self.sessionDelegate.addRequestDelegate(requestWrapper.sessionTask, requestWrapper:requestWrapper)
- requestWrapper.sessionTask.resume()
- }
-
- func performAssetUpload(usergridRequest:UsergridAssetUploadRequest, progress:UsergridAssetRequestProgress? = nil, completion: UsergridAssetUploadCompletion? = nil) {
- let uploadTask = session.uploadTaskWithRequest(usergridRequest.buildNSURLRequest(), fromData: usergridRequest.multiPartHTTPBody)
- let requestWrapper = UsergridAssetRequestWrapper(session: self.session, sessionTask: uploadTask, progress: progress) { [weak self] (request) -> Void in
- completion?(response: UsergridResponse(client: self?.client, data: request.responseData, response: request.response as? NSHTTPURLResponse, error: request.error),asset:usergridRequest.asset,error:nil)
- }
- self.sessionDelegate.addRequestDelegate(requestWrapper.sessionTask, requestWrapper:requestWrapper)
- requestWrapper.sessionTask.resume()
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponse.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponse.swift b/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponse.swift
deleted file mode 100644
index 012c82f..0000000
--- a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponse.swift
+++ /dev/null
@@ -1,203 +0,0 @@
-//
-// UsergridResponse.swift
-// UsergridSDK
-//
-// Created by Robert Walsh on 9/2/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 Foundation
-
-/// The completion block used in for most `UsergridClient` requests.
-public typealias UsergridResponseCompletion = (response: UsergridResponse) -> Void
-
-/**
-`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 `errorName` and `errorDescription` will contain information about the problem encountered.
-*/
-public class UsergridResponse: NSObject {
-
- // MARK: - Instance Properties -
-
- /// The client that was responsible for the request.
- public weak var client: UsergridClient?
-
- /// The raw response JSON.
- internal(set) public var responseJSON: [String:AnyObject]?
-
- /// The query used on the request.
- internal(set) public var query: UsergridQuery?
-
- /// The cursor from the response.
- internal(set) public var cursor: String?
-
- /// The entities created from the response JSON.
- internal(set) public var entities: [UsergridEntity]?
-
- /// The response headers.
- internal(set) public var headers: [String:String]?
-
- /// The response status code.
- internal(set) public var statusCode: Int?
-
- /// The error object containing error information if one occurred.
- internal(set) public var error: UsergridResponseError?
-
- /// Returns true if the HTTP status code from the response is less than 400.
- public var ok : Bool {
- var isOk = false
- if let statusCode = self.statusCode {
- isOk = (statusCode < 400)
- }
- return isOk
- }
-
- /// The count of `entities`.
- public var count: Int { return self.entities?.count ?? 0 }
-
- /// The first entity in `entities`.
- public var first: UsergridEntity? { return self.entities?.first }
-
- /// The last entity in `entities`.
- public var last: UsergridEntity? { return self.entities?.last }
-
- /// The first entity in `entities`.
- public var entity: UsergridEntity? { return self.first }
-
- /// The `UsergridUser` entity.
- public var user: UsergridUser? { return self.entities?.first as? UsergridUser }
-
- /// An array of `UsergridUser` entities.
- public var users: [UsergridUser]? { return self.entities as? [UsergridUser] }
-
- /// Does the response have a cursor.
- public var hasNextPage: Bool { return self.cursor != nil }
-
- /// The string value.
- public var stringValue : String? {
- if let responseJSON = self.responseJSON {
- return NSString(data: try! NSJSONSerialization.dataWithJSONObject(responseJSON, options: .PrettyPrinted), encoding: NSASCIIStringEncoding) as? String
- } else {
- return error?.description
- }
- }
-
- /// The description.
- public override var description : String {
- return "Response Description: \(stringValue)."
- }
-
- /// The debug description.
- public override var debugDescription : String {
- return "Properties of Entity: \(stringValue)."
- }
-
- // MARK: - Initialization -
-
- /**
- Designated initializer for `UsergridResponse` objects that contain errors.
-
- These types of responses are usually created because request conditions are not met.
-
- - parameter client: The client responsible for the request.
- - parameter errorName: The error name.
- - parameter errorDescription: The error description.
-
- - returns: A new instance of `UsergridResponse`.
- */
- public init(client: UsergridClient?, errorName: String, errorDescription: String) {
- self.client = client
- self.error = UsergridResponseError(errorName: errorName, errorDescription: errorDescription, exception: nil)
- }
-
- /**
- Designated initializer for `UsergridResponse` objects finished but still may contain errors.
-
- - parameter client: The client responsible for the request.
- - parameter data: The response data.
- - parameter response: The `NSHTTPURLResponse` object.
- - parameter error: The `NSError` object.
- - parameter query: The query when making the request.
-
- - returns: A new instance of `UsergridResponse`.
- */
- public init(client:UsergridClient?, data:NSData?, response:NSHTTPURLResponse?, error:NSError?, query:UsergridQuery? = nil) {
- self.client = client
- self.statusCode = response?.statusCode
- self.headers = response?.allHeaderFields as? [String:String]
-
- if let sessionError = error {
- self.error = UsergridResponseError(errorName: sessionError.domain, errorDescription: sessionError.localizedDescription)
- }
-
- if let responseQuery = query {
- self.query = responseQuery.copy() as? UsergridQuery
- }
-
- if let jsonData = data {
- do {
- let dataAsJSON = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers)
- if let jsonDict = dataAsJSON as? [String:AnyObject] {
- self.responseJSON = jsonDict
- if let responseError = UsergridResponseError(jsonDictionary: jsonDict) {
- self.error = responseError
- } else {
- if let entitiesJSONArray = jsonDict[UsergridResponse.ENTITIES] as? [[String:AnyObject]] where entitiesJSONArray.count > 0 {
- self.entities = UsergridEntity.entities(jsonArray: entitiesJSONArray)
- }
- if let cursor = jsonDict[UsergridResponse.CURSOR] as? String where !cursor.isEmpty {
- self.cursor = cursor
- }
- }
- }
- } catch {
- print(error)
- }
- }
- }
-
- // MARK: - Instance Methods -
-
- /**
- Attempts to load the next page of `UsergridEntity` objects.
-
- This requires a `cursor` to be valid as well as a `path` key within the response JSON.
-
- - parameter completion: The completion block that is called once the request for the next page has finished.
- */
- public func loadNextPage(completion: UsergridResponseCompletion) {
- if self.hasNextPage, let type = (self.responseJSON?["path"] as? NSString)?.lastPathComponent {
- if let query = self.query?.copy() as? UsergridQuery {
- self.client?.GET(type, query: query.cursor(self.cursor), completion:completion)
- } else {
- self.client?.GET(type, query: UsergridQuery(type).cursor(self.cursor), completion:completion)
- }
- } else {
- completion(response: UsergridResponse(client: self.client, errorName: "No next page.", errorDescription: "No next page was found."))
- }
- }
-
- static let CURSOR = "cursor"
- static let ENTITIES = "entities"
-}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponseError.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponseError.swift b/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponseError.swift
deleted file mode 100644
index eda8a30..0000000
--- a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridResponseError.swift
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// UsergridResponseError.swift
-// UsergridSDK
-//
-// Created by Robert Walsh on 1/8/16.
-//
-/*
- *
- * 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 Foundation
-
-/// A standard error object that contains details about a request failure.
-public class UsergridResponseError: NSObject {
-
- // MARK: - Instance Properties -
-
- /// The error's name.
- public let errorName : String
-
- /// The error's description.
- public let errorDescription: String
-
- /// The exception.
- public var exception: String?
-
- /// The description.
- public override var description : String {
- return "Error Name: \(errorName). Error Description: \(errorDescription). Exception: \(exception)."
- }
-
- /// The debug description.
- public override var debugDescription : String {
- return "Error Name: \(errorName). Error Description: \(errorDescription). Exception: \(exception)."
- }
-
- // MARK: - Initialization -
-
- /**
- Designated initializer for `UsergridResponseError`.
-
- - parameter errorName: The error's name.
- - parameter errorDescription: The error's description.
- - parameter exception: The exception.
-
- - returns: A new instance of `UsergridResponseError`
- */
- public init(errorName:String, errorDescription:String, exception:String? = nil) {
- self.errorName = errorName
- self.errorDescription = errorDescription
- self.exception = exception
- }
-
- /**
- Convenience initializer for `UsergridResponseError` that determines if the given `jsonDictionary` contains an error.
-
- - parameter jsonDictionary: The JSON dictionary that may contain error information.
-
- - returns: A new instance of `UsergridResponseError` if the JSON dictionary did indeed contain error information.
- */
- public convenience init?(jsonDictionary:[String:AnyObject]) {
- if let errorName = jsonDictionary[USERGRID_ERROR] as? String,
- errorDescription = jsonDictionary[USERGRID_ERROR_DESCRIPTION] as? String {
- self.init(errorName:errorName,errorDescription:errorDescription,exception:jsonDictionary[USERGRID_EXCEPTION] as? String)
- } else {
- self.init(errorName:"",errorDescription:"")
- return nil
- }
- }
-}
-
-let USERGRID_ERROR = "error"
-let USERGRID_ERROR_DESCRIPTION = "error_description"
-let USERGRID_EXCEPTION = "exception"
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridSessionDelegate.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridSessionDelegate.swift b/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridSessionDelegate.swift
deleted file mode 100644
index cb36fb7..0000000
--- a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridSessionDelegate.swift
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// UsergridSessionDelegate.swift
-// UsergridSDK
-//
-// Created by Robert Walsh on 9/30/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 Foundation
-
-final class UsergridSessionDelegate: NSObject {
-
- private var requestDelegates: [Int:UsergridAssetRequestWrapper] = [:]
-
- func addRequestDelegate(task:NSURLSessionTask,requestWrapper:UsergridAssetRequestWrapper) {
- requestDelegates[task.taskIdentifier] = requestWrapper
- }
-
- func removeRequestDelegate(task:NSURLSessionTask) {
- requestDelegates[task.taskIdentifier] = nil
- }
-}
-
-extension UsergridSessionDelegate : NSURLSessionTaskDelegate {
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
- if let progressBlock = requestDelegates[task.taskIdentifier]?.progress {
- progressBlock(bytesFinished:totalBytesSent, bytesExpected: totalBytesExpectedToSend)
- }
- }
-
- func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
- if let requestWrapper = requestDelegates[task.taskIdentifier] {
- requestWrapper.error = error
- requestWrapper.completion(requestWrapper: requestWrapper)
- }
- self.removeRequestDelegate(task)
- }
-}
-
-extension UsergridSessionDelegate : NSURLSessionDataDelegate {
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
- if let requestWrapper = requestDelegates[dataTask.taskIdentifier] {
- requestWrapper.response = response
- }
- completionHandler(NSURLSessionResponseDisposition.Allow)
- }
-
- func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
- if let requestWrapper = requestDelegates[dataTask.taskIdentifier] {
- let mutableData = requestWrapper.responseData != nil ? NSMutableData(data: requestWrapper.responseData!) : NSMutableData()
- mutableData.appendData(data)
- requestWrapper.responseData = mutableData
- }
- }
-}
-
-extension UsergridSessionDelegate : NSURLSessionDownloadDelegate {
-
- func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
- if let progressBlock = requestDelegates[downloadTask.taskIdentifier]?.progress {
- progressBlock(bytesFinished:totalBytesWritten, bytesExpected: totalBytesExpectedToWrite)
- }
- }
-
- func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
- if let requestWrapper = requestDelegates[downloadTask.taskIdentifier] {
- requestWrapper.responseData = NSData(contentsOfURL: location)!
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridUser.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridUser.swift b/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridUser.swift
deleted file mode 100644
index b1eedcc..0000000
--- a/sdks/swift/Samples/Push/Pods/UsergridSDK/sdks/swift/Source/UsergridUser.swift
+++ /dev/null
@@ -1,441 +0,0 @@
-//
-// User.swift
-// UsergridSDK
-//
-// Created by Robert Walsh on 7/21/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 Foundation
-
-/// The completion block used for checking email and/or username availablity for new `UsergridUser` objects.
-public typealias UsergridUserAvailabilityCompletion = (error: UsergridResponseError?, available:Bool) -> Void
-
-/// The completion block used for changing the password of `UsergridUser` objects.
-public typealias UsergridUserResetPasswordCompletion = (error: UsergridResponseError?, didSucceed:Bool) -> Void
-
-/**
-`UsergridUser` is a special subclass of `UsergridEntity` that supports functions and properties unique to users.
-*/
-public class UsergridUser : UsergridEntity {
-
- static let USER_ENTITY_TYPE = "user"
-
- // MARK: - Instance Properties -
-
- /// The `UsergridUserAuth` object if this user was authenticated.
- public var auth: UsergridUserAuth?
-
- /**
- Property helper method for the `UsergridUser` objects `UsergridUserProperties.Name`.
-
- Unlike `UsergridEntity` objects, `UsergridUser`'s can change their name property which is why we provide a getter here.
- */
- override public var name: String? {
- set(name) { self[UsergridUserProperties.Name.stringValue] = name }
- get{ return super.name }
- }
-
- /// Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Username`.
- public var username: String? {
- set(username) { self[UsergridUserProperties.Username.stringValue] = username }
- get { return self.getUserSpecificProperty(.Username) as? String }
- }
-
- /// Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Password`.
- public var password: String? {
- set(password) { self[UsergridUserProperties.Password.stringValue] = password }
- get { return self.getUserSpecificProperty(.Password) as? String }
- }
-
- /// Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Email`.
- public var email: String? {
- set(email) { self[UsergridUserProperties.Email.stringValue] = email }
- get { return self.getUserSpecificProperty(.Email) as? String }
- }
-
- /// Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Age`.
- public var age: NSNumber? {
- set(age) { self[UsergridUserProperties.Age.stringValue] = age }
- get { return self.getUserSpecificProperty(.Age) as? NSNumber }
- }
-
- /// Property helper method to get the username or email of the `UsergridUser`.
- public var usernameOrEmail: String? { return self.username ?? self.email }
-
- /**
- Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Activated`.
-
- Indicates whether the user account has been activated or not.
- */
- public var activated: Bool {
- set(activated) { self[UsergridUserProperties.Activated.stringValue] = activated }
- get { return self.getUserSpecificProperty(.Activated) as? Bool ?? false }
- }
-
- /// Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Disabled`.
- public var disabled: Bool {
- set(disabled) { self[UsergridUserProperties.Disabled.stringValue] = disabled }
- get { return self.getUserSpecificProperty(.Disabled) as? Bool ?? false }
- }
-
- /**
- Property getter and setter helpers for the `UsergridUser` objects `UsergridUserProperties.Picture`.
-
- URL path to user’s profile picture. Defaults to Gravatar for email address.
- */
- public var picture: String? {
- set(picture) { self[UsergridUserProperties.Picture.stringValue] = picture }
- get { return self.getUserSpecificProperty(.Picture) as? String }
- }
-
- /// The UUID or username property value if found.
- public var uuidOrUsername: String? { return self.uuid ?? self.username }
-
- // MARK: - Initialization -
-
- /**
- Designated initializer for `UsergridUser` objects.
-
- - parameter name: The name of the user. Note this is different from the `username` property.
-
- - returns: A new instance of `UsergridUser`.
- */
- public init(name:String? = nil) {
- super.init(type: UsergridUser.USER_ENTITY_TYPE, name:name, propertyDict:nil)
- }
-
- /**
- The required public initializer for `UsergridEntity` subclasses.
-
- - parameter type: The type associated with the `UsergridEntity` object.
- - parameter name: The optional name associated with the `UsergridEntity` object.
- - parameter propertyDict: The optional property dictionary that the `UsergridEntity` object will start out with.
-
- - returns: A new `UsergridUser` object.
- */
- required public init(type: String, name: String?, propertyDict: [String : AnyObject]?) {
- super.init(type: type, name: name, propertyDict: propertyDict)
- }
-
- /**
- Designated initializer for `UsergridUser` objects.
-
- - parameter name: The name of the user. Note this is different from the `username` property.
- - parameter propertyDict: The optional property dictionary that the `UsergridEntity` object will start out with.
-
- - returns: A new instance of `UsergridUser`.
- */
- public init(name:String,propertyDict:[String:AnyObject]? = nil) {
- super.init(type: UsergridUser.USER_ENTITY_TYPE, name:name, propertyDict:propertyDict)
- }
-
- /**
- Convenience initializer for `UsergridUser` objects.
-
- - parameter name: The name of the user. Note this is different from the `username` property.
- - parameter email: The user's email.
- - parameter password: The optional user's password.
-
- - returns: A new instance of `UsergridUser`.
- */
- public convenience init(name:String, email:String, password:String? = nil) {
- self.init(name:name,email:email,username:nil,password:password)
- }
-
- /**
- Convenience initializer for `UsergridUser` objects.
-
- - parameter email: The user's email.
- - parameter password: The optional user's password.
-
- - returns: A new instance of `UsergridUser`.
- */
- public convenience init(email:String, password:String? = nil) {
- self.init(name:nil,email:email,username:nil,password:password)
- }
-
- /**
- Convenience initializer for `UsergridUser` objects.
-
- - parameter name: The name of the user. Note this is different from the `username` property.
- - parameter username: The username of the user.
- - parameter password: The optional user's password.
-
- - returns: A new instance of `UsergridUser`.
- */
- public convenience init(name:String, username:String, password:String? = nil) {
- self.init(name:name,email:nil,username:username,password:password)
- }
-
- /**
- Convenience initializer for `UsergridUser` objects.
-
- - parameter username: The username of the user.
- - parameter password: The optional user's password.
-
- - returns: A new instance of `UsergridUser`.
- */
- public convenience init(username:String, password:String? = nil) {
- self.init(name:nil,email:nil,username:username,password:password)
- }
-
- /**
- Convenience initializer for `UsergridUser` objects.
-
- - parameter name: The optional name of the user. Note this is different from the `username` property.
- - parameter email: The optional user's email.
- - parameter username: The optional username of the user.
- - parameter password: The optional user's password.
-
- - returns: A new instance of `UsergridUser`.
- */
- public convenience init(name:String?, email:String?, username:String?, password:String? = nil) {
- self.init(name:name)
- self.email = email
- self.username = username
- self.password = password
- }
-
- // MARK: - NSCoding -
-
- /**
- NSCoding protocol initializer.
-
- - parameter aDecoder: The decoder.
-
- - returns: A decoded `UsergridUser` object.
- */
- required public init?(coder aDecoder: NSCoder) {
- self.auth = aDecoder.decodeObjectForKey("auth") as? UsergridUserAuth
- super.init(coder: aDecoder)
- }
-
- /**
- NSCoding protocol encoder.
-
- - parameter aCoder: The encoder.
- */
- public override func encodeWithCoder(aCoder: NSCoder) {
- aCoder.encodeObject(self.auth, forKey: "auth")
- super.encodeWithCoder(aCoder)
- }
-
- // MARK: - Class Methods -
-
- /**
- Checks the given email and/or username availablity for new `UsergridUser` objects using the shared instance of `UsergridClient`.
-
- - parameter email: The optional email address.
- - parameter username: The optional username.
- - parameter completion: The completion block.
- */
- public static func checkAvailable(email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) {
- self.checkAvailable(Usergrid.sharedInstance, email: email, username: username, completion: completion)
- }
-
- /**
- Checks the given email and/or username availablity for new `UsergridUser` objects using with the given `UsergridClient`.
-
- - parameter client: The client to use for checking availability.
- - parameter email: The optional email address.
- - parameter username: The optional username.
- - parameter completion: The completion block.
- */
- public static func checkAvailable(client: UsergridClient, email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) {
- let query = UsergridQuery(USER_ENTITY_TYPE)
- if let emailValue = email {
- query.eq(UsergridUserProperties.Email.stringValue, value: emailValue)
- }
- if let usernameValue = username {
- query.or().eq(UsergridUserProperties.Username.stringValue, value: usernameValue)
- }
- client.GET(USER_ENTITY_TYPE, query: query) { (response) -> Void in
- completion(error: response.error, available: response.entity == nil)
- }
- }
-
- // MARK: - Instance Methods -
-
- /**
- Creates the user object in Usergrid if the user does not already exist with the shared instance of `UsergridClient`.
-
- - parameter completion: The optional completion block.
- */
- public func create(completion: UsergridResponseCompletion? = nil) {
- self.create(Usergrid.sharedInstance, completion: completion)
- }
-
- /**
- Creates the user object in Usergrid if the user does not already exist with the given `UsergridClient`.
-
- - parameter client: The client to use for creation.
- - parameter completion: The optional completion block.
- */
- public func create(client: UsergridClient, completion: UsergridResponseCompletion? = nil) {
- client.POST(self,completion:completion)
- }
-
- /**
- Authenticates the specified user using the provided username and password with the shared instance of `UsergridClient`.
-
- While functionally similar to `UsergridClient.authenticateUser(auth)`, this method does not automatically assign this user to `UsergridClient.currentUser`:
-
- - parameter username: The username.
- - parameter password: The password.
- - parameter completion: The optional completion block.
- */
- public func login(username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) {
- self.login(Usergrid.sharedInstance, username: username, password: password, completion: completion)
- }
-
- /**
- Authenticates the specified user using the provided username and password.
-
- While functionally similar to `UsergridClient.authenticateUser(auth)`, this method does not automatically assign this user to `UsergridClient.currentUser`:
-
- - parameter client: The client to use for login.
- - parameter username: The username.
- - parameter password: The password.
- - parameter completion: The optional completion block.
- */
- public func login(client: UsergridClient, username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) {
- let userAuth = UsergridUserAuth(username: username, password: password)
- client.authenticateUser(userAuth,setAsCurrentUser:false) { [weak self] (auth, user, error) -> Void in
- self?.auth = userAuth
- completion?(auth: userAuth, user: user, error: error)
- }
- }
-
- /**
- Changes the User's current password with the shared instance of `UsergridClient`.
-
- - parameter old: The old password.
- - parameter new: The new password.
- - parameter completion: The optional completion block.
- */
- public func resetPassword(old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) {
- self.resetPassword(Usergrid.sharedInstance, old: old, new: new, completion: completion)
- }
-
- /**
- Changes the User's current password with the shared instance of `UsergridClient`.
-
- - parameter client: The client to use for resetting the password.
- - parameter old: The old password.
- - parameter new: The new password.
- - parameter completion: The optional completion block
- */
- public func resetPassword(client: UsergridClient, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) {
- client.resetPassword(self, old: old, new: new, completion: completion)
- }
-
- /**
- Attmepts to reauthenticate using the user's `UsergridUserAuth` instance property with the shared instance of `UsergridClient`.
-
- - parameter completion: The optional completion block.
- */
- public func reauthenticate(completion: UsergridUserAuthCompletionBlock? = nil) {
- self.reauthenticate(Usergrid.sharedInstance, completion: completion)
- }
-
- /**
- Attmepts to reauthenticate using the user's `UsergridUserAuth` instance property.
-
- - parameter client: The client to use for reauthentication.
- - parameter completion: The optional completion block.
- */
- public func reauthenticate(client: UsergridClient, completion: UsergridUserAuthCompletionBlock? = nil) {
- if let userAuth = self.auth {
- client.authenticateUser(userAuth, completion: completion)
- } else {
- let error = UsergridResponseError(errorName: "Invalid UsergridUserAuth.", errorDescription: "No UsergridUserAuth found on the UsergridUser.")
- completion?(auth: nil, user: self, error: error)
- }
- }
-
- /**
- Invalidates the user token locally and remotely.
-
- - parameter completion: The optional completion block.
- */
- public func logout(completion:UsergridResponseCompletion? = nil) {
- self.logout(Usergrid.sharedInstance,completion:completion)
- }
-
- /**
- Invalidates the user token locally and remotely.
-
- - parameter client: The client to use for logout.
- - parameter completion: The optional completion block.
- */
- public func logout(client: UsergridClient, completion:UsergridResponseCompletion? = nil) {
- if self === client.currentUser {
- client.logoutCurrentUser(completion)
- } else if let uuidOrUsername = self.uuidOrUsername, accessToken = self.auth?.accessToken {
- client.logoutUser(uuidOrUsername, token: accessToken) { (response) in
- self.auth = nil
- completion?(response: response)
- }
- } else {
- completion?(response: UsergridResponse(client:client, errorName:"Logout Failed.", errorDescription:"UUID or Access Token not found on UsergridUser object."))
- }
- }
-
- private func getUserSpecificProperty(userProperty: UsergridUserProperties) -> AnyObject? {
- var propertyValue: AnyObject? = super[userProperty.stringValue]
- NSJSONReadingOptions.AllowFragments
- switch userProperty {
- case .Activated,.Disabled :
- propertyValue = propertyValue?.boolValue
- case .Age :
- propertyValue = propertyValue?.integerValue
- case .Name,.Username,.Password,.Email,.Picture :
- break
- }
- return propertyValue
- }
-
- /**
- Subscript for the `UsergridUser` class.
-
- - Warning: When setting a properties value must be a valid JSON object.
-
- - Example usage:
- ```
- let someName = usergridUser["name"]
-
- usergridUser["name"] = someName
- ```
- */
- override public subscript(propertyName: String) -> AnyObject? {
- get {
- if let userProperty = UsergridUserProperties.fromString(propertyName) {
- return self.getUserSpecificProperty(userProperty)
- } else {
- return super[propertyName]
- }
- }
- set(propertyValue) {
- super[propertyName] = propertyValue
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Push.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Push.xcodeproj/project.pbxproj b/sdks/swift/Samples/Push/Push.xcodeproj/project.pbxproj
index cbd1e3e..f786e4e 100644
--- a/sdks/swift/Samples/Push/Push.xcodeproj/project.pbxproj
+++ b/sdks/swift/Samples/Push/Push.xcodeproj/project.pbxproj
@@ -7,17 +7,91 @@
objects = {
/* Begin PBXBuildFile section */
+ 634855231C726A3B005FE016 /* UsergridSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 634855161C726A2D005FE016 /* UsergridSDK.framework */; };
+ 634855241C726A3B005FE016 /* UsergridSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 634855161C726A2D005FE016 /* UsergridSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
637A720E1C5BF8160056545A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637A72061C5BF8160056545A /* AppDelegate.swift */; };
637A720F1C5BF8160056545A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 637A72071C5BF8160056545A /* Assets.xcassets */; };
637A72101C5BF8160056545A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 637A72081C5BF8160056545A /* LaunchScreen.storyboard */; };
637A72111C5BF8160056545A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 637A720A1C5BF8160056545A /* Main.storyboard */; };
637A72131C5BF8160056545A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637A720D1C5BF8160056545A /* ViewController.swift */; };
637A72161C5C06270056545A /* UsergridManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637A72151C5C06270056545A /* UsergridManager.swift */; };
- 93F1FDA07B9F97BFB25A2B6A /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73F3E0733C90D8FB3A70AF1A /* Pods.framework */; };
/* End PBXBuildFile section */
+/* Begin PBXContainerItemProxy section */
+ 634855151C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 63AF0E881BBC38FB009D4196;
+ remoteInfo = "UsergridSDK iOS";
+ };
+ 634855171C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 639B4BEB1C3DD6CF005E26E7;
+ remoteInfo = "UsergridSDK watchOS";
+ };
+ 634855191C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 63EE610B1C406E1600AFC2CF;
+ remoteInfo = "UsergridSDK tvOS";
+ };
+ 6348551B1C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 631920451C48436500F99E86;
+ remoteInfo = "UsergridSDK OSX";
+ };
+ 6348551D1C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 6319204B1C49BC0700F99E86;
+ remoteInfo = UsergridSDK_TVOS_Tests;
+ };
+ 6348551F1C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 630A219F1C49BFFC008BE87F;
+ remoteInfo = UsergridSDK_OSX_Tests;
+ };
+ 634855211C726A2D005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 630A21B81C49C473008BE87F;
+ remoteInfo = UsergridSDK_iOS_Tests;
+ };
+ 634855251C726A3B005FE016 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 63AF0E871BBC38FB009D4196;
+ remoteInfo = "UsergridSDK iOS";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 634855271C726A3B005FE016 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 634855241C726A3B005FE016 /* UsergridSDK.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
/* Begin PBXFileReference section */
- 40784BA539B3C7FC7074887B /* 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>"; };
+ 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = UsergridSDK.xcodeproj; path = ../../UsergridSDK.xcodeproj; sourceTree = "<group>"; };
637A71F01C5BF7B10056545A /* Push.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Push.app; sourceTree = BUILT_PRODUCTS_DIR; };
637A72061C5BF8160056545A /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
637A72071C5BF8160056545A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -26,8 +100,6 @@
637A720C1C5BF8160056545A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
637A720D1C5BF8160056545A /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
637A72151C5C06270056545A /* UsergridManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UsergridManager.swift; sourceTree = "<group>"; };
- 73F3E0733C90D8FB3A70AF1A /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 9BB4D667087D6CF002BECEB1 /* 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>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -35,37 +107,33 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 93F1FDA07B9F97BFB25A2B6A /* Pods.framework in Frameworks */,
+ 634855231C726A3B005FE016 /* UsergridSDK.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 11B1DE4765D09F54EEAA5FB4 /* Pods */ = {
+ 6348550C1C726A2D005FE016 /* Products */ = {
isa = PBXGroup;
children = (
- 40784BA539B3C7FC7074887B /* Pods.debug.xcconfig */,
- 9BB4D667087D6CF002BECEB1 /* Pods.release.xcconfig */,
+ 634855161C726A2D005FE016 /* UsergridSDK.framework */,
+ 634855181C726A2D005FE016 /* UsergridSDK.framework */,
+ 6348551A1C726A2D005FE016 /* UsergridSDK.framework */,
+ 6348551C1C726A2D005FE016 /* UsergridSDK.framework */,
+ 6348551E1C726A2D005FE016 /* UsergridSDK_TVOS_Tests.xctest */,
+ 634855201C726A2D005FE016 /* UsergridSDK_OSX_Tests.xctest */,
+ 634855221C726A2D005FE016 /* UsergridSDK_iOS_Tests.xctest */,
);
- name = Pods;
- sourceTree = "<group>";
- };
- 40B8DB4D5F8684F52D86AD13 /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- 73F3E0733C90D8FB3A70AF1A /* Pods.framework */,
- );
- name = Frameworks;
+ name = Products;
sourceTree = "<group>";
};
637A71E71C5BF7B10056545A = {
isa = PBXGroup;
children = (
+ 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */,
637A72051C5BF8160056545A /* Source */,
637A71F11C5BF7B10056545A /* Products */,
- 11B1DE4765D09F54EEAA5FB4 /* Pods */,
- 40B8DB4D5F8684F52D86AD13 /* Frameworks */,
);
sourceTree = "<group>";
};
@@ -106,16 +174,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 637A72021C5BF7B10056545A /* Build configuration list for PBXNativeTarget "Push" */;
buildPhases = (
- 07DB92FBF16075B01449F26B /* Check Pods Manifest.lock */,
637A71EC1C5BF7B10056545A /* Sources */,
637A71ED1C5BF7B10056545A /* Frameworks */,
637A71EE1C5BF7B10056545A /* Resources */,
- 9A01B8F77A9D4469391D8826 /* Embed Pods Frameworks */,
- EA12798F3DFFB01F69B53C53 /* Copy Pods Resources */,
+ 634855271C726A3B005FE016 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
+ 634855261C726A3B005FE016 /* PBXTargetDependency */,
);
name = Push;
productName = Push;
@@ -148,6 +215,12 @@
mainGroup = 637A71E71C5BF7B10056545A;
productRefGroup = 637A71F11C5BF7B10056545A /* Products */;
projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 6348550C1C726A2D005FE016 /* Products */;
+ ProjectRef = 6348550B1C726A2D005FE016 /* UsergridSDK.xcodeproj */;
+ },
+ );
projectRoot = "";
targets = (
637A71EF1C5BF7B10056545A /* Push */,
@@ -155,6 +228,58 @@
};
/* End PBXProject section */
+/* Begin PBXReferenceProxy section */
+ 634855161C726A2D005FE016 /* UsergridSDK.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = UsergridSDK.framework;
+ remoteRef = 634855151C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 634855181C726A2D005FE016 /* UsergridSDK.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = UsergridSDK.framework;
+ remoteRef = 634855171C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 6348551A1C726A2D005FE016 /* UsergridSDK.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = UsergridSDK.framework;
+ remoteRef = 634855191C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 6348551C1C726A2D005FE016 /* UsergridSDK.framework */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.framework;
+ path = UsergridSDK.framework;
+ remoteRef = 6348551B1C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 6348551E1C726A2D005FE016 /* UsergridSDK_TVOS_Tests.xctest */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.cfbundle;
+ path = UsergridSDK_TVOS_Tests.xctest;
+ remoteRef = 6348551D1C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 634855201C726A2D005FE016 /* UsergridSDK_OSX_Tests.xctest */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.cfbundle;
+ path = UsergridSDK_OSX_Tests.xctest;
+ remoteRef = 6348551F1C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 634855221C726A2D005FE016 /* UsergridSDK_iOS_Tests.xctest */ = {
+ isa = PBXReferenceProxy;
+ fileType = wrapper.cfbundle;
+ path = UsergridSDK_iOS_Tests.xctest;
+ remoteRef = 634855211C726A2D005FE016 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
/* Begin PBXResourcesBuildPhase section */
637A71EE1C5BF7B10056545A /* Resources */ = {
isa = PBXResourcesBuildPhase;
@@ -168,54 +293,6 @@
};
/* End PBXResourcesBuildPhase section */
-/* Begin PBXShellScriptBuildPhase section */
- 07DB92FBF16075B01449F26B /* Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Check Pods Manifest.lock";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "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";
- showEnvVarsInLog = 0;
- };
- 9A01B8F77A9D4469391D8826 /* Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Embed Pods Frameworks";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- EA12798F3DFFB01F69B53C53 /* Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Copy Pods Resources";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
-/* End PBXShellScriptBuildPhase section */
-
/* Begin PBXSourcesBuildPhase section */
637A71EC1C5BF7B10056545A /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -229,6 +306,14 @@
};
/* End PBXSourcesBuildPhase section */
+/* Begin PBXTargetDependency section */
+ 634855261C726A3B005FE016 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = "UsergridSDK iOS";
+ targetProxy = 634855251C726A3B005FE016 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin PBXVariantGroup section */
637A72081C5BF8160056545A /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
@@ -266,6 +351,7 @@
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;
@@ -310,6 +396,7 @@
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";
@@ -332,10 +419,10 @@
};
637A72031C5BF7B10056545A /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 40784BA539B3C7FC7074887B /* Pods.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "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.usergridpushsample;
@@ -346,11 +433,11 @@
};
637A72041C5BF7B10056545A /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 9BB4D667087D6CF002BECEB1 /* Pods.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
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.usergridpushsample;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Push.xcworkspace/contents.xcworkspacedata
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Push.xcworkspace/contents.xcworkspacedata b/sdks/swift/Samples/Push/Push.xcworkspace/contents.xcworkspacedata
index d4ed8a6..268a2da 100644
--- a/sdks/swift/Samples/Push/Push.xcworkspace/contents.xcworkspacedata
+++ b/sdks/swift/Samples/Push/Push.xcworkspace/contents.xcworkspacedata
@@ -4,7 +4,4 @@
<FileRef
location = "group:Push.xcodeproj">
</FileRef>
- <FileRef
- location = "group:Pods/Pods.xcodeproj">
- </FileRef>
</Workspace>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Push/Push.xcworkspace/xcshareddata/Push.xcscmblueprint
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Push.xcworkspace/xcshareddata/Push.xcscmblueprint b/sdks/swift/Samples/Push/Push.xcworkspace/xcshareddata/Push.xcscmblueprint
deleted file mode 100644
index bec49ab..0000000
--- a/sdks/swift/Samples/Push/Push.xcworkspace/xcshareddata/Push.xcscmblueprint
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "E28DB29D4B8B9FB468FB340D2257B16682332D89",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
-
- },
- "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
- "E28DB29D4B8B9FB468FB340D2257B16682332D89" : 0,
- "AD57BFF635DD66DF5DF78257082332592EB51D31" : 0
- },
- "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "ADB99685-1C5E-4D1B-99F9-59253396C726",
- "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
- "E28DB29D4B8B9FB468FB340D2257B16682332D89" : "swift\/",
- "AD57BFF635DD66DF5DF78257082332592EB51D31" : ".."
- },
- "DVTSourceControlWorkspaceBlueprintNameKey" : "Push",
- "DVTSourceControlWorkspaceBlueprintVersion" : 204,
- "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "Samples\/Push\/Push.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/blob/c638c774/sdks/swift/Samples/Push/Readme.md
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Push/Readme.md b/sdks/swift/Samples/Push/Readme.md
new file mode 100644
index 0000000..488509c
--- /dev/null
+++ b/sdks/swift/Samples/Push/Readme.md
@@ -0,0 +1,21 @@
+#Push
+
+## Running the Sample
+
+To run the sample app, simply open the `Push.xcworkspace` file in Xcode.
+
+Two targets in Xcode specific to this application will be available:
+
+- **Push Target**
+
+ This will run the iOS sample application.
+
+##Configuring the Sample Apps
+
+Before running the sample applications you will need to configure each sample application.
+
+Each sample application should include a source file named `UsergridManager.swift`. This source file is used to contain interaction with the UsergridSDK within a single source file. In doing so, the interactions within the sample apps can be easily seen and examined.
+
+Within the `UsergridManager.swift` source there will be at least two different static vars named `ORG_ID` and `APP_ID`. You will need to configure those values in order to run the applications in your environment.
+
+Applications which utilize push notifications will require a valid provisioning profile and device for the push services to work correctly.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Samples/Readme.md
----------------------------------------------------------------------
diff --git a/sdks/swift/Samples/Readme.md b/sdks/swift/Samples/Readme.md
index 4c5601f..fbfacdb 100644
--- a/sdks/swift/Samples/Readme.md
+++ b/sdks/swift/Samples/Readme.md
@@ -2,7 +2,7 @@
The sample apps in this directory are intended to show basic usage of some of the major features of the UsergridSDK.
-Each sample application utilizes `Cocoapods` to interact with the UsergridSDK.
+> Each sample application installs the UsergridSDK by embedding the framework directly. A sample application integrating the UsergridSDK via `Cocoapods` will be coming in the near future.
##Samples Apps
@@ -10,6 +10,12 @@ Each sample application utilizes `Cocoapods` to interact with the UsergridSDK.
* **Push** - An app that registers for and sends push notifications.
+## Running the Sample Apps
+
+To run the sample apps, simply open the `<SAMPLE APP NAME>.xcworkspace` file in Xcode, then run the app.
+
+> Note that some applications utilize `Cocoapods` (such as the `ActivityFeed` sample) and you will need to run the `$ pod install` command from within the root folder of the sample project in order for the sample to run properly.
+
##Configuring the Sample Apps
Before running the sample applications you will need to configure each sample application.
@@ -19,7 +25,3 @@ Each sample application should include a source file named `UsergridManager.swif
Within the `UsergridManager.swift` source there will be at least two different static vars named `ORG_ID` and `APP_ID`. You will need to configure those values in order to run the applications in your environment.
Applications which utilize push notifications will require a valid provisioning profile and device for the push services to work correctly.
-
-## Running the Sample Apps
-
-To run the sample apps, simply open the <SAMPLE APP NAME>.xcworkspace file in Xcode, then run the app.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Source/Usergrid.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/Usergrid.swift b/sdks/swift/Source/Usergrid.swift
index 78769ae..1049a62 100644
--- a/sdks/swift/Source/Usergrid.swift
+++ b/sdks/swift/Source/Usergrid.swift
@@ -72,13 +72,25 @@ public class Usergrid: NSObject {
/// The currently logged in `UsergridUser` of the shared instance of `UsergridClient`.
public static var currentUser: UsergridUser? { return Usergrid.sharedInstance.currentUser }
+ /// Whether or not the current user will be saved and restored from the keychain using the shared instance of `UsergridClient`.
+ public static var persistCurrentUserInKeychain: Bool {
+ get { return Usergrid.sharedInstance.persistCurrentUserInKeychain }
+ set(persist) { Usergrid.sharedInstance.persistCurrentUserInKeychain = persist }
+ }
+
/// The `UsergridUserAuth` which consists of the token information from the `currentUser` property of the shared instance of `UsergridClient`.
public static var userAuth: UsergridUserAuth? { return Usergrid.sharedInstance.userAuth }
/// The application level `UsergridAppAuth` object of the shared instance of `UsergridClient`.
public static var appAuth: UsergridAppAuth? {
- get{ return Usergrid.sharedInstance.appAuth }
- set{ Usergrid.sharedInstance.appAuth = newValue }
+ get { return Usergrid.sharedInstance.appAuth }
+ set(auth) { Usergrid.sharedInstance.appAuth = auth }
+ }
+
+ /// The `UsergridAuthFallback` value used to determine what type of token will be sent of the shared instance of `UsergridClient`, if any.
+ public static var authFallback: UsergridAuthFallback {
+ get { return Usergrid.sharedInstance.authFallback }
+ set(authFallback) { Usergrid.sharedInstance.authFallback = authFallback }
}
// MARK: - Initialization -
@@ -162,12 +174,6 @@ public class Usergrid: NSObject {
// MARK: - Authorization -
- /// The `UsergridAuthFallback` value used to determine what type of token will be sent of the shared instance of `UsergridClient`, if any.
- public static var authFallback: UsergridAuthFallback {
- get{ return Usergrid.sharedInstance.authFallback }
- set { Usergrid.sharedInstance.authFallback = newValue }
- }
-
/**
Sets the shared `UsergridClient`'s `tempAuth` property using the passed in `UsergridAuth`.
@@ -305,14 +311,23 @@ public class Usergrid: NSObject {
}
/**
- Gets a group of `UsergridEntity` objects of a given type with an optional query using the shared instance of `UsergridCient`.
+ Gets a group of `UsergridEntity` objects of a given type using the shared instance of `UsergridCient`.
- - parameter type: The `UsergridEntity` type.
- - parameter query: The optional query to use when gathering `UsergridEntity` objects.
- - parameter completion: The completion block that will be called once the request has completed.
+ - parameter type: The `UsergridEntity` type.
+ - parameter completion: The optional completion block that will be called once the request has completed.
+ */
+ public static func GET(type: String, completion: UsergridResponseCompletion? = nil) {
+ Usergrid.sharedInstance.GET(type,completion:completion)
+ }
+
+ /**
+ Gets a group of `UsergridEntity` objects with a given query using the shared instance of `UsergridCient`.
+
+ - parameter query: The query to use when gathering `UsergridEntity` objects.
+ - parameter queryCompletion: The completion block that will be called once the request has completed.
*/
- public static func GET(type: String, query: UsergridQuery? = nil, completion: UsergridResponseCompletion? = nil) {
- Usergrid.sharedInstance.GET(type,query:query,completion:completion)
+ public static func GET(query: UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) {
+ Usergrid.sharedInstance.GET(query,queryCompletion:queryCompletion)
}
// MARK: - PUT -
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Source/UsergridClient.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridClient.swift b/sdks/swift/Source/UsergridClient.swift
index cbb416f..9cb6aa7 100644
--- a/sdks/swift/Source/UsergridClient.swift
+++ b/sdks/swift/Source/UsergridClient.swift
@@ -53,13 +53,21 @@ public class UsergridClient: NSObject, NSCoding {
/// The constructed URL string based on the `UsergridClient`'s `baseUrl`, `orgId`, and `appId`.
internal var clientAppURL : String { return "\(baseUrl)/\(orgId)/\(appId)" }
+ /// Whether or not the current user will be saved and restored from the keychain.
+ public var persistCurrentUserInKeychain: Bool {
+ get { return config.persistCurrentUserInKeychain }
+ set(persist) { config.persistCurrentUserInKeychain = persist }
+ }
+
/// The currently logged in `UsergridUser`.
internal(set) public var currentUser: UsergridUser? = nil {
didSet {
- if let newUser = self.currentUser {
- UsergridUser.saveCurrentUserKeychainItem(self,currentUser:newUser)
- } else if oldValue != nil {
- UsergridUser.deleteCurrentUserKeychainItem(self)
+ if persistCurrentUserInKeychain {
+ if let newUser = self.currentUser {
+ UsergridUser.saveCurrentUserKeychainItem(self,currentUser:newUser)
+ } else if oldValue != nil {
+ UsergridUser.deleteCurrentUserKeychainItem(self)
+ }
}
}
}
@@ -72,14 +80,14 @@ public class UsergridClient: NSObject, NSCoding {
/// The application level `UsergridAppAuth` object. Can be set manually but must call `authenticateApp` to retrive token.
public var appAuth: UsergridAppAuth? {
- set { config.appAuth = newValue }
get { return config.appAuth }
+ set(auth) { config.appAuth = auth }
}
/// The `UsergridAuthFallback` value used to determine what type of token will be sent, if any.
public var authFallback: UsergridAuthFallback {
- set { config.authFallback = newValue }
get { return config.authFallback }
+ set(fallback) { config.authFallback = fallback }
}
// MARK: - Initialization -
@@ -119,7 +127,10 @@ public class UsergridClient: NSObject, NSCoding {
public init(configuration:UsergridClientConfig) {
self.config = configuration
super.init()
- self.currentUser = UsergridUser.getCurrentUserFromKeychain(self) // Attempt to get the current user from the saved keychain data.
+ if persistCurrentUserInKeychain {
+ self.currentUser = UsergridUser.getCurrentUserFromKeychain(self) // Attempt to get the current user from the saved keychain data.
+ }
+ UsergridDevice.sharedDevice.save(self)
}
// MARK: - NSCoding -
@@ -145,9 +156,11 @@ public class UsergridClient: NSObject, NSCoding {
if let currentUser = aDecoder.decodeObjectForKey("currentUser") as? UsergridUser {
self.currentUser = currentUser
} else {
- // If we didn't decode a current user, attempt to get the current user from the saved keychain data.
- self.currentUser = UsergridUser.getCurrentUserFromKeychain(self)
+ if persistCurrentUserInKeychain {
+ self.currentUser = UsergridUser.getCurrentUserFromKeychain(self)
+ }
}
+ UsergridDevice.sharedDevice.save(self)
}
/**
@@ -183,7 +196,7 @@ public class UsergridClient: NSObject, NSCoding {
*/
public func applyPushToken(device: UsergridDevice, pushToken: NSData, notifierID: String, completion: UsergridResponseCompletion? = nil) {
device.applyPushToken(pushToken, notifierID: notifierID)
- PUT(UsergridDevice.DEVICE_ENTITY_TYPE, jsonBody: device.jsonObjectValue, completion: completion)
+ device.save(self, completion: completion)
}
// MARK: - Authorization and User Management -
@@ -415,15 +428,31 @@ public class UsergridClient: NSObject, NSCoding {
}
/**
- Gets a group of `UsergridEntity` objects of a given type with an optional query.
+ Gets a group of `UsergridEntity` objects of a given type.
- - parameter type: The `UsergridEntity` type.
- - parameter query: The optional query to use when gathering `UsergridEntity` objects.
- - parameter completion: The optional completion block that will be called once the request has completed.
+ - parameter type: The `UsergridEntity` type.
+ - parameter completion: The optional completion block that will be called once the request has completed.
+ */
+ public func GET(type: String, completion: UsergridResponseCompletion? = nil) {
+ let request = UsergridRequest(method: .Get, baseUrl: self.clientAppURL, paths: [type], query: nil, auth: self.authForRequests())
+ self.sendRequest(request, completion: completion)
+ }
+
+ /**
+ Gets a group of `UsergridEntity` objects using a given query.
+
+ - parameter query: The query to use when gathering `UsergridEntity` objects.
+ - parameter queryCompletion: The optional completion block that will be called once the request has completed.
*/
- public func GET(type: String, query: UsergridQuery? = nil, completion: UsergridResponseCompletion? = nil) {
+ public func GET(query: UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) {
+ guard let type = query.collectionName
+ else {
+ queryCompletion?(response: UsergridResponse(client:self, errorName: "Query collection name missing.", errorDescription: "Query collection name is missing."))
+ return
+ }
+
let request = UsergridRequest(method: .Get, baseUrl: self.clientAppURL, paths: [type], query: query, auth: self.authForRequests())
- self.sendRequest(request, completion: completion)
+ self.sendRequest(request, completion: queryCompletion)
}
// MARK: - PUT -
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Source/UsergridClientConfig.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridClientConfig.swift b/sdks/swift/Source/UsergridClientConfig.swift
index c79b6b2..2719610 100644
--- a/sdks/swift/Source/UsergridClientConfig.swift
+++ b/sdks/swift/Source/UsergridClientConfig.swift
@@ -45,9 +45,12 @@ public class UsergridClientConfig : NSObject, NSCoding {
public var baseUrl: String = UsergridClient.DEFAULT_BASE_URL
/// The `UsergridAuthFallback` value used to determine what type of token will be sent, if any.
- public var authFallback: UsergridAuthFallback = .App
+ public var authFallback: UsergridAuthFallback = .None
- /**
+ /// Whether or not the `UsergridClient` current user will be saved and restored from the keychain.
+ public var persistCurrentUserInKeychain: Bool = true
+
+ /**
The application level `UsergridAppAuth` object.
Note that you still need to call the authentication methods within `UsergridClient` once it has been initialized.
@@ -86,16 +89,18 @@ public class UsergridClientConfig : NSObject, NSCoding {
/**
Convenience initializer for `UsergridClientConfig`.
- - parameter orgId: The organization identifier.
- - parameter appId: The application identifier.
- - parameter baseUrl: The base URL that all calls will be made with.
- - parameter authFallback: The `UsergridAuthFallback` value used to determine what type of token will be sent, if any.
- - parameter appAuth: The application level `UsergridAppAuth` object.
+ - parameter orgId: The organization identifier.
+ - parameter appId: The application identifier.
+ - parameter baseUrl: The base URL that all calls will be made with.
+ - parameter authFallback: The `UsergridAuthFallback` value used to determine what type of token will be sent, if any.
+ - parameter persistCurrentUserInKeychain: Whether or not the `UsergridClient` current user will be saved and restored from the keychain.
+ - parameter appAuth: The application level `UsergridAppAuth` object.
- returns: A new instance of `UsergridClientConfig`.
*/
- public convenience init(orgId: String, appId: String, baseUrl:String, authFallback:UsergridAuthFallback, appAuth:UsergridAppAuth? = nil) {
+ public convenience init(orgId: String, appId: String, baseUrl:String, authFallback:UsergridAuthFallback, persistCurrentUserInKeychain: Bool = true, appAuth:UsergridAppAuth? = nil) {
self.init(orgId:orgId,appId:appId,baseUrl:baseUrl)
+ self.persistCurrentUserInKeychain = persistCurrentUserInKeychain
self.authFallback = authFallback
self.appAuth = appAuth
}
@@ -123,6 +128,7 @@ public class UsergridClientConfig : NSObject, NSCoding {
self.orgId = orgId
self.baseUrl = baseUrl
self.appAuth = aDecoder.decodeObjectForKey("appAuth") as? UsergridAppAuth
+ self.persistCurrentUserInKeychain = aDecoder.decodeBoolForKey("persistCurrentUserInKeychain") ?? true
self.authFallback = UsergridAuthFallback(rawValue:aDecoder.decodeIntegerForKey("authFallback")) ?? .App
super.init()
}
@@ -137,6 +143,7 @@ public class UsergridClientConfig : NSObject, NSCoding {
aCoder.encodeObject(self.orgId, forKey: "orgId")
aCoder.encodeObject(self.baseUrl, forKey: "baseUrl")
aCoder.encodeObject(self.appAuth, forKey: "appAuth")
+ aCoder.encodeBool(self.persistCurrentUserInKeychain, forKey: "persistCurrentUserInKeychain")
aCoder.encodeInteger(self.authFallback.rawValue, forKey: "authFallback")
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Source/UsergridDevice.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridDevice.swift b/sdks/swift/Source/UsergridDevice.swift
index c08fcf6..995470c 100644
--- a/sdks/swift/Source/UsergridDevice.swift
+++ b/sdks/swift/Source/UsergridDevice.swift
@@ -58,10 +58,10 @@ public class UsergridDevice : UsergridEntity {
/// Property helper method for the `UsergridDevice` objects device operating system version.
public var osVersion: String { return super[UsergridDeviceProperties.OSVersion.stringValue] as! String }
- // MARK: - Initialization -
-
/// The shared instance of `UsergridDevice`.
- public static var sharedDevice: UsergridDevice = UsergridDevice()
+ public static var sharedDevice: UsergridDevice = UsergridDevice.getOrCreateSharedDeviceFromKeychain()
+
+ // MARK: - Initialization -
/**
Designated Initializer for `UsergridDevice` objects
@@ -71,25 +71,7 @@ public class UsergridDevice : UsergridEntity {
- returns: A new instance of `UsergridDevice`.
*/
public init() {
- var deviceEntityDict: [String:AnyObject] = [:]
- deviceEntityDict[UsergridEntityProperties.EntityType.stringValue] = UsergridDevice.DEVICE_ENTITY_TYPE
- deviceEntityDict[UsergridEntityProperties.UUID.stringValue] = UsergridDevice.usergridDeviceUUID()
-
- #if os(watchOS)
- deviceEntityDict[UsergridDeviceProperties.Model.stringValue] = WKInterfaceDevice.currentDevice().model
- deviceEntityDict[UsergridDeviceProperties.Platform.stringValue] = WKInterfaceDevice.currentDevice().systemName
- deviceEntityDict[UsergridDeviceProperties.OSVersion.stringValue] = WKInterfaceDevice.currentDevice().systemVersion
- #elseif os(iOS) || os(tvOS)
- deviceEntityDict[UsergridDeviceProperties.Model.stringValue] = UIDevice.currentDevice().model
- deviceEntityDict[UsergridDeviceProperties.Platform.stringValue] = UIDevice.currentDevice().systemName
- deviceEntityDict[UsergridDeviceProperties.OSVersion.stringValue] = UIDevice.currentDevice().systemVersion
- #elseif os(OSX)
- deviceEntityDict[UsergridDeviceProperties.Model.stringValue] = "Mac"
- deviceEntityDict[UsergridDeviceProperties.Platform.stringValue] = "OSX"
- deviceEntityDict[UsergridDeviceProperties.OSVersion.stringValue] = NSProcessInfo.processInfo().operatingSystemVersionString
- #endif
-
- super.init(type: UsergridDevice.DEVICE_ENTITY_TYPE, propertyDict: deviceEntityDict)
+ super.init(type: UsergridDevice.DEVICE_ENTITY_TYPE, propertyDict: UsergridDevice.commonDevicePropertyDict())
}
/**
@@ -101,7 +83,7 @@ public class UsergridDevice : UsergridEntity {
- returns: A new `UsergridDevice` object.
*/
- required public init(type: String, name: String?, propertyDict: [String : AnyObject]?) {
+ required public init(type:String, name:String? = nil, propertyDict:[String:AnyObject]? = nil) {
super.init(type: type, name: name, propertyDict: propertyDict)
}
@@ -148,6 +130,34 @@ public class UsergridDevice : UsergridEntity {
}
}
+ // MARK: - Class Helper Methods -
+
+ /**
+ Creates a property dictionary that contains the common properties for `UsergridDevice` objects.
+
+ - returns: A property dictionary with the common properties set.
+ */
+ public static func commonDevicePropertyDict() -> [String:AnyObject] {
+ var commonDevicePropertyDict: [String:AnyObject] = [:]
+ commonDevicePropertyDict[UsergridEntityProperties.EntityType.stringValue] = UsergridDevice.DEVICE_ENTITY_TYPE
+
+ #if os(watchOS)
+ commonDevicePropertyDict[UsergridDeviceProperties.Model.stringValue] = WKInterfaceDevice.currentDevice().model
+ commonDevicePropertyDict[UsergridDeviceProperties.Platform.stringValue] = WKInterfaceDevice.currentDevice().systemName
+ commonDevicePropertyDict[UsergridDeviceProperties.OSVersion.stringValue] = WKInterfaceDevice.currentDevice().systemVersion
+ #elseif os(iOS) || os(tvOS)
+ commonDevicePropertyDict[UsergridDeviceProperties.Model.stringValue] = UIDevice.currentDevice().model
+ commonDevicePropertyDict[UsergridDeviceProperties.Platform.stringValue] = UIDevice.currentDevice().systemName
+ commonDevicePropertyDict[UsergridDeviceProperties.OSVersion.stringValue] = UIDevice.currentDevice().systemVersion
+ #elseif os(OSX)
+ commonDevicePropertyDict[UsergridDeviceProperties.Model.stringValue] = "Mac"
+ commonDevicePropertyDict[UsergridDeviceProperties.Platform.stringValue] = "OSX"
+ commonDevicePropertyDict[UsergridDeviceProperties.OSVersion.stringValue] = NSProcessInfo.processInfo().operatingSystemVersionString
+ #endif
+
+ return commonDevicePropertyDict
+ }
+
// MARK: - Push Token Handling -
/**
http://git-wip-us.apache.org/repos/asf/usergrid/blob/c638c774/sdks/swift/Source/UsergridEntity.swift
----------------------------------------------------------------------
diff --git a/sdks/swift/Source/UsergridEntity.swift b/sdks/swift/Source/UsergridEntity.swift
index 4b6fe8f..5baaba4 100644
--- a/sdks/swift/Source/UsergridEntity.swift
+++ b/sdks/swift/Source/UsergridEntity.swift
@@ -73,7 +73,7 @@ public class UsergridEntity: NSObject, NSCoding {
/// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.Location`.
public var location: CLLocation? {
get { return self.getEntitySpecificProperty(.Location) as? CLLocation }
- set { self[UsergridEntityProperties.Location.stringValue] = newValue }
+ set(newLocation) { self[UsergridEntityProperties.Location.stringValue] = newLocation }
}
/// Property helper method to get the UUID or name of the `UsergridEntity`.
@@ -89,7 +89,7 @@ public class UsergridEntity: NSObject, NSCoding {
public var jsonObjectValue : [String:AnyObject] { return self.properties }
/// The string value.
- public var stringValue : String { return NSString(data: try! NSJSONSerialization.dataWithJSONObject(self.jsonObjectValue, options: .PrettyPrinted), encoding: NSASCIIStringEncoding) as! String }
+ public var stringValue : String { return NSString(data: try! NSJSONSerialization.dataWithJSONObject(self.jsonObjectValue, options: .PrettyPrinted), encoding: NSUTF8StringEncoding) as! String }
/// The description.
public override var description : String {
@@ -127,12 +127,10 @@ public class UsergridEntity: NSObject, NSCoding {
}
}
- private func copyInternalsFromEntity(entity:UsergridEntity) {
+ internal func copyInternalsFromEntity(entity:UsergridEntity) {
self.properties = entity.properties
- self.asset = entity.asset ?? self.asset
}
-
/**
Used for custom mapping subclasses to a given `Usergrid` type.
@@ -434,7 +432,7 @@ public class UsergridEntity: NSObject, NSCoding {
completion?(response: response)
}
} else {
- completion?(response: UsergridResponse(client: client, errorName: "Entity cannot be reloaded.", errorDescription: "Entity has neither an UUID or specified."))
+ completion?(response: UsergridResponse(client: client, errorName: "Entity cannot be reloaded.", errorDescription: "Entity has neither an UUID or name specified."))
}
}