From b022377fe3929c4759277797114d07f9abb97d32 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Wed, 14 Sep 2016 09:17:22 -0500 Subject: [PATCH 01/10] Initial commit to update to Swift 3.0 syntax. --- .../ActivityFeed.xcodeproj/project.pbxproj | 118 +++++++++- .../contents.xcworkspacedata | 3 + .../ActivityFeed/Source/ActivityEntity.swift | 8 +- Samples/ActivityFeed/Source/AppDelegate.swift | 12 +- .../Source/FollowViewController.swift | 12 +- .../ActivityFeed/Source/FormTextField.swift | 18 +- .../Source/LoginViewController.swift | 24 +- .../Source/MessageTableViewCell.swift | 42 ++-- .../ActivityFeed/Source/MessageTextView.swift | 12 +- .../Source/MessageViewController.swift | 129 +++++----- .../Source/RegisterViewController.swift | 20 +- .../ActivityFeed/Source/UsergridManager.swift | 22 +- .../Source/ViewControllerExtensions.swift | 8 +- .../InterfaceController.swift | 22 +- Samples/Push/Push.xcodeproj/project.pbxproj | 3 + Samples/Push/Source/AppDelegate.swift | 8 +- Samples/Push/Source/UsergridManager.swift | 8 +- Samples/Push/Source/ViewController.swift | 4 +- Source/Usergrid.swift | 87 +++---- Source/UsergridAsset.swift | 63 ++--- Source/UsergridAssetRequestWrapper.swift | 14 +- Source/UsergridAuth.swift | 52 ++--- Source/UsergridClient.swift | 220 +++++++++--------- Source/UsergridClientConfig.swift | 28 +-- Source/UsergridDevice.swift | 48 ++-- Source/UsergridEntity.swift | 176 +++++++------- Source/UsergridEnums.swift | 210 ++++++++--------- Source/UsergridExtensions.swift | 24 +- Source/UsergridFileMetaData.swift | 30 +-- Source/UsergridKeychainHelpers.swift | 84 +++---- Source/UsergridQuery.swift | 158 ++++++++----- Source/UsergridRequest.swift | 83 +++---- Source/UsergridRequestManager.swift | 78 +++---- Source/UsergridResponse.swift | 22 +- Source/UsergridResponseError.swift | 6 +- Source/UsergridSessionDelegate.swift | 42 ++-- Source/UsergridUser.swift | 123 +++++----- Tests/ASSET_Tests.swift | 61 ++--- Tests/AUTH_Tests.swift | 26 +-- Tests/CONNECTION_Tests.swift | 24 +- Tests/ClientCreationTests.swift | 6 +- Tests/GET_Tests.swift | 30 +-- Tests/PUT_Tests.swift | 28 +-- Tests/User_Tests.swift | 82 +++---- UsergridSDK.xcodeproj/project.pbxproj | 40 +++- .../xcschemes/UsergridSDK OSX.xcscheme | 2 +- .../xcschemes/UsergridSDK iOS.xcscheme | 2 +- .../xcschemes/UsergridSDK tvOS.xcscheme | 2 +- .../xcschemes/UsergridSDK watchOS.xcscheme | 2 +- .../xcschemes/UsergridSDK_OSX_Tests.xcscheme | 2 +- .../xcschemes/UsergridSDK_TVOS_Tests.xcscheme | 2 +- .../xcschemes/UsergridSDK_iOS_Tests.xcscheme | 2 +- 52 files changed, 1276 insertions(+), 1056 deletions(-) diff --git a/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj index 215ca87..61a984b 100644 --- a/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj +++ b/Samples/ActivityFeed/ActivityFeed.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 587A839139502BE0380CD1DA /* Pods_ActivityFeed.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 383F79CDBA14ABFBFE0D157C /* Pods_ActivityFeed.framework */; }; 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 */; }; @@ -164,6 +165,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 27CE17FF2D4FC59A741243ED /* Pods-ActivityFeed.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ActivityFeed.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ActivityFeed/Pods-ActivityFeed.debug.xcconfig"; sourceTree = ""; }; + 383F79CDBA14ABFBFE0D157C /* Pods_ActivityFeed.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ActivityFeed.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F7C629490712A1E96D1C945 /* Pods-ActivityFeed.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ActivityFeed.release.xcconfig"; path = "Pods/Target Support Files/Pods-ActivityFeed/Pods-ActivityFeed.release.xcconfig"; sourceTree = ""; }; 634855281C726AD3005FE016 /* UsergridSDK.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = UsergridSDK.xcodeproj; path = ../../UsergridSDK.xcodeproj; sourceTree = ""; }; 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 = ""; }; @@ -206,12 +210,28 @@ buildActionMask = 2147483647; files = ( 634855401C726AE9005FE016 /* UsergridSDK.framework in Frameworks */, + 587A839139502BE0380CD1DA /* Pods_ActivityFeed.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A56E0389E87D6C6C996BF007 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2112A2F4682490176F99F6BA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 383F79CDBA14ABFBFE0D157C /* Pods_ActivityFeed.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 634855291C726AD3005FE016 /* Products */ = { isa = PBXGroup; children = ( @@ -255,6 +275,8 @@ 6348D95C1C4EAC0B005C978C /* WatchSample */, 6348D96B1C4EAC0B005C978C /* WatchSample Extension */, 6355FEC21BFE4FC600E07170 /* Products */, + CDFE621065D6B589E1F28562 /* Pods */, + 2112A2F4682490176F99F6BA /* Frameworks */, ); sourceTree = ""; }; @@ -322,6 +344,15 @@ name = Storyboards; sourceTree = ""; }; + CDFE621065D6B589E1F28562 /* Pods */ = { + isa = PBXGroup; + children = ( + 27CE17FF2D4FC59A741243ED /* Pods-ActivityFeed.debug.xcconfig */, + 5F7C629490712A1E96D1C945 /* Pods-ActivityFeed.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -331,6 +362,7 @@ buildPhases = ( 6348D9591C4EAC0B005C978C /* Resources */, 6348D97B1C4EAC0C005C978C /* Embed App Extensions */, + A56E0389E87D6C6C996BF007 /* Frameworks */, ); buildRules = ( ); @@ -365,11 +397,14 @@ isa = PBXNativeTarget; buildConfigurationList = 6355FED31BFE4FC600E07170 /* Build configuration list for PBXNativeTarget "ActivityFeed" */; buildPhases = ( + 472DB0E2A40503BB734CFCDA /* [CP] Check Pods Manifest.lock */, 6355FEBD1BFE4FC600E07170 /* Sources */, 6355FEBE1BFE4FC600E07170 /* Frameworks */, 6355FEBF1BFE4FC600E07170 /* Resources */, 6348D97D1C4EAC0C005C978C /* Embed Watch Content */, 634855441C726AE9005FE016 /* Embed Frameworks */, + A3199695972495C1CCD1CB10 /* [CP] Embed Pods Frameworks */, + 91D9D0F42FF78FB16CE0E42F /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -389,17 +424,20 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0710; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Apigee Inc."; TargetAttributes = { 6348D95A1C4EAC0B005C978C = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 6348D9661C4EAC0B005C978C = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 6355FEC01BFE4FC600E07170 = { CreatedOnToolsVersion = 7.1.1; + LastSwiftMigration = 0800; }; }; }; @@ -511,6 +549,54 @@ }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 472DB0E2A40503BB734CFCDA /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] 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; + }; + 91D9D0F42FF78FB16CE0E42F /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ActivityFeed/Pods-ActivityFeed-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + A3199695972495C1CCD1CB10 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ActivityFeed/Pods-ActivityFeed-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 6348D9631C4EAC0B005C978C /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -597,43 +683,45 @@ 6348D9761C4EAC0C005C978C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 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; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.1; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Debug; }; 6348D9771C4EAC0C005C978C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 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; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.1; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Release; }; 6348D9781C4EAC0C005C978C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "WatchSample Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -641,15 +729,16 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.1; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Debug; }; 6348D9791C4EAC0C005C978C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; INFOPLIST_FILE = "WatchSample Extension/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; @@ -657,8 +746,10 @@ PRODUCT_NAME = "${TARGET_NAME}"; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; - WATCHOS_DEPLOYMENT_TARGET = 2.1; + WATCHOS_DEPLOYMENT_TARGET = 3.0; }; name = Release; }; @@ -747,12 +838,13 @@ }; 6355FED41BFE4FC600E07170 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 27CE17FF2D4FC59A741243ED /* Pods-ActivityFeed.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 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; @@ -761,17 +853,19 @@ SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; 6355FED51BFE4FC600E07170 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 5F7C629490712A1E96D1C945 /* Pods-ActivityFeed.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 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; @@ -779,6 +873,8 @@ PROVISIONING_PROFILE = ""; SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata b/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata index 1344aa3..43deff1 100644 --- a/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata +++ b/Samples/ActivityFeed/ActivityFeed.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/Samples/ActivityFeed/Source/ActivityEntity.swift b/Samples/ActivityFeed/Source/ActivityEntity.swift index 5ddcf12..4cea1fc 100644 --- a/Samples/ActivityFeed/Source/ActivityEntity.swift +++ b/Samples/ActivityFeed/Source/ActivityEntity.swift @@ -45,7 +45,7 @@ public class ActivityEntity: UsergridEntity { UsergridEntity.mapCustomType("activity", toSubclass: ActivityEntity.self) } - required public init(type: String, name: String?, propertyDict: [String : AnyObject]?) { + required public init(type: String, name: String?, propertyDict: [String : Any]?) { super.init(type: type, name: name, propertyDict: propertyDict) } @@ -53,8 +53,8 @@ public class ActivityEntity: UsergridEntity { super.init(coder: aDecoder) } - public override func encodeWithCoder(aCoder: NSCoder) { - super.encodeWithCoder(aCoder) + open override func encode(with aCoder: NSCoder) { + super.encode(with:aCoder) } -} \ No newline at end of file +} diff --git a/Samples/ActivityFeed/Source/AppDelegate.swift b/Samples/ActivityFeed/Source/AppDelegate.swift index cca5c41..35d69c0 100644 --- a/Samples/ActivityFeed/Source/AppDelegate.swift +++ b/Samples/ActivityFeed/Source/AppDelegate.swift @@ -34,10 +34,10 @@ import UsergridSDK var window: UIWindow? - func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { - UINavigationBar.appearance().tintColor = UIColor.whiteColor() - application.registerUserNotificationSettings(UIUserNotificationSettings( forTypes: [.Alert, .Badge, .Sound], categories: nil)) + UINavigationBar.appearance().tintColor = UIColor.white + application.registerUserNotificationSettings(UIUserNotificationSettings( types: [.alert, .badge, .sound], categories: nil)) application.registerForRemoteNotifications() // Initialize the Usergrid shared instance. @@ -48,17 +48,17 @@ import UsergridSDK if Usergrid.currentUser != nil { let rootViewController = self.window!.rootViewController as! UINavigationController let loginViewController = rootViewController.viewControllers.first! - loginViewController.performSegueWithIdentifier("loginSuccessNonAnimatedSegue", sender: loginViewController) + loginViewController.performSegue(withIdentifier: "loginSuccessNonAnimatedSegue", sender: loginViewController) } return true } - func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Usergrid.applyPushToken(deviceToken, notifierID: UsergridManager.NOTIFIER_ID, completion: nil) } - func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { + func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Application failed to register for remote notifications") } } diff --git a/Samples/ActivityFeed/Source/FollowViewController.swift b/Samples/ActivityFeed/Source/FollowViewController.swift index 6362cdb..70d4fb7 100644 --- a/Samples/ActivityFeed/Source/FollowViewController.swift +++ b/Samples/ActivityFeed/Source/FollowViewController.swift @@ -32,19 +32,19 @@ class FollowViewController : UIViewController { @IBOutlet weak var usernameTextField: UITextField! - @IBAction func addFollowerButtonTouched(sender:AnyObject?) { - guard let username = usernameTextField.text where !username.isEmpty + @IBAction func addFollowerButtonTouched(_ sender:AnyObject?) { + guard let username = usernameTextField.text, !username.isEmpty else { - self.showAlert(title: "Follow failed.", message: "Please enter a valid username.") + self.showAlert("Follow failed.", message: "Please enter a valid username.") return } UsergridManager.followUser(username) { (response) -> Void in if response.ok { - self.performSegueWithIdentifier("unwindToChatSegue", sender: self) + self.performSegue(withIdentifier: "unwindToChatSegue", sender: self) } else { - self.showAlert(title: "Follow failed.", message: "No user with the username \"\(username)\" found.") + self.showAlert("Follow failed.", message: "No user with the username \"\(username)\" found.") } } } -} \ No newline at end of file +} diff --git a/Samples/ActivityFeed/Source/FormTextField.swift b/Samples/ActivityFeed/Source/FormTextField.swift index fbb9bd6..961098e 100644 --- a/Samples/ActivityFeed/Source/FormTextField.swift +++ b/Samples/ActivityFeed/Source/FormTextField.swift @@ -43,29 +43,29 @@ import UIKit } func setUp() { - addTarget(self, action: #selector(FormTextField.actionKeyboardButtonTapped(_:)), forControlEvents: .EditingDidEndOnExit) + addTarget(self, action: #selector(FormTextField.actionKeyboardButtonTapped(_:)), for: .editingDidEndOnExit) } - func actionKeyboardButtonTapped(sender: UITextField) { + func actionKeyboardButtonTapped(_ sender: UITextField) { switch nextResponderField { case let button as UIButton: - if button.enabled { - button.sendActionsForControlEvents(.TouchUpInside) + if button.isEnabled { + button.sendActions(for: .touchUpInside) } else { resignFirstResponder() } - case .Some(let responder): + case .some(let responder): responder.becomeFirstResponder() default: resignFirstResponder() } } - override func textRectForBounds(bounds: CGRect) -> CGRect { - return CGRectInset(bounds, inset, 0) + override func textRect(forBounds bounds: CGRect) -> CGRect { + return bounds.insetBy(dx: inset, dy: 0) } - override func editingRectForBounds(bounds: CGRect) -> CGRect { - return textRectForBounds(bounds) + override func editingRect(forBounds bounds: CGRect) -> CGRect { + return textRect(forBounds: bounds) } } diff --git a/Samples/ActivityFeed/Source/LoginViewController.swift b/Samples/ActivityFeed/Source/LoginViewController.swift index 0e6c0fa..7a8e261 100644 --- a/Samples/ActivityFeed/Source/LoginViewController.swift +++ b/Samples/ActivityFeed/Source/LoginViewController.swift @@ -33,45 +33,45 @@ class LoginViewController: UIViewController { @IBOutlet weak var usernameTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.passwordTextField.text = nil } - override func viewDidAppear(animated: Bool) { + override func viewDidAppear(_ animated: Bool) { Usergrid.logoutCurrentUser() super.viewDidAppear(animated) } - override func viewWillDisappear(animated: Bool) { + override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.view.endEditing(true) } - @IBAction func loginButtonTouched(sender: AnyObject) { - guard let username = usernameTextField.text where !username.isEmpty, - let password = passwordTextField.text where !password.isEmpty + @IBAction func loginButtonTouched(_ sender: AnyObject) { + guard let username = usernameTextField.text, !username.isEmpty, + let password = passwordTextField.text, !password.isEmpty else { - self.showAlert(title: "Error Authenticating User", message: "Username and password must not be empty.") + self.showAlert("Error Authenticating User", message: "Username and password must not be empty.") return; } self.loginUser(username, password: password) } - func loginUser(username:String, password:String) { + func loginUser(_ username:String, password:String) { UsergridManager.loginUser(username,password: password) { (auth, user, error) -> Void in if let authErrorDescription = error { - self.showAlert(title: "Error Authenticating User", message: authErrorDescription.errorDescription) + self.showAlert("Error Authenticating User", message: authErrorDescription.errorDescription) } else if let authenticatedUser = user { - self.showAlert(title: "Authenticated User Successful", message: "User description: \n \(authenticatedUser.stringValue)") { (action) -> Void in - self.performSegueWithIdentifier("loginSuccessSegue", sender: self) + self.showAlert("Authenticated User Successful", message: "User description: \n \(authenticatedUser.stringValue)") { (action) -> Void in + self.performSegue(withIdentifier: "loginSuccessSegue", sender: self) } } } } - @IBAction func unwind(segue: UIStoryboardSegue) { + @IBAction func unwind(_ segue: UIStoryboardSegue) { // Used for unwind segues back to this view controller. } } diff --git a/Samples/ActivityFeed/Source/MessageTableViewCell.swift b/Samples/ActivityFeed/Source/MessageTableViewCell.swift index a77abd8..8e018d3 100644 --- a/Samples/ActivityFeed/Source/MessageTableViewCell.swift +++ b/Samples/ActivityFeed/Source/MessageTableViewCell.swift @@ -32,7 +32,7 @@ public class MessageTableViewCell : UITableViewCell { var titleLabel : UILabel var bodyLabel : UILabel var thumbnailView : UIImageView - var indexPath : NSIndexPath? + var indexPath : IndexPath? public static let kMessageTableViewCellMinimumHeight: CGFloat = 50.0; public static let kMessageTableViewCellAvatarHeight: CGFloat = 30.0; @@ -48,8 +48,8 @@ public class MessageTableViewCell : UITableViewCell { super.init(style: style, reuseIdentifier: reuseIdentifier) - self.selectionStyle = UITableViewCellSelectionStyle.None - self.backgroundColor = UIColor.whiteColor() + self.selectionStyle = UITableViewCellSelectionStyle.none + self.backgroundColor = UIColor.white self.configureSubviews() } @@ -58,30 +58,30 @@ public class MessageTableViewCell : UITableViewCell { } override public func prepareForReuse() { - self.selectionStyle = UITableViewCellSelectionStyle.None - self.titleLabel.font = UIFont.boldSystemFontOfSize(MessageTableViewCell.defaultFontSize) - self.bodyLabel.font = UIFont.boldSystemFontOfSize(13) + self.selectionStyle = UITableViewCellSelectionStyle.none + self.titleLabel.font = UIFont.boldSystemFont(ofSize: MessageTableViewCell.defaultFontSize) + self.bodyLabel.font = UIFont.boldSystemFont(ofSize: 13) self.titleLabel.text = "" self.bodyLabel.text = "" } func configureSubviews() { self.titleLabel.translatesAutoresizingMaskIntoConstraints = false - self.titleLabel.backgroundColor = UIColor.clearColor() - self.titleLabel.userInteractionEnabled = false + self.titleLabel.backgroundColor = UIColor.clear + self.titleLabel.isUserInteractionEnabled = false self.titleLabel.numberOfLines = 0 - self.titleLabel.textColor = UIColor.grayColor() - self.titleLabel.font = UIFont.boldSystemFontOfSize(MessageTableViewCell.defaultFontSize) + self.titleLabel.textColor = UIColor.gray + self.titleLabel.font = UIFont.boldSystemFont(ofSize: MessageTableViewCell.defaultFontSize) self.bodyLabel.translatesAutoresizingMaskIntoConstraints = false - self.bodyLabel.backgroundColor = UIColor.clearColor() - self.bodyLabel.userInteractionEnabled = false + self.bodyLabel.backgroundColor = UIColor.clear + self.bodyLabel.isUserInteractionEnabled = false self.bodyLabel.numberOfLines = 0 - self.bodyLabel.textColor = UIColor.grayColor() - self.bodyLabel.font = UIFont.boldSystemFontOfSize(13) + self.bodyLabel.textColor = UIColor.gray + self.bodyLabel.font = UIFont.boldSystemFont(ofSize: 13) self.thumbnailView.translatesAutoresizingMaskIntoConstraints = false - self.thumbnailView.userInteractionEnabled = false + self.thumbnailView.isUserInteractionEnabled = false self.thumbnailView.backgroundColor = UIColor(white: 0.9, alpha: 1.0) self.thumbnailView.layer.cornerRadius = 15 self.thumbnailView.layer.masksToBounds = true @@ -90,12 +90,12 @@ public class MessageTableViewCell : UITableViewCell { self.contentView.addSubview(self.titleLabel) self.contentView.addSubview(self.bodyLabel) - let views = ["thumbnailView":self.thumbnailView, "titleLabel":self.titleLabel, "bodyLabel":self.bodyLabel] + let views = ["thumbnailView":self.thumbnailView, "titleLabel":self.titleLabel, "bodyLabel":self.bodyLabel] as [String : Any] let metrics = ["thumbSize":MessageTableViewCell.kMessageTableViewCellAvatarHeight, "padding":15, "right":10, "left":5] - self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-left-[thumbnailView(thumbSize)]-right-[titleLabel(>=0)]-right-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) - self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-left-[thumbnailView(thumbSize)]-right-[bodyLabel(>=0)]-right-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) - self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-right-[titleLabel(20)]-left-[bodyLabel(>=0@999)]-left-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) - self.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-right-[thumbnailView(thumbSize)]-(>=0)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) + self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-left-[thumbnailView(thumbSize)]-right-[titleLabel(>=0)]-right-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) + self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-left-[thumbnailView(thumbSize)]-right-[bodyLabel(>=0)]-right-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) + self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-right-[titleLabel(20)]-left-[bodyLabel(>=0@999)]-left-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) + self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-right-[thumbnailView(thumbSize)]-(>=0)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)) } -} \ No newline at end of file +} diff --git a/Samples/ActivityFeed/Source/MessageTextView.swift b/Samples/ActivityFeed/Source/MessageTextView.swift index 135372e..b8bb464 100644 --- a/Samples/ActivityFeed/Source/MessageTextView.swift +++ b/Samples/ActivityFeed/Source/MessageTextView.swift @@ -28,12 +28,12 @@ import Foundation import SlackTextViewController class MessageTextView : SLKTextView { - override func willMoveToSuperview(newSuperview: UIView?) { - super.willMoveToSuperview(newSuperview) - self.backgroundColor = UIColor.whiteColor() - self.placeholderColor = UIColor.lightGrayColor() + override func willMove(toSuperview newSuperview: UIView?) { + super.willMove(toSuperview: newSuperview) + self.backgroundColor = UIColor.white + self.placeholderColor = UIColor.lightGray self.placeholder = "Message" - self.pastableMediaTypes = .None - self.layer.borderColor = UIColor(red: 217/255, green: 217/255, blue: 217/255, alpha: 1.0).CGColor + self.pastableMediaTypes = [] + self.layer.borderColor = UIColor(red: 217/255, green: 217/255, blue: 217/255, alpha: 1.0).cgColor } } diff --git a/Samples/ActivityFeed/Source/MessageViewController.swift b/Samples/ActivityFeed/Source/MessageViewController.swift index b2a152c..a004cfe 100644 --- a/Samples/ActivityFeed/Source/MessageViewController.swift +++ b/Samples/ActivityFeed/Source/MessageViewController.swift @@ -36,7 +36,7 @@ class MessageViewController : SLKTextViewController { private var messageEntities: [ActivityEntity] = [] init() { - super.init(tableViewStyle:.Plain) + super.init(tableViewStyle:.plain) commonInit() } @@ -45,11 +45,11 @@ class MessageViewController : SLKTextViewController { commonInit() } - override static func tableViewStyleForCoder(decoder: NSCoder) -> UITableViewStyle { - return .Plain + override static func tableViewStyle(for decoder: NSCoder) -> UITableViewStyle { + return .plain } - override func viewWillAppear(animated: Bool) { + override func viewWillAppear(_ animated: Bool) { self.reloadMessages() if let username = Usergrid.currentUser?.name { self.navigationItem.title = "\(username)'s Feed" @@ -60,11 +60,11 @@ class MessageViewController : SLKTextViewController { func commonInit() { self.bounces = true self.shakeToClearEnabled = true - self.keyboardPanningEnabled = true + self.isKeyboardPanningEnabled = true self.shouldScrollToBottomAfterKeyboardShows = true - self.inverted = true + self.isInverted = true - self.registerClassForTextView(MessageTextView) + self.registerClass(forTextView:MessageTextView.classForCoder()) self.activateWCSession() } @@ -78,32 +78,32 @@ class MessageViewController : SLKTextViewController { override func viewDidLoad() { super.viewDidLoad() - self.rightButton.setTitle("Send", forState: .Normal) + self.rightButton.setTitle("Send", for: []) self.textInputbar.autoHideRightButton = true self.textInputbar.maxCharCount = 256 - self.textInputbar.editorTitle.textColor = UIColor.darkGrayColor() + self.textInputbar.editorTitle.textColor = UIColor.darkGray - self.tableView!.separatorStyle = .None - self.tableView!.registerClass(MessageTableViewCell.self, forCellReuseIdentifier:MessageViewController.MESSAGE_CELL_IDENTIFIER) + self.tableView!.separatorStyle = .none + self.tableView!.register(MessageTableViewCell.self, forCellReuseIdentifier:MessageViewController.MESSAGE_CELL_IDENTIFIER) } - override func didPressRightButton(sender: AnyObject!) { + override func didPressRightButton(_ sender: Any!) { self.textView.refreshFirstResponder() UsergridManager.postFeedMessage(self.textView.text) { (response) -> Void in if let messageEntity = response.entity as? ActivityEntity { - let indexPath = NSIndexPath(forRow: 0, inSection: 0) - let rowAnimation: UITableViewRowAnimation = self.inverted ? .Bottom : .Top - let scrollPosition: UITableViewScrollPosition = self.inverted ? .Bottom : .Top + let indexPath = NSIndexPath.init(row: 0, section: 0) + let rowAnimation: UITableViewRowAnimation = self.isInverted ? .bottom : .top + let scrollPosition: UITableViewScrollPosition = self.isInverted ? .bottom : .top self.tableView!.beginUpdates() - self.messageEntities.insert(messageEntity, atIndex: 0) - self.tableView!.insertRowsAtIndexPaths([indexPath], withRowAnimation: rowAnimation) + self.messageEntities.insert(messageEntity, at: 0) + self.tableView!.insertRows(at: [indexPath as IndexPath], with: rowAnimation) self.tableView!.endUpdates() - self.tableView!.scrollToRowAtIndexPath(indexPath, atScrollPosition: scrollPosition, animated: true) - self.tableView!.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) + self.tableView!.scrollToRow(at: indexPath as IndexPath, at: scrollPosition, animated: true) + self.tableView!.reloadRows(at: [indexPath as IndexPath], with: .automatic) self.sendEntitiesToWatch(self.messageEntities) } @@ -112,35 +112,37 @@ class MessageViewController : SLKTextViewController { } override func keyForTextCaching() -> String? { - return NSBundle.mainBundle().bundleIdentifier + return Bundle.main.bundleIdentifier } - override func numberOfSectionsInTableView(tableView: UITableView) -> Int { + + override func numberOfSections(in tableView: UITableView) -> Int { return 1 } - override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.messageEntities.count } - override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return self.messageCellForRowAtIndexPath(indexPath) } - @IBAction func unwindToChat(segue: UIStoryboardSegue) { + @IBAction func unwindToChat(_ segue: UIStoryboardSegue) { } - func populateCell(cell:MessageTableViewCell,feedEntity:ActivityEntity) { + func populateCell(_ cell:MessageTableViewCell,feedEntity:ActivityEntity) { cell.titleLabel.text = feedEntity.displayName cell.bodyLabel.text = feedEntity.content cell.thumbnailView.image = nil - if let imageURLString = feedEntity.imageURL, imageURL = NSURL(string: imageURLString) { - NSURLSession.sharedSession().dataTaskWithURL(imageURL) { (data, response, error) in - if let imageData = data, image = UIImage(data: imageData) { - dispatch_async(dispatch_get_main_queue(), { () -> Void in + if let imageURLString = feedEntity.imageURL, let imageURL = URL(string: imageURLString) { + URLSession.shared.dataTask(with: imageURL) { (data, response, error) in + if let imageData = data, let image = UIImage(data: imageData) { + DispatchQueue.main.async(execute: { () -> Void in cell.thumbnailView.image = image }) } @@ -148,8 +150,8 @@ class MessageViewController : SLKTextViewController { } } - func messageCellForRowAtIndexPath(indexPath:NSIndexPath) -> MessageTableViewCell { - let cell = self.tableView!.dequeueReusableCellWithIdentifier(MessageViewController.MESSAGE_CELL_IDENTIFIER) as! MessageTableViewCell + func messageCellForRowAtIndexPath(_ indexPath:IndexPath) -> MessageTableViewCell { + let cell = self.tableView!.dequeueReusableCell(withIdentifier: MessageViewController.MESSAGE_CELL_IDENTIFIER) as! MessageTableViewCell self.populateCell(cell, feedEntity: self.messageEntities[indexPath.row]) cell.indexPath = indexPath @@ -158,30 +160,30 @@ class MessageViewController : SLKTextViewController { return cell } - override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - let feedEntity = messageEntities[indexPath.row] + let feedEntity = messageEntities[(indexPath as NSIndexPath).row] - guard let messageText = feedEntity.content where !messageText.isEmpty + guard let messageText = feedEntity.content, !messageText.isEmpty else { return 0 } - let messageUsername : NSString = feedEntity.displayName ?? "" + let messageUsername : NSString = (feedEntity.displayName ?? "") as NSString let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineBreakMode = .ByWordWrapping - paragraphStyle.alignment = .Left + paragraphStyle.lineBreakMode = .byWordWrapping + paragraphStyle.alignment = .left let pointSize = MessageTableViewCell.defaultFontSize - let attributes = [NSFontAttributeName:UIFont.boldSystemFontOfSize(pointSize),NSParagraphStyleAttributeName:paragraphStyle] + let attributes = [NSFontAttributeName:UIFont.boldSystemFont(ofSize: pointSize),NSParagraphStyleAttributeName:paragraphStyle] - let width: CGFloat = CGRectGetWidth(self.tableView!.frame) - MessageTableViewCell.kMessageTableViewCellAvatarHeight - 25 + let width: CGFloat = self.tableView!.frame.width - MessageTableViewCell.kMessageTableViewCellAvatarHeight - 25 - let titleBounds = messageUsername.boundingRectWithSize(CGSize(width: width, height: CGFloat.max), options: .UsesLineFragmentOrigin, attributes: attributes, context: nil) - let bodyBounds = messageText.boundingRectWithSize(CGSize(width: width, height: CGFloat.max), options: .UsesLineFragmentOrigin, attributes: attributes, context: nil) + let titleBounds = messageUsername.boundingRect(with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: attributes, context: nil) + let bodyBounds = messageText.boundingRect(with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, attributes: attributes, context: nil) - var height = CGRectGetHeight(titleBounds) + CGRectGetHeight(bodyBounds) + 40 + var height = titleBounds.height + bodyBounds.height + 40 if height < MessageTableViewCell.kMessageTableViewCellMinimumHeight { height = MessageTableViewCell.kMessageTableViewCellMinimumHeight } @@ -194,24 +196,47 @@ extension MessageViewController : WCSessionDelegate { func activateWCSession() { if (WCSession.isSupported()) { - let session = WCSession.defaultSession() + let session = WCSession.default() session.delegate = self - session.activateSession() + session.activate() + } + } + + @available(iOS 9.3, *) + func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { + + } + + func sessionDidBecomeInactive(_ session: WCSession) { + + } + + func sessionDidDeactivate(_ session: WCSession) { + + } + + func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) { + if let action = message["action"] as? String, action == "getMessages" { + UsergridManager.getFeedMessages { (response) -> Void in + if let entities = response.entities { + self.sendEntitiesToWatch(entities) + } + } } } - func sendEntitiesToWatch(messages:[UsergridEntity]) { - if WCSession.defaultSession().reachable { - NSKeyedArchiver.setClassName("ActivityEntity", forClass: ActivityEntity.self) - let data = NSKeyedArchiver.archivedDataWithRootObject(messages) - WCSession.defaultSession().sendMessageData(data, replyHandler: nil, errorHandler: { (error) -> Void in - self.showAlert(title: "WCSession Unreachable.", message: "\(error)") + func sendEntitiesToWatch(_ messages:[UsergridEntity]) { + if WCSession.default().isReachable { + NSKeyedArchiver.setClassName("ActivityEntity", for: ActivityEntity.self) + let data = NSKeyedArchiver.archivedData(withRootObject: messages) + WCSession.default().sendMessageData(data, replyHandler: nil, errorHandler: { (error) -> Void in + self.showAlert("WCSession Unreachable.", message: "\(error)") }) } } - func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) { - if let action = message["action"] as? String where action == "getMessages" { + func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { + if let action = message["action"] as? String, action == "getMessages" { UsergridManager.getFeedMessages { (response) -> Void in if let entities = response.entities { self.sendEntitiesToWatch(entities) diff --git a/Samples/ActivityFeed/Source/RegisterViewController.swift b/Samples/ActivityFeed/Source/RegisterViewController.swift index 25cad11..f2cbae5 100644 --- a/Samples/ActivityFeed/Source/RegisterViewController.swift +++ b/Samples/ActivityFeed/Source/RegisterViewController.swift @@ -35,27 +35,27 @@ class RegisterViewController: UIViewController { @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! - @IBAction func registerButtonTouched(sender: AnyObject) { - guard let name = nameTextField.text where !name.isEmpty, - let username = usernameTextField.text where !username.isEmpty, - let email = emailTextField.text where !email.isEmpty, - let password = passwordTextField.text where !password.isEmpty + @IBAction func registerButtonTouched(_ sender: AnyObject) { + guard let name = nameTextField.text, !name.isEmpty, + let username = usernameTextField.text, !username.isEmpty, + let email = emailTextField.text, !email.isEmpty, + let password = passwordTextField.text, !password.isEmpty else { - self.showAlert(title: "Error Registering User", message: "Name, username, email, and password fields must not be empty.") + self.showAlert("Error Registering User", message: "Name, username, email, and password fields must not be empty.") return; } self.createUser(name, username: username, email: email, password: password) } - private func createUser(name:String, username:String, email:String, password:String) { + private func createUser(_ name:String, username:String, email:String, password:String) { UsergridManager.createUser(name, username: username, email: email, password: password) { (response) -> Void in if let createdUser = response.user { - self.showAlert(title: "Registering User Successful", message: "User description: \n \(createdUser.stringValue)") { (action) -> Void in - self.performSegueWithIdentifier("unwindSegue", sender: self) + self.showAlert("Registering User Successful", message: "User description: \n \(createdUser.stringValue)") { (action) -> Void in + self.performSegue(withIdentifier: "unwindSegue", sender: self) } } else { - self.showAlert(title: "Error Registering User", message: response.error?.errorDescription) + self.showAlert("Error Registering User", message: response.error?.errorDescription) } } } diff --git a/Samples/ActivityFeed/Source/UsergridManager.swift b/Samples/ActivityFeed/Source/UsergridManager.swift index 99fe4b5..7130490 100644 --- a/Samples/ActivityFeed/Source/UsergridManager.swift +++ b/Samples/ActivityFeed/Source/UsergridManager.swift @@ -40,29 +40,29 @@ public class UsergridManager { ActivityEntity.registerSubclass() } - static func loginUser(username:String, password:String, completion:UsergridUserAuthCompletionBlock) { + static func loginUser(_ username:String, password:String, completion:UsergridUserAuthCompletionBlock) { let userAuth = UsergridUserAuth(username: username, password: password) Usergrid.authenticateUser(userAuth, completion: completion) } - static func createUser(name:String, username:String, email:String, password:String, completion:UsergridResponseCompletion) { - let user = UsergridUser(name: name, propertyDict: [UsergridUserProperties.Username.stringValue:username, - UsergridUserProperties.Email.stringValue:email, - UsergridUserProperties.Password.stringValue:password]) + static func createUser(_ name:String, username:String, email:String, password:String, completion:UsergridResponseCompletion) { + let user = UsergridUser(name: name, propertyDict: [UsergridUserProperties.username.stringValue:username, + UsergridUserProperties.email.stringValue:email, + UsergridUserProperties.password.stringValue:password]) user.create(completion) } - static func getFeedMessages(completion:UsergridResponseCompletion) { - Usergrid.GET(UsergridQuery("users/me/feed").desc(UsergridEntityProperties.Created.stringValue), queryCompletion: completion) + static func getFeedMessages(_ completion:UsergridResponseCompletion) { + Usergrid.GET(UsergridQuery("users/me/feed").desc(UsergridEntityProperties.created.stringValue), queryCompletion: completion) } - static func postFeedMessage(text:String,completion:UsergridResponseCompletion) { + static func postFeedMessage(_ text:String,completion:UsergridResponseCompletion) { let currentUser = Usergrid.currentUser! let verb = "post" let content = text - var actorDictionary = [String:AnyObject]() + var actorDictionary = [String:Any]() actorDictionary["displayName"] = currentUser.name ?? currentUser.usernameOrEmail ?? "" actorDictionary["email"] = currentUser.email ?? "" if let imageURL = currentUser.picture { @@ -72,7 +72,7 @@ public class UsergridManager { Usergrid.POST("users/me/activities", jsonBody: ["actor":actorDictionary,"verb":verb,"content":content], completion: completion) } - static func followUser(username:String, completion:UsergridResponseCompletion) { + static func followUser(_ username:String, completion:UsergridResponseCompletion) { Usergrid.connect("users", entityID: "me", relationship: "following", toType: "users", toName: username, completion: completion) } -} \ No newline at end of file +} diff --git a/Samples/ActivityFeed/Source/ViewControllerExtensions.swift b/Samples/ActivityFeed/Source/ViewControllerExtensions.swift index ad79741..c81f177 100644 --- a/Samples/ActivityFeed/Source/ViewControllerExtensions.swift +++ b/Samples/ActivityFeed/Source/ViewControllerExtensions.swift @@ -27,10 +27,10 @@ import UIKit extension UIViewController { - func showAlert(title title: String, message: String?, handler:((UIAlertAction) -> Void)? = nil) { - let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) - alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.Default, handler: handler)) - self.presentViewController(alert, animated: true, completion: nil) + func showAlert(_ title: String, message: String?, handler:((UIAlertAction) -> Void)? = nil) { + let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "Close", style: UIAlertActionStyle.default, handler: handler)) + self.present(alert, animated: true, completion: nil) } } diff --git a/Samples/ActivityFeed/WatchSample Extension/InterfaceController.swift b/Samples/ActivityFeed/WatchSample Extension/InterfaceController.swift index a61192a..18a0adf 100644 --- a/Samples/ActivityFeed/WatchSample Extension/InterfaceController.swift +++ b/Samples/ActivityFeed/WatchSample Extension/InterfaceController.swift @@ -34,19 +34,23 @@ class InterfaceController: WKInterfaceController,WCSessionDelegate { @IBOutlet var messageTable: WKInterfaceTable! var messageEntities: [ActivityEntity] = [] - override func awakeWithContext(context: AnyObject?) { - super.awakeWithContext(context) + override func awake(withContext context: Any?) { + super.awake(withContext: context) if WCSession.isSupported() { - let session = WCSession.defaultSession() + let session = WCSession.default() session.delegate = self - session.activateSession() + session.activate() } } + func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { + + } + override func willActivate() { self.reloadTable() - if WCSession.defaultSession().reachable { - WCSession.defaultSession().sendMessage(["action":"getMessages"], replyHandler: nil) { (error) -> Void in + if WCSession.default().isReachable { + WCSession.default().sendMessage(["action":"getMessages"], replyHandler: nil) { (error) -> Void in print(error) } } @@ -56,7 +60,7 @@ class InterfaceController: WKInterfaceController,WCSessionDelegate { func reloadTable() { self.messageTable.setNumberOfRows(messageEntities.count, withRowType: "MessageRow") for index in 0.. Bool { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { UsergridManager.initializeSharedInstance() - application.registerUserNotificationSettings(UIUserNotificationSettings( forTypes: [.Alert, .Badge, .Sound], categories: nil)) + application.registerUserNotificationSettings(UIUserNotificationSettings( types: [.alert, .badge, .sound], categories: nil)) application.registerForRemoteNotifications() return true } - func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { UsergridManager.applyPushToken(deviceToken) } - func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { + func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Application failed to register for remote notifications") } } diff --git a/Samples/Push/Source/UsergridManager.swift b/Samples/Push/Source/UsergridManager.swift index 00e8ec2..bcdcb98 100644 --- a/Samples/Push/Source/UsergridManager.swift +++ b/Samples/Push/Source/UsergridManager.swift @@ -39,7 +39,7 @@ public class UsergridManager { Usergrid.initSharedInstance(configuration: UsergridClientConfig(orgId: UsergridManager.ORG_ID, appId: UsergridManager.APP_ID, baseUrl: UsergridManager.BASE_URL)) } - static func applyPushToken(deviceToken:NSData) { + static func applyPushToken(_ deviceToken:Data) { Usergrid.applyPushToken(deviceToken, notifierID: UsergridManager.NOTIFIER_ID, completion: { (response) -> Void in print("Apply token completed successfully : \(response.ok)") if !response.ok, let errorDescription = response.error?.errorDescription { @@ -48,8 +48,8 @@ public class UsergridManager { }) } - static func sendPush(deviceId deviceId:String,message:String) { - let pushRequest = UsergridRequest(method: .Post, + static func sendPush(deviceId:String,message:String) { + let pushRequest = UsergridRequest(method: .post, baseUrl: Usergrid.clientAppURL, paths: ["devices",deviceId,"notifications"], auth: Usergrid.authForRequests(), @@ -69,4 +69,4 @@ public class UsergridManager { static func pushToAllDevices() { UsergridManager.sendPush(deviceId: "*", message: "Push to all devices message.") } -} \ No newline at end of file +} diff --git a/Samples/Push/Source/ViewController.swift b/Samples/Push/Source/ViewController.swift index d1e3247..ec130d3 100644 --- a/Samples/Push/Source/ViewController.swift +++ b/Samples/Push/Source/ViewController.swift @@ -28,11 +28,11 @@ import UIKit class ViewController: UIViewController { - @IBAction func pushToThisDevice(sender: AnyObject) { + @IBAction func pushToThisDevice(_ sender: AnyObject) { UsergridManager.pushToThisDevice() } - @IBAction func pushToAllDevices(sender: AnyObject) { + @IBAction func pushToAllDevices(_ sender: AnyObject) { UsergridManager.pushToAllDevices() } } diff --git a/Source/Usergrid.swift b/Source/Usergrid.swift index ac87380..f9807f3 100644 --- a/Source/Usergrid.swift +++ b/Source/Usergrid.swift @@ -103,7 +103,8 @@ public class Usergrid: NSObject { - returns: The shared instance of `UsergridClient`. */ - public static func initSharedInstance(orgId orgId : String, appId: String) -> UsergridClient { + @discardableResult + public static func initSharedInstance(orgId : String, appId: String) -> UsergridClient { if !Usergrid.isInitialized { Usergrid._sharedClient = UsergridClient(orgId: orgId, appId: appId) } else { @@ -121,7 +122,8 @@ public class Usergrid: NSObject { - returns: The shared instance of `UsergridClient`. */ - public static func initSharedInstance(orgId orgId : String, appId: String, baseUrl: String) -> UsergridClient { + @discardableResult + public static func initSharedInstance(orgId : String, appId: String, baseUrl: String) -> UsergridClient { if !Usergrid.isInitialized { Usergrid._sharedClient = UsergridClient(orgId: orgId, appId: appId, baseUrl: baseUrl) } else { @@ -137,7 +139,8 @@ public class Usergrid: NSObject { - returns: The shared instance of `UsergridClient`. */ - public static func initSharedInstance(configuration configuration: UsergridClientConfig) -> UsergridClient { + @discardableResult + public static func initSharedInstance(configuration: UsergridClientConfig) -> UsergridClient { if !Usergrid.isInitialized { Usergrid._sharedClient = UsergridClient(configuration: configuration) } else { @@ -155,7 +158,7 @@ public class Usergrid: NSObject { - parameter notifierID: The Usergrid notifier ID. - parameter completion: The completion block. */ - public static func applyPushToken(pushToken: NSData, notifierID: String, completion: UsergridResponseCompletion? = nil) { + public static func applyPushToken(_ pushToken: Data, notifierID: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.applyPushToken(pushToken, notifierID: notifierID, completion: completion) } @@ -167,7 +170,7 @@ public class Usergrid: NSObject { - parameter notifierID: The Usergrid notifier ID. - parameter completion: The completion block. */ - public static func applyPushToken(device: UsergridDevice, pushToken: NSData, notifierID: String, completion: UsergridResponseCompletion? = nil) { + public static func applyPushToken(_ device: UsergridDevice, pushToken: Data, notifierID: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.applyPushToken(device, pushToken: pushToken, notifierID: notifierID, completion: completion) } @@ -183,7 +186,7 @@ public class Usergrid: NSObject { - returns: The shared instance of `UsergridClient` */ - public static func usingAuth(auth:UsergridAuth) -> UsergridClient { + public static func usingAuth(_ auth:UsergridAuth) -> UsergridClient { return Usergrid.sharedInstance.usingAuth(auth) } @@ -196,7 +199,7 @@ public class Usergrid: NSObject { - returns: The shared instance of `UsergridClient` */ - public static func usingToken(token:String) -> UsergridClient { + public static func usingToken(_ token:String) -> UsergridClient { return Usergrid.sharedInstance.usingToken(token) } @@ -219,7 +222,7 @@ public class Usergrid: NSObject { - parameter completion: The completion block that will be called after authentication has completed. */ - public static func authenticateApp(completion: UsergridAppAuthCompletionBlock? = nil) { + public static func authenticateApp(_ completion: UsergridAppAuthCompletionBlock? = nil) { Usergrid.sharedInstance.authenticateApp(completion) } @@ -229,7 +232,7 @@ public class Usergrid: NSObject { - parameter auth: The `UsergridAppAuth` that will be authenticated. - parameter completion: The completion block that will be called after authentication has completed. */ - public static func authenticateApp(auth: UsergridAppAuth, completion: UsergridAppAuthCompletionBlock? = nil) { + public static func authenticateApp(_ auth: UsergridAppAuth, completion: UsergridAppAuthCompletionBlock? = nil) { Usergrid.sharedInstance.authenticateApp(auth, completion: completion) } @@ -239,7 +242,7 @@ public class Usergrid: NSObject { - parameter auth: The `UsergridUserAuth` that will be authenticated. - parameter completion: The completion block that will be called after authentication has completed. */ - public static func authenticateUser(auth: UsergridUserAuth, completion: UsergridUserAuthCompletionBlock? = nil) { + public static func authenticateUser(_ auth: UsergridUserAuth, completion: UsergridUserAuthCompletionBlock? = nil) { Usergrid.sharedInstance.authenticateUser(auth, completion: completion) } @@ -250,7 +253,7 @@ public class Usergrid: NSObject { - parameter setAsCurrentUser: If the authenticated user should be set as the `UsergridClient.currentUser`. - parameter completion: The completion block that will be called after authentication has completed. */ - public static func authenticateUser(userAuth: UsergridUserAuth, setAsCurrentUser:Bool, completion: UsergridUserAuthCompletionBlock? = nil) { + public static func authenticateUser(_ userAuth: UsergridUserAuth, setAsCurrentUser:Bool, completion: UsergridUserAuthCompletionBlock? = nil) { Usergrid.sharedInstance.authenticateUser(userAuth, setAsCurrentUser: setAsCurrentUser, completion: completion) } @@ -262,7 +265,7 @@ public class Usergrid: NSObject { - parameter new: The new password. - parameter completion: The optional completion block. */ - public static func resetPassword(user: UsergridUser, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { + public static func resetPassword(_ user: UsergridUser, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { Usergrid.sharedInstance.resetPassword(user, old: old, new: new, completion: completion) } @@ -271,7 +274,7 @@ public class Usergrid: NSObject { - parameter completion: The completion block that will be called after logout has completed. */ - public static func logoutCurrentUser(completion:UsergridResponseCompletion? = nil) { + public static func logoutCurrentUser(_ completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.logoutCurrentUser(completion) } @@ -280,7 +283,7 @@ public class Usergrid: NSObject { - parameter completion: The completion block that will be called after logout has completed. */ - public static func logoutUserAllTokens(uuidOrUsername:String, completion:UsergridResponseCompletion? = nil) { + public static func logoutUserAllTokens(_ uuidOrUsername:String, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.logoutUserAllTokens(uuidOrUsername, completion: completion) } @@ -291,7 +294,7 @@ public class Usergrid: NSObject { - parameter completion: The completion block that will be called after logout has completed. */ - public static func logoutUser(uuidOrUsername:String, token:String?, completion:UsergridResponseCompletion? = nil) { + public static func logoutUser(_ uuidOrUsername:String, token:String?, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.logoutUser(uuidOrUsername, token: token, completion: completion) } @@ -305,7 +308,7 @@ public class Usergrid: NSObject { - parameter request: The `UsergridRequest` object to send. - parameter completion: The optional completion block that will be called once the request has completed. */ - public static func sendRequest(request:UsergridRequest, completion:UsergridResponseCompletion? = nil) { + public static func sendRequest(_ request:UsergridRequest, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.sendRequest(request, completion: completion) } @@ -318,7 +321,7 @@ public class Usergrid: NSObject { - parameter uuidOrName: The UUID or name of the `UsergridEntity`. - parameter completion: The completion block that will be called once the request has completed. */ - public static func GET(type: String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { + public static func GET(_ type: String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.GET(type,uuidOrName:uuidOrName,completion:completion) } @@ -328,7 +331,7 @@ public class Usergrid: NSObject { - 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) { + public static func GET(_ type: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.GET(type,completion:completion) } @@ -338,7 +341,7 @@ public class Usergrid: NSObject { - 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(query: UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { + public static func GET(_ query: UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.GET(query,queryCompletion:queryCompletion) } @@ -352,7 +355,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionary to update the `UsergridEntity` with. - parameter completion: The completion block that will be called once the request has completed. */ - public static func PUT(type: String, uuidOrName: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { + public static func PUT(_ type: String, uuidOrName: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.PUT(type, uuidOrName: uuidOrName, jsonBody: jsonBody, completion: completion) } @@ -365,7 +368,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionary to update the `UsergridEntity` with. - parameter completion: The completion block that will be called once the request has completed. */ - public static func PUT(type: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { + public static func PUT(_ type: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.PUT(type, jsonBody: jsonBody, completion: completion) } @@ -375,7 +378,7 @@ public class Usergrid: NSObject { - parameter entity: The `UsergridEntity` to update. - parameter completion: The completion block that will be called once the request has completed. */ - public static func PUT(entity: UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public static func PUT(_ entity: UsergridEntity, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.PUT(entity, completion: completion) } @@ -388,7 +391,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionary to update with. - parameter queryCompletion: The completion block that will be called once the request has completed. */ - public static func PUT(query: UsergridQuery, jsonBody:[String:AnyObject], queryCompletion: UsergridResponseCompletion? = nil) { + public static func PUT(_ query: UsergridQuery, jsonBody:[String:Any], queryCompletion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.PUT(query, jsonBody: jsonBody, queryCompletion: queryCompletion) } @@ -402,7 +405,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionary to use when creating the `UsergridEntity`. - parameter completion: The completion block that will be called once the request has completed. */ - public static func POST(type: String, name: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { + public static func POST(_ type: String, name: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.POST(type, name: name, jsonBody: jsonBody, completion: completion) } @@ -413,7 +416,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionary to use when creating the `UsergridEntity`. - parameter completion: The completion block that will be called once the request has completed. */ - public static func POST(type: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { + public static func POST(_ type: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.POST(type, jsonBody: jsonBody, completion: completion) } @@ -424,7 +427,7 @@ public class Usergrid: NSObject { - parameter jsonBody: The valid JSON body dictionaries to use when creating the `UsergridEntity` objects. - parameter completion: The completion block that will be called once the request has completed. */ - public static func POST(type: String, jsonBodies:[[String:AnyObject]], completion: UsergridResponseCompletion? = nil) { + public static func POST(_ type: String, jsonBodies:[[String:Any]], completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.POST(type, jsonBodies: jsonBodies, completion: completion) } @@ -434,7 +437,7 @@ public class Usergrid: NSObject { - parameter entity: The `UsergridEntity` to create. - parameter completion: The completion block that will be called once the request has completed. */ - public static func POST(entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public static func POST(_ entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.POST(entity, completion: completion) } @@ -446,7 +449,7 @@ public class Usergrid: NSObject { - parameter entities: The `UsergridEntity` objects to create. - parameter entitiesCompletion: The completion block that will be called once the request has completed. */ - public static func POST(entities:[UsergridEntity], entitiesCompletion: UsergridResponseCompletion? = nil) { + public static func POST(_ entities:[UsergridEntity], entitiesCompletion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.POST(entities, entitiesCompletion: entitiesCompletion) } @@ -459,7 +462,7 @@ public class Usergrid: NSObject { - parameter uuidOrName: The UUID or name of the `UsergridEntity`. - parameter completion: The completion block that will be called once the request has completed. */ - public static func DELETE(type:String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { + public static func DELETE(_ type:String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.DELETE(type, uuidOrName: uuidOrName, completion: completion) } @@ -471,7 +474,7 @@ public class Usergrid: NSObject { - parameter entity: The `UsergridEntity` to delete. - parameter completion: The completion block that will be called once the request has completed. */ - public static func DELETE(entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public static func DELETE(_ entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.DELETE(entity, completion:completion) } @@ -483,7 +486,7 @@ public class Usergrid: NSObject { - parameter query: The query to use when filtering what entities to delete. - parameter queryCompletion: The completion block that will be called once the request has completed. */ - public static func DELETE(query:UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { + public static func DELETE(_ query:UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.DELETE(query, queryCompletion:queryCompletion) } @@ -497,7 +500,7 @@ public class Usergrid: NSObject { - parameter to: The entity which is connected. - parameter completion: The completion block that will be called once the request has completed. */ - public static func connect(entity:UsergridEntity, relationship:String, to:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public static func connect(_ entity:UsergridEntity, relationship:String, to:UsergridEntity, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.connect(entity, relationship: relationship, to: to, completion: completion) } @@ -511,7 +514,7 @@ public class Usergrid: NSObject { - parameter toID: The UUID of the entity you are connecting to. - parameter completion: The completion block that will be called once the request has completed. */ - public static func connect(entityType:String, entityID:String, relationship:String, toType:String?, toID: String, completion: UsergridResponseCompletion? = nil) { + public static func connect(_ entityType:String, entityID:String, relationship:String, toType:String?, toID: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.connect(entityType, entityID: entityID, relationship: relationship, toType: toType, toID: toID, completion: completion) } @@ -525,7 +528,7 @@ public class Usergrid: NSObject { - parameter toName: The name of the entity you are connecting to. - parameter completion: The completion block that will be called once the request has completed. */ - public static func connect(entityType:String, entityID:String, relationship:String, toType:String, toName: String, completion: UsergridResponseCompletion? = nil) { + public static func connect(_ entityType:String, entityID:String, relationship:String, toType:String, toName: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.connect(entityType, entityID: entityID, relationship: relationship, toType: toType, toName: toName, completion: completion) } @@ -538,7 +541,7 @@ public class Usergrid: NSObject { - parameter connectingEntity: The entity which is connected. - parameter completion: The completion block that will be called once the request has completed. */ - public static func disconnect(entity:UsergridEntity, relationship:String, from:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public static func disconnect(_ entity:UsergridEntity, relationship:String, from:UsergridEntity, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.disconnect(entity, relationship: relationship, from: from, completion: completion) } @@ -552,7 +555,7 @@ public class Usergrid: NSObject { - parameter toID: The UUID of the entity you are disconnecting from. - parameter completion: The completion block that will be called once the request has completed. */ - public static func disconnect(entityType:String, entityID:String, relationship:String, fromType:String?, fromID: String, completion: UsergridResponseCompletion? = nil) { + public static func disconnect(_ entityType:String, entityID:String, relationship:String, fromType:String?, fromID: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.disconnect(entityType, entityID: entityID, relationship: relationship, fromType: fromType, fromID: fromID, completion: completion) } @@ -566,7 +569,7 @@ public class Usergrid: NSObject { - parameter fromName: The name of the entity you are disconnecting from. - parameter completion: The completion block that will be called once the request has completed. */ - public static func disconnect(entityType:String, entityID:String, relationship:String, fromType:String, fromName: String, completion: UsergridResponseCompletion? = nil) { + public static func disconnect(_ entityType:String, entityID:String, relationship:String, fromType:String, fromName: String, completion: UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.disconnect(entityType, entityID: entityID, relationship: relationship, fromType: fromType, fromName: fromName, completion: completion) } @@ -578,7 +581,7 @@ public class Usergrid: NSObject { - parameter relationship: The relationship. - parameter completion: The completion block that will be called once the request has completed. */ - public static func getConnections(direction:UsergridDirection, entity:UsergridEntity, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public static func getConnections(_ direction:UsergridDirection, entity:UsergridEntity, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.getConnections(direction, entity: entity, relationship: relationship, query:query, completion: completion) } @@ -592,7 +595,7 @@ public class Usergrid: NSObject { - parameter query: The optional query. - parameter completion: The completion block that will be called once the request has completed. */ - public static func getConnections(direction:UsergridDirection, type:String, uuidOrName:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public static func getConnections(_ direction:UsergridDirection, type:String, uuidOrName:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.getConnections(direction, type: type, uuidOrName: uuidOrName, relationship: relationship, query:query, completion: completion) } @@ -605,7 +608,7 @@ public class Usergrid: NSObject { - parameter query: The optional query. - parameter completion: The optional completion block that will be called once the request has completed. */ - public static func getConnections(direction:UsergridDirection, uuid:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public static func getConnections(_ direction:UsergridDirection, uuid:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { Usergrid.sharedInstance.getConnections(direction, uuid: uuid, relationship: relationship, query: query, completion: completion) } @@ -619,7 +622,7 @@ public class Usergrid: NSObject { - parameter progress: The progress block that will be called to update the progress of the upload. - parameter completion: The completion block that will be called once the request has completed. */ - public static func uploadAsset(entity:UsergridEntity, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { + public static func uploadAsset(_ entity:UsergridEntity, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { Usergrid.sharedInstance.uploadAsset(entity, asset: asset, progress: progress, completion: completion) } @@ -631,7 +634,7 @@ public class Usergrid: NSObject { - parameter progress: The progress block that will be called to update the progress of the download. - parameter completion: The completion block that will be called once the request has completed. */ - public static func downloadAsset(entity:UsergridEntity, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { + public static func downloadAsset(_ entity:UsergridEntity, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { Usergrid.sharedInstance.downloadAsset(entity, contentType: contentType, progress: progress, completion: completion) } } diff --git a/Source/UsergridAsset.swift b/Source/UsergridAsset.swift index 9353ec1..93c88c7 100644 --- a/Source/UsergridAsset.swift +++ b/Source/UsergridAsset.swift @@ -32,13 +32,13 @@ import MobileCoreServices #endif /// The progress block used in `UsergridAsset` are being uploaded or downloaded. -public typealias UsergridAssetRequestProgress = (bytesFinished:Int64, bytesExpected: Int64) -> Void +public typealias UsergridAssetRequestProgress = (_ bytesFinished:Int64, _ bytesExpected: Int64) -> Void /// The completion block used in `UsergridAsset` are finished uploading. -public typealias UsergridAssetUploadCompletion = (asset:UsergridAsset?, response: UsergridResponse) -> Void +public typealias UsergridAssetUploadCompletion = (_ asset:UsergridAsset?, _ response: UsergridResponse) -> Void /// The completion block used in `UsergridAsset` are finished downloading. -public typealias UsergridAssetDownloadCompletion = (asset:UsergridAsset?, error: UsergridResponseError?) -> Void +public typealias UsergridAssetDownloadCompletion = (_ asset:UsergridAsset?, _ error: UsergridResponseError?) -> Void /** As Usergrid supports storing binary assets, the SDKs are designed to make uploading assets easier and more robust. Attaching, uploading, and downloading assets is handled by the `UsergridEntity` class. @@ -55,7 +55,7 @@ public class UsergridAsset: NSObject, NSCoding { public let filename: String /// Binary representation of the asset's data. - public let data: NSData + public let data: Data /// A representation of the folder location the asset was loaded from, if it was provided in the initialization. public let originalLocation: String? @@ -64,7 +64,7 @@ public class UsergridAsset: NSObject, NSCoding { public var contentType: String /// The content length of the assets data. - public var contentLength: Int { return self.data.length } + public var contentLength: Int { return self.data.count } // MARK: - Initialization - @@ -78,7 +78,7 @@ public class UsergridAsset: NSObject, NSCoding { - returns: A new instance of `UsergridAsset`. */ - public init(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, data:NSData, originalLocation:String? = nil, contentType:String) { + public init(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, data:Data, originalLocation:String? = nil, contentType:String) { self.filename = filename ?? UsergridAsset.DEFAULT_FILE_NAME self.data = data self.originalLocation = originalLocation @@ -95,18 +95,18 @@ public class UsergridAsset: NSObject, NSCoding { - returns: A new instance of `UsergridAsset` if the data can be gathered from the passed in `UIImage`, otherwise nil. */ - public convenience init?(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, image:UIImage, imageContentType:UsergridImageContentType = .Png) { - var imageData: NSData? + public convenience init?(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, image:UIImage, imageContentType:UsergridImageContentType = .png) { + var imageData: Data? switch(imageContentType) { - case .Png : + case .png : imageData = UIImagePNGRepresentation(image) - case .Jpeg : + case .jpeg : imageData = UIImageJPEGRepresentation(image, 1.0) } if let assetData = imageData { self.init(filename:filename,data:assetData,contentType:imageContentType.stringValue) } else { - self.init(filename:"",data:NSData(),contentType:"") + self.init(filename:"",data:Data(),contentType:"") return nil } } @@ -121,22 +121,22 @@ public class UsergridAsset: NSObject, NSCoding { - returns: A new instance of `UsergridAsset` if the data can be gathered from the passed in `NSURL`, otherwise nil. */ - public convenience init?(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, fileURL:NSURL, contentType:String? = nil) { - if fileURL.fileURL, let assetData = NSData(contentsOfURL: fileURL) { + public convenience init?(filename:String? = UsergridAsset.DEFAULT_FILE_NAME, fileURL:URL, contentType:String? = nil) { + if fileURL.isFileURL, let assetData = try? Data(contentsOf: fileURL) { var fileNameToUse = filename - if fileNameToUse != UsergridAsset.DEFAULT_FILE_NAME, let inferredFileName = fileURL.lastPathComponent { - fileNameToUse = inferredFileName + if fileNameToUse != UsergridAsset.DEFAULT_FILE_NAME, !fileURL.lastPathComponent.isEmpty { + fileNameToUse = fileURL.lastPathComponent } if let fileContentType = contentType ?? UsergridAsset.MIMEType(fileURL) { self.init(filename:fileNameToUse,data:assetData,originalLocation:fileURL.absoluteString,contentType:fileContentType) } else { print("Usergrid Error: Failed to imply content type of the asset.") - self.init(filename:"",data:NSData(),contentType:"") + self.init(filename:"",data:Data(),contentType:"") return nil } } else { print("Usergrid Error: fileURL parameter must be a file URL.") - self.init(filename:"",data:NSData(),contentType:"") + self.init(filename:"",data:Data(),contentType:"") return nil } } @@ -151,21 +151,21 @@ public class UsergridAsset: NSObject, NSCoding { - returns: A decoded `UsergridUser` object. */ required public init?(coder aDecoder: NSCoder) { - guard let filename = aDecoder.decodeObjectForKey("filename") as? String, - let assetData = aDecoder.decodeObjectForKey("data") as? NSData, - let contentType = aDecoder.decodeObjectForKey("contentType") as? String + guard let filename = aDecoder.decodeObject(forKey: "filename") as? String, + let assetData = aDecoder.decodeObject(forKey: "data") as? Data, + let contentType = aDecoder.decodeObject(forKey: "contentType") as? String else { self.filename = "" self.contentType = "" self.originalLocation = nil - self.data = NSData() + self.data = Data() super.init() return nil } self.filename = filename self.data = assetData self.contentType = contentType - self.originalLocation = aDecoder.decodeObjectForKey("originalLocation") as? String + self.originalLocation = aDecoder.decodeObject(forKey: "originalLocation") as? String super.init() } @@ -174,16 +174,17 @@ public class UsergridAsset: NSObject, NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.filename, forKey: "filename") - aCoder.encodeObject(self.data, forKey: "data") - aCoder.encodeObject(self.contentType, forKey: "contentType") - aCoder.encodeObject(self.originalLocation, forKey: "originalLocation") + public func encode(with aCoder: NSCoder) { + aCoder.encode(self.filename, forKey: "filename") + aCoder.encode(self.data, forKey: "data") + aCoder.encode(self.contentType, forKey: "contentType") + aCoder.encode(self.originalLocation, forKey: "originalLocation") } - private static func MIMEType(fileURL: NSURL) -> String? { - if let pathExtension = fileURL.pathExtension { - if let UTIRef = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil) { + private static func MIMEType(_ fileURL: URL) -> String? { + let pathExtension = fileURL.pathExtension + if !pathExtension.isEmpty { + if let UTIRef = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil) { let UTI = UTIRef.takeUnretainedValue() UTIRef.release() if let MIMETypeRef = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType) { @@ -195,4 +196,4 @@ public class UsergridAsset: NSObject, NSCoding { } return nil } -} \ No newline at end of file +} diff --git a/Source/UsergridAssetRequestWrapper.swift b/Source/UsergridAssetRequestWrapper.swift index d715652..37b5288 100644 --- a/Source/UsergridAssetRequestWrapper.swift +++ b/Source/UsergridAssetRequestWrapper.swift @@ -26,23 +26,23 @@ import Foundation -typealias UsergridAssetRequestWrapperCompletionBlock = (requestWrapper:UsergridAssetRequestWrapper) -> Void +typealias UsergridAssetRequestWrapperCompletionBlock = (_ requestWrapper:UsergridAssetRequestWrapper) -> Void final class UsergridAssetRequestWrapper { - weak var session: NSURLSession? - let sessionTask: NSURLSessionTask + weak var session: URLSession? + let sessionTask: URLSessionTask - var response: NSURLResponse? - var responseData: NSData? + var response: URLResponse? + var responseData: Data? var error: NSError? var progress: UsergridAssetRequestProgress? let completion: UsergridAssetRequestWrapperCompletionBlock - init(session:NSURLSession?, sessionTask:NSURLSessionTask, progress:UsergridAssetRequestProgress?, completion:UsergridAssetRequestWrapperCompletionBlock) { + init(session:URLSession?, sessionTask:URLSessionTask, progress:UsergridAssetRequestProgress?, completion:UsergridAssetRequestWrapperCompletionBlock) { self.session = session self.sessionTask = sessionTask self.progress = progress self.completion = completion } -} \ No newline at end of file +} diff --git a/Source/UsergridAuth.swift b/Source/UsergridAuth.swift index e87e9c1..228a4f4 100644 --- a/Source/UsergridAuth.swift +++ b/Source/UsergridAuth.swift @@ -27,10 +27,10 @@ import Foundation /// The completion block used in `UsergridAppAuth` authentication methods. -public typealias UsergridAppAuthCompletionBlock = (auth:UsergridAppAuth?, error: UsergridResponseError?) -> Void +public typealias UsergridAppAuthCompletionBlock = (_ auth:UsergridAppAuth?, _ error: UsergridResponseError?) -> Void /// The completion block used in `UsergridUserAuth` authentication methods. -public typealias UsergridUserAuthCompletionBlock = (auth:UsergridUserAuth?, user:UsergridUser?, error: UsergridResponseError?) -> Void +public typealias UsergridUserAuthCompletionBlock = (_ auth:UsergridUserAuth?, _ user:UsergridUser?, _ error: UsergridResponseError?) -> Void /** The `UsergridAuth` class functions to create and store authentication information used by Usergrid. @@ -45,7 +45,7 @@ public class UsergridAuth : NSObject, NSCoding { public var accessToken : String? /// The expires at date, if this `UsergridAuth` was authorized successfully and their was a expires in time stamp within the token response. - public var expiry : NSDate? + public var expiry : Date? /// Determines if an access token exists. public var hasToken: Bool { return self.accessToken != nil } @@ -68,7 +68,7 @@ public class UsergridAuth : NSObject, NSCoding { } /// The credentials dictionary. Subclasses must override this method and provide an actual dictionary containing the credentials to send with requests. - var credentialsJSONDict: [String:AnyObject] { + var credentialsJSONDict: [String:Any] { return [:] } @@ -79,7 +79,7 @@ public class UsergridAuth : NSObject, NSCoding { - returns: A new instance of `UsergridAuth`. */ - override private init() { + override fileprivate init() { super.init() } @@ -91,7 +91,7 @@ public class UsergridAuth : NSObject, NSCoding { - returns: A new instance of `UsergridAuth` */ - public init(accessToken:String, expiry:NSDate? = nil) { + public init(accessToken:String, expiry:Date? = nil) { self.usingToken = true self.accessToken = accessToken self.expiry = expiry @@ -107,8 +107,8 @@ public class UsergridAuth : NSObject, NSCoding { - returns: A decoded `UsergridAuth` object. */ required public init?(coder aDecoder: NSCoder) { - self.accessToken = aDecoder.decodeObjectForKey("accessToken") as? String - self.expiry = aDecoder.decodeObjectForKey("expiry") as? NSDate + self.accessToken = aDecoder.decodeObject(forKey: "accessToken") as? String + self.expiry = aDecoder.decodeObject(forKey: "expiry") as? Date } /** @@ -116,12 +116,12 @@ public class UsergridAuth : NSObject, NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { + public func encode(with aCoder: NSCoder) { if let accessToken = self.accessToken { - aCoder.encodeObject(accessToken, forKey: "accessToken") + aCoder.encode(accessToken, forKey: "accessToken") } if let expiresAt = self.expiry { - aCoder.encodeObject(expiresAt, forKey: "expiry") + aCoder.encode(expiresAt, forKey: "expiry") } } @@ -148,7 +148,7 @@ public class UsergridUserAuth : UsergridAuth { private let password: String /// The credentials dictionary constructed with the `UsergridUserAuth`'s `username` and `password`. - override var credentialsJSONDict: [String:AnyObject] { + override var credentialsJSONDict: [String:Any] { return ["grant_type":"password", "username":self.username, "password":self.password] @@ -180,8 +180,8 @@ public class UsergridUserAuth : UsergridAuth { - returns: A decoded `UsergridUserAuth` object. */ required public init?(coder aDecoder: NSCoder) { - guard let username = aDecoder.decodeObjectForKey("username") as? String, - password = aDecoder.decodeObjectForKey("password") as? String + guard let username = aDecoder.decodeObject(forKey: "username") as? String, + let password = aDecoder.decodeObject(forKey: "password") as? String else { self.username = "" self.password = "" @@ -199,10 +199,10 @@ public class UsergridUserAuth : UsergridAuth { - parameter aCoder: The encoder. */ - override public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.username, forKey: "username") - aCoder.encodeObject(self.password, forKey: "password") - super.encodeWithCoder(aCoder) + override public func encode(with aCoder: NSCoder) { + aCoder.encode(self.username, forKey: "username") + aCoder.encode(self.password, forKey: "password") + super.encode(with: aCoder) } } @@ -218,7 +218,7 @@ public class UsergridAppAuth : UsergridAuth { private let clientSecret: String /// The credentials dictionary constructed with the `UsergridAppAuth`'s `clientId` and `clientSecret`. - override var credentialsJSONDict: [String:AnyObject] { + override var credentialsJSONDict: [String:Any] { return ["grant_type":"client_credentials", "client_id":self.clientId, "client_secret":self.clientSecret] @@ -250,8 +250,8 @@ public class UsergridAppAuth : UsergridAuth { - returns: A decoded `UsergridAppAuth` object. */ required public init?(coder aDecoder: NSCoder) { - guard let clientId = aDecoder.decodeObjectForKey("clientId") as? String, - let clientSecret = aDecoder.decodeObjectForKey("clientSecret") as? String + guard let clientId = aDecoder.decodeObject(forKey: "clientId") as? String, + let clientSecret = aDecoder.decodeObject(forKey: "clientSecret") as? String else { self.clientId = "" self.clientSecret = "" @@ -268,9 +268,9 @@ public class UsergridAppAuth : UsergridAuth { - parameter aCoder: The encoder. */ - override public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.clientId, forKey: "clientId") - aCoder.encodeObject(self.clientSecret, forKey: "clientSecret") - super.encodeWithCoder(aCoder) + override public func encode(with aCoder: NSCoder) { + aCoder.encode(self.clientId, forKey: "clientId") + aCoder.encode(self.clientSecret, forKey: "clientSecret") + super.encode(with: aCoder) } -} \ No newline at end of file +} diff --git a/Source/UsergridClient.swift b/Source/UsergridClient.swift index 2b3eb6b..81fe3a6 100644 --- a/Source/UsergridClient.swift +++ b/Source/UsergridClient.swift @@ -143,7 +143,7 @@ public class UsergridClient: NSObject, NSCoding { - returns: A decoded `UsergridClient` object. */ public required init?(coder aDecoder: NSCoder) { - guard let config = aDecoder.decodeObjectForKey("config") as? UsergridClientConfig + guard let config = aDecoder.decodeObject(forKey: "config") as? UsergridClientConfig else { self.config = UsergridClientConfig(orgId: "", appId: "") super.init() @@ -153,7 +153,7 @@ public class UsergridClient: NSObject, NSCoding { self.config = config super.init() - if let currentUser = aDecoder.decodeObjectForKey("currentUser") as? UsergridUser { + if let currentUser = aDecoder.decodeObject(forKey: "currentUser") as? UsergridUser { self.currentUser = currentUser } else { if persistCurrentUserInKeychain { @@ -168,9 +168,9 @@ public class UsergridClient: NSObject, NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.config, forKey: "config") - aCoder.encodeObject(self.currentUser, forKey: "currentUser") + public func encode(with aCoder: NSCoder) { + aCoder.encode(self.config, forKey: "config") + aCoder.encode(self.currentUser, forKey: "currentUser") } // MARK: - Device Registration/Push Notifications - @@ -182,7 +182,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter notifierID: The Usergrid notifier ID. - parameter completion: The completion block. */ - public func applyPushToken(pushToken: NSData, notifierID: String, completion: UsergridResponseCompletion? = nil) { + public func applyPushToken(_ pushToken: Data, notifierID: String, completion: UsergridResponseCompletion? = nil) { self.applyPushToken(UsergridDevice.sharedDevice, pushToken: pushToken, notifierID: notifierID, completion: completion) } @@ -194,13 +194,13 @@ public class UsergridClient: NSObject, NSCoding { - parameter notifierID: The Usergrid notifier ID. - parameter completion: The completion block. */ - public func applyPushToken(device: UsergridDevice, pushToken: NSData, notifierID: String, completion: UsergridResponseCompletion? = nil) { + public func applyPushToken(_ device: UsergridDevice, pushToken: Data, notifierID: String, completion: UsergridResponseCompletion? = nil) { device.applyPushToken(pushToken, notifierID: notifierID) self.PUT("devices", jsonBody: device.jsonObjectValue) { (response) in if let responseEntity = response.entity { device.copyInternalsFromEntity(responseEntity) } - completion?(response: response) + completion?(response) } } @@ -226,17 +226,17 @@ public class UsergridClient: NSObject, NSCoding { self.tempAuth = nil } else { switch(self.authMode) { - case .User: - if let userAuth = self.userAuth where userAuth.isValid { + case .user: + if let userAuth = self.userAuth , userAuth.isValid { usergridAuth = userAuth } break - case .App: - if let appAuth = self.appAuth where appAuth.isValid { + case .app: + if let appAuth = self.appAuth , appAuth.isValid { usergridAuth = appAuth } break - case .None: + case .none: usergridAuth = nil break } @@ -253,7 +253,7 @@ public class UsergridClient: NSObject, NSCoding { - returns: `Self` */ - public func usingAuth(auth:UsergridAuth) -> Self { + public func usingAuth(_ auth:UsergridAuth) -> Self { self.tempAuth = auth return self } @@ -267,7 +267,7 @@ public class UsergridClient: NSObject, NSCoding { - returns: `Self` */ - public func usingToken(token:String) -> Self { + public func usingToken(_ token:String) -> Self { self.tempAuth = UsergridAuth(accessToken: token) return self } @@ -277,11 +277,11 @@ public class UsergridClient: NSObject, NSCoding { - parameter completion: The completion block that will be called after authentication has completed. */ - public func authenticateApp(completion: UsergridAppAuthCompletionBlock? = nil) { + public func authenticateApp(_ completion: UsergridAppAuthCompletionBlock? = nil) { guard let appAuth = self.appAuth else { let error = UsergridResponseError(errorName: "Invalid UsergridAppAuth.", errorDescription: "UsergridClient's appAuth is nil.") - completion?(auth: nil, error: error) + completion?(nil, error) return } self.authenticateApp(appAuth, completion: completion) @@ -293,16 +293,16 @@ public class UsergridClient: NSObject, NSCoding { - parameter auth: The `UsergridAppAuth` that will be authenticated. - parameter completion: The completion block that will be called after authentication has completed. */ - public func authenticateApp(appAuth: UsergridAppAuth, completion: UsergridAppAuthCompletionBlock? = nil) { - let request = UsergridRequest(method: .Post, + public func authenticateApp(_ appAuth: UsergridAppAuth, completion: UsergridAppAuthCompletionBlock? = nil) { + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: ["token"], auth: self.authForRequests(), - jsonBody: appAuth.credentialsJSONDict) + jsonBody: appAuth.credentialsJSONDict as Any?) _requestManager.performAppAuthRequest(appAuth, request: request) { [weak self] (auth,error) in self?.appAuth = auth - completion?(auth: auth, error: error) + completion?(auth, error) } } @@ -312,7 +312,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter auth: The `UsergridUserAuth` that will be authenticated. - parameter completion: The completion block that will be called after authentication has completed. */ - public func authenticateUser(userAuth: UsergridUserAuth, completion: UsergridUserAuthCompletionBlock? = nil) { + public func authenticateUser(_ userAuth: UsergridUserAuth, completion: UsergridUserAuthCompletionBlock? = nil) { self.authenticateUser(userAuth, setAsCurrentUser:true, completion:completion) } @@ -323,17 +323,17 @@ public class UsergridClient: NSObject, NSCoding { - parameter setAsCurrentUser: If the authenticated user should be set as the `UsergridClient.currentUser`. - parameter completion: The completion block that will be called after authentication has completed. */ - public func authenticateUser(userAuth: UsergridUserAuth, setAsCurrentUser: Bool, completion: UsergridUserAuthCompletionBlock? = nil) { - let request = UsergridRequest(method: .Post, + public func authenticateUser(_ userAuth: UsergridUserAuth, setAsCurrentUser: Bool, completion: UsergridUserAuthCompletionBlock? = nil) { + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: ["token"], auth: self.authForRequests(), - jsonBody: userAuth.credentialsJSONDict) + jsonBody: userAuth.credentialsJSONDict as Any?) _requestManager.performUserAuthRequest(userAuth, request: request) { [weak self] (auth,user,error) in if setAsCurrentUser { self?.currentUser = user } - completion?(auth: auth, user: user, error: error) + completion?(auth, user, error) } } @@ -345,21 +345,21 @@ public class UsergridClient: NSObject, NSCoding { - parameter new: The new password. - parameter completion: The optional completion block. */ - public func resetPassword(user: UsergridUser, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { + public func resetPassword(_ user: UsergridUser, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { guard let usernameOrEmail = user.usernameOrEmail else { - completion?(error: UsergridResponseError(errorName: "Error resetting password.", errorDescription: "The UsergridUser object must contain a valid username or email to reset the password."), didSucceed: false) + completion?(UsergridResponseError(errorName: "Error resetting password.", errorDescription: "The UsergridUser object must contain a valid username or email to reset the password."), false) return } - let request = UsergridRequest(method: .Put, + let request = UsergridRequest(method: .put, baseUrl: self.clientAppURL, paths: ["users",usernameOrEmail,"password"], auth: self.authForRequests(), jsonBody:["oldpassword":old,"newpassword":new]) _requestManager.performRequest(request, completion: { (response) -> Void in - completion?(error: response.error, didSucceed: response.statusCode == 200) + completion?(response.error, response.statusCode == 200) }) } @@ -368,11 +368,11 @@ public class UsergridClient: NSObject, NSCoding { - parameter completion: The completion block that will be called after logout has completed. */ - public func logoutCurrentUser(completion:UsergridResponseCompletion? = nil) { + public func logoutCurrentUser(_ completion:UsergridResponseCompletion? = nil) { guard let uuidOrUsername = self.currentUser?.uuidOrUsername, let token = self.currentUser?.auth?.accessToken else { - completion?(response:UsergridResponse(client: self, errorName: "Logout Failed.", errorDescription: "UsergridClient's currentUser is not valid.")) + completion?(UsergridResponse(client: self, errorName: "Logout Failed.", errorDescription: "UsergridClient's currentUser is not valid.")) return } @@ -384,7 +384,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter completion: The completion block that will be called after logout has completed. */ - public func logoutUserAllTokens(uuidOrUsername:String, completion:UsergridResponseCompletion? = nil) { + public func logoutUserAllTokens(_ uuidOrUsername:String, completion:UsergridResponseCompletion? = nil) { self.logoutUser(uuidOrUsername, token: nil, completion: completion) } @@ -395,7 +395,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter completion: The completion block that will be called after logout has completed. */ - public func logoutUser(uuidOrUsername:String, token:String?, completion:UsergridResponseCompletion? = nil) { + public func logoutUser(_ uuidOrUsername:String, token:String?, completion:UsergridResponseCompletion? = nil) { var paths = ["users",uuidOrUsername] var queryParams: [String: String]? if let accessToken = token { @@ -404,7 +404,7 @@ public class UsergridClient: NSObject, NSCoding { } else { paths.append("revoketokens") } - let request = UsergridRequest(method: .Put, + let request = UsergridRequest(method: .put, baseUrl: self.clientAppURL, paths: paths, auth: self.authForRequests(), @@ -417,7 +417,7 @@ public class UsergridClient: NSObject, NSCoding { self.currentUser = nil } } - completion?(response: response) + completion?(response) } } @@ -431,7 +431,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter request: The `UsergridRequest` object to send. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func sendRequest(request:UsergridRequest, completion:UsergridResponseCompletion? = nil) { + public func sendRequest(_ request:UsergridRequest, completion:UsergridResponseCompletion? = nil) { _requestManager.performRequest(request, completion: completion) } @@ -444,8 +444,8 @@ public class UsergridClient: NSObject, NSCoding { - parameter uuidOrName: The UUID or name of the `UsergridEntity`. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func GET(type: String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Get, baseUrl: self.clientAppURL, paths: [type,uuidOrName], auth:self.authForRequests()) + public func GET(_ type: String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .get, baseUrl: self.clientAppURL, paths: [type,uuidOrName], auth:self.authForRequests()) self.sendRequest(request, completion: completion) } @@ -455,8 +455,8 @@ public class UsergridClient: NSObject, NSCoding { - 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()) + 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) } @@ -466,14 +466,14 @@ public class UsergridClient: NSObject, NSCoding { - 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(query: UsergridQuery, queryCompletion: 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.")) + queryCompletion?(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()) + let request = UsergridRequest(method: .get, baseUrl: self.clientAppURL, paths: [type], query: query, auth: self.authForRequests()) self.sendRequest(request, completion: queryCompletion) } @@ -487,13 +487,13 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionary to update the `UsergridEntity` with. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func PUT(type: String, uuidOrName: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Put, + public func PUT(_ type: String, uuidOrName: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .put, baseUrl: self.clientAppURL, paths: [type,uuidOrName], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBody) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBody as Any?) self.sendRequest(request, completion: completion) } @@ -503,7 +503,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter entity: The `UsergridEntity` to update. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func PUT(entity: UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func PUT(_ entity: UsergridEntity, completion: UsergridResponseCompletion? = nil) { PUT(entity.type, jsonBody: entity.jsonObjectValue, completion: completion) } @@ -516,18 +516,18 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionary to update the `UsergridEntity` with. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func PUT(type: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { - guard let uuidOrName = (jsonBody[UsergridEntityProperties.UUID.stringValue] ?? jsonBody[UsergridEntityProperties.Name.stringValue]) as? String + public func PUT(_ type: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { + guard let uuidOrName = (jsonBody[UsergridEntityProperties.uuid.stringValue] ?? jsonBody[UsergridEntityProperties.name.stringValue]) as? String else { - completion?(response: UsergridResponse(client:self, errorName: "jsonBody not valid.", errorDescription: "The `jsonBody` must contain a valid value for either `uuid` or `name`.")) + completion?(UsergridResponse(client:self, errorName: "jsonBody not valid.", errorDescription: "The `jsonBody` must contain a valid value for either `uuid` or `name`.")) return } - let request = UsergridRequest(method: .Put, + let request = UsergridRequest(method: .put, baseUrl: self.clientAppURL, paths: [type,uuidOrName], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBody) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBody as Any?) self.sendRequest(request, completion: completion) } @@ -540,19 +540,19 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionary to update with. - parameter queryCompletion: The optional completion block that will be called once the request has completed. */ - public func PUT(query: UsergridQuery, jsonBody:[String:AnyObject], queryCompletion: UsergridResponseCompletion? = nil) { + public func PUT(_ query: UsergridQuery, jsonBody:[String:Any], queryCompletion: UsergridResponseCompletion? = nil) { guard let type = query.collectionName else { - queryCompletion?(response: UsergridResponse(client:self, errorName: "Query collection name invalid.", errorDescription: "Query is missing a collection name.")) + queryCompletion?(UsergridResponse(client:self, errorName: "Query collection name invalid.", errorDescription: "Query is missing a collection name.")) return } - let request = UsergridRequest(method: .Put, + let request = UsergridRequest(method: .put, baseUrl: self.clientAppURL, paths: [type], query: query, auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBody) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBody as Any?) self.sendRequest(request, completion: queryCompletion) } @@ -563,13 +563,13 @@ public class UsergridClient: NSObject, NSCoding { - parameter entity: The `UsergridEntity` to create. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func POST(entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Post, + public func POST(_ entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: [entity.type], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: entity.jsonObjectValue) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: entity.jsonObjectValue as Any?) self.sendRequest(request, completion: completion) } @@ -581,10 +581,10 @@ public class UsergridClient: NSObject, NSCoding { - parameter entities: The `UsergridEntity` objects to create. - parameter entitiesCompletion: The optional completion block that will be called once the request has completed. */ - public func POST(entities:[UsergridEntity], entitiesCompletion: UsergridResponseCompletion? = nil) { + public func POST(_ entities:[UsergridEntity], entitiesCompletion: UsergridResponseCompletion? = nil) { guard let type = entities.first?.type else { - entitiesCompletion?(response: UsergridResponse(client:self, errorName: "No type found.", errorDescription: "The first entity in the array had no type found.")) + entitiesCompletion?(UsergridResponse(client:self, errorName: "No type found.", errorDescription: "The first entity in the array had no type found.")) return } POST(type, jsonBodies: entities.map { return ($0).jsonObjectValue }, completion: entitiesCompletion) @@ -597,13 +597,13 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionary to use when creating the `UsergridEntity`. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func POST(type: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Post, + public func POST(_ type: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: [type], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBody) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBody as Any?) self.sendRequest(request, completion: completion) } @@ -614,13 +614,13 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionaries to use when creating the `UsergridEntity` objects. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func POST(type: String, jsonBodies:[[String:AnyObject]], completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Post, + public func POST(_ type: String, jsonBodies:[[String:Any]], completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: [type], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBodies) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBodies as Any?) self.sendRequest(request, completion: completion) } @@ -632,15 +632,15 @@ public class UsergridClient: NSObject, NSCoding { - parameter jsonBody: The valid JSON body dictionary to use when creating the `UsergridEntity`. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func POST(type: String, name: String, jsonBody:[String:AnyObject], completion: UsergridResponseCompletion? = nil) { + public func POST(_ type: String, name: String, jsonBody:[String:Any], completion: UsergridResponseCompletion? = nil) { var jsonBodyWithName = jsonBody - jsonBodyWithName[UsergridEntityProperties.Name.stringValue] = name - let request = UsergridRequest(method: .Post, + jsonBodyWithName[UsergridEntityProperties.name.stringValue] = name + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: [type], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER, - jsonBody: jsonBodyWithName) + headers: UsergridRequest.jsonHeaderContentType(), + jsonBody: jsonBodyWithName as Any?) self.sendRequest(request, completion: completion) } @@ -655,10 +655,10 @@ public class UsergridClient: NSObject, NSCoding { - parameter entity: The `UsergridEntity` to delete. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func DELETE(entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func DELETE(_ entity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { guard let uuidOrName = entity.uuidOrName else { - completion?(response: UsergridResponse(client:self, errorName: "No UUID or name found.", errorDescription: "The entity object must have a `uuid` or `name` assigned.")) + completion?(UsergridResponse(client:self, errorName: "No UUID or name found.", errorDescription: "The entity object must have a `uuid` or `name` assigned.")) return } @@ -673,19 +673,19 @@ public class UsergridClient: NSObject, NSCoding { - parameter query: The query to use when filtering what entities to delete. - parameter queryCompletion: The optional completion block that will be called once the request has completed. */ - public func DELETE(query:UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { + public func DELETE(_ query:UsergridQuery, queryCompletion: UsergridResponseCompletion? = nil) { guard let type = query.collectionName else { - queryCompletion?(response: UsergridResponse(client:self, errorName: "Query collection name invalid.", errorDescription: "Query is missing a collection name.")) + queryCompletion?(UsergridResponse(client:self, errorName: "Query collection name invalid.", errorDescription: "Query is missing a collection name.")) return } - let request = UsergridRequest(method: .Delete, + let request = UsergridRequest(method: .delete, baseUrl: self.clientAppURL, paths: [type], query: query, auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER) + headers: UsergridRequest.jsonHeaderContentType()) self.sendRequest(request, completion: queryCompletion) } @@ -696,12 +696,12 @@ public class UsergridClient: NSObject, NSCoding { - parameter uuidOrName: The UUID or name of the `UsergridEntity`. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func DELETE(type:String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Delete, + public func DELETE(_ type:String, uuidOrName: String, completion: UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .delete, baseUrl: self.clientAppURL, paths: [type,uuidOrName], auth: self.authForRequests(), - headers: UsergridRequest.JSON_CONTENT_TYPE_HEADER) + headers: UsergridRequest.jsonHeaderContentType()) self.sendRequest(request, completion: completion) } @@ -715,11 +715,11 @@ public class UsergridClient: NSObject, NSCoding { - parameter to: The `UsergridEntity` which is connected. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func connect(entity:UsergridEntity, relationship:String, to:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func connect(_ entity:UsergridEntity, relationship:String, to:UsergridEntity, completion: UsergridResponseCompletion? = nil) { guard let entityID = entity.uuidOrName, let toID = to.uuidOrName else { - completion?(response: UsergridResponse(client: self, errorName: "Invalid Entity Connection Attempt.", errorDescription: "One or both entities that are attempting to be connected do not contain a valid UUID or Name property.")) + completion?(UsergridResponse(client: self, errorName: "Invalid Entity Connection Attempt.", errorDescription: "One or both entities that are attempting to be connected do not contain a valid UUID or Name property.")) return } self.connect(entity.type, entityID: entityID, relationship: relationship, toType: to.type, toID: toID, completion: completion) @@ -735,7 +735,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter toName: The name of the entity you are connecting to. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func connect(entityType:String, entityID:String, relationship:String, toType:String, toName: String, completion: UsergridResponseCompletion? = nil) { + public func connect(_ entityType:String, entityID:String, relationship:String, toType:String, toName: String, completion: UsergridResponseCompletion? = nil) { self.connect(entityType, entityID: entityID, relationship: relationship, toType: toType, toID: toName, completion: completion) } @@ -749,14 +749,14 @@ public class UsergridClient: NSObject, NSCoding { - parameter toID: The UUID of the entity you are connecting to. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func connect(entityType:String, entityID:String, relationship:String, toType:String?, toID: String, completion: UsergridResponseCompletion? = nil) { + public func connect(_ entityType:String, entityID:String, relationship:String, toType:String?, toID: String, completion: UsergridResponseCompletion? = nil) { var paths = [entityType,entityID,relationship] if let toType = toType { paths.append(toType) } paths.append(toID) - let request = UsergridRequest(method: .Post, + let request = UsergridRequest(method: .post, baseUrl: self.clientAppURL, paths: paths, auth: self.authForRequests()) @@ -771,11 +771,11 @@ public class UsergridClient: NSObject, NSCoding { - parameter from: The `UsergridEntity` which is connected. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func disconnect(entity:UsergridEntity, relationship:String, from:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func disconnect(_ entity:UsergridEntity, relationship:String, from:UsergridEntity, completion: UsergridResponseCompletion? = nil) { guard let entityID = entity.uuidOrName, let fromID = from.uuidOrName else { - completion?(response: UsergridResponse(client: self, errorName: "Invalid Entity Disconnect Attempt.", errorDescription: "The connecting and connected entities must have a `uuid` or `name` assigned.")) + completion?(UsergridResponse(client: self, errorName: "Invalid Entity Disconnect Attempt.", errorDescription: "The connecting and connected entities must have a `uuid` or `name` assigned.")) return } @@ -792,7 +792,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter fromName: The name of the entity you are disconnecting from. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func disconnect(entityType:String, entityID:String, relationship:String, fromType:String, fromName: String, completion: UsergridResponseCompletion? = nil) { + public func disconnect(_ entityType:String, entityID:String, relationship:String, fromType:String, fromName: String, completion: UsergridResponseCompletion? = nil) { self.disconnect(entityType, entityID: entityID, relationship: relationship, fromType: fromType, fromID: fromName, completion: completion) } @@ -806,7 +806,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter toID: The UUID of the entity you are disconnecting from. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func disconnect(entityType:String, entityID:String, relationship:String, fromType:String?, fromID: String, completion: UsergridResponseCompletion? = nil) { + public func disconnect(_ entityType:String, entityID:String, relationship:String, fromType:String?, fromID: String, completion: UsergridResponseCompletion? = nil) { var paths = [entityType,entityID,relationship] if let fromType = fromType { @@ -814,7 +814,7 @@ public class UsergridClient: NSObject, NSCoding { } paths.append(fromID) - let request = UsergridRequest(method: .Delete, + let request = UsergridRequest(method: .delete, baseUrl: self.clientAppURL, paths: paths, auth: self.authForRequests()) @@ -829,10 +829,10 @@ public class UsergridClient: NSObject, NSCoding { - parameter query: The optional query. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func getConnections(direction:UsergridDirection, entity:UsergridEntity, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public func getConnections(_ direction:UsergridDirection, entity:UsergridEntity, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { guard let uuidOrName = entity.uuidOrName else { - completion?(response: UsergridResponse(client: self, errorName: "Invalid Entity Get Connections Attempt.", errorDescription: "The entity must have a `uuid` or `name` assigned.")) + completion?(UsergridResponse(client: self, errorName: "Invalid Entity Get Connections Attempt.", errorDescription: "The entity must have a `uuid` or `name` assigned.")) return } self.getConnections(direction, type: entity.type, uuidOrName: uuidOrName, relationship: relationship, query:query, completion: completion) @@ -848,8 +848,8 @@ public class UsergridClient: NSObject, NSCoding { - parameter query: The optional query. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func getConnections(direction:UsergridDirection, type:String, uuidOrName:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Get, + public func getConnections(_ direction:UsergridDirection, type:String, uuidOrName:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .get, baseUrl: self.clientAppURL, paths: [type, uuidOrName, direction.connectionValue, relationship], query: query, @@ -866,8 +866,8 @@ public class UsergridClient: NSObject, NSCoding { - parameter query: The optional query. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func getConnections(direction:UsergridDirection, uuid:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { - let request = UsergridRequest(method: .Get, + public func getConnections(_ direction:UsergridDirection, uuid:String, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + let request = UsergridRequest(method: .get, baseUrl: self.clientAppURL, paths: [uuid, direction.connectionValue, relationship], query: query, @@ -885,7 +885,7 @@ public class UsergridClient: NSObject, NSCoding { - parameter progress: The optional progress block that will be called to update the progress of the upload. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func uploadAsset(entity:UsergridEntity, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { + public func uploadAsset(_ entity:UsergridEntity, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { let assetRequest = UsergridAssetUploadRequest(baseUrl: self.clientAppURL, paths: [entity.type,entity.uuidOrName!], auth: self.authForRequests(), @@ -898,7 +898,7 @@ public class UsergridClient: NSObject, NSCoding { entity.fileMetaData = responseEntityFileMetaData } } - completion?(asset: asset, response: response) + completion?(asset, response) } } @@ -910,14 +910,14 @@ public class UsergridClient: NSObject, NSCoding { - parameter progress: The optional progress block that will be called to update the progress of the download. - parameter completion: The optional completion block that will be called once the request has completed. */ - public func downloadAsset(entity:UsergridEntity, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { + public func downloadAsset(_ entity:UsergridEntity, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { guard entity.hasAsset else { - completion?(asset: nil, error: UsergridResponseError(errorName: "Download asset failed.", errorDescription: "Entity does not have an asset attached.")) + completion?(nil, UsergridResponseError(errorName: "Download asset failed.", errorDescription: "Entity does not have an asset attached.")) return } - let downloadAssetRequest = UsergridRequest(method: .Get, + let downloadAssetRequest = UsergridRequest(method: .get, baseUrl: self.clientAppURL, paths: [entity.type,entity.uuidOrName!], auth: self.authForRequests(), @@ -925,7 +925,7 @@ public class UsergridClient: NSObject, NSCoding { _requestManager.performAssetDownload(contentType, usergridRequest: downloadAssetRequest, progress: progress, completion: { (asset, error) -> Void in entity.asset = asset - completion?(asset: asset, error: error) + completion?(asset, error) }) } } diff --git a/Source/UsergridClientConfig.swift b/Source/UsergridClientConfig.swift index 64ebd4f..9d1e057 100644 --- a/Source/UsergridClientConfig.swift +++ b/Source/UsergridClientConfig.swift @@ -45,7 +45,7 @@ public class UsergridClientConfig : NSObject, NSCoding { public var baseUrl: String = UsergridClient.DEFAULT_BASE_URL /// The `UsergridAuthMode` value used to determine what type of token will be sent, if any. - public var authMode: UsergridAuthMode = .User + public var authMode: UsergridAuthMode = .user /// Whether or not the `UsergridClient` current user will be saved and restored from the keychain. public var persistCurrentUserInKeychain: Bool = true @@ -115,9 +115,9 @@ public class UsergridClientConfig : NSObject, NSCoding { - returns: A decoded `UsergridUser` object. */ public required init?(coder aDecoder: NSCoder) { - guard let appId = aDecoder.decodeObjectForKey("appId") as? String, - let orgId = aDecoder.decodeObjectForKey("orgId") as? String, - let baseUrl = aDecoder.decodeObjectForKey("baseUrl") as? String + guard let appId = aDecoder.decodeObject(forKey: "appId") as? String, + let orgId = aDecoder.decodeObject(forKey: "orgId") as? String, + let baseUrl = aDecoder.decodeObject(forKey: "baseUrl") as? String else { self.appId = "" self.orgId = "" @@ -127,9 +127,9 @@ public class UsergridClientConfig : NSObject, NSCoding { self.appId = appId self.orgId = orgId self.baseUrl = baseUrl - self.appAuth = aDecoder.decodeObjectForKey("appAuth") as? UsergridAppAuth - self.persistCurrentUserInKeychain = aDecoder.decodeBoolForKey("persistCurrentUserInKeychain") ?? true - self.authMode = UsergridAuthMode(rawValue:aDecoder.decodeIntegerForKey("authMode")) ?? .None + self.appAuth = aDecoder.decodeObject(forKey: "appAuth") as? UsergridAppAuth + self.persistCurrentUserInKeychain = aDecoder.decodeBool(forKey: "persistCurrentUserInKeychain") + self.authMode = (UsergridAuthMode(rawValue:aDecoder.decodeInteger(forKey: "authMode")) ?? .none)! super.init() } @@ -138,12 +138,12 @@ public class UsergridClientConfig : NSObject, NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.appId, forKey: "appId") - 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.authMode.rawValue, forKey: "authMode") + public func encode(with aCoder: NSCoder) { + aCoder.encode(self.appId, forKey: "appId") + aCoder.encode(self.orgId, forKey: "orgId") + aCoder.encode(self.baseUrl, forKey: "baseUrl") + aCoder.encode(self.appAuth, forKey: "appAuth") + aCoder.encode(self.persistCurrentUserInKeychain, forKey: "persistCurrentUserInKeychain") + aCoder.encode(self.authMode.rawValue, forKey: "authMode") } } diff --git a/Source/UsergridDevice.swift b/Source/UsergridDevice.swift index 004c42c..5eb3850 100644 --- a/Source/UsergridDevice.swift +++ b/Source/UsergridDevice.swift @@ -47,13 +47,13 @@ public class UsergridDevice : UsergridEntity { // MARK: - Instance Properties - /// Property helper method for the `UsergridDevice` objects device model. - public var model: String { return super[UsergridDeviceProperties.Model.stringValue] as! String } + public var model: String { return super[UsergridDeviceProperties.model.stringValue] as! String } /// Property helper method for the `UsergridDevice` objects device platform. - public var platform: String { return super[UsergridDeviceProperties.Platform.stringValue] as! String } + public var platform: String { return super[UsergridDeviceProperties.platform.stringValue] as! String } /// Property helper method for the `UsergridDevice` objects device operating system version. - public var osVersion: String { return super[UsergridDeviceProperties.OSVersion.stringValue] as! String } + public var osVersion: String { return super[UsergridDeviceProperties.osVersion.stringValue] as! String } /// The shared instance of `UsergridDevice`. public static var sharedDevice: UsergridDevice = UsergridDevice.getOrCreateSharedDeviceFromKeychain() @@ -80,7 +80,7 @@ public class UsergridDevice : UsergridEntity { - returns: A new `UsergridDevice` object. */ - required public init(type:String, name:String? = nil, propertyDict:[String:AnyObject]? = nil) { + required public init(type:String, name:String? = nil, propertyDict:[String:Any]? = nil) { super.init(type: type, name: name, propertyDict: propertyDict) } @@ -102,8 +102,8 @@ public class UsergridDevice : UsergridEntity { - parameter aCoder: The encoder. */ - public override func encodeWithCoder(aCoder: NSCoder) { - super.encodeWithCoder(aCoder) + public override func encode(with aCoder: NSCoder) { + super.encode(with: aCoder) } /** @@ -113,7 +113,7 @@ public class UsergridDevice : UsergridEntity { - parameter completion: An optional completion block that, if successful, will contain the updated/saved `UsergridEntity` object. */ - public override func save(completion: UsergridResponseCompletion? = nil) { + public override func save(_ completion: UsergridResponseCompletion? = nil) { self.save(Usergrid.sharedInstance, completion: completion) } @@ -126,14 +126,14 @@ public class UsergridDevice : UsergridEntity { - parameter client: The client to use when saving. - parameter completion: An optional completion block that, if successful, will contain the updated/saved `UsergridEntity` object. */ - public override func save(client: UsergridClient, completion: UsergridResponseCompletion? = nil) { + public override func save(_ client: UsergridClient, completion: UsergridResponseCompletion? = nil) { super.save(client) { (response) in if( response.ok ) { if( self == UsergridDevice.sharedDevice || self.isEqualToEntity(UsergridDevice.sharedDevice)) { UsergridDevice.saveSharedDeviceToKeychain() } } - completion?(response:response) + completion?(response) } } @@ -154,7 +154,7 @@ public class UsergridDevice : UsergridEntity { let uuid = usergridDevice["uuid"] ``` */ - override public subscript(propertyName: String) -> AnyObject? { + override public subscript(propertyName: String) -> Any? { get { return super[propertyName] } @@ -172,22 +172,22 @@ public class UsergridDevice : UsergridEntity { - 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 + public static func commonDevicePropertyDict() -> [String:Any] { + var commonDevicePropertyDict: [String:Any] = [:] + commonDevicePropertyDict[UsergridEntityProperties.type.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 + commonDevicePropertyDict[UsergridDeviceProperties.model.stringValue] = WKInterfaceDevice.current().model + commonDevicePropertyDict[UsergridDeviceProperties.platform.stringValue] = WKInterfaceDevice.current().systemName + commonDevicePropertyDict[UsergridDeviceProperties.osVersion.stringValue] = WKInterfaceDevice.current().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 + commonDevicePropertyDict[UsergridDeviceProperties.model.stringValue] = UIDevice.current.model + commonDevicePropertyDict[UsergridDeviceProperties.platform.stringValue] = UIDevice.current.systemName + commonDevicePropertyDict[UsergridDeviceProperties.osVersion.stringValue] = UIDevice.current.systemVersion #elseif os(OSX) - commonDevicePropertyDict[UsergridDeviceProperties.Model.stringValue] = "Mac" - commonDevicePropertyDict[UsergridDeviceProperties.Platform.stringValue] = "OSX" - commonDevicePropertyDict[UsergridDeviceProperties.OSVersion.stringValue] = NSProcessInfo.processInfo().operatingSystemVersionString + commonDevicePropertyDict[UsergridDeviceProperties.model.stringValue] = "Mac" + commonDevicePropertyDict[UsergridDeviceProperties.platform.stringValue] = "OSX" + commonDevicePropertyDict[UsergridDeviceProperties.osVersion.stringValue] = ProcessInfo.processInfo.operatingSystemVersionString #endif return commonDevicePropertyDict @@ -205,8 +205,8 @@ public class UsergridDevice : UsergridEntity { - parameter pushToken: The push token from Apple. - parameter notifierID: The notifier ID. */ - internal func applyPushToken(pushToken: NSData, notifierID: String) { - self[notifierID + USERGRID_NOTIFIER_ID_SUFFIX] = pushToken.description.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "") + internal func applyPushToken(_ pushToken: Data, notifierID: String) { + self[notifierID + USERGRID_NOTIFIER_ID_SUFFIX] = pushToken.description.trimmingCharacters(in: CharacterSet(charactersIn: "<>")).replacingOccurrences(of: " ", with: "") } } diff --git a/Source/UsergridEntity.swift b/Source/UsergridEntity.swift index dd169ed..7babee4 100644 --- a/Source/UsergridEntity.swift +++ b/Source/UsergridEntity.swift @@ -32,16 +32,16 @@ import CoreLocation `UsergridEntity` maintains a set of accessor properties for standard Usergrid schema properties (e.g. name, uuid), and supports helper methods for accessing any custom properties that might exist. */ -public class UsergridEntity: NSObject, NSCoding { +open class UsergridEntity: NSObject, NSCoding { static private var subclassMappings: [String:UsergridEntity.Type] = [UsergridUser.USER_ENTITY_TYPE:UsergridUser.self,UsergridDevice.DEVICE_ENTITY_TYPE:UsergridDevice.self] // MARK: - Instance Properties - /// The property dictionary that stores the properties values of the `UsergridEntity` object. - private var properties: [String : AnyObject] { + private var properties: [String : Any] { didSet { - if let fileMetaData = properties.removeValueForKey(UsergridFileMetaData.FILE_METADATA) as? [String:AnyObject] { + if let fileMetaData = properties.removeValue(forKey: UsergridFileMetaData.FILE_METADATA) as? [String:Any] { self.fileMetaData = UsergridFileMetaData(fileMetaDataJSON: fileMetaData) } else { self.fileMetaData = nil @@ -55,25 +55,25 @@ public class UsergridEntity: NSObject, NSCoding { /// The `UsergridFileMetaData` of this `UsergridEntity`. internal(set) public var fileMetaData : UsergridFileMetaData? - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.EntityType`. - public var type: String { return self.getEntitySpecificProperty(.EntityType) as! String } + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.type`. + public var type: String { return self.getEntitySpecificProperty(.type) as! String } - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.UUID`. - public var uuid: String? { return self.getEntitySpecificProperty(.UUID) as? String } + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.uuid`. + public var uuid: String? { return self.getEntitySpecificProperty(.uuid) as? String } - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.Name`. - public var name: String? { return self.getEntitySpecificProperty(.Name) as? String } + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.name`. + public var name: String? { return self.getEntitySpecificProperty(.name) as? String } - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.Created`. - public var created: NSDate? { return self.getEntitySpecificProperty(.Created) as? NSDate } + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.created`. + public var created: Date? { return self.getEntitySpecificProperty(.created) as? Date } - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.Modified`. - public var modified: NSDate? { return self.getEntitySpecificProperty(.Modified) as? NSDate } + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.modified`. + public var modified: Date? { return self.getEntitySpecificProperty(.modified) as? Date } - /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.Location`. + /// Property helper method for the `UsergridEntity` objects `UsergridEntityProperties.location`. public var location: CLLocation? { - get { return self.getEntitySpecificProperty(.Location) as? CLLocation } - set(newLocation) { self[UsergridEntityProperties.Location.stringValue] = newLocation } + get { return self.getEntitySpecificProperty(.location) as? CLLocation } + set(newLocation) { self[UsergridEntityProperties.location.stringValue] = newLocation } } /// Property helper method to get the UUID or name of the `UsergridEntity`. @@ -83,21 +83,21 @@ public class UsergridEntity: NSObject, NSCoding { public var isUser: Bool { return self is UsergridUser || self.type == UsergridUser.USER_ENTITY_TYPE } /// Tells you if there is an asset associated with this entity. - public var hasAsset: Bool { return self.asset != nil || self.fileMetaData?.contentLength > 0 } + public var hasAsset: Bool { return self.asset != nil || (self.fileMetaData?.contentLength ?? 0) > 0 } /// The JSON object value. - public var jsonObjectValue : [String:AnyObject] { return self.properties } + public var jsonObjectValue : [String:Any] { return self.properties } /// The string value. - public var stringValue : String { return NSString(data: try! NSJSONSerialization.dataWithJSONObject(self.jsonObjectValue, options: .PrettyPrinted), encoding: NSUTF8StringEncoding) as! String } + public var stringValue : String { return NSString(data: try! JSONSerialization.data(withJSONObject: self.jsonObjectValue, options: .prettyPrinted), encoding: String.Encoding.utf8.rawValue) as! String } /// The description. - public override var description : String { + open override var description : String { return "Properties of Entity: \(stringValue)." } /// The debug description. - public override var debugDescription : String { + open override var debugDescription : String { return "Properties of Entity: \(stringValue)." } @@ -112,28 +112,28 @@ public class UsergridEntity: NSObject, NSCoding { - returns: A new `UsergridEntity` object. */ - required public init(type:String, name:String? = nil, propertyDict:[String:AnyObject]? = nil) { + required public init(type:String, name:String? = nil, propertyDict:[String:Any]? = nil) { self.properties = propertyDict ?? [:] super.init() if self is UsergridUser { - self.properties[UsergridEntityProperties.EntityType.stringValue] = UsergridUser.USER_ENTITY_TYPE + self.properties[UsergridEntityProperties.type.stringValue] = UsergridUser.USER_ENTITY_TYPE } else if self is UsergridDevice { - self.properties[UsergridEntityProperties.EntityType.stringValue] = UsergridDevice.DEVICE_ENTITY_TYPE + self.properties[UsergridEntityProperties.type.stringValue] = UsergridDevice.DEVICE_ENTITY_TYPE } else { - self.properties[UsergridEntityProperties.EntityType.stringValue] = type + self.properties[UsergridEntityProperties.type.stringValue] = type } if let entityName = name { - self.properties[UsergridEntityProperties.Name.stringValue] = entityName + self.properties[UsergridEntityProperties.name.stringValue] = entityName } - if let fileMetaData = self.properties.removeValueForKey(UsergridFileMetaData.FILE_METADATA) as? [String:AnyObject] { + if let fileMetaData = self.properties.removeValue(forKey: UsergridFileMetaData.FILE_METADATA) as? [String:Any] { self.fileMetaData = UsergridFileMetaData(fileMetaDataJSON: fileMetaData) } } - internal func copyInternalsFromEntity(entity:UsergridEntity) { + internal func copyInternalsFromEntity(_ entity:UsergridEntity) { self.properties = entity.properties } @@ -143,7 +143,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter type: The type of the `Usergrid` object. - parameter toSubclass: The subclass `UsergridEntity.Type` to map it to. */ - public static func mapCustomType(type:String,toSubclass:UsergridEntity.Type) { + public static func mapCustomType(_ type:String,toSubclass:UsergridEntity.Type) { UsergridEntity.subclassMappings[type] = toSubclass } @@ -154,8 +154,8 @@ public class UsergridEntity: NSObject, NSCoding { - returns: A `UsergridEntity` object provided that the `type` key within the dictionay exists. Otherwise nil. */ - public class func entity(jsonDict jsonDict: [String:AnyObject]) -> UsergridEntity? { - guard let type = jsonDict[UsergridEntityProperties.EntityType.stringValue] as? String + public class func entity(jsonDict: [String:Any]) -> UsergridEntity? { + guard let type = jsonDict[UsergridEntityProperties.type.stringValue] as? String else { return nil } @@ -171,7 +171,7 @@ public class UsergridEntity: NSObject, NSCoding { - returns: An array of `UsergridEntity`. */ - public class func entities(jsonArray entitiesJSONArray: [[String:AnyObject]]) -> [UsergridEntity] { + public class func entities(jsonArray entitiesJSONArray: [[String:Any]]) -> [UsergridEntity] { var entityArray : [UsergridEntity] = [] for entityJSONDict in entitiesJSONArray { if let entity = UsergridEntity.entity(jsonDict:entityJSONDict) { @@ -191,15 +191,15 @@ public class UsergridEntity: NSObject, NSCoding { - returns: A decoded `UsergridUser` object. */ required public init?(coder aDecoder: NSCoder) { - guard let properties = aDecoder.decodeObjectForKey("properties") as? [String:AnyObject] + guard let properties = aDecoder.decodeObject(forKey: "properties") as? [String:Any] else { self.properties = [:] super.init() return nil } self.properties = properties - self.fileMetaData = aDecoder.decodeObjectForKey("fileMetaData") as? UsergridFileMetaData - self.asset = aDecoder.decodeObjectForKey("asset") as? UsergridAsset + self.fileMetaData = aDecoder.decodeObject(forKey: "fileMetaData") as? UsergridFileMetaData + self.asset = aDecoder.decodeObject(forKey: "asset") as? UsergridAsset super.init() } @@ -208,10 +208,10 @@ public class UsergridEntity: NSObject, NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.properties, forKey: "properties") - aCoder.encodeObject(self.fileMetaData, forKey: "fileMetaData") - aCoder.encodeObject(self.asset, forKey: "asset") + open func encode(with aCoder: NSCoder) { + aCoder.encode(self.properties, forKey: "properties") + aCoder.encode(self.fileMetaData, forKey: "fileMetaData") + aCoder.encode(self.asset, forKey: "asset") } // MARK: - Property Manipulation - @@ -225,13 +225,13 @@ public class UsergridEntity: NSObject, NSCoding { usergridEntity["propertyName"] = propertyValue ``` */ - public subscript(propertyName: String) -> AnyObject? { + public subscript(propertyName: String) -> Any? { get { if let entityProperty = UsergridEntityProperties.fromString(propertyName) { return self.getEntitySpecificProperty(entityProperty) } else { let propertyValue = self.properties[propertyName] - if propertyValue === NSNull() { // Let's just return nil for properties that have been removed instead of NSNull + if propertyValue is NSNull { // Let's just return nil for properties that have been removed instead of NSNull return nil } else { return propertyValue @@ -242,7 +242,7 @@ public class UsergridEntity: NSObject, NSCoding { if let value = propertyValue { if let entityProperty = UsergridEntityProperties.fromString(propertyName) { if entityProperty.isMutableForEntity(self) { - if entityProperty == .Location { + if entityProperty == .location { if let location = value as? CLLocation { properties[propertyName] = [ENTITY_LATITUDE:location.coordinate.latitude, ENTITY_LONGITUDE:location.coordinate.longitude] @@ -250,7 +250,7 @@ public class UsergridEntity: NSObject, NSCoding { properties[propertyName] = [ENTITY_LATITUDE:location.latitude, ENTITY_LONGITUDE:location.longitude] } else if let location = value as? [String:Double] { - if let lat = location[ENTITY_LATITUDE], long = location[ENTITY_LONGITUDE] { + if let lat = location[ENTITY_LATITUDE], let long = location[ENTITY_LONGITUDE] { properties[propertyName] = [ENTITY_LATITUDE:lat, ENTITY_LONGITUDE:long] } @@ -282,7 +282,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter name: The name of the property. - parameter value: The value to update to. */ - public func putProperty(name:String,value:AnyObject?) { + public func putProperty(_ name:String,value:Any?) { self[name] = value } @@ -291,7 +291,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter properties: The property dictionary containing the properties names and values. */ - public func putProperties(properties:[String:AnyObject]) { + public func putProperties(_ properties:[String:Any]) { for (name,value) in properties { self.putProperty(name, value: value) } @@ -302,7 +302,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter name: The name of the property. */ - public func removeProperty(name:String) { + public func removeProperty(_ name:String) { self[name] = nil } @@ -311,7 +311,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter propertyNames: An array of property names. */ - public func removeProperties(propertyNames:[String]) { + public func removeProperties(_ propertyNames:[String]) { for name in propertyNames { self.removeProperty(name) } @@ -323,8 +323,8 @@ public class UsergridEntity: NSObject, NSCoding { - parameter name: The name of the property. - parameter value: The value or an array of values to append. */ - public func append(name:String, value:AnyObject) { - self.insertArray(name, values:value as? [AnyObject] ?? [value], index: Int.max) + public func append(_ name:String, value:Any) { + self.insertArray(name, values:value as? [Any] ?? [value], index: Int.max) } /** @@ -334,8 +334,8 @@ public class UsergridEntity: NSObject, NSCoding { - parameter index: The index to insert at. - parameter value: The value or an array of values to insert. */ - public func insert(name:String, value:AnyObject, index:Int = 0) { - self.insertArray(name, values:value as? [AnyObject] ?? [value], index: index) + public func insert(_ name:String, value:Any, index:Int = 0) { + self.insertArray(name, values:value as? [Any] ?? [value], index: index) } /** @@ -345,14 +345,14 @@ public class UsergridEntity: NSObject, NSCoding { - parameter index: The index to insert at. - parameter values: The values to insert. */ - private func insertArray(name:String,values:[AnyObject], index:Int = 0) { + private func insertArray(_ name:String,values:[Any], index:Int = 0) { if let propertyValue = self[name] { - if let arrayValue = propertyValue as? [AnyObject] { + if let arrayValue = propertyValue as? [Any] { var arrayOfValues = arrayValue if index > arrayValue.count { - arrayOfValues.appendContentsOf(values) + arrayOfValues.append(contentsOf: values) } else { - arrayOfValues.insertContentsOf(values, at: index) + arrayOfValues.insert(contentsOf: values, at: index) } self[name] = arrayOfValues } else { @@ -372,8 +372,8 @@ public class UsergridEntity: NSObject, NSCoding { - parameter name: The name of the property. */ - public func pop(name:String) { - if let arrayValue = self[name] as? [AnyObject] where arrayValue.count > 0 { + public func pop(_ name:String) { + if let arrayValue = self[name] as? [Any] , arrayValue.count > 0 { var arrayOfValues = arrayValue arrayOfValues.removeLast() self[name] = arrayOfValues @@ -385,25 +385,25 @@ public class UsergridEntity: NSObject, NSCoding { - parameter name: The name of the property. */ - public func shift(name:String) { - if let arrayValue = self[name] as? [AnyObject] where arrayValue.count > 0 { + public func shift(_ name:String) { + if let arrayValue = self[name] as? [Any] , arrayValue.count > 0 { var arrayOfValues = arrayValue arrayOfValues.removeFirst() self[name] = arrayOfValues } } - private func getEntitySpecificProperty(entityProperty: UsergridEntityProperties) -> AnyObject? { - var propertyValue: AnyObject? = nil + private func getEntitySpecificProperty(_ entityProperty: UsergridEntityProperties) -> Any? { + var propertyValue: Any? = nil switch entityProperty { - case .UUID,.EntityType,.Name : + case .uuid,.type,.name : propertyValue = self.properties[entityProperty.stringValue] - case .Created,.Modified : + case .created,.modified : if let milliseconds = self.properties[entityProperty.stringValue] as? Int { - propertyValue = NSDate(milliseconds: milliseconds.description) + propertyValue = Date(milliseconds: milliseconds.description) } - case .Location : - if let locationDict = self.properties[entityProperty.stringValue] as? [String:Double], lat = locationDict[ENTITY_LATITUDE], long = locationDict[ENTITY_LONGITUDE] { + case .location : + if let locationDict = self.properties[entityProperty.stringValue] as? [String:Double], let lat = locationDict[ENTITY_LATITUDE], let long = locationDict[ENTITY_LONGITUDE] { propertyValue = CLLocation(latitude: lat, longitude: long) } } @@ -417,7 +417,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter completion: An optional completion block that, if successful, will contain the reloaded `UsergridEntity` object. */ - public func reload(completion: UsergridResponseCompletion? = nil) { + public func reload(_ completion: UsergridResponseCompletion? = nil) { self.reload(Usergrid.sharedInstance, completion: completion) } @@ -427,10 +427,10 @@ public class UsergridEntity: NSObject, NSCoding { - parameter client: The client to use when reloading. - parameter completion: An optional completion block that, if successful, will contain the reloaded `UsergridEntity` object. */ - public func reload(client:UsergridClient, completion: UsergridResponseCompletion? = nil) { + public func reload(_ client:UsergridClient, completion: UsergridResponseCompletion? = nil) { guard let uuidOrName = self.uuidOrName else { - completion?(response: UsergridResponse(client: client, errorName: "Entity cannot be reloaded.", errorDescription: "Entity has neither an UUID or name specified.")) + completion?(UsergridResponse(client: client, errorName: "Entity cannot be reloaded.", errorDescription: "Entity has neither an UUID or name specified.")) return } @@ -438,7 +438,7 @@ public class UsergridEntity: NSObject, NSCoding { if let responseEntity = response.entity { self.copyInternalsFromEntity(responseEntity) } - completion?(response: response) + completion?(response) } } @@ -447,7 +447,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter completion: An optional completion block that, if successful, will contain the updated/saved `UsergridEntity` object. */ - public func save(completion: UsergridResponseCompletion? = nil) { + public func save(_ completion: UsergridResponseCompletion? = nil) { self.save(Usergrid.sharedInstance, completion: completion) } @@ -457,20 +457,20 @@ public class UsergridEntity: NSObject, NSCoding { - parameter client: The client to use when saving. - parameter completion: An optional completion block that, if successful, will contain the updated/saved `UsergridEntity` object. */ - public func save(client:UsergridClient, completion: UsergridResponseCompletion? = nil) { + public func save(_ client:UsergridClient, completion: UsergridResponseCompletion? = nil) { if let _ = self.uuid { // If UUID exists we PUT otherwise POST client.PUT(self) { response in if let responseEntity = response.entity { self.copyInternalsFromEntity(responseEntity) } - completion?(response: response) + completion?(response) } } else { client.POST(self) { response in if let responseEntity = response.entity { self.copyInternalsFromEntity(responseEntity) } - completion?(response: response) + completion?(response) } } } @@ -480,7 +480,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter completion: An optional completion block. */ - public func remove(completion: UsergridResponseCompletion? = nil) { + public func remove(_ completion: UsergridResponseCompletion? = nil) { self.remove(Usergrid.sharedInstance, completion: completion) } @@ -490,7 +490,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter client: The client to use when removing. - parameter completion: An optional completion block. */ - public func remove(client:UsergridClient, completion: UsergridResponseCompletion? = nil) { + public func remove(_ client:UsergridClient, completion: UsergridResponseCompletion? = nil) { client.DELETE(self, completion: completion) } @@ -503,7 +503,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter progress: An optional progress block to keep track of upload progress. - parameter completion: An optional completion block. */ - public func uploadAsset(asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { + public func uploadAsset(_ asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { self.uploadAsset(Usergrid.sharedInstance, asset: asset, progress: progress, completion: completion) } @@ -515,7 +515,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter progress: An optional progress block to keep track of upload progress. - parameter completion: An optional completion block. */ - public func uploadAsset(client:UsergridClient, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { + public func uploadAsset(_ client:UsergridClient, asset:UsergridAsset, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetUploadCompletion? = nil) { client.uploadAsset(self, asset: asset, progress:progress, completion:completion) } @@ -526,7 +526,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter progress: An optional progress block to keep track of download progress. - parameter completion: An optional completion block. */ - public func downloadAsset(contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { + public func downloadAsset(_ contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { self.downloadAsset(Usergrid.sharedInstance, contentType: contentType, progress: progress, completion: completion) } @@ -538,7 +538,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter progress: An optional progress block to keep track of download progress. - parameter completion: An optional completion block. */ - public func downloadAsset(client:UsergridClient, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { + public func downloadAsset(_ client:UsergridClient, contentType:String, progress:UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { client.downloadAsset(self, contentType: contentType, progress:progress, completion: completion) } @@ -551,7 +551,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter toEntity: The entity to connect. - parameter completion: An optional completion block. */ - public func connect(relationship:String, toEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func connect(_ relationship:String, toEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { self.connect(Usergrid.sharedInstance, relationship: relationship, toEntity: toEntity, completion: completion) } @@ -563,7 +563,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter toEntity: The entity to connect. - parameter completion: An optional completion block. */ - public func connect(client:UsergridClient, relationship:String, toEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func connect(_ client:UsergridClient, relationship:String, toEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { client.connect(self, relationship: relationship, to: toEntity, completion: completion) } @@ -574,7 +574,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter fromEntity: The entity to disconnect. - parameter completion: An optional completion block. */ - public func disconnect(relationship:String, fromEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func disconnect(_ relationship:String, fromEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { self.disconnect(Usergrid.sharedInstance, relationship: relationship, fromEntity: fromEntity, completion: completion) } @@ -586,7 +586,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter fromEntity: The entity to disconnect. - parameter completion: An optional completion block. */ - public func disconnect(client:UsergridClient, relationship:String, fromEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { + public func disconnect(_ client:UsergridClient, relationship:String, fromEntity:UsergridEntity, completion: UsergridResponseCompletion? = nil) { client.disconnect(self, relationship: relationship, from: fromEntity, completion: completion) } @@ -598,7 +598,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter query: The optional query. - parameter completion: An optional completion block. */ - public func getConnections(direction:UsergridDirection, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public func getConnections(_ direction:UsergridDirection, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { self.getConnections(Usergrid.sharedInstance, direction: direction, relationship: relationship, query: query, completion: completion) } @@ -611,7 +611,7 @@ public class UsergridEntity: NSObject, NSCoding { - parameter query: The optional query. - parameter completion: An optional completion block. */ - public func getConnections(client:UsergridClient, direction:UsergridDirection, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { + public func getConnections(_ client:UsergridClient, direction:UsergridDirection, relationship:String, query:UsergridQuery? = nil, completion:UsergridResponseCompletion? = nil) { client.getConnections(direction, entity: self, relationship: relationship, query:query, completion: completion) } @@ -624,7 +624,7 @@ public class UsergridEntity: NSObject, NSCoding { - returns: If the two `UsergridEntity` objects are equal. i.e. they have the same non nil uuidOrName. */ - public func isEqualToEntity(entity: UsergridEntity?) -> Bool { + public func isEqualToEntity(_ entity: UsergridEntity?) -> Bool { guard let selfUUID = self.uuidOrName, let entityUUID = entity?.uuidOrName else { @@ -632,4 +632,4 @@ public class UsergridEntity: NSObject, NSCoding { } return selfUUID == entityUUID } -} \ No newline at end of file +} diff --git a/Source/UsergridEnums.swift b/Source/UsergridEnums.swift index fd0b625..2b32aa1 100644 --- a/Source/UsergridEnums.swift +++ b/Source/UsergridEnums.swift @@ -36,21 +36,21 @@ An enumeration that is used to determine what the `UsergridClient` will use for /** If the API call fails, the activity is treated as a failure with an appropriate HTTP status code. */ - case None + case none /** If a non-expired `UsergridUserAuth` exists in `UsergridClient.currentUser`, this token is used to authenticate all API calls. If the API call fails, the activity is treated as a failure with an appropriate HTTP status code (This behavior is identical to authMode=.None). */ - case User + case user /** If a non-expired `UsergridAppAuth` exists in `UsergridClient.appAuth`, this token is used to authenticate all API calls. If the API call fails, the activity is treated as a failure with an appropriate HTTP status code (This behavior is identical to authMode=.None). */ - case App + case app } /** @@ -61,17 +61,17 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// Corresponds to the property 'type' - case EntityType + case type /// Corresponds to the property 'uuid' - case UUID + case uuid /// Corresponds to the property 'name' - case Name + case name /// Corresponds to the property 'created' - case Created + case created /// Corresponds to the property 'modified' - case Modified + case modified /// Corresponds to the property 'location' - case Location + case location // MARK: - Methods - @@ -82,14 +82,14 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: The corresponding `UsergridEntityProperties` or nil. */ - public static func fromString(stringValue: String) -> UsergridEntityProperties? { - switch stringValue.lowercaseString { - case ENTITY_TYPE: return .EntityType - case ENTITY_UUID: return .UUID - case ENTITY_NAME: return .Name - case ENTITY_CREATED: return .Created - case ENTITY_MODIFIED: return .Modified - case ENTITY_LOCATION: return .Location + public static func fromString(_ stringValue: String) -> UsergridEntityProperties? { + switch stringValue.lowercased() { + case ENTITY_TYPE: return .type + case ENTITY_UUID: return .uuid + case ENTITY_NAME: return .name + case ENTITY_CREATED: return .created + case ENTITY_MODIFIED: return .modified + case ENTITY_LOCATION: return .location default: return nil } } @@ -97,12 +97,12 @@ An enumeration that is used to determine what the `UsergridClient` will use for /// Returns the string value. public var stringValue: String { switch self { - case .EntityType: return ENTITY_TYPE - case .UUID: return ENTITY_UUID - case .Name: return ENTITY_NAME - case .Created: return ENTITY_CREATED - case .Modified: return ENTITY_MODIFIED - case .Location: return ENTITY_LOCATION + case .type: return ENTITY_TYPE + case .uuid: return ENTITY_UUID + case .name: return ENTITY_NAME + case .created: return ENTITY_CREATED + case .modified: return ENTITY_MODIFIED + case .location: return ENTITY_LOCATION } } @@ -113,11 +113,11 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: If the `UsergridEntityProperties` is mutable for the given entity */ - public func isMutableForEntity(entity:UsergridEntity) -> Bool { + public func isMutableForEntity(_ entity:UsergridEntity) -> Bool { switch self { - case .EntityType,.UUID,.Created,.Modified: return false - case .Location: return true - case .Name: return entity.isUser + case .type,.uuid,.created,.modified: return false + case .location: return true + case .name: return entity.isUser } } } @@ -130,11 +130,11 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// Corresponds to the property 'deviceModel' - case Model + case model /// Corresponds to the property 'devicePlatform' - case Platform + case platform /// Corresponds to the property 'deviceOSVersion' - case OSVersion + case osVersion // MARK: - Methods - @@ -145,11 +145,11 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: The corresponding `UsergridDeviceProperties` or nil. */ - public static func fromString(stringValue: String) -> UsergridDeviceProperties? { - switch stringValue.lowercaseString { - case DEVICE_MODEL: return .Model - case DEVICE_PLATFORM: return .Platform - case DEVICE_OSVERSION: return .OSVersion + public static func fromString(_ stringValue: String) -> UsergridDeviceProperties? { + switch stringValue.lowercased() { + case DEVICE_MODEL: return .model + case DEVICE_PLATFORM: return .platform + case DEVICE_OSVERSION: return .osVersion default: return nil } } @@ -157,9 +157,9 @@ An enumeration that is used to determine what the `UsergridClient` will use for /// Returns the string value. public var stringValue: String { switch self { - case .Model: return DEVICE_MODEL - case .Platform: return DEVICE_PLATFORM - case .OSVersion: return DEVICE_OSVERSION + case .model: return DEVICE_MODEL + case .platform: return DEVICE_PLATFORM + case .osVersion: return DEVICE_OSVERSION } } } @@ -172,21 +172,21 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// Corresponds to the property 'name' - case Name + case name /// Corresponds to the property 'username' - case Username + case username /// Corresponds to the property 'password' - case Password + case password /// Corresponds to the property 'email' - case Email + case email /// Corresponds to the property 'age' - case Age + case age /// Corresponds to the property 'activated' - case Activated + case activated /// Corresponds to the property 'disabled' - case Disabled + case disabled /// Corresponds to the property 'picture' - case Picture + case picture // MARK: - Methods - @@ -197,16 +197,16 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: The corresponding `UsergridUserProperties` or nil. */ - public static func fromString(stringValue: String) -> UsergridUserProperties? { - switch stringValue.lowercaseString { - case ENTITY_NAME: return .Name - case USER_USERNAME: return .Username - case USER_PASSWORD: return .Password - case USER_EMAIL: return .Email - case USER_AGE: return .Age - case USER_ACTIVATED: return .Activated - case USER_DISABLED: return .Disabled - case USER_PICTURE: return .Picture + public static func fromString(_ stringValue: String) -> UsergridUserProperties? { + switch stringValue.lowercased() { + case ENTITY_NAME: return .name + case USER_USERNAME: return .username + case USER_PASSWORD: return .password + case USER_EMAIL: return .email + case USER_AGE: return .age + case USER_ACTIVATED: return .activated + case USER_DISABLED: return .disabled + case USER_PICTURE: return .picture default: return nil } } @@ -214,14 +214,14 @@ An enumeration that is used to determine what the `UsergridClient` will use for /// Returns the string value. public var stringValue: String { switch self { - case .Name: return ENTITY_NAME - case .Username: return USER_USERNAME - case .Password: return USER_PASSWORD - case .Email: return USER_EMAIL - case .Age: return USER_AGE - case .Activated: return USER_ACTIVATED - case .Disabled: return USER_DISABLED - case .Picture: return USER_PICTURE + case .name: return ENTITY_NAME + case .username: return USER_USERNAME + case .password: return USER_PASSWORD + case .email: return USER_EMAIL + case .age: return USER_AGE + case .activated: return USER_ACTIVATED + case .disabled: return USER_DISABLED + case .picture: return USER_PICTURE } } } @@ -234,15 +234,15 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// '=' - case Equal + case equal /// '>' - case GreaterThan + case greaterThan /// '>=' - case GreaterThanEqualTo + case greaterThanEqualTo /// '<' - case LessThan + case lessThan /// '<=' - case LessThanEqualTo + case lessThanEqualTo // MARK: - Methods - @@ -253,13 +253,13 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: The corresponding `UsergridQueryOperator` or nil. */ - public static func fromString(stringValue: String) -> UsergridQueryOperator? { - switch stringValue.lowercaseString { - case UsergridQuery.EQUAL: return .Equal - case UsergridQuery.GREATER_THAN: return .GreaterThan - case UsergridQuery.GREATER_THAN_EQUAL_TO: return .GreaterThanEqualTo - case UsergridQuery.LESS_THAN: return .LessThan - case UsergridQuery.LESS_THAN_EQUAL_TO: return .LessThanEqualTo + public static func fromString(_ stringValue: String) -> UsergridQueryOperator? { + switch stringValue.lowercased() { + case UsergridQuery.EQUAL: return .equal + case UsergridQuery.GREATER_THAN: return .greaterThan + case UsergridQuery.GREATER_THAN_EQUAL_TO: return .greaterThanEqualTo + case UsergridQuery.LESS_THAN: return .lessThan + case UsergridQuery.LESS_THAN_EQUAL_TO: return .lessThanEqualTo default: return nil } } @@ -267,11 +267,11 @@ An enumeration that is used to determine what the `UsergridClient` will use for /// Returns the string value. public var stringValue: String { switch self { - case .Equal: return UsergridQuery.EQUAL - case .GreaterThan: return UsergridQuery.GREATER_THAN - case .GreaterThanEqualTo: return UsergridQuery.GREATER_THAN_EQUAL_TO - case .LessThan: return UsergridQuery.LESS_THAN - case .LessThanEqualTo: return UsergridQuery.LESS_THAN_EQUAL_TO + case .equal: return UsergridQuery.EQUAL + case .greaterThan: return UsergridQuery.GREATER_THAN + case .greaterThanEqualTo: return UsergridQuery.GREATER_THAN_EQUAL_TO + case .lessThan: return UsergridQuery.LESS_THAN + case .lessThanEqualTo: return UsergridQuery.LESS_THAN_EQUAL_TO } } } @@ -284,9 +284,9 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// Sort order is ascending. - case Asc + case asc /// Sort order is descending. - case Desc + case desc // MARK: - Methods - @@ -297,10 +297,10 @@ An enumeration that is used to determine what the `UsergridClient` will use for - returns: The corresponding `UsergridQuerySortOrder` or nil. */ - public static func fromString(stringValue: String) -> UsergridQuerySortOrder? { - switch stringValue.lowercaseString { - case UsergridQuery.ASC: return .Asc - case UsergridQuery.DESC: return .Desc + public static func fromString(_ stringValue: String) -> UsergridQuerySortOrder? { + switch stringValue.lowercased() { + case UsergridQuery.ASC: return .asc + case UsergridQuery.DESC: return .desc default: return nil } } @@ -308,8 +308,8 @@ An enumeration that is used to determine what the `UsergridClient` will use for /// Returns the string value. public var stringValue: String { switch self { - case .Asc: return UsergridQuery.ASC - case .Desc: return UsergridQuery.DESC + case .asc: return UsergridQuery.ASC + case .desc: return UsergridQuery.DESC } } } @@ -322,17 +322,17 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// Content type: 'image/png' - case Png + case png /// Content type: 'image/jpeg' - case Jpeg + case jpeg // MARK: - Methods - /// Returns the string value. public var stringValue: String { switch self { - case .Png: return ASSET_IMAGE_PNG - case .Jpeg: return ASSET_IMAGE_JPEG + case .png: return ASSET_IMAGE_PNG + case .jpeg: return ASSET_IMAGE_JPEG } } } @@ -345,18 +345,18 @@ An enumeration that is used to determine what the `UsergridClient` will use for // MARK: - Values - /// To get the entities that have created a connection to an entity. aka `connecting` - case In + case `in` /// To get the entities an entity has connected to. aka `connections` - case Out + case out // MARK: - Methods - /// Returns the connection value. public var connectionValue: String { switch self { - case .In: return CONNECTION_TYPE_IN - case .Out: return CONNECTION_TYPE_OUT + case .in: return CONNECTION_TYPE_IN + case .out: return CONNECTION_TYPE_OUT } } } @@ -367,24 +367,24 @@ An enumeration that is used to determine what the `UsergridClient` will use for @objc public enum UsergridHttpMethod : Int { /// GET - case Get + case get /// PUT - case Put + case put /// POST - case Post + case post /// DELETE - case Delete + case delete /// Returns the string value. public var stringValue: String { switch self { - case .Get: return "GET" - case .Put: return "PUT" - case .Post: return "POST" - case .Delete: return "DELETE" + case .get: return "GET" + case .put: return "PUT" + case .post: return "POST" + case .delete: return "DELETE" } } } diff --git a/Source/UsergridExtensions.swift b/Source/UsergridExtensions.swift index 30ff3a7..4370808 100644 --- a/Source/UsergridExtensions.swift +++ b/Source/UsergridExtensions.swift @@ -29,7 +29,7 @@ import Foundation private let kUsergrid_Milliseconds_Per_Second = 1000 /// Extension methods to help create and manipulate `NSDate` objects returned by Usergrid. -public extension NSDate { +public extension Date { /** Creates a new `NSDate` object with the given milliseconds. @@ -37,8 +37,8 @@ public extension NSDate { - returns: A new `NSDate` object. */ - public convenience init(milliseconds: String) { - self.init(timeIntervalSince1970: (milliseconds as NSString).doubleValue / Double(kUsergrid_Milliseconds_Per_Second) ) + public init(milliseconds: String) { + self.init(timeIntervalSince1970:(milliseconds as NSString).doubleValue / Double(kUsergrid_Milliseconds_Per_Second)) } /** Converts the `NSDate` object to milliseconds. @@ -54,7 +54,7 @@ public extension NSDate { - returns: The number of milliseconds corresponding to the date as a string. */ public func dateAsMillisecondsString() -> String { - return NSDate.stringFromMilleseconds(self.dateAsMilliseconds()) + return Date.stringFromMilleseconds(self.dateAsMilliseconds()) } /** Converts the number of milliseconds to a string. @@ -63,8 +63,8 @@ public extension NSDate { - returns: The milliseconds as a string. */ - public static func stringFromMilleseconds(milliseconds:Int) -> String { - return NSNumber(longLong: Int64(milliseconds)).stringValue + public static func stringFromMilleseconds(_ milliseconds:Int) -> String { + return NSNumber(value: Int64(milliseconds)).stringValue } /** Converts the `NSDate` object to the corresponding UNIX time stamp as a string. @@ -72,7 +72,7 @@ public extension NSDate { - returns: The UNIX time stamp as a string. */ public static func unixTimeStampString() -> String { - return NSDate.stringFromMilleseconds(NSDate.nowAsMilliseconds()) + return Date.stringFromMilleseconds(Date.nowAsMilliseconds()) } /** Converts the `NSDate` object to the corresponding UNIX time stamp. @@ -80,7 +80,7 @@ public extension NSDate { - returns: The UNIX time stamp. */ public static func unixTimeStamp() -> Int { - return NSDate.nowAsMilliseconds() + return Date.nowAsMilliseconds() } /** Converts the current date to milliseconds. @@ -89,9 +89,9 @@ public extension NSDate { */ public static func nowAsMilliseconds() -> Int { var tv = timeval() - let currentMillisecondTime = withUnsafeMutablePointer(&tv, { (t: UnsafeMutablePointer) -> Int in + let currentMillisecondTime = withUnsafeMutablePointer(to: &tv, { (t: UnsafeMutablePointer) -> Int in gettimeofday(t, nil) - return (Int(t.memory.tv_sec) * kUsergrid_Milliseconds_Per_Second) + (Int(t.memory.tv_usec) / kUsergrid_Milliseconds_Per_Second) + return (Int(t.pointee.tv_sec) * kUsergrid_Milliseconds_Per_Second) + (Int(t.pointee.tv_usec) / kUsergrid_Milliseconds_Per_Second) }) return currentMillisecondTime } @@ -99,12 +99,12 @@ public extension NSDate { internal extension String { func isUuid() -> Bool { - return (NSUUID(UUIDString: self) != nil) ? true : false + return (UUID(uuidString: self) != nil) ? true : false } } internal extension Dictionary { - mutating func update(other:Dictionary) { + mutating func update(_ other:Dictionary) { for (key,value) in other { self.updateValue(value, forKey:key) } diff --git a/Source/UsergridFileMetaData.swift b/Source/UsergridFileMetaData.swift index 4908430..b150e2e 100644 --- a/Source/UsergridFileMetaData.swift +++ b/Source/UsergridFileMetaData.swift @@ -51,7 +51,7 @@ public class UsergridFileMetaData : NSObject,NSCoding { public let lastModifiedTimeStamp: Int /// The `NSDate` object corresponding to the last modified time stamp. - public let lastModifiedDate: NSDate? + public let lastModifiedDate: Date? // MARK: - Initialization - @@ -62,7 +62,7 @@ public class UsergridFileMetaData : NSObject,NSCoding { - returns: A new instance of `UsergridFileMetaData`. */ - public init(fileMetaDataJSON:[String:AnyObject]) { + public init(fileMetaDataJSON:[String:Any]) { self.eTag = fileMetaDataJSON["etag"] as? String self.checkSum = fileMetaDataJSON["checksum"] as? String self.contentType = fileMetaDataJSON["content-type"] as? String @@ -70,7 +70,7 @@ public class UsergridFileMetaData : NSObject,NSCoding { self.lastModifiedTimeStamp = fileMetaDataJSON["last-modified"] as? Int ?? 0 if self.lastModifiedTimeStamp > 0 { - self.lastModifiedDate = NSDate(milliseconds: self.lastModifiedTimeStamp.description) + self.lastModifiedDate = Date(milliseconds: self.lastModifiedTimeStamp.description) } else { self.lastModifiedDate = nil } @@ -86,14 +86,14 @@ public class UsergridFileMetaData : NSObject,NSCoding { - returns: A decoded `UsergridUser` object. */ required public init?(coder aDecoder: NSCoder) { - self.eTag = aDecoder.decodeObjectForKey("etag") as? String - self.checkSum = aDecoder.decodeObjectForKey("checksum") as? String - self.contentType = aDecoder.decodeObjectForKey("content-type") as? String - self.contentLength = aDecoder.decodeIntegerForKey("content-length") ?? 0 - self.lastModifiedTimeStamp = aDecoder.decodeIntegerForKey("last-modified") ?? 0 + self.eTag = aDecoder.decodeObject(forKey: "etag") as? String + self.checkSum = aDecoder.decodeObject(forKey: "checksum") as? String + self.contentType = aDecoder.decodeObject(forKey: "content-type") as? String + self.contentLength = aDecoder.decodeInteger(forKey: "content-length") + self.lastModifiedTimeStamp = aDecoder.decodeInteger(forKey: "last-modified") if self.lastModifiedTimeStamp > 0 { - self.lastModifiedDate = NSDate(milliseconds: self.lastModifiedTimeStamp.description) + self.lastModifiedDate = Date(milliseconds: self.lastModifiedTimeStamp.description) } else { self.lastModifiedDate = nil } @@ -104,11 +104,11 @@ public class UsergridFileMetaData : NSObject,NSCoding { - parameter aCoder: The encoder. */ - public func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.eTag, forKey: "etag") - aCoder.encodeObject(self.checkSum, forKey: "checksum") - aCoder.encodeObject(self.contentType, forKey: "content-type") - aCoder.encodeInteger(self.contentLength, forKey: "content-length") - aCoder.encodeInteger(self.lastModifiedTimeStamp, forKey: "last-modified") + public func encode(with aCoder: NSCoder) { + aCoder.encode(self.eTag, forKey: "etag") + aCoder.encode(self.checkSum, forKey: "checksum") + aCoder.encode(self.contentType, forKey: "content-type") + aCoder.encode(self.contentLength, forKey: "content-length") + aCoder.encode(self.lastModifiedTimeStamp, forKey: "last-modified") } } diff --git a/Source/UsergridKeychainHelpers.swift b/Source/UsergridKeychainHelpers.swift index 4639832..b363a7f 100644 --- a/Source/UsergridKeychainHelpers.swift +++ b/Source/UsergridKeychainHelpers.swift @@ -34,8 +34,8 @@ private let USERGRID_KEYCHAIN_NAME = "Usergrid" private let USERGRID_DEVICE_KEYCHAIN_SERVICE = "SharedDevice" private let USERGRID_CURRENT_USER_KEYCHAIN_SERVICE = "CurrentUser" -private func usergridGenericKeychainItem() -> [String:AnyObject] { - var keychainItem: [String:AnyObject] = [:] +private func usergridGenericKeychainItem() -> [String:Any] { + var keychainItem: [String:Any] = [:] keychainItem[kSecClass as String] = kSecClassGenericPassword as String keychainItem[kSecAttrAccessible as String] = kSecAttrAccessibleAlways as String keychainItem[kSecAttrAccount as String] = USERGRID_KEYCHAIN_NAME @@ -44,7 +44,7 @@ private func usergridGenericKeychainItem() -> [String:AnyObject] { internal extension UsergridDevice { - static func deviceKeychainItem() -> [String:AnyObject] { + static func deviceKeychainItem() -> [String:Any] { var keychainItem = usergridGenericKeychainItem() keychainItem[kSecAttrService as String] = USERGRID_DEVICE_KEYCHAIN_SERVICE return keychainItem @@ -53,9 +53,9 @@ internal extension UsergridDevice { static func createNewDeviceKeychainUUID() -> String { #if os(watchOS) || os(OSX) - let usergridUUID = NSUUID().UUIDString + let usergridUUID = NSUUID().uuidString #elseif os(iOS) || os(tvOS) - let usergridUUID = UIDevice.currentDevice().identifierForVendor?.UUIDString ?? NSUUID().UUIDString + let usergridUUID = UIDevice.current.identifierForVendor?.uuidString ?? UUID().uuidString #endif return usergridUUID @@ -63,21 +63,21 @@ internal extension UsergridDevice { private static func createNewSharedDevice() -> UsergridDevice { var deviceEntityDict = UsergridDevice.commonDevicePropertyDict() - deviceEntityDict[UsergridEntityProperties.UUID.stringValue] = UsergridDevice.createNewDeviceKeychainUUID() + deviceEntityDict[UsergridEntityProperties.uuid.stringValue] = UsergridDevice.createNewDeviceKeychainUUID() let sharedDevice = UsergridDevice(type: UsergridDevice.DEVICE_ENTITY_TYPE, name: nil, propertyDict: deviceEntityDict) return sharedDevice } static func getOrCreateSharedDeviceFromKeychain() -> UsergridDevice { var queryAttributes = UsergridDevice.deviceKeychainItem() - queryAttributes[kSecReturnData as String] = kCFBooleanTrue as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanTrue as Bool + queryAttributes[kSecReturnData as String] = (kCFBooleanTrue != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanTrue != nil) as Bool var result: AnyObject? - let status = withUnsafeMutablePointer(&result) { SecItemCopyMatching(queryAttributes, UnsafeMutablePointer($0)) } + let status = withUnsafeMutablePointer(to: &result) { SecItemCopyMatching(queryAttributes as CFDictionary, UnsafeMutablePointer($0)) } if status == errSecSuccess { if let resultDictionary = result as? NSDictionary { - if let resultData = resultDictionary[kSecValueData as String] as? NSData { - if let sharedDevice = NSKeyedUnarchiver.unarchiveObjectWithData(resultData) as? UsergridDevice { + if let resultData = resultDictionary[kSecValueData as String] as? Data { + if let sharedDevice = NSKeyedUnarchiver.unarchiveObject(with: resultData) as? UsergridDevice { return sharedDevice } else { UsergridDevice.deleteSharedDeviceKeychainItem() @@ -92,17 +92,17 @@ internal extension UsergridDevice { } - static func saveSharedDeviceKeychainItem(device:UsergridDevice) { + static func saveSharedDeviceKeychainItem(_ device:UsergridDevice) { var queryAttributes = UsergridDevice.deviceKeychainItem() - queryAttributes[kSecReturnData as String] = kCFBooleanTrue as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanTrue as Bool + queryAttributes[kSecReturnData as String] = (kCFBooleanTrue != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanTrue != nil) as Bool - let sharedDeviceData = NSKeyedArchiver.archivedDataWithRootObject(device); + let sharedDeviceData = NSKeyedArchiver.archivedData(withRootObject: device); - if SecItemCopyMatching(queryAttributes,nil) == errSecSuccess // Do we need to update keychain item or add a new one. + if SecItemCopyMatching(queryAttributes as CFDictionary,nil) == errSecSuccess // Do we need to update keychain item or add a new one. { let attributesToUpdate = [kSecValueData as String:sharedDeviceData] - let updateStatus = SecItemUpdate(UsergridDevice.deviceKeychainItem(), attributesToUpdate) + let updateStatus = SecItemUpdate(UsergridDevice.deviceKeychainItem() as CFDictionary, attributesToUpdate as CFDictionary) if updateStatus != errSecSuccess { print("Error updating shared device data to keychain!") } @@ -111,7 +111,7 @@ internal extension UsergridDevice { { var keychainItem = UsergridDevice.deviceKeychainItem() keychainItem[kSecValueData as String] = sharedDeviceData - let status = SecItemAdd(keychainItem, nil) + let status = SecItemAdd(keychainItem as CFDictionary, nil) if status != errSecSuccess { print("Error adding shared device data to keychain!") } @@ -120,10 +120,10 @@ internal extension UsergridDevice { static func deleteSharedDeviceKeychainItem() { var queryAttributes = UsergridDevice.deviceKeychainItem() - queryAttributes[kSecReturnData as String] = kCFBooleanFalse as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanFalse as Bool - if SecItemCopyMatching(queryAttributes,nil) == errSecSuccess { - let deleteStatus = SecItemDelete(queryAttributes) + queryAttributes[kSecReturnData as String] = (kCFBooleanFalse != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanFalse != nil) as Bool + if SecItemCopyMatching(queryAttributes as CFDictionary,nil) == errSecSuccess { + let deleteStatus = SecItemDelete(queryAttributes as CFDictionary) if deleteStatus != errSecSuccess { print("Error deleting shared device data to keychain!") } @@ -133,23 +133,23 @@ internal extension UsergridDevice { internal extension UsergridUser { - static func userKeychainItem(client:UsergridClient) -> [String:AnyObject] { + static func userKeychainItem(_ client:UsergridClient) -> [String:Any] { var keychainItem = usergridGenericKeychainItem() keychainItem[kSecAttrService as String] = USERGRID_CURRENT_USER_KEYCHAIN_SERVICE + "." + client.appId + "." + client.orgId return keychainItem } - static func getCurrentUserFromKeychain(client:UsergridClient) -> UsergridUser? { + static func getCurrentUserFromKeychain(_ client:UsergridClient) -> UsergridUser? { var queryAttributes = UsergridUser.userKeychainItem(client) - queryAttributes[kSecReturnData as String] = kCFBooleanTrue as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanTrue as Bool + queryAttributes[kSecReturnData as String] = (kCFBooleanTrue != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanTrue != nil) as Bool var result: AnyObject? - let status = withUnsafeMutablePointer(&result) { SecItemCopyMatching(queryAttributes, UnsafeMutablePointer($0)) } + let status = withUnsafeMutablePointer(to: &result) { SecItemCopyMatching(queryAttributes as CFDictionary, UnsafeMutablePointer($0)) } if status == errSecSuccess { if let resultDictionary = result as? NSDictionary { - if let resultData = resultDictionary[kSecValueData as String] as? NSData { - if let currentUser = NSKeyedUnarchiver.unarchiveObjectWithData(resultData) as? UsergridUser { + if let resultData = resultDictionary[kSecValueData as String] as? Data { + if let currentUser = NSKeyedUnarchiver.unarchiveObject(with: resultData) as? UsergridUser { return currentUser } } @@ -158,15 +158,15 @@ internal extension UsergridUser { return nil } - static func saveCurrentUserKeychainItem(client:UsergridClient, currentUser:UsergridUser) { + static func saveCurrentUserKeychainItem(_ client:UsergridClient, currentUser:UsergridUser) { var queryAttributes = UsergridUser.userKeychainItem(client) - queryAttributes[kSecReturnData as String] = kCFBooleanTrue as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanTrue as Bool + queryAttributes[kSecReturnData as String] = (kCFBooleanTrue != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanTrue != nil) as Bool - if SecItemCopyMatching(queryAttributes,nil) == errSecSuccess // Do we need to update keychain item or add a new one. + if SecItemCopyMatching(queryAttributes as CFDictionary,nil) == errSecSuccess // Do we need to update keychain item or add a new one. { - let attributesToUpdate = [kSecValueData as String:NSKeyedArchiver.archivedDataWithRootObject(currentUser)] - let updateStatus = SecItemUpdate(UsergridUser.userKeychainItem(client), attributesToUpdate) + let attributesToUpdate = [kSecValueData as String:NSKeyedArchiver.archivedData(withRootObject: currentUser)] + let updateStatus = SecItemUpdate(UsergridUser.userKeychainItem(client) as CFDictionary, attributesToUpdate as CFDictionary) if updateStatus != errSecSuccess { print("Error updating current user data to keychain!") } @@ -174,20 +174,20 @@ internal extension UsergridUser { else { var keychainItem = UsergridUser.userKeychainItem(client) - keychainItem[kSecValueData as String] = NSKeyedArchiver.archivedDataWithRootObject(currentUser) - let status = SecItemAdd(keychainItem, nil) + keychainItem[kSecValueData as String] = NSKeyedArchiver.archivedData(withRootObject: currentUser) + let status = SecItemAdd(keychainItem as CFDictionary, nil) if status != errSecSuccess { print("Error adding current user data to keychain!") } } } - static func deleteCurrentUserKeychainItem(client:UsergridClient) { + static func deleteCurrentUserKeychainItem(_ client:UsergridClient) { var queryAttributes = UsergridUser.userKeychainItem(client) - queryAttributes[kSecReturnData as String] = kCFBooleanFalse as Bool - queryAttributes[kSecReturnAttributes as String] = kCFBooleanFalse as Bool - if SecItemCopyMatching(queryAttributes,nil) == errSecSuccess { - let deleteStatus = SecItemDelete(queryAttributes) + queryAttributes[kSecReturnData as String] = (kCFBooleanFalse != nil) as Bool + queryAttributes[kSecReturnAttributes as String] = (kCFBooleanFalse != nil) as Bool + if SecItemCopyMatching(queryAttributes as CFDictionary,nil) == errSecSuccess { + let deleteStatus = SecItemDelete(queryAttributes as CFDictionary) if deleteStatus != errSecSuccess { print("Error deleting current user data to keychain!") } diff --git a/Source/UsergridQuery.swift b/Source/UsergridQuery.swift index c2a7000..a5c05bd 100644 --- a/Source/UsergridQuery.swift +++ b/Source/UsergridQuery.swift @@ -55,7 +55,7 @@ public class UsergridQuery : NSObject,NSCopying { - returns: Returns a new instance that’s a copy of the receiver. */ - public func copyWithZone(zone: NSZone) -> AnyObject { + public func copy(with zone: NSZone?) -> Any { let queryCopy = UsergridQuery(self.collectionName) queryCopy.requirementStrings = NSArray(array:self.requirementStrings, copyItems: true) as! [String] queryCopy.urlTerms = NSArray(array:self.urlTerms, copyItems: true) as! [String] @@ -76,7 +76,7 @@ public class UsergridQuery : NSObject,NSCopying { - returns: The constructed URL query sting. */ - public func build(autoURLEncode: Bool = true) -> String { + public func build(_ autoURLEncode: Bool = true) -> String { return self.constructURLAppend(autoURLEncode) } @@ -90,7 +90,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func contains(term: String, value: String) -> Self { return self.containsWord(term, value: value) } + @discardableResult + public func contains(_ term: String, value: String) -> Self { return self.containsWord(term, value: value) } /** @@ -101,7 +102,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func containsString(term: String, value: String) -> Self { return self.containsWord(term, value: value) } + @discardableResult + public func containsString(_ term: String, value: String) -> Self { return self.containsWord(term, value: value) } /** Contains. Query: where term contains 'val%'. @@ -111,7 +113,14 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func containsWord(term: String, value: String) -> Self { return self.addRequirement(term + UsergridQuery.SPACE + UsergridQuery.CONTAINS + UsergridQuery.SPACE + ((value.isUuid()) ? UsergridQuery.EMPTY_STRING : UsergridQuery.APOSTROPHE) + value + ((value.isUuid()) ? UsergridQuery.EMPTY_STRING : UsergridQuery.APOSTROPHE)) } + @discardableResult + public func containsWord(_ term: String, value: String) -> Self { + var operationValue: String = value + if !value.isUuid() { + operationValue = UsergridQuery.APOSTROPHE + value + UsergridQuery.APOSTROPHE + } + return self.addRequirement(term + UsergridQuery.SPACE + UsergridQuery.CONTAINS + UsergridQuery.SPACE + operationValue) + } /** Sort ascending. Query:. order by term asc. @@ -120,7 +129,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func ascending(term: String) -> Self { return self.asc(term) } + @discardableResult + public func ascending(_ term: String) -> Self { return self.asc(term) } /** Sort ascending. Query:. order by term asc. @@ -129,7 +139,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func asc(term: String) -> Self { return self.sort(term, sortOrder: .Asc) } + @discardableResult + public func asc(_ term: String) -> Self { return self.sort(term, sortOrder: .asc) } /** Sort descending. Query: order by term desc @@ -138,7 +149,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func descending(term: String) -> Self { return self.desc(term) } + @discardableResult + public func descending(_ term: String) -> Self { return self.desc(term) } /** Sort descending. Query: order by term desc @@ -147,7 +159,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func desc(term: String) -> Self { return self.sort(term, sortOrder: .Desc) } + @discardableResult + public func desc(_ term: String) -> Self { return self.sort(term, sortOrder: .desc) } /** Filter (or Equal-to). Query: where term = 'value'. @@ -157,7 +170,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func filter(term: String, value: AnyObject) -> Self { return self.eq(term, value: value) } + @discardableResult + public func filter(_ term: String, value: Any) -> Self { return self.eq(term, value: value) } /** Equal-to. Query: where term = 'value'. @@ -167,7 +181,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func equals(term: String, value: AnyObject) -> Self { return self.eq(term, value: value) } + @discardableResult + public func equals(_ term: String, value: Any) -> Self { return self.eq(term, value: value) } /** Equal-to. Query: where term = 'value'. @@ -177,7 +192,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func eq(term: String, value: AnyObject) -> Self { return self.addOperationRequirement(term, operation:.Equal, value: value) } + @discardableResult + public func eq(_ term: String, value: Any) -> Self { return self.addOperationRequirement(term, operation:.equal, value: value) } /** Greater-than. Query: where term > 'value'. @@ -187,7 +203,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func greaterThan(term: String, value: AnyObject) -> Self { return self.gt(term, value: value) } + @discardableResult + public func greaterThan(_ term: String, value: Any) -> Self { return self.gt(term, value: value) } /** Greater-than. Query: where term > 'value'. @@ -197,7 +214,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func gt(term: String, value: AnyObject) -> Self { return self.addOperationRequirement(term, operation:.GreaterThan, value: value) } + @discardableResult + public func gt(_ term: String, value: Any) -> Self { return self.addOperationRequirement(term, operation:.greaterThan, value: value) } /** Greater-than-or-equal-to. Query: where term >= 'value'. @@ -207,7 +225,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func greaterThanOrEqual(term: String, value: AnyObject) -> Self { return self.gte(term, value: value) } + @discardableResult + public func greaterThanOrEqual(_ term: String, value: Any) -> Self { return self.gte(term, value: value) } /** Greater-than-or-equal-to. Query: where term >= 'value'. @@ -217,7 +236,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func gte(term: String, value: AnyObject) -> Self { return self.addOperationRequirement(term, operation:.GreaterThanEqualTo, value: value) } + @discardableResult + public func gte(_ term: String, value: Any) -> Self { return self.addOperationRequirement(term, operation:.greaterThanEqualTo, value: value) } /** Less-than. Query: where term < 'value'. @@ -227,7 +247,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func lessThan(term: String, value: AnyObject) -> Self { return self.lt(term, value: value) } + @discardableResult + public func lessThan(_ term: String, value: Any) -> Self { return self.lt(term, value: value) } /** Less-than. Query: where term < 'value'. @@ -237,7 +258,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func lt(term: String, value: AnyObject) -> Self { return self.addOperationRequirement(term, operation:.LessThan, value: value) } + @discardableResult + public func lt(_ term: String, value: Any) -> Self { return self.addOperationRequirement(term, operation:.lessThan, value: value) } /** Less-than-or-equal-to. Query: where term <= 'value'. @@ -247,7 +269,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func lessThanOrEqual(term: String, value: AnyObject) -> Self { return self.lte(term, value: value) } + @discardableResult + public func lessThanOrEqual(_ term: String, value: Any) -> Self { return self.lte(term, value: value) } /** Less-than-or-equal-to. Query: where term <= 'value'. @@ -257,7 +280,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func lte(term: String, value: AnyObject) -> Self { return self.addOperationRequirement(term, operation:.LessThanEqualTo, value: value) } + @discardableResult + public func lte(_ term: String, value: Any) -> Self { return self.addOperationRequirement(term, operation:.lessThanEqualTo, value: value) } /** Contains. Query: location within val of lat, long. @@ -268,7 +292,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func locationWithin(distance: Float, latitude: Float, longitude: Float) -> Self { + @discardableResult + public func locationWithin(_ distance: Float, latitude: Float, longitude: Float) -> Self { return self.addRequirement(UsergridQuery.LOCATION + UsergridQuery.SPACE + UsergridQuery.WITHIN + UsergridQuery.SPACE + distance.description + UsergridQuery.SPACE + UsergridQuery.OF + UsergridQuery.SPACE + latitude.description + UsergridQuery.COMMA + longitude.description ) } @@ -277,10 +302,11 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ + @discardableResult public func or() -> Self { if !self.requirementStrings.first!.isEmpty { - self.requirementStrings.insert(UsergridQuery.OR, atIndex: 0) - self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, atIndex: 0) + self.requirementStrings.insert(UsergridQuery.OR, at: 0) + self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, at: 0) } return self } @@ -290,10 +316,11 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ + @discardableResult public func and() -> Self { if !self.requirementStrings.first!.isEmpty { - self.requirementStrings.insert(UsergridQuery.AND, atIndex: 0) - self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, atIndex: 0) + self.requirementStrings.insert(UsergridQuery.AND, at: 0) + self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, at: 0) } return self } @@ -303,10 +330,11 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ + @discardableResult public func not() -> Self { if !self.requirementStrings.first!.isEmpty { - self.requirementStrings.insert(UsergridQuery.NOT, atIndex: 0) - self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, atIndex: 0) + self.requirementStrings.insert(UsergridQuery.NOT, at: 0) + self.requirementStrings.insert(UsergridQuery.EMPTY_STRING, at: 0) } return self } @@ -319,7 +347,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func sort(term: String, sortOrder: UsergridQuerySortOrder) -> Self { + @discardableResult + public func sort(_ term: String, sortOrder: UsergridQuerySortOrder) -> Self { self.orderClauses[term] = sortOrder return self } @@ -331,7 +360,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func collection(collectionName: String) -> Self { + @discardableResult + public func collection(_ collectionName: String) -> Self { self.collectionName = collectionName return self } @@ -343,7 +373,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func type(type: String) -> Self { + @discardableResult + public func type(_ type: String) -> Self { self.collectionName = type return self } @@ -355,7 +386,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func limit(limit: Int) -> Self { + @discardableResult + public func limit(_ limit: Int) -> Self { self.limit = limit return self } @@ -367,7 +399,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func ql(value: String) -> Self { + @discardableResult + public func ql(_ value: String) -> Self { return self.addRequirement(value) } @@ -378,7 +411,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func cursor(value: String?) -> Self { + @discardableResult + public func cursor(_ value: String?) -> Self { self.cursor = value return self } @@ -390,7 +424,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func fromString(value: String?) -> Self { + @discardableResult + public func fromString(_ value: String?) -> Self { self.fromStringValue = value return self } @@ -403,11 +438,12 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func urlTerm(term: String, equalsValue: String) -> Self { - if (term as NSString).isEqualToString(UsergridQuery.QL) { - self.ql(equalsValue) + @discardableResult + public func urlTerm(_ term: String, equalsValue: String) -> Self { + if term == UsergridQuery.QL { + return self.ql(equalsValue) } else { - self.urlTerms.append(term + UsergridQueryOperator.Equal.stringValue + equalsValue) + self.urlTerms.append(term + UsergridQueryOperator.equal.stringValue + equalsValue) } return self } @@ -421,7 +457,8 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func addOperationRequirement(term: String, operation: UsergridQueryOperator, stringValue: String) -> Self { + @discardableResult + public func addOperationRequirement(_ term: String, operation: UsergridQueryOperator, stringValue: String) -> Self { return self.addOperationRequirement(term,operation:operation,value:stringValue) } @@ -434,25 +471,32 @@ public class UsergridQuery : NSObject,NSCopying { - returns: `Self` */ - public func addOperationRequirement(term: String, operation: UsergridQueryOperator, intValue: Int) -> Self { + @discardableResult + public func addOperationRequirement(_ term: String, operation: UsergridQueryOperator, intValue: Int) -> Self { return self.addOperationRequirement(term,operation:operation,value:intValue) } - - private func addRequirement(requirement: String) -> Self { - var requirementString: String = self.requirementStrings.removeAtIndex(0) + + @discardableResult + private func addRequirement(_ requirement: String) -> Self { + var requirementString: String = self.requirementStrings.remove(at: 0) if !requirementString.isEmpty { requirementString += UsergridQuery.SPACE + UsergridQuery.AND + UsergridQuery.SPACE } requirementString += requirement - self.requirementStrings.insert(requirementString, atIndex: 0) + self.requirementStrings.insert(requirementString, at: 0) return self } - - private func addOperationRequirement(term: String, operation: UsergridQueryOperator, value: AnyObject) -> Self { - if value is String { - return self.addRequirement(term + UsergridQuery.SPACE + operation.stringValue + UsergridQuery.SPACE + ((value.description.isUuid()) ? UsergridQuery.EMPTY_STRING : UsergridQuery.APOSTROPHE) + value.description + ((value.description.isUuid()) ? UsergridQuery.EMPTY_STRING : UsergridQuery.APOSTROPHE) ) + + @discardableResult + private func addOperationRequirement(_ term: String, operation: UsergridQueryOperator, value: Any) -> Self { + if let stringValue = value as? String { + var operationValue: String = stringValue + if !stringValue.isUuid() { + operationValue = UsergridQuery.APOSTROPHE + stringValue + UsergridQuery.APOSTROPHE + } + return self.addRequirement(term + UsergridQuery.SPACE + operation.stringValue + UsergridQuery.SPACE + operationValue) } else { - return self.addRequirement(term + UsergridQuery.SPACE + operation.stringValue + UsergridQuery.SPACE + value.description) + return self.addRequirement(term + UsergridQuery.SPACE + operation.stringValue + UsergridQuery.SPACE + (value as AnyObject).description ) } } @@ -477,7 +521,7 @@ public class UsergridQuery : NSObject,NSCopying { } private func constructURLTermsString() -> String { - return (self.urlTerms as NSArray).componentsJoinedByString(UsergridQuery.AMPERSAND) + return self.urlTerms.joined(separator: UsergridQuery.AMPERSAND) } private func constructRequirementString() -> String { @@ -485,25 +529,25 @@ public class UsergridQuery : NSObject,NSCopying { var requirementStrings = self.requirementStrings // If the first requirement is empty lets remove it. - if let firstRequirement = requirementStrings.first where firstRequirement.isEmpty { + if let firstRequirement = requirementStrings.first , firstRequirement.isEmpty { requirementStrings.removeFirst() } // If the first requirement now is a conditional separator then we should remove it so its not placed at the end of the constructed string. - if let firstRequirement = requirementStrings.first where firstRequirement == UsergridQuery.OR || firstRequirement == UsergridQuery.NOT { + if let firstRequirement = requirementStrings.first , firstRequirement == UsergridQuery.OR || firstRequirement == UsergridQuery.NOT { requirementStrings.removeFirst() } - requirementsString = (requirementStrings.reverse() as NSArray).componentsJoinedByString(UsergridQuery.SPACE) + requirementsString = requirementStrings.reversed().joined(separator: UsergridQuery.SPACE) return requirementsString } - private func constructURLAppend(autoURLEncode: Bool = true) -> String { + private func constructURLAppend(_ autoURLEncode: Bool = true) -> String { if let fromString = self.fromStringValue { var requirementsString = fromString if autoURLEncode { - if let encodedRequirementsString = fromString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) { + if let encodedRequirementsString = fromString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { requirementsString = encodedRequirementsString } } @@ -521,7 +565,7 @@ public class UsergridQuery : NSObject,NSCopying { } urlAppend += urlTermsString } - if let cursorString = self.cursor where !cursorString.isEmpty { + if let cursorString = self.cursor , !cursorString.isEmpty { if !urlAppend.isEmpty { urlAppend += UsergridQuery.AMPERSAND } @@ -535,7 +579,7 @@ public class UsergridQuery : NSObject,NSCopying { } if !requirementsString.isEmpty { if autoURLEncode { - if let encodedRequirementsString = requirementsString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) { + if let encodedRequirementsString = requirementsString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { requirementsString = encodedRequirementsString } } diff --git a/Source/UsergridRequest.swift b/Source/UsergridRequest.swift index 0a651e2..f0bdf42 100644 --- a/Source/UsergridRequest.swift +++ b/Source/UsergridRequest.swift @@ -54,7 +54,7 @@ public class UsergridRequest : NSObject { public let headers: [String:String]? /// The JSON body that will be set on the request. Can be either a valid JSON object or NSData. - public let jsonBody: AnyObject? + public let jsonBody: Any? /// The query params that will be set on the request. public let queryParams: [String:String]? @@ -81,7 +81,7 @@ public class UsergridRequest : NSObject { query:UsergridQuery? = nil, auth:UsergridAuth? = nil, headers:[String:String]? = nil, - jsonBody:AnyObject? = nil, + jsonBody:Any? = nil, queryParams:[String:String]? = nil) { self.method = method self.baseUrl = baseUrl @@ -90,7 +90,7 @@ public class UsergridRequest : NSObject { self.headers = headers self.query = query self.queryParams = queryParams - if let body = jsonBody where (body is NSData || NSJSONSerialization.isValidJSONObject(body)) { + if let body = jsonBody , (body is Data || JSONSerialization.isValidJSONObject(body)) { self.jsonBody = body } else { self.jsonBody = nil @@ -104,20 +104,20 @@ public class UsergridRequest : NSObject { - returns: An initialized and configured `NSURLRequest` object. */ - public func buildNSURLRequest() -> NSURLRequest { - let request = NSMutableURLRequest(URL: self.buildURL()) - request.HTTPMethod = self.method.stringValue + public func buildNSURLRequest() -> URLRequest { + let request = NSMutableURLRequest(url: self.buildURL()) + request.httpMethod = self.method.stringValue self.applyHeaders(request) self.applyBody(request) self.applyAuth(request) - return request + return request as URLRequest } - private func buildURL() -> NSURL { + private func buildURL() -> URL { var constructedURLString = self.baseUrl if let appendingPaths = self.paths { for pathToAppend in appendingPaths { - if let encodedPath = pathToAppend.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLPathAllowedCharacterSet()) { + if let encodedPath = pathToAppend.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlPathAllowed) { constructedURLString = "\(constructedURLString)\(UsergridRequest.FORWARD_SLASH)\(encodedPath)" } } @@ -129,19 +129,19 @@ public class UsergridRequest : NSObject { } } if let queryParams = self.queryParams { - if let components = NSURLComponents(string: constructedURLString) { + if var components = URLComponents(string: constructedURLString) { components.queryItems = components.queryItems ?? [] for (key, value) in queryParams { - let q: NSURLQueryItem = NSURLQueryItem(name: key, value: value) + let q: URLQueryItem = URLQueryItem(name: key, value: value) components.queryItems!.append(q) } constructedURLString = components.string! } } - return NSURL(string:constructedURLString)! + return URL(string:constructedURLString)! } - private func applyHeaders(request:NSMutableURLRequest) { + fileprivate func applyHeaders(_ request:NSMutableURLRequest) { if let httpHeaders = self.headers { for (key,value) in httpHeaders { request.setValue(value, forHTTPHeaderField: key) @@ -149,14 +149,14 @@ public class UsergridRequest : NSObject { } } - private func applyBody(request:NSMutableURLRequest) { - if let jsonBody = self.jsonBody, httpBody = UsergridRequest.jsonBodyToData(jsonBody) { - request.HTTPBody = httpBody - request.setValue(String(format: "%lu", httpBody.length), forHTTPHeaderField: UsergridRequest.CONTENT_LENGTH) + private func applyBody(_ request:NSMutableURLRequest) { + if let jsonBody = self.jsonBody, let httpBody = UsergridRequest.jsonBodyToData(jsonBody) { + request.httpBody = httpBody + request.setValue(String(format: "%lu", httpBody.count), forHTTPHeaderField: UsergridRequest.CONTENT_LENGTH) } } - private func applyAuth(request:NSMutableURLRequest) { + private func applyAuth(_ request:NSMutableURLRequest) { if let usergridAuth = self.auth { if usergridAuth.isValid, let accessToken = usergridAuth.accessToken { request.setValue("\(UsergridRequest.BEARER) \(accessToken)", forHTTPHeaderField: UsergridRequest.AUTHORIZATION) @@ -164,26 +164,28 @@ public class UsergridRequest : NSObject { } } - private static func jsonBodyToData(jsonBody:AnyObject) -> NSData? { - if let jsonBodyAsNSData = jsonBody as? NSData { + private static func jsonBodyToData(_ jsonBody:Any) -> Data? { + if let jsonBodyAsNSData = jsonBody as? Data { return jsonBodyAsNSData } else { - var jsonBodyAsNSData: NSData? = nil - do { jsonBodyAsNSData = try NSJSONSerialization.dataWithJSONObject(jsonBody, options: NSJSONWritingOptions(rawValue: 0)) } + var jsonBodyAsNSData: Data? = nil + do { jsonBodyAsNSData = try JSONSerialization.data(withJSONObject: jsonBody, options: JSONSerialization.WritingOptions(rawValue: 0)) } catch { print(error) } return jsonBodyAsNSData } } - private static let AUTHORIZATION = "Authorization" - private static let ACCESS_TOKEN = "access_token" - private static let APPLICATION_JSON = "application/json; charset=utf-8" - private static let BEARER = "Bearer" - private static let CONTENT_LENGTH = "Content-Length" - private static let CONTENT_TYPE = "Content-Type" - private static let FORWARD_SLASH = "/" + fileprivate static let AUTHORIZATION = "Authorization" + fileprivate static let ACCESS_TOKEN = "access_token" + fileprivate static let APPLICATION_JSON = "application/json; charset=utf-8" + fileprivate static let BEARER = "Bearer" + fileprivate static let CONTENT_LENGTH = "Content-Length" + fileprivate static let CONTENT_TYPE = "Content-Type" + fileprivate static let FORWARD_SLASH = "/" - static let JSON_CONTENT_TYPE_HEADER = [UsergridRequest.CONTENT_TYPE:UsergridRequest.APPLICATION_JSON] + static func jsonHeaderContentType() -> [String:String] { + return [UsergridRequest.CONTENT_TYPE:UsergridRequest.APPLICATION_JSON] + } } /** @@ -197,15 +199,16 @@ public class UsergridAssetUploadRequest: UsergridRequest { public let asset: UsergridAsset /// A constructed multipart http body for requests to upload. - public var multiPartHTTPBody: NSData { + public var multiPartHTTPBody: Data { let httpBodyString = UsergridAssetUploadRequest.MULTIPART_START + "\(UsergridAssetUploadRequest.CONTENT_DISPOSITION):\(UsergridAssetUploadRequest.FORM_DATA); name=file; filename=\(self.asset.filename)\r\n" + - "\(UsergridRequest.CONTENT_TYPE): \(self.asset.contentType)\r\n\r\n" as NSString + "\(UsergridRequest.CONTENT_TYPE): \(self.asset.contentType)\r\n\r\n" + - let httpBody = NSMutableData() - httpBody.appendData(httpBodyString.dataUsingEncoding(NSUTF8StringEncoding)!) - httpBody.appendData(self.asset.data) - httpBody.appendData(UsergridAssetUploadRequest.MULTIPART_END.dataUsingEncoding(NSUTF8StringEncoding)!) + var httpBody = Data() + httpBody.append(httpBodyString.data(using: String.Encoding.utf8)!) + httpBody.append(self.asset.data) + httpBody.append(UsergridAssetUploadRequest.MULTIPART_END.data(using: String.Encoding.utf8)!) return httpBody } @@ -227,19 +230,19 @@ public class UsergridAssetUploadRequest: UsergridRequest { auth:UsergridAuth? = nil, asset:UsergridAsset) { self.asset = asset - super.init(method: .Put, baseUrl: baseUrl, paths: paths, auth: auth) + super.init(method: .put, baseUrl: baseUrl, paths: paths, auth: auth) } - private override func applyHeaders(request: NSMutableURLRequest) { + fileprivate override func applyHeaders(_ request: NSMutableURLRequest) { super.applyHeaders(request) request.setValue(UsergridAssetUploadRequest.ASSET_UPLOAD_CONTENT_HEADER, forHTTPHeaderField: UsergridRequest.CONTENT_TYPE) - request.setValue(String(format: "%lu", self.multiPartHTTPBody.length), forHTTPHeaderField: UsergridRequest.CONTENT_LENGTH) + request.setValue(String(format: "%lu", self.multiPartHTTPBody.count), forHTTPHeaderField: UsergridRequest.CONTENT_LENGTH) } private static let ASSET_UPLOAD_BOUNDARY = "usergrid-asset-upload-boundary" private static let ASSET_UPLOAD_CONTENT_HEADER = "multipart/form-data; boundary=\(UsergridAssetUploadRequest.ASSET_UPLOAD_BOUNDARY)" private static let CONTENT_DISPOSITION = "Content-Disposition" private static let MULTIPART_START = "--\(UsergridAssetUploadRequest.ASSET_UPLOAD_BOUNDARY)\r\n" - private static let MULTIPART_END = "\r\n--\(UsergridAssetUploadRequest.ASSET_UPLOAD_BOUNDARY)--\r\n" as NSString + private static let MULTIPART_END = "\r\n--\(UsergridAssetUploadRequest.ASSET_UPLOAD_BOUNDARY)--\r\n" private static let FORM_DATA = "form-data" } diff --git a/Source/UsergridRequestManager.swift b/Source/UsergridRequestManager.swift index 46a4213..a876f81 100644 --- a/Source/UsergridRequestManager.swift +++ b/Source/UsergridRequestManager.swift @@ -30,7 +30,7 @@ final class UsergridRequestManager { unowned let client: UsergridClient - let session: NSURLSession + let session: URLSession var sessionDelegate : UsergridSessionDelegate { return session.delegate as! UsergridSessionDelegate @@ -39,19 +39,19 @@ final class UsergridRequestManager { init(client:UsergridClient) { self.client = client - let config = NSURLSessionConfiguration.defaultSessionConfiguration() + let config = URLSessionConfiguration.default #if os(tvOS) - config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-tvOS/v\(UsergridSDKVersion)"] + config.httpAdditionalHeaders = ["User-Agent": "usergrid-tvOS/v\(UsergridSDKVersion)"] #elseif os(iOS) - config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-ios/v\(UsergridSDKVersion)"] + config.httpAdditionalHeaders = ["User-Agent": "usergrid-ios/v\(UsergridSDKVersion)"] #elseif os(watchOS) - config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-watchOS/v\(UsergridSDKVersion)"] + config.httpAdditionalHeaders = ["User-Agent": "usergrid-watchOS/v\(UsergridSDKVersion)"] #elseif os(OSX) - config.HTTPAdditionalHeaders = ["User-Agent": "usergrid-osx/v\(UsergridSDKVersion)"] + config.httpAdditionalHeaders = ["User-Agent": "usergrid-osx/v\(UsergridSDKVersion)"] #endif - self.session = NSURLSession(configuration: config, + self.session = URLSession(configuration: config, delegate: UsergridSessionDelegate(), delegateQueue: nil) } @@ -60,11 +60,11 @@ final class UsergridRequestManager { session.invalidateAndCancel() } - func performRequest(request:UsergridRequest, completion:UsergridResponseCompletion?) { - session.dataTaskWithRequest(request.buildNSURLRequest()) { [weak self] (data, response, error) -> Void in - let response = UsergridResponse(client:self?.client, data: data, response: response as? NSHTTPURLResponse, error: error) - dispatch_async(dispatch_get_main_queue()) { - completion?(response: response) + func performRequest(_ request:UsergridRequest, completion:UsergridResponseCompletion?) { + session.dataTask(with: request.buildNSURLRequest()) { [weak self] (data, response, error) -> Void in + let usergridResponse = UsergridResponse(client:self?.client, data: data, response: response as? HTTPURLResponse, error: error as NSError?) + DispatchQueue.main.async { + completion?(usergridResponse) } }.resume() } @@ -74,32 +74,32 @@ final class UsergridRequestManager { // MARK: - Authentication - extension UsergridRequestManager { - static func getTokenAndExpiryFromResponseJSON(jsonDict:[String:AnyObject]) -> (token:String?,expiry:NSDate?) { + static func getTokenAndExpiryFromResponseJSON(_ jsonDict:[String:Any]) -> (token:String?,expiry:Date?) { var token: String? = nil - var expiry: NSDate? = nil + var expiry: Date? = 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: NSTimeInterval(expiresInAdjusted)) + expiry = Date(timeIntervalSinceNow: TimeInterval(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) + func performUserAuthRequest(_ userAuth:UsergridUserAuth, request:UsergridRequest, completion:UsergridUserAuthCompletionBlock?) { + session.dataTask(with: request.buildNSURLRequest()) { (data, response, error) -> Void in + let dataAsJSON = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) var createdUser: UsergridUser? = nil var responseError: UsergridResponseError? = nil - if let jsonDict = dataAsJSON as? [String:AnyObject] { + if let jsonDict = dataAsJSON as? [String:Any] { let tokenAndExpiry = UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict) userAuth.accessToken = tokenAndExpiry.token userAuth.expiry = tokenAndExpiry.expiry - if let userDict = jsonDict[UsergridUser.USER_ENTITY_TYPE] as? [String:AnyObject] { + if let userDict = jsonDict[UsergridUser.USER_ENTITY_TYPE] as? [String:Any] { if let newUser = UsergridEntity.entity(jsonDict: userDict) as? UsergridUser { newUser.auth = userAuth createdUser = newUser @@ -112,19 +112,19 @@ extension UsergridRequestManager { responseError = UsergridResponseError(errorName: "Auth Failed.", errorDescription: "Error Description: \(error?.localizedDescription).") } - dispatch_async(dispatch_get_main_queue()) { - completion?(auth: userAuth, user: createdUser, error: responseError) + DispatchQueue.main.async { + completion?(userAuth, createdUser, responseError) } }.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) + func performAppAuthRequest(_ appAuth: UsergridAppAuth, request: UsergridRequest, completion: UsergridAppAuthCompletionBlock?) { + session.dataTask(with: request.buildNSURLRequest()) { (data, response, error) -> Void in + let dataAsJSON = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) var responseError: UsergridResponseError? = nil - if let jsonDict = dataAsJSON as? [String:AnyObject] { + if let jsonDict = dataAsJSON as? [String:Any] { let tokenAndExpiry = UsergridRequestManager.getTokenAndExpiryFromResponseJSON(jsonDict) appAuth.accessToken = tokenAndExpiry.token appAuth.expiry = tokenAndExpiry.expiry @@ -132,8 +132,8 @@ extension UsergridRequestManager { responseError = UsergridResponseError(errorName: "Auth Failed.", errorDescription: "Error Description: \(error?.localizedDescription).") } - dispatch_async(dispatch_get_main_queue()) { - completion?(auth: appAuth, error: responseError) + DispatchQueue.main.async { + completion?(appAuth, responseError) } }.resume() } @@ -142,35 +142,35 @@ extension UsergridRequestManager { // MARK: - Asset Management - extension UsergridRequestManager { - func performAssetDownload(contentType:String, usergridRequest:UsergridRequest, progress: UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { - let downloadTask = session.downloadTaskWithRequest(usergridRequest.buildNSURLRequest()) + func performAssetDownload(_ contentType:String, usergridRequest:UsergridRequest, progress: UsergridAssetRequestProgress? = nil, completion:UsergridAssetDownloadCompletion? = nil) { + let downloadTask = session.downloadTask(with: usergridRequest.buildNSURLRequest()) let requestWrapper = UsergridAssetRequestWrapper(session: self.session, sessionTask: downloadTask, progress: progress) { (request) -> Void in var asset: UsergridAsset? = nil var responseError: UsergridResponseError? = nil - if let assetData = request.responseData where assetData.length > 0 { + if let assetData = request.responseData , assetData.count > 0 { asset = UsergridAsset(data: assetData, contentType: contentType) } else { responseError = UsergridResponseError(errorName: "Download Failed.", errorDescription: "Downloading asset failed. No data was recieved.") } - dispatch_async(dispatch_get_main_queue()) { - completion?(asset: asset, error: responseError) + DispatchQueue.main.async { + completion?(asset, responseError) } } 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) + func performAssetUpload(_ usergridRequest:UsergridAssetUploadRequest, progress:UsergridAssetRequestProgress? = nil, completion: UsergridAssetUploadCompletion? = nil) { + let uploadTask = session.uploadTask(with: usergridRequest.buildNSURLRequest() as URLRequest, from: usergridRequest.multiPartHTTPBody as Data) let requestWrapper = UsergridAssetRequestWrapper(session: self.session, sessionTask: uploadTask, progress: progress) { [weak self] (request) -> Void in - let response = UsergridResponse(client: self?.client, data: request.responseData, response: request.response as? NSHTTPURLResponse, error: request.error) - dispatch_async(dispatch_get_main_queue()) { - completion?(asset: usergridRequest.asset, response: response) + let response = UsergridResponse(client: self?.client, data: request.responseData, response: request.response as? HTTPURLResponse, error: request.error) + DispatchQueue.main.async { + completion?(usergridRequest.asset, response) } } self.sessionDelegate.addRequestDelegate(requestWrapper.sessionTask, requestWrapper:requestWrapper) requestWrapper.sessionTask.resume() } -} \ No newline at end of file +} diff --git a/Source/UsergridResponse.swift b/Source/UsergridResponse.swift index b9e58ec..525bfde 100644 --- a/Source/UsergridResponse.swift +++ b/Source/UsergridResponse.swift @@ -27,7 +27,7 @@ import Foundation /// The completion block used in for most `UsergridClient` requests. -public typealias UsergridResponseCompletion = (response: UsergridResponse) -> Void +public typealias UsergridResponseCompletion = (_ response: UsergridResponse) -> Void /** `UsergridResponse` is the core class that handles both successful and unsuccessful HTTP responses from Usergrid. @@ -44,7 +44,7 @@ public class UsergridResponse: NSObject { public weak var client: UsergridClient? /// The raw response JSON. - internal(set) public var responseJSON: [String:AnyObject]? + internal(set) public var responseJSON: [String:Any]? /// The query used on the request. internal(set) public var query: UsergridQuery? @@ -97,7 +97,7 @@ public class UsergridResponse: NSObject { /// The string value. public var stringValue : String { if let responseJSON = self.responseJSON { - return NSString(data: try! NSJSONSerialization.dataWithJSONObject(responseJSON, options: .PrettyPrinted), encoding: NSUTF8StringEncoding) as? String ?? "" + return NSString(data: try! JSONSerialization.data(withJSONObject: responseJSON, options: .prettyPrinted), encoding: String.Encoding.utf8.rawValue) as? String ?? "" } else { return error?.description ?? "" } @@ -142,10 +142,10 @@ public class UsergridResponse: NSObject { - returns: A new instance of `UsergridResponse`. */ - public init(client:UsergridClient?, data:NSData?, response:NSHTTPURLResponse?, error:NSError?, query:UsergridQuery? = nil) { + public init(client:UsergridClient?, data:Data?, response:HTTPURLResponse?, error:NSError?, query:UsergridQuery? = nil) { self.client = client self.statusCode = response?.statusCode - self.headers = response?.allHeaderFields as? [String:String] +// self.headers = response?.allHeaderFields as? [String:String] if let sessionError = error { self.error = UsergridResponseError(errorName: sessionError.domain, errorDescription: sessionError.localizedDescription) @@ -157,16 +157,16 @@ public class UsergridResponse: NSObject { if let jsonData = data { do { - let dataAsJSON = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers) - if let jsonDict = dataAsJSON as? [String:AnyObject] { + let dataAsJSON = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) + if let jsonDict = dataAsJSON as? [String:Any] { 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 { + if let entitiesJSONArray = jsonDict[UsergridResponse.ENTITIES] as? [[String:Any]] , entitiesJSONArray.count > 0 { self.entities = UsergridEntity.entities(jsonArray: entitiesJSONArray) } - if let cursor = jsonDict[UsergridResponse.CURSOR] as? String where !cursor.isEmpty { + if let cursor = jsonDict[UsergridResponse.CURSOR] as? String , !cursor.isEmpty { self.cursor = cursor } } @@ -186,7 +186,7 @@ public class UsergridResponse: NSObject { - parameter completion: The completion block that is called once the request for the next page has finished. */ - public func loadNextPage(completion: UsergridResponseCompletion) { + 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(query.cursor(self.cursor), queryCompletion:completion) @@ -194,7 +194,7 @@ public class UsergridResponse: NSObject { self.client?.GET(UsergridQuery(type).cursor(self.cursor), queryCompletion:completion) } } else { - completion(response: UsergridResponse(client: self.client, errorName: "No next page.", errorDescription: "No next page was found.")) + completion(UsergridResponse(client: self.client, errorName: "No next page.", errorDescription: "No next page was found.")) } } diff --git a/Source/UsergridResponseError.swift b/Source/UsergridResponseError.swift index eda8a30..f4dbc4a 100644 --- a/Source/UsergridResponseError.swift +++ b/Source/UsergridResponseError.swift @@ -74,9 +74,9 @@ public class UsergridResponseError: NSObject { - returns: A new instance of `UsergridResponseError` if the JSON dictionary did indeed contain error information. */ - public convenience init?(jsonDictionary:[String:AnyObject]) { + public convenience init?(jsonDictionary:[String:Any]) { if let errorName = jsonDictionary[USERGRID_ERROR] as? String, - errorDescription = jsonDictionary[USERGRID_ERROR_DESCRIPTION] as? String { + let errorDescription = jsonDictionary[USERGRID_ERROR_DESCRIPTION] as? String { self.init(errorName:errorName,errorDescription:errorDescription,exception:jsonDictionary[USERGRID_EXCEPTION] as? String) } else { self.init(errorName:"",errorDescription:"") @@ -87,4 +87,4 @@ public class UsergridResponseError: NSObject { let USERGRID_ERROR = "error" let USERGRID_ERROR_DESCRIPTION = "error_description" -let USERGRID_EXCEPTION = "exception" \ No newline at end of file +let USERGRID_EXCEPTION = "exception" diff --git a/Source/UsergridSessionDelegate.swift b/Source/UsergridSessionDelegate.swift index cb36fb7..7866c26 100644 --- a/Source/UsergridSessionDelegate.swift +++ b/Source/UsergridSessionDelegate.swift @@ -28,63 +28,63 @@ import Foundation final class UsergridSessionDelegate: NSObject { - private var requestDelegates: [Int:UsergridAssetRequestWrapper] = [:] + fileprivate var requestDelegates: [Int:UsergridAssetRequestWrapper] = [:] - func addRequestDelegate(task:NSURLSessionTask,requestWrapper:UsergridAssetRequestWrapper) { + func addRequestDelegate(_ task:URLSessionTask,requestWrapper:UsergridAssetRequestWrapper) { requestDelegates[task.taskIdentifier] = requestWrapper } - func removeRequestDelegate(task:NSURLSessionTask) { + func removeRequestDelegate(_ task:URLSessionTask) { requestDelegates[task.taskIdentifier] = nil } } -extension UsergridSessionDelegate : NSURLSessionTaskDelegate { +extension UsergridSessionDelegate : URLSessionTaskDelegate { - func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { + func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { if let progressBlock = requestDelegates[task.taskIdentifier]?.progress { - progressBlock(bytesFinished:totalBytesSent, bytesExpected: totalBytesExpectedToSend) + progressBlock(totalBytesSent, totalBytesExpectedToSend) } } - func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { + func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { if let requestWrapper = requestDelegates[task.taskIdentifier] { - requestWrapper.error = error - requestWrapper.completion(requestWrapper: requestWrapper) + requestWrapper.error = error as? NSError // WTF + requestWrapper.completion(requestWrapper) } self.removeRequestDelegate(task) } } -extension UsergridSessionDelegate : NSURLSessionDataDelegate { +extension UsergridSessionDelegate : URLSessionDataDelegate { - func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Swift.Void) { if let requestWrapper = requestDelegates[dataTask.taskIdentifier] { requestWrapper.response = response } - completionHandler(NSURLSessionResponseDisposition.Allow) + completionHandler(Foundation.URLSession.ResponseDisposition.allow) } - func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) { + public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { if let requestWrapper = requestDelegates[dataTask.taskIdentifier] { - let mutableData = requestWrapper.responseData != nil ? NSMutableData(data: requestWrapper.responseData!) : NSMutableData() - mutableData.appendData(data) + var mutableData = requestWrapper.responseData != nil ? (NSMutableData(data: requestWrapper.responseData!) as Data) : Data() + mutableData.append(data) requestWrapper.responseData = mutableData } } } -extension UsergridSessionDelegate : NSURLSessionDownloadDelegate { +extension UsergridSessionDelegate : URLSessionDownloadDelegate { - func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { + func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { if let progressBlock = requestDelegates[downloadTask.taskIdentifier]?.progress { - progressBlock(bytesFinished:totalBytesWritten, bytesExpected: totalBytesExpectedToWrite) + progressBlock(totalBytesWritten, totalBytesExpectedToWrite) } } - func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) { + func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { if let requestWrapper = requestDelegates[downloadTask.taskIdentifier] { - requestWrapper.responseData = NSData(contentsOfURL: location)! + requestWrapper.responseData = try! Data(contentsOf: location) } } -} \ No newline at end of file +} diff --git a/Source/UsergridUser.swift b/Source/UsergridUser.swift index 17415ba..f01430b 100644 --- a/Source/UsergridUser.swift +++ b/Source/UsergridUser.swift @@ -27,10 +27,10 @@ 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 +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 +public typealias UsergridUserResetPasswordCompletion = (_ error: UsergridResponseError?, _ didSucceed:Bool) -> Void /** `UsergridUser` is a special subclass of `UsergridEntity` that supports functions and properties unique to users. @@ -50,32 +50,32 @@ public class UsergridUser : UsergridEntity { 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 } + 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 } + 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 } + 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 } + 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 } + 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`. @@ -87,14 +87,14 @@ public class UsergridUser : UsergridEntity { 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 } + 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 } + set(disabled) { self[UsergridUserProperties.disabled.stringValue] = disabled } + get { return self.getUserSpecificProperty(.disabled) as? Bool ?? false } } /** @@ -103,8 +103,8 @@ public class UsergridUser : UsergridEntity { 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 } + set(picture) { self[UsergridUserProperties.picture.stringValue] = picture } + get { return self.getUserSpecificProperty(.picture) as? String } } /// The UUID or username property value if found. @@ -132,7 +132,7 @@ public class UsergridUser : UsergridEntity { - returns: A new `UsergridUser` object. */ - required public init(type: String, name: String?, propertyDict: [String : AnyObject]?) { + required public init(type: String, name: String?, propertyDict: [String : Any]?) { super.init(type: type, name: name, propertyDict: propertyDict) } @@ -144,7 +144,7 @@ public class UsergridUser : UsergridEntity { - returns: A new instance of `UsergridUser`. */ - public init(name:String,propertyDict:[String:AnyObject]? = nil) { + public init(name:String,propertyDict:[String:Any]? = nil) { super.init(type: UsergridUser.USER_ENTITY_TYPE, name:name, propertyDict:propertyDict) } @@ -225,7 +225,7 @@ public class UsergridUser : UsergridEntity { - returns: A decoded `UsergridUser` object. */ required public init?(coder aDecoder: NSCoder) { - self.auth = aDecoder.decodeObjectForKey("auth") as? UsergridUserAuth + self.auth = aDecoder.decodeObject(forKey: "auth") as? UsergridUserAuth super.init(coder: aDecoder) } @@ -234,9 +234,9 @@ public class UsergridUser : UsergridEntity { - parameter aCoder: The encoder. */ - public override func encodeWithCoder(aCoder: NSCoder) { - aCoder.encodeObject(self.auth, forKey: "auth") - super.encodeWithCoder(aCoder) + public override func encode(with aCoder: NSCoder) { + aCoder.encode(self.auth, forKey: "auth") + super.encode(with: aCoder) } // MARK: - Class Methods - @@ -248,7 +248,7 @@ public class UsergridUser : UsergridEntity { - parameter username: The optional username. - parameter completion: The completion block. */ - public static func checkAvailable(email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) { + public static func checkAvailable(_ email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) { self.checkAvailable(Usergrid.sharedInstance, email: email, username: username, completion: completion) } @@ -260,16 +260,16 @@ public class UsergridUser : UsergridEntity { - parameter username: The optional username. - parameter completion: The completion block. */ - public static func checkAvailable(client: UsergridClient, email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) { + 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) + query.eq(UsergridUserProperties.email.stringValue, value: emailValue) } if let usernameValue = username { - query.or().eq(UsergridUserProperties.Username.stringValue, value: usernameValue) + query.or().eq(UsergridUserProperties.username.stringValue, value: usernameValue) } client.GET(query) { (response) -> Void in - completion(error: response.error, available: response.entity == nil) + completion(response.error, response.entity == nil) } } @@ -280,7 +280,7 @@ public class UsergridUser : UsergridEntity { - parameter completion: The optional completion block. */ - public func create(completion: UsergridResponseCompletion? = nil) { + public func create(_ completion: UsergridResponseCompletion? = nil) { self.create(Usergrid.sharedInstance, completion: completion) } @@ -290,12 +290,12 @@ public class UsergridUser : UsergridEntity { - parameter client: The client to use for creation. - parameter completion: The optional completion block. */ - public func create(client: UsergridClient, completion: UsergridResponseCompletion? = nil) { + public func create(_ client: UsergridClient, completion: UsergridResponseCompletion? = nil) { client.POST(self) { (response) -> Void in if response.ok, let createdUser = response.user { self.copyInternalsFromEntity(createdUser) } - completion?(response: response) + completion?(response) } } @@ -308,7 +308,7 @@ public class UsergridUser : UsergridEntity { - parameter password: The password. - parameter completion: The optional completion block. */ - public func login(username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) { + public func login(_ username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) { self.login(Usergrid.sharedInstance, username: username, password: password, completion: completion) } @@ -322,11 +322,11 @@ public class UsergridUser : UsergridEntity { - parameter password: The password. - parameter completion: The optional completion block. */ - public func login(client: UsergridClient, username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) { + public func login(_ client: UsergridClient, username:String, password:String, completion: UsergridUserAuthCompletionBlock? = nil) { let userAuth = UsergridUserAuth(username: username, password: password) client.authenticateUser(userAuth,setAsCurrentUser:false) { (auth, user, error) -> Void in self.auth = userAuth - completion?(auth: userAuth, user: user, error: error) + completion?(userAuth, user, error) } } @@ -337,7 +337,7 @@ public class UsergridUser : UsergridEntity { - parameter new: The new password. - parameter completion: The optional completion block. */ - public func resetPassword(old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { + public func resetPassword(_ old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { self.resetPassword(Usergrid.sharedInstance, old: old, new: new, completion: completion) } @@ -349,7 +349,7 @@ public class UsergridUser : UsergridEntity { - parameter new: The new password. - parameter completion: The optional completion block */ - public func resetPassword(client: UsergridClient, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { + public func resetPassword(_ client: UsergridClient, old:String, new:String, completion:UsergridUserResetPasswordCompletion? = nil) { client.resetPassword(self, old: old, new: new, completion: completion) } @@ -358,7 +358,7 @@ public class UsergridUser : UsergridEntity { - parameter completion: The optional completion block. */ - public func reauthenticate(completion: UsergridUserAuthCompletionBlock? = nil) { + public func reauthenticate(_ completion: UsergridUserAuthCompletionBlock? = nil) { self.reauthenticate(Usergrid.sharedInstance, completion: completion) } @@ -368,10 +368,10 @@ public class UsergridUser : UsergridEntity { - parameter client: The client to use for reauthentication. - parameter completion: The optional completion block. */ - public func reauthenticate(client: UsergridClient, completion: UsergridUserAuthCompletionBlock? = nil) { + public func reauthenticate(_ client: UsergridClient, completion: UsergridUserAuthCompletionBlock? = nil) { guard let userAuth = self.auth else { - completion?(auth: nil, user: self, error: UsergridResponseError(errorName: "Invalid UsergridUserAuth.", errorDescription: "No UsergridUserAuth found on the UsergridUser.")) + completion?(nil, self, UsergridResponseError(errorName: "Invalid UsergridUserAuth.", errorDescription: "No UsergridUserAuth found on the UsergridUser.")) return } @@ -383,7 +383,7 @@ public class UsergridUser : UsergridEntity { - parameter completion: The optional completion block. */ - public func logout(completion:UsergridResponseCompletion? = nil) { + public func logout(_ completion:UsergridResponseCompletion? = nil) { self.logout(Usergrid.sharedInstance,completion:completion) } @@ -393,17 +393,17 @@ public class UsergridUser : UsergridEntity { - parameter client: The client to use for logout. - parameter completion: The optional completion block. */ - public func logout(client: UsergridClient, completion:UsergridResponseCompletion? = nil) { + public func logout(_ client: UsergridClient, completion:UsergridResponseCompletion? = nil) { guard let uuidOrUsername = self.uuidOrUsername, let accessToken = self.auth?.accessToken else { - completion?(response: UsergridResponse(client:client, errorName:"Logout Failed.", errorDescription:"UUID or Access Token not found on UsergridUser object.")) + completion?(UsergridResponse(client:client, errorName:"Logout Failed.", errorDescription:"UUID or Access Token not found on UsergridUser object.")) return } client.logoutUser(uuidOrUsername, token: accessToken) { (response) in self.auth = nil - completion?(response: response) + completion?(response) } } @@ -413,7 +413,7 @@ public class UsergridUser : UsergridEntity { - parameter device: The device to connect to. If nil it will use the `UsergridDevice.sharedDevice` instance. - parameter completion: The optional completion block. */ - public func connectToDevice(device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { + public func connectToDevice(_ device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { self.connectToDevice(Usergrid.sharedInstance, device: device, completion: completion) } @@ -424,11 +424,11 @@ public class UsergridUser : UsergridEntity { - parameter device: The device to connect to. If nil it will use the `UsergridDevice.sharedDevice` instance. - parameter completion: The optional completion block. */ - public func connectToDevice(client:UsergridClient, device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { + public func connectToDevice(_ client:UsergridClient, device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { let deviceToConnect = device ?? UsergridDevice.sharedDevice guard let _ = deviceToConnect.uuidOrName else { - completion?(response: UsergridResponse(client: client, errorName: "Device cannot be connected to User.", errorDescription: "Device has neither an UUID or name specified.")) + completion?(UsergridResponse(client: client, errorName: "Device cannot be connected to User.", errorDescription: "Device has neither an UUID or name specified.")) return } @@ -440,7 +440,7 @@ public class UsergridUser : UsergridEntity { - parameter completion: The optional completion block. */ - public func getConnectedDevice(completion:UsergridResponseCompletion? = nil) { + public func getConnectedDevice(_ completion:UsergridResponseCompletion? = nil) { self.getConnectedDevice(Usergrid.sharedInstance, completion: completion) } @@ -450,8 +450,8 @@ public class UsergridUser : UsergridEntity { - parameter client: The `UsergridClient` object to use for connecting. - parameter completion: The optional completion block. */ - public func getConnectedDevice(client:UsergridClient, completion:UsergridResponseCompletion? = nil) { - client.getConnections(.Out, entity: self, relationship: "device", completion: completion) + public func getConnectedDevice(_ client:UsergridClient, completion:UsergridResponseCompletion? = nil) { + client.getConnections(.out, entity: self, relationship: "device", completion: completion) } /** @@ -460,7 +460,7 @@ public class UsergridUser : UsergridEntity { - parameter device: The device to connect to. If nil it will use the `UsergridDevice.sharedDevice` instance. - parameter completion: The optional completion block. */ - public func disconnectFromDevice(device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { + public func disconnectFromDevice(_ device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { self.disconnectFromDevice(Usergrid.sharedInstance, device: device, completion: completion) } @@ -471,26 +471,25 @@ public class UsergridUser : UsergridEntity { - parameter device: The device to connect to. - parameter completion: The optional completion block. */ - public func disconnectFromDevice(client:UsergridClient, device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { + public func disconnectFromDevice(_ client:UsergridClient, device:UsergridDevice? = nil, completion:UsergridResponseCompletion? = nil) { let deviceToDisconnectFrom = device ?? UsergridDevice.sharedDevice guard let _ = deviceToDisconnectFrom.uuidOrName else { - completion?(response: UsergridResponse(client: client, errorName: "Device cannot be disconnected from User.", errorDescription: "Device has neither an UUID or name specified.")) + completion?(UsergridResponse(client: client, errorName: "Device cannot be disconnected from User.", errorDescription: "Device has neither an UUID or name specified.")) return } self.disconnect(client, relationship: "", fromEntity: deviceToDisconnectFrom, completion: completion) } - private func getUserSpecificProperty(userProperty: UsergridUserProperties) -> AnyObject? { - var propertyValue: AnyObject? = super[userProperty.stringValue] - NSJSONReadingOptions.AllowFragments + private func getUserSpecificProperty(_ userProperty: UsergridUserProperties) -> Any? { + var propertyValue: Any? = super[userProperty.stringValue] switch userProperty { - case .Activated,.Disabled : - propertyValue = propertyValue?.boolValue - case .Age : - propertyValue = propertyValue?.integerValue - case .Name,.Username,.Password,.Email,.Picture : + case .activated,.disabled : + propertyValue = (propertyValue as AnyObject) as? Bool ?? false + case .age : + propertyValue = (propertyValue as AnyObject) as? Int ?? 0 // TODO: Check these conversions + case .name,.username,.password,.email,.picture : break } return propertyValue @@ -508,7 +507,7 @@ public class UsergridUser : UsergridEntity { usergridUser["name"] = someName ``` */ - override public subscript(propertyName: String) -> AnyObject? { + override public subscript(propertyName: String) -> Any? { get { if let userProperty = UsergridUserProperties.fromString(propertyName) { return self.getUserSpecificProperty(userProperty) @@ -520,4 +519,4 @@ public class UsergridUser : UsergridEntity { super[propertyName] = propertyValue } } -} \ No newline at end of file +} diff --git a/Tests/ASSET_Tests.swift b/Tests/ASSET_Tests.swift index c6f860f..0de2127 100644 --- a/Tests/ASSET_Tests.swift +++ b/Tests/ASSET_Tests.swift @@ -25,6 +25,7 @@ */ import XCTest +import Foundation @testable import UsergridSDK class ASSET_Tests: XCTestCase { @@ -46,8 +47,8 @@ class ASSET_Tests: XCTestCase { super.tearDown() } - func getFullPathOfFile(fileLocation:String) -> String { - return (NSBundle(forClass: object_getClass(self)).resourcePath! as NSString).stringByAppendingPathComponent(fileLocation) + func getFullPathOfFile(_ fileLocation:String) -> String { + return (Bundle(for: object_getClass(self)).resourcePath!) + "/\(fileLocation)" } func test_ASSET_INIT() { @@ -57,28 +58,28 @@ class ASSET_Tests: XCTestCase { XCTAssertNotNil(asset) XCTAssertNotNil(asset!.data) XCTAssertNotNil(asset!.filename) - XCTAssertEqual(asset!.contentType, UsergridImageContentType.Png.stringValue) + XCTAssertEqual(asset!.contentType, UsergridImageContentType.png.stringValue) XCTAssertTrue(asset!.contentLength > 0) - asset = UsergridAsset(filename:ASSET_Tests.imageName, fileURL: NSURL(fileURLWithPath: filePath)) + asset = UsergridAsset(filename:ASSET_Tests.imageName, fileURL: URL(fileURLWithPath: filePath)) XCTAssertNotNil(asset) XCTAssertNotNil(asset!.data) XCTAssertNotNil(asset!.filename) - XCTAssertEqual(asset!.contentType, UsergridImageContentType.Png.stringValue) + XCTAssertEqual(asset!.contentType, UsergridImageContentType.png.stringValue) XCTAssertTrue(asset!.contentLength > 0) filePath = self.getFullPathOfFile(ASSET_Tests.jpgLocation) image = UIImage(contentsOfFile: filePath) - asset = UsergridAsset(filename:nil,image: image!, imageContentType:.Jpeg) + asset = UsergridAsset(filename:nil,image: image!, imageContentType:.jpeg) XCTAssertNotNil(asset) XCTAssertNotNil(asset!.data) XCTAssertEqual(asset!.filename,UsergridAsset.DEFAULT_FILE_NAME) - XCTAssertEqual(asset!.contentType, UsergridImageContentType.Jpeg.stringValue) + XCTAssertEqual(asset!.contentType, UsergridImageContentType.jpeg.stringValue) XCTAssertTrue(asset!.contentLength > 0) } func test_IMAGE_UPLOAD() { - let getExpect = self.expectationWithDescription("\(#function)") + let getExpect = self.expectation(description: "\(#function)") let uploadProgress : UsergridAssetRequestProgress = { (bytes,expected) in print("UPLOAD PROGRESS BLOCK: BYTES:\(bytes) --- EXPECTED:\(expected)") } @@ -87,7 +88,7 @@ class ASSET_Tests: XCTestCase { } Usergrid.GET(ASSET_Tests.collectionName, uuidOrName:ASSET_Tests.entityUUID) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) let entity = response.first! XCTAssertNotNil(entity) @@ -103,7 +104,7 @@ class ASSET_Tests: XCTestCase { XCTAssertNotNil(asset) entity.uploadAsset(asset!, progress:uploadProgress) { uploadedAsset,response in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertTrue(response.ok) XCTAssertNil(response.error) @@ -120,9 +121,9 @@ class ASSET_Tests: XCTestCase { XCTAssertEqual(entity.asset!.contentLength, entity.fileMetaData!.contentLength) XCTAssertEqual(entity.asset!.contentType, entity.fileMetaData!.contentType) - entity.downloadAsset(UsergridImageContentType.Png.stringValue, progress:downloadProgress) + entity.downloadAsset(UsergridImageContentType.png.stringValue, progress:downloadProgress) { (downloadedAsset, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(downloadedAsset) XCTAssertNil(error) let downloadedImage = UIImage(data: downloadedAsset!.data) @@ -132,12 +133,12 @@ class ASSET_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } - func deleteUser(user:UsergridUser,expectation:XCTestExpectation) { + func deleteUser(_ user:UsergridUser,expectation:XCTestExpectation) { user.remove() { removeResponse in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(removeResponse) XCTAssertTrue(removeResponse.ok) XCTAssertNotNil(removeResponse.user) @@ -148,7 +149,7 @@ class ASSET_Tests: XCTestCase { } func test_ATTACH_ASSET_TO_CURRENT_USER() { - let userAssetExpect = self.expectationWithDescription("\(#function)") + let userAssetExpect = self.expectation(description: "\(#function)") let user = UsergridUser(name:User_Tests.name, email:User_Tests.email, username:User_Tests.username, password:User_Tests.password) let uploadProgress : UsergridAssetRequestProgress = { (bytes,expected) in @@ -160,12 +161,12 @@ class ASSET_Tests: XCTestCase { UsergridUser.checkAvailable(user.email, username: user.username) { error,available in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertTrue(available) user.create() { (createResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(createResponse) XCTAssertTrue(createResponse.ok) XCTAssertNotNil(createResponse.user) @@ -173,14 +174,14 @@ class ASSET_Tests: XCTestCase { XCTAssertNotNil(user.uuid) user.login(user.username!, password:User_Tests.password) { (auth, loggedInUser, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertNotNil(loggedInUser) XCTAssertEqual(auth, user.auth!) Usergrid.authenticateUser(user.auth!) { auth,currentUser,error in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertEqual(auth, user.auth!) @@ -199,7 +200,7 @@ class ASSET_Tests: XCTestCase { XCTAssertNotNil(asset) Usergrid.currentUser!.uploadAsset(asset!, progress:uploadProgress) { uploadedAsset,response in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertTrue(response.ok) XCTAssertNil(response.error) @@ -216,9 +217,9 @@ class ASSET_Tests: XCTestCase { XCTAssertEqual(Usergrid.currentUser!.asset!.contentLength, Usergrid.currentUser!.fileMetaData!.contentLength) XCTAssertEqual(Usergrid.currentUser!.asset!.contentType, Usergrid.currentUser!.fileMetaData!.contentType) - Usergrid.currentUser!.downloadAsset(UsergridImageContentType.Png.stringValue, progress:downloadProgress) + Usergrid.currentUser!.downloadAsset(UsergridImageContentType.png.stringValue, progress:downloadProgress) { (downloadedAsset, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(downloadedAsset) XCTAssertNil(error) let downloadedImage = UIImage(data: downloadedAsset!.data) @@ -231,7 +232,7 @@ class ASSET_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } @@ -240,12 +241,12 @@ class ASSET_Tests: XCTestCase { "etag":"dfa7421ea4f35d33e12ba93979a46b7e", "checkSum":"dfa7421ea4f35d33e12ba93979a46b7e", "content-length":1417896, - "last-modified":1455728898545] + "last-modified":1455728898545] as [String : Any] let fileMetaData = UsergridFileMetaData(fileMetaDataJSON:fileMetaDataDict) - let fileMetaDataCodingData = NSKeyedArchiver.archivedDataWithRootObject(fileMetaData) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(fileMetaDataCodingData) as? UsergridFileMetaData + let fileMetaDataCodingData = NSKeyedArchiver.archivedData(withRootObject: fileMetaData) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: fileMetaDataCodingData) as? UsergridFileMetaData XCTAssertNotNil(newInstanceFromData) if let newInstance = newInstanceFromData { @@ -259,12 +260,12 @@ class ASSET_Tests: XCTestCase { func test_ASSET_NSCODING() { let imagePath = self.getFullPathOfFile(ASSET_Tests.pngLocation) - let asset = UsergridAsset(filename:ASSET_Tests.imageName,fileURL: NSURL(fileURLWithPath: imagePath)) + let asset = UsergridAsset(filename:ASSET_Tests.imageName,fileURL: URL(fileURLWithPath: imagePath)) XCTAssertNotNil(asset) if let originalAsset = asset { - let assetCodingData = NSKeyedArchiver.archivedDataWithRootObject(originalAsset) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(assetCodingData) as? UsergridAsset + let assetCodingData = NSKeyedArchiver.archivedData(withRootObject: originalAsset) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: assetCodingData) as? UsergridAsset XCTAssertNotNil(newInstanceFromData) diff --git a/Tests/AUTH_Tests.swift b/Tests/AUTH_Tests.swift index 80ec695..d77bcae 100644 --- a/Tests/AUTH_Tests.swift +++ b/Tests/AUTH_Tests.swift @@ -32,8 +32,8 @@ class AUTH_Tests: XCTestCase { var appAuth: UsergridAppAuth! var userAuth: UsergridUserAuth! - private static let collectionName = "publicevent" - private static let entityUUID = "fa015eaa-fe1c-11e3-b94b-63b29addea01" + fileprivate static let collectionName = "publicevent" + fileprivate static let entityUUID = "fa015eaa-fe1c-11e3-b94b-63b29addea01" override func setUp() { super.setUp() @@ -49,10 +49,10 @@ class AUTH_Tests: XCTestCase { func test_CLIENT_AUTH() { - let authExpect = self.expectationWithDescription("\(#function)") - Usergrid.authMode = .App + let authExpect = self.expectation(description: "\(#function)") + Usergrid.authMode = .app Usergrid.authenticateApp(appAuth) { auth,error in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(Usergrid.appAuth) @@ -63,7 +63,7 @@ class AUTH_Tests: XCTestCase { XCTAssertNotNil(appAuth.isValid) Usergrid.GET(AUTH_Tests.collectionName) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.hasNextPage) XCTAssertEqual(response.entities!.count, 10) @@ -73,7 +73,7 @@ class AUTH_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_DESTROY_AUTH() { @@ -93,10 +93,10 @@ class AUTH_Tests: XCTestCase { func test_APP_AUTH_NSCODING() { appAuth.accessToken = "YWMt91Q2YtWaEeW_Ki2uDueMEwAAAVMUTVSPeOdX-oradxdqirEFz5cPU3GWybs" - appAuth.expiry = NSDate.distantFuture() + appAuth.expiry = Date.distantFuture - let authCodingData = NSKeyedArchiver.archivedDataWithRootObject(appAuth) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(authCodingData) as? UsergridAppAuth + let authCodingData = NSKeyedArchiver.archivedData(withRootObject: appAuth) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: authCodingData) as? UsergridAppAuth XCTAssertNotNil(newInstanceFromData) @@ -112,10 +112,10 @@ class AUTH_Tests: XCTestCase { func test_USER_AUTH_NSCODING() { userAuth.accessToken = "YWMt91Q2YtWaEeW_Ki2uDueMEwAAAVMUTVSPeOdX-oradxdqirEFz5cPU3GWybs" - userAuth.expiry = NSDate.distantFuture() + userAuth.expiry = Date.distantFuture - let authCodingData = NSKeyedArchiver.archivedDataWithRootObject(userAuth) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(authCodingData) as? UsergridUserAuth + let authCodingData = NSKeyedArchiver.archivedData(withRootObject: userAuth) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: authCodingData) as? UsergridUserAuth XCTAssertNotNil(newInstanceFromData) diff --git a/Tests/CONNECTION_Tests.swift b/Tests/CONNECTION_Tests.swift index 2640778..e824088 100644 --- a/Tests/CONNECTION_Tests.swift +++ b/Tests/CONNECTION_Tests.swift @@ -30,7 +30,7 @@ import XCTest class CONNECTION_Tests: XCTestCase { let clientAuth = UsergridAppAuth(clientId: "b3U6THNcevskEeOQZLcUROUUVA", clientSecret: "b3U6RZHYznP28xieBzQPackFPmmnevU") - private static let collectionName = "publicevent" + fileprivate static let collectionName = "publicevent" override func setUp() { super.setUp() @@ -44,10 +44,10 @@ class CONNECTION_Tests: XCTestCase { func test_CLIENT_AUTH() { - let authExpect = self.expectationWithDescription("\(#function)") - Usergrid.authMode = .App + let authExpect = self.expectation(description: "\(#function)") + Usergrid.authMode = .app Usergrid.authenticateApp(clientAuth) { auth,error in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(Usergrid.appAuth) @@ -57,7 +57,7 @@ class CONNECTION_Tests: XCTestCase { XCTAssertNotNil(appAuth.expiry) Usergrid.GET(CONNECTION_Tests.collectionName) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertTrue(response.hasNextPage) @@ -68,12 +68,12 @@ class CONNECTION_Tests: XCTestCase { XCTAssertEqual(entity.type, CONNECTION_Tests.collectionName) entity.connect("likes", toEntity: entityToConnect) { (response) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) - entity.getConnections(.Out, relationship: "likes", query:nil) { (response) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + entity.getConnections(.out, relationship: "likes", query:nil) { (response) -> Void in + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) @@ -82,12 +82,12 @@ class CONNECTION_Tests: XCTestCase { XCTAssertEqual(connectedEntity.uuidOrName, entityToConnect.uuidOrName) entity.disconnect("likes", fromEntity: connectedEntity) { (response) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) - entity.getConnections(.Out, relationship: "likes", query:nil) { (response) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + entity.getConnections(.out, relationship: "likes", query:nil) { (response) -> Void in + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) authExpect.fulfill() @@ -100,6 +100,6 @@ class CONNECTION_Tests: XCTestCase { authExpect.fulfill() } } - self.waitForExpectationsWithTimeout(20, handler: nil) + self.waitForExpectations(timeout: 20, handler: nil) } } diff --git a/Tests/ClientCreationTests.swift b/Tests/ClientCreationTests.swift index 40a7de1..6776cb4 100644 --- a/Tests/ClientCreationTests.swift +++ b/Tests/ClientCreationTests.swift @@ -50,7 +50,7 @@ class ClientCreationTests: XCTestCase { func test_CLIENT_PROPERTIES() { XCTAssertEqual(Usergrid.appId, ClientCreationTests.appId) XCTAssertEqual(Usergrid.orgId, ClientCreationTests.orgId) - XCTAssertEqual(Usergrid.authMode, UsergridAuthMode.User) + XCTAssertEqual(Usergrid.authMode, UsergridAuthMode.user) XCTAssertEqual(Usergrid.persistCurrentUserInKeychain, false) XCTAssertEqual(Usergrid.baseUrl, UsergridClient.DEFAULT_BASE_URL) XCTAssertEqual(Usergrid.clientAppURL, "\(UsergridClient.DEFAULT_BASE_URL)/\(ClientCreationTests.orgId)/\(ClientCreationTests.appId)" ) @@ -59,8 +59,8 @@ class ClientCreationTests: XCTestCase { } func test_CLIENT_NSCODING() { - let sharedInstanceAsData = NSKeyedArchiver.archivedDataWithRootObject(Usergrid.sharedInstance) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(sharedInstanceAsData) as? UsergridClient + let sharedInstanceAsData = NSKeyedArchiver.archivedData(withRootObject: Usergrid.sharedInstance) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: sharedInstanceAsData) as? UsergridClient XCTAssertNotNil(newInstanceFromData) diff --git a/Tests/GET_Tests.swift b/Tests/GET_Tests.swift index 2b0331f..b6698e5 100644 --- a/Tests/GET_Tests.swift +++ b/Tests/GET_Tests.swift @@ -46,36 +46,36 @@ class GET_Tests: XCTestCase { func test_GET_WITHOUT_QUERY() { - let getExpect = self.expectationWithDescription("\(#function)") + let getExpect = self.expectation(description: "\(#function)") Usergrid.GET(GET_Tests.collectionName) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertTrue(response.hasNextPage) XCTAssertEqual(response.count, 10) getExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } func test_GET_WITH_QUERY() { - let getExpect = self.expectationWithDescription("\(#function)") + let getExpect = self.expectation(description: "\(#function)") Usergrid.GET(self.query) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertEqual(response.count, 1) getExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } func test_GET_WITH_UUID() { - let getExpect = self.expectationWithDescription("\(#function)") + let getExpect = self.expectation(description: "\(#function)") Usergrid.GET(GET_Tests.collectionName, uuidOrName:GET_Tests.entityUUID) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) let entity = response.first! @@ -85,29 +85,29 @@ class GET_Tests: XCTestCase { XCTAssertEqual(entity.uuid!, GET_Tests.entityUUID) getExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } func test_GET_NEXT_PAGE_WITH_NO_QUERY() { - let getExpect = self.expectationWithDescription("\(#function)") + let getExpect = self.expectation(description: "\(#function)") Usergrid.GET(GET_Tests.collectionName) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertTrue(response.hasNextPage) XCTAssertEqual(response.count, 10) response.loadNextPage() { (nextPageResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertTrue(nextPageResponse.ok) XCTAssertNotNil(nextPageResponse) - XCTAssertFalse(nextPageResponse.hasNextPage) - XCTAssertEqual(nextPageResponse.entities!.count, 7) + XCTAssertFalse(!nextPageResponse.hasNextPage) + XCTAssertEqual(nextPageResponse.entities!.count, 10) getExpect.fulfill() } } - self.waitForExpectationsWithTimeout(20, handler: nil) + self.waitForExpectations(timeout: 20, handler: nil) } } diff --git a/Tests/PUT_Tests.swift b/Tests/PUT_Tests.swift index b1ff3e7..ff67738 100644 --- a/Tests/PUT_Tests.swift +++ b/Tests/PUT_Tests.swift @@ -51,10 +51,10 @@ class PUT_Tests: XCTestCase { let propertyNameToUpdate = "\(#function)" let propertiesNewValue = "\(propertyNameToUpdate)_VALUE" - let putExpect = self.expectationWithDescription(propertyNameToUpdate) + let putExpect = self.expectation(description: propertyNameToUpdate) Usergrid.PUT(PUT_Tests.collectionName, uuidOrName: PUT_Tests.entityUUID, jsonBody:[propertyNameToUpdate : propertiesNewValue]) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertEqual(response.entities!.count, 1) @@ -68,19 +68,19 @@ class PUT_Tests: XCTestCase { XCTAssertEqual(updatedPropertyValue!,propertiesNewValue) putExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } func test_PUT_BY_SPECIFYING_UUID_WITHIN_JSON_BODY() { let propertyNameToUpdate = "\(#function)" let propertiesNewValue = "\(propertyNameToUpdate)_VALUE" - let putExpect = self.expectationWithDescription(propertyNameToUpdate) + let putExpect = self.expectation(description: propertyNameToUpdate) - let jsonDictToPut = [UsergridEntityProperties.UUID.stringValue : PUT_Tests.entityUUID, propertyNameToUpdate : propertiesNewValue] + let jsonDictToPut = [UsergridEntityProperties.uuid.stringValue : PUT_Tests.entityUUID, propertyNameToUpdate : propertiesNewValue] Usergrid.PUT(PUT_Tests.collectionName, jsonBody: jsonDictToPut) { (response) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertEqual(response.entities!.count, 1) @@ -94,16 +94,16 @@ class PUT_Tests: XCTestCase { XCTAssertEqual(updatedPropertyValue!,propertiesNewValue) putExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } func test_PUT_WITH_ENTITY_OBJECT() { let propertyNameToUpdate = "\(#function)" let propertiesNewValue = "\(propertyNameToUpdate)_VALUE" - let putExpect = self.expectationWithDescription(propertyNameToUpdate) + let putExpect = self.expectation(description: propertyNameToUpdate) Usergrid.GET(PUT_Tests.collectionName, uuidOrName: PUT_Tests.entityUUID) { (getResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(getResponse) XCTAssertTrue(getResponse.ok) XCTAssertEqual(getResponse.entities!.count, 1) @@ -116,7 +116,7 @@ class PUT_Tests: XCTestCase { responseEntity[propertyNameToUpdate] = propertiesNewValue Usergrid.PUT(responseEntity) { (putResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(putResponse) XCTAssertTrue(putResponse.ok) XCTAssertEqual(putResponse.entities!.count, 1) @@ -131,16 +131,16 @@ class PUT_Tests: XCTestCase { putExpect.fulfill() } } - self.waitForExpectationsWithTimeout(20, handler: nil) + self.waitForExpectations(timeout: 20, handler: nil) } func test_PUT_WITH_QUERY() { let propertyNameToUpdate = "\(#function)" let propertiesNewValue = "\(propertyNameToUpdate)_VALUE" - let putExpect = self.expectationWithDescription(propertyNameToUpdate) + let putExpect = self.expectation(description: propertyNameToUpdate) Usergrid.PUT(self.query, jsonBody: [propertyNameToUpdate : propertiesNewValue]) { (putResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(putResponse) XCTAssertTrue(putResponse.ok) XCTAssertEqual(putResponse.entities!.count, 1) @@ -153,6 +153,6 @@ class PUT_Tests: XCTestCase { XCTAssertEqual(updatedPropertyValue!,propertiesNewValue) putExpect.fulfill() } - self.waitForExpectationsWithTimeout(10, handler: nil) + self.waitForExpectations(timeout: 10, handler: nil) } } diff --git a/Tests/User_Tests.swift b/Tests/User_Tests.swift index dcb5545..aeea8c3 100644 --- a/Tests/User_Tests.swift +++ b/Tests/User_Tests.swift @@ -34,8 +34,8 @@ class User_Tests: XCTestCase { static let name = "Robert Walsh" static let age = 29 - static let email = "handsomeRob741@yahoo.com" - static let username = "rwalsh" + static let email = "handsomeRob741www@yahoo.com" + static let username = "rwalshwww" static let password = "password" static let resetPassword = "password111" static let picture = "http://www.gravatar.com/avatar/e466d447df831ddce35fbc50763fb03a" @@ -46,11 +46,13 @@ class User_Tests: XCTestCase { super.setUp() Usergrid.initSharedInstance(orgId:ClientCreationTests.orgId, appId: ClientCreationTests.appId) + Usergrid.authMode = .user Usergrid.persistCurrentUserInKeychain = false user = UsergridUser(name:"a_bogus_name", email:User_Tests.email, username:User_Tests.username, password:User_Tests.password) user.name = User_Tests.name - user.age = User_Tests.age + user.password = User_Tests.password + user.age = User_Tests.age as NSNumber user.location = CLLocation(latitude: -90, longitude: 100) user.picture = User_Tests.picture user.activated = User_Tests.activated @@ -134,7 +136,7 @@ class User_Tests: XCTestCase { XCTAssertNil(user.uuid) XCTAssertEqual(user.name!, User_Tests.name) - XCTAssertEqual(user.age!, User_Tests.age) + XCTAssertEqual(user.age!, User_Tests.age as NSNumber) XCTAssertEqual(user.username!, User_Tests.username) XCTAssertEqual(user.email!, User_Tests.email) XCTAssertEqual(user.password!, User_Tests.password) @@ -144,19 +146,19 @@ class User_Tests: XCTestCase { } func test_USER_PROPERTIES_WITHOUT_HELPERS() { - XCTAssertEqual(user[UsergridUserProperties.Name.stringValue]! as? String, User_Tests.name) - XCTAssertEqual(user[UsergridUserProperties.Age.stringValue]! as? Int, User_Tests.age) - XCTAssertEqual(user[UsergridUserProperties.Username.stringValue]! as? String, User_Tests.username) - XCTAssertEqual(user[UsergridUserProperties.Email.stringValue]! as? String, User_Tests.email) - XCTAssertEqual(user[UsergridUserProperties.Password.stringValue]! as? String, User_Tests.password) - XCTAssertEqual(user[UsergridUserProperties.Picture.stringValue]! as? String, User_Tests.picture) - XCTAssertTrue(user[UsergridUserProperties.Activated.stringValue]! as! Bool) - XCTAssertFalse(user[UsergridUserProperties.Disabled.stringValue]! as! Bool) + XCTAssertEqual(user[UsergridUserProperties.name.stringValue]! as? String, User_Tests.name) + XCTAssertEqual(user[UsergridUserProperties.age.stringValue]! as? Int, User_Tests.age) + XCTAssertEqual(user[UsergridUserProperties.username.stringValue]! as? String, User_Tests.username) + XCTAssertEqual(user[UsergridUserProperties.email.stringValue]! as? String, User_Tests.email) + XCTAssertEqual(user[UsergridUserProperties.password.stringValue]! as? String, User_Tests.password) + XCTAssertEqual(user[UsergridUserProperties.picture.stringValue]! as? String, User_Tests.picture) + XCTAssertTrue(user[UsergridUserProperties.activated.stringValue]! as! Bool) + XCTAssertFalse(user[UsergridUserProperties.disabled.stringValue]! as! Bool) } - func deleteUser(expectation:XCTestExpectation) { + func deleteUser(_ expectation:XCTestExpectation) { self.user.remove() { removeResponse in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(removeResponse) XCTAssertTrue(removeResponse.ok) XCTAssertNotNil(removeResponse.user) @@ -167,10 +169,10 @@ class User_Tests: XCTestCase { } func test_CREATE_AND_DELETE_USER() { - let userExpect = self.expectationWithDescription("\(#function)") + let userExpect = self.expectation(description: "\(#function)") user.save() { (createResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(createResponse) XCTAssertTrue(createResponse.ok) XCTAssertNotNil(createResponse.user) @@ -183,7 +185,7 @@ class User_Tests: XCTestCase { XCTAssertNotNil(createdUser.modified) XCTAssertNotNil(createdUser.location) XCTAssertEqual(createdUser.name!, User_Tests.name) - XCTAssertEqual(createdUser.age!, User_Tests.age) + XCTAssertEqual(createdUser.age!.intValue, User_Tests.age) XCTAssertEqual(createdUser.username!, User_Tests.username) XCTAssertEqual(createdUser.email!, User_Tests.email) XCTAssertEqual(createdUser.picture!, User_Tests.picture) @@ -194,20 +196,22 @@ class User_Tests: XCTestCase { self.deleteUser(userExpect) } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_AUTHENTICATE_USER() { - let userExpect = self.expectationWithDescription("\(#function)") + let userExpect = self.expectation(description: "\(#function)") UsergridUser.checkAvailable(user.email, username: user.username) { error,available in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertTrue(available) +// self.deleteUser(userExpect) + self.user.create() { (createResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(createResponse) XCTAssertTrue(createResponse.ok) XCTAssertNotNil(createResponse.user) @@ -215,14 +219,14 @@ class User_Tests: XCTestCase { XCTAssertNotNil(self.user.uuid) self.user.login(self.user.username!, password:User_Tests.password) { (auth, loggedInUser, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertNotNil(loggedInUser) XCTAssertEqual(auth, self.user.auth!) Usergrid.authenticateUser(self.user.auth!) { auth,currentUser,error in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertEqual(auth, self.user.auth!) @@ -232,7 +236,7 @@ class User_Tests: XCTestCase { XCTAssertEqual(currentUser, Usergrid.currentUser!) self.user.reauthenticate() { auth, reauthedUser, error in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertEqual(auth, self.user.auth!) @@ -241,7 +245,7 @@ class User_Tests: XCTestCase { XCTAssertNotNil(Usergrid.currentUser) self.user.logout() { response in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(response) XCTAssertTrue(response.ok) XCTAssertNil(response.error) @@ -253,14 +257,14 @@ class User_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_RESET_USER_PASSWORD() { - let userExpect = self.expectationWithDescription("\(#function)") + let userExpect = self.expectation(description: "\(#function)") user.create() { (createResponse) in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNotNil(createResponse) XCTAssertTrue(createResponse.ok) XCTAssertNotNil(createResponse.user) @@ -268,19 +272,19 @@ class User_Tests: XCTestCase { XCTAssertNotNil(self.user.uuid) self.user.login(self.user.username!, password:User_Tests.password) { (auth, loggedInUser, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertNotNil(loggedInUser) XCTAssertEqual(auth, self.user.auth!) self.user.resetPassword(User_Tests.password, new: User_Tests.resetPassword) { error,didSucceed in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertTrue(didSucceed) XCTAssertNil(error) self.user.login(self.user.username!, password:User_Tests.resetPassword) { (auth, loggedInUser, error) -> Void in - XCTAssertTrue(NSThread.isMainThread()) + XCTAssertTrue(Thread.isMainThread) XCTAssertNil(error) XCTAssertNotNil(auth) XCTAssertNotNil(loggedInUser) @@ -291,11 +295,11 @@ class User_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_DEVICE_CONNECTION() { - let userExpect = self.expectationWithDescription("\(#function)") + let userExpect = self.expectation(description: "\(#function)") user.create() { createResponse in XCTAssertNotNil(createResponse) @@ -329,11 +333,11 @@ class User_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_DEVICE_CONNECT_FAIL() { - let userExpect = self.expectationWithDescription("\(#function)") + let userExpect = self.expectation(description: "\(#function)") user.create() { createResponse in XCTAssertNotNil(createResponse) @@ -367,13 +371,13 @@ class User_Tests: XCTestCase { } } } - self.waitForExpectationsWithTimeout(100, handler: nil) + self.waitForExpectations(timeout: 100, handler: nil) } func test_USER_NSCODING() { - let userData = NSKeyedArchiver.archivedDataWithRootObject(user) - let newInstanceFromData = NSKeyedUnarchiver.unarchiveObjectWithData(userData) as? UsergridUser + let userData = NSKeyedArchiver.archivedData(withRootObject: user) + let newInstanceFromData = NSKeyedUnarchiver.unarchiveObject(with: userData) as? UsergridUser XCTAssertNotNil(newInstanceFromData) @@ -396,4 +400,4 @@ class User_Tests: XCTestCase { XCTAssertEqual(user.hasAsset,newInstance.hasAsset) } } -} \ No newline at end of file +} diff --git a/UsergridSDK.xcodeproj/project.pbxproj b/UsergridSDK.xcodeproj/project.pbxproj index 338835c..af92c89 100644 --- a/UsergridSDK.xcodeproj/project.pbxproj +++ b/UsergridSDK.xcodeproj/project.pbxproj @@ -498,23 +498,34 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 0720; + LastUpgradeCheck = 0800; ORGANIZATIONNAME = "Apigee Inc."; TargetAttributes = { 630A219E1C49BFFC008BE87F = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 630A21B71C49C473008BE87F = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; + }; + 6319202A1C48436500F99E86 = { + LastSwiftMigration = 0800; }; 6319204A1C49BC0700F99E86 = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 639B4BEA1C3DD6CF005E26E7 = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 63AF0E871BBC38FB009D4196 = { CreatedOnToolsVersion = 7.0.1; + LastSwiftMigration = 0800; + }; + 63EE60F11C406E1600AFC2CF = { + LastSwiftMigration = 0800; }; }; }; @@ -777,6 +788,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-OSX-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -791,6 +803,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-OSX-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -802,6 +816,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-iOS-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -813,6 +828,8 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-iOS-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -831,11 +848,13 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = org.apache.usergrid.swift; PRODUCT_NAME = UsergridSDK; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -854,10 +873,13 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = org.apache.usergrid.swift; PRODUCT_NAME = UsergridSDK; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -869,8 +891,9 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-TVOS-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.2; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -882,8 +905,10 @@ PRODUCT_BUNDLE_IDENTIFIER = "org.apache.usergrid.swift-TVOS-Tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.2; + TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; @@ -902,6 +927,7 @@ PRODUCT_NAME = UsergridSDK; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.1; }; @@ -922,6 +948,8 @@ PRODUCT_NAME = UsergridSDK; SDKROOT = watchos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 4; WATCHOS_DEPLOYMENT_TARGET = 2.1; }; @@ -1035,6 +1063,7 @@ PRODUCT_NAME = UsergridSDK; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -1054,6 +1083,8 @@ PRODUCT_BUNDLE_IDENTIFIER = org.apache.usergrid.swift; PRODUCT_NAME = UsergridSDK; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -1074,6 +1105,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; @@ -1094,6 +1126,8 @@ PRODUCT_NAME = UsergridSDK; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Release; diff --git a/UsergridSDK.xcodeproj/xcshareddata/xcschemes/UsergridSDK OSX.xcscheme b/UsergridSDK.xcodeproj/xcshareddata/xcschemes/UsergridSDK OSX.xcscheme index 591624c..7cb7a01 100644 --- a/UsergridSDK.xcodeproj/xcshareddata/xcschemes/UsergridSDK OSX.xcscheme +++ b/UsergridSDK.xcodeproj/xcshareddata/xcschemes/UsergridSDK OSX.xcscheme @@ -1,6 +1,6 @@ Date: Fri, 16 Sep 2016 10:17:10 -0500 Subject: [PATCH 02/10] Fixed @escaping closures. --- Source/UsergridAssetRequestWrapper.swift | 2 +- Source/UsergridResponse.swift | 2 +- Source/UsergridUser.swift | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/UsergridAssetRequestWrapper.swift b/Source/UsergridAssetRequestWrapper.swift index 37b5288..f051e21 100644 --- a/Source/UsergridAssetRequestWrapper.swift +++ b/Source/UsergridAssetRequestWrapper.swift @@ -39,7 +39,7 @@ final class UsergridAssetRequestWrapper { var progress: UsergridAssetRequestProgress? let completion: UsergridAssetRequestWrapperCompletionBlock - init(session:URLSession?, sessionTask:URLSessionTask, progress:UsergridAssetRequestProgress?, completion:UsergridAssetRequestWrapperCompletionBlock) { + init(session:URLSession?, sessionTask:URLSessionTask, progress:UsergridAssetRequestProgress?, completion:@escaping UsergridAssetRequestWrapperCompletionBlock) { self.session = session self.sessionTask = sessionTask self.progress = progress diff --git a/Source/UsergridResponse.swift b/Source/UsergridResponse.swift index 525bfde..aa3f544 100644 --- a/Source/UsergridResponse.swift +++ b/Source/UsergridResponse.swift @@ -186,7 +186,7 @@ public class UsergridResponse: NSObject { - parameter completion: The completion block that is called once the request for the next page has finished. */ - public func loadNextPage(_ completion: UsergridResponseCompletion) { + public func loadNextPage(_ completion: @escaping UsergridResponseCompletion) { if self.hasNextPage, let type = (self.responseJSON?["path"] as? NSString)?.lastPathComponent { if let query = self.query?.copy() as? UsergridQuery { self.client?.GET(query.cursor(self.cursor), queryCompletion:completion) diff --git a/Source/UsergridUser.swift b/Source/UsergridUser.swift index f01430b..049ea6c 100644 --- a/Source/UsergridUser.swift +++ b/Source/UsergridUser.swift @@ -248,7 +248,7 @@ public class UsergridUser : UsergridEntity { - parameter username: The optional username. - parameter completion: The completion block. */ - public static func checkAvailable(_ email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) { + public static func checkAvailable(_ email:String?, username:String?, completion:@escaping UsergridUserAvailabilityCompletion) { self.checkAvailable(Usergrid.sharedInstance, email: email, username: username, completion: completion) } @@ -260,7 +260,7 @@ public class UsergridUser : UsergridEntity { - parameter username: The optional username. - parameter completion: The completion block. */ - public static func checkAvailable(_ client: UsergridClient, email:String?, username:String?, completion:UsergridUserAvailabilityCompletion) { + public static func checkAvailable(_ client: UsergridClient, email:String?, username:String?, completion:@escaping UsergridUserAvailabilityCompletion) { let query = UsergridQuery(USER_ENTITY_TYPE) if let emailValue = email { query.eq(UsergridUserProperties.email.stringValue, value: emailValue) From 28ff0e275b5bd7777a2b927da5d5cf1cb4b660ab Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 10:30:22 -0500 Subject: [PATCH 03/10] Updating ActivityFeed sample app with fixes for Swift 3.0 --- Samples/ActivityFeed/Source/UsergridManager.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Samples/ActivityFeed/Source/UsergridManager.swift b/Samples/ActivityFeed/Source/UsergridManager.swift index 7130490..b72d46e 100644 --- a/Samples/ActivityFeed/Source/UsergridManager.swift +++ b/Samples/ActivityFeed/Source/UsergridManager.swift @@ -40,23 +40,23 @@ public class UsergridManager { ActivityEntity.registerSubclass() } - static func loginUser(_ username:String, password:String, completion:UsergridUserAuthCompletionBlock) { + static func loginUser(_ username:String, password:String, completion:@escaping UsergridUserAuthCompletionBlock) { let userAuth = UsergridUserAuth(username: username, password: password) Usergrid.authenticateUser(userAuth, completion: completion) } - static func createUser(_ name:String, username:String, email:String, password:String, completion:UsergridResponseCompletion) { + static func createUser(_ name:String, username:String, email:String, password:String, completion:@escaping UsergridResponseCompletion) { let user = UsergridUser(name: name, propertyDict: [UsergridUserProperties.username.stringValue:username, UsergridUserProperties.email.stringValue:email, UsergridUserProperties.password.stringValue:password]) user.create(completion) } - static func getFeedMessages(_ completion:UsergridResponseCompletion) { + static func getFeedMessages(_ completion:@escaping UsergridResponseCompletion) { Usergrid.GET(UsergridQuery("users/me/feed").desc(UsergridEntityProperties.created.stringValue), queryCompletion: completion) } - static func postFeedMessage(_ text:String,completion:UsergridResponseCompletion) { + static func postFeedMessage(_ text:String,completion:@escaping UsergridResponseCompletion) { let currentUser = Usergrid.currentUser! let verb = "post" @@ -72,7 +72,7 @@ public class UsergridManager { Usergrid.POST("users/me/activities", jsonBody: ["actor":actorDictionary,"verb":verb,"content":content], completion: completion) } - static func followUser(_ username:String, completion:UsergridResponseCompletion) { + static func followUser(_ username:String, completion:@escaping UsergridResponseCompletion) { Usergrid.connect("users", entityID: "me", relationship: "following", toType: "users", toName: username, completion: completion) } } From 5bed16c3b8501d6155504833d55b9c69417c7222 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 10:34:59 -0500 Subject: [PATCH 04/10] Updating travis.yml for swift 3.0 --- .travis.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2f043b5..1448753 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode7.3 +osx_image: xcode8 env: global: - LC_CTYPE=en_US.UTF-8 @@ -9,15 +9,15 @@ env: - OSX_FRAMEWORK_SCHEME="UsergridSDK OSX" - TVOS_FRAMEWORK_SCHEME="UsergridSDK tvOS" - WATCHOS_FRAMEWORK_SCHEME="UsergridSDK watchOS" - - IOS_SDK=iphonesimulator9.3 - - OSX_SDK=macosx10.11 - - TVOS_SDK=appletvsimulator9.2 - - WATCHOS_SDK=watchsimulator2.2 + - IOS_SDK=iphonesimulator10.0 + - OSX_SDK=macosx10.12 + - TVOS_SDK=appletvsimulator10.0 + - WATCHOS_SDK=watchsimulator3.0 matrix: - - DESTINATION="OS=9.3,name=iPhone 6S Plus" SCHEME="$IOS_FRAMEWORK_SCHEME" SDK="$IOS_SDK" RUN_TESTS="YES" + - DESTINATION="OS=10.0,name=iPhone 7 Plus" SCHEME="$IOS_FRAMEWORK_SCHEME" SDK="$IOS_SDK" RUN_TESTS="YES" - DESTINATION="arch=x86_64" SCHEME="$OSX_FRAMEWORK_SCHEME" SDK="$OSX_SDK" RUN_TESTS="YES" - - DESTINATION="OS=9.2,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" SDK="$TVOS_SDK" RUN_TESTS="YES" - - DESTINATION="OS=2.2,name=Apple Watch - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" SDK="$WATCHOS_SDK" RUN_TESTS="NO" + - DESTINATION="OS=10.0,name=Apple TV 1080p" SCHEME="$TVOS_FRAMEWORK_SCHEME" SDK="$TVOS_SDK" RUN_TESTS="YES" + - DESTINATION="OS=3.0,name=Apple Watch - 42mm" SCHEME="$WATCHOS_FRAMEWORK_SCHEME" SDK="$WATCHOS_SDK" RUN_TESTS="NO" script: - xcodebuild -version - xcodebuild -showsdks @@ -34,4 +34,4 @@ script: xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO ENABLE_TESTABILITY=YES test | xcpretty -c; else xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -sdk "$SDK" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO build | xcpretty -c; - fi \ No newline at end of file + fi From 6434c89e920ebaf112512bc33f38c8d30f142add Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 12:36:15 -0500 Subject: [PATCH 05/10] Update to version 2.1.3 --- Source/Usergrid.swift | 2 +- UsergridSDK.podspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Usergrid.swift b/Source/Usergrid.swift index f9807f3..c6a41af 100644 --- a/Source/Usergrid.swift +++ b/Source/Usergrid.swift @@ -27,7 +27,7 @@ import Foundation /// The version number for the Usergrid Swift SDK. -public let UsergridSDKVersion = "2.1.2" +public let UsergridSDKVersion = "2.1.3" /** The `Usergrid` class acts as a static shared instance manager for the `UsergridClient` class. diff --git a/UsergridSDK.podspec b/UsergridSDK.podspec index b3b84f6..4d13736 100644 --- a/UsergridSDK.podspec +++ b/UsergridSDK.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'UsergridSDK' - s.version = '2.1.2' + s.version = ‘2.1.3’ s.summary = 'Usergrid SDK written in Swift' s.homepage = 'https://github.com/apache/usergrid-swift' s.license = 'Apache 2.0' From a122207f57a4181f872906e875d43d70879fc1e1 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 12:51:46 -0500 Subject: [PATCH 06/10] Update README --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b6552bd..cd06692 100644 --- a/README.md +++ b/README.md @@ -13,20 +13,16 @@ Usergrid SDK written in Swift > **Use `#import ` 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+ +- Xcode 8.0+ +- Swift 3.0+ ## Installation ### [CocoaPods](http://cocoapods.org) -> **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' ``` From 0869e82eed5af9583b4fdb4fb1007899ddce4ba5 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 16:00:42 -0500 Subject: [PATCH 07/10] Fixed bug in UsergridClient with saving the shared UsergridDevice on UsergridClient initialization. --- Source/UsergridClient.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/UsergridClient.swift b/Source/UsergridClient.swift index 81fe3a6..24bc7aa 100644 --- a/Source/UsergridClient.swift +++ b/Source/UsergridClient.swift @@ -130,7 +130,9 @@ public class UsergridClient: NSObject, NSCoding { if persistCurrentUserInKeychain { self.currentUser = UsergridUser.getCurrentUserFromKeychain(self) // Attempt to get the current user from the saved keychain data. } - UsergridDevice.sharedDevice.save(self) + DispatchQueue.global().async { + UsergridDevice.sharedDevice.save(self) + } } // MARK: - NSCoding - From 6c1f3fe4db9f24fc31ed7e19cab98299070bd38b Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Fri, 16 Sep 2016 16:01:49 -0500 Subject: [PATCH 08/10] Fixed another of the same bug in UsergridClient --- Source/UsergridClient.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Source/UsergridClient.swift b/Source/UsergridClient.swift index 24bc7aa..7cb3a14 100644 --- a/Source/UsergridClient.swift +++ b/Source/UsergridClient.swift @@ -162,7 +162,9 @@ public class UsergridClient: NSObject, NSCoding { self.currentUser = UsergridUser.getCurrentUserFromKeychain(self) } } - UsergridDevice.sharedDevice.save(self) + DispatchQueue.global().async { + UsergridDevice.sharedDevice.save(self) + } } /** From 51443d5bb3901e4c73709193df02cce6f7877663 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Wed, 9 Nov 2016 21:03:13 -0600 Subject: [PATCH 09/10] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index cd06692..4b062e8 100644 --- a/README.md +++ b/README.md @@ -303,7 +303,7 @@ entity.remove() { response in } ``` -## Authentication, current user, and auth-fallback +## Authentication, current user, and authMode ### appAuth and authenticateApp() @@ -340,13 +340,15 @@ Usergrid.authenticateUser(userAuth,setAsCurrentUser: false) { auth, user, error } ``` -### authFallback +### authMode -Auth-fallback defines what the client should do when a user token is not present. +Auth-mode is used to determine what the `UsergridClient` will use for authorization. -By default, `Usergrid.authFallback` is set to `.None`, whereby when a token is *not* present, an API call will be performed unauthenticated. +By default, `Usergrid.authMode` is set to `.User`, whereby if a non-expired `UsergridUserAuth` exists in `UsergridClient.currentUser`, this token is used to authenticate all API calls. -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). +If instead `Usergrid.authMode` is set to `.None`, all API calls will be performed unauthenticated. + +If instead `Usergrid.authMode` is set to `.App`, all API calls will be performed using the client credentials token, _if_ they're available (i.e. `authenticateApp()` was performed at some point). ### usingAuth() From 3ae76c364b96cea34e559a32acb7bcf5d10f03c4 Mon Sep 17 00:00:00 2001 From: Robert Walsh Date: Wed, 9 Nov 2016 21:03:46 -0600 Subject: [PATCH 10/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b062e8..4bd1dd7 100644 --- a/README.md +++ b/README.md @@ -357,7 +357,7 @@ At times it is desireable to have complete, granular control over the authentica 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 +// assume Usergrid.authMode = .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