Add Query string class

This commit is contained in:
Cole Alban 2016-08-28 16:25:31 -04:00
parent 2ccfb5f451
commit e65ddf71d3
69 changed files with 3423 additions and 4140 deletions

13
Podfile
View File

@ -1,6 +1,13 @@
# Uncomment this line to define a global platform for your project # Uncomment this line to define a global platform for your project
# platform :ios, '9.0' # platform :ios, '9.0'
post_install do |installer|
installer.pods_project.build_configuration_list.build_configurations.each do |configuration|
configuration.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
end
end
target 'Vendoo' do target 'Vendoo' do
# Comment this line if you're not using Swift and don't want to use dynamic frameworks # Comment this line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks! use_frameworks!
@ -22,8 +29,8 @@ use_frameworks!
pod 'TYMActivityIndicatorView' pod 'TYMActivityIndicatorView'
pod 'BSImagePicker', '~> 2.3' pod 'BSImagePicker', '~> 2.3'
pod 'SWRevealViewController' pod 'SWRevealViewController'
# pod 'CommonCrypto'
#'~> 1.1'
target 'VendooTests' do target 'VendooTests' do
# inherit! :search_paths # inherit! :search_paths
@ -35,5 +42,7 @@ use_frameworks!
# inherit! :search_paths # inherit! :search_paths
# Pods for testing # Pods for testing
end end
end end

View File

@ -1,7 +1,7 @@
PODS: PODS:
- AeroGearHttp (0.6.0) - AeroGearHttp (0.7.0)
- AeroGearOAuth2 (0.5.1): - AeroGearOAuth2 (0.7.0):
- AeroGearHttp - AeroGearHttp (= 0.7.0)
- AFNetworking (2.6.3): - AFNetworking (2.6.3):
- AFNetworking/NSURLConnection (= 2.6.3) - AFNetworking/NSURLConnection (= 2.6.3)
- AFNetworking/NSURLSession (= 2.6.3) - AFNetworking/NSURLSession (= 2.6.3)
@ -37,25 +37,25 @@ PODS:
- BSImagePicker (2.3.0): - BSImagePicker (2.3.0):
- BSGridCollectionViewLayout (~> 1.1) - BSGridCollectionViewLayout (~> 1.1)
- UIImageViewModeScaleAspect (~> 1.3) - UIImageViewModeScaleAspect (~> 1.3)
- FBSDKCoreKit (4.14.0): - FBSDKCoreKit (4.15.0):
- Bolts (~> 1.7) - Bolts (~> 1.7)
- FBSDKLoginKit (4.14.0): - FBSDKLoginKit (4.15.0):
- FBSDKCoreKit - FBSDKCoreKit
- FBSDKShareKit (4.14.0): - FBSDKShareKit (4.15.0):
- FBSDKCoreKit - FBSDKCoreKit
- Firebase (3.4.0): - Firebase (3.5.2):
- Firebase/Core (= 3.4.0) - Firebase/Core (= 3.5.2)
- Firebase/Analytics (3.4.0): - Firebase/Analytics (3.5.2):
- FirebaseAnalytics (~> 3.3) - FirebaseAnalytics (~> 3.3)
- Firebase/Core (3.4.0): - Firebase/Core (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- Firebase/Database (3.4.0): - Firebase/Database (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- FirebaseDatabase (= 3.0.2) - FirebaseDatabase (= 3.0.2)
- Firebase/Storage (3.4.0): - Firebase/Storage (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- FirebaseStorage (= 1.0.2) - FirebaseStorage (= 1.0.3)
- FirebaseAnalytics (3.3.0): - FirebaseAnalytics (3.3.1):
- FirebaseInstanceID (~> 1.0) - FirebaseInstanceID (~> 1.0)
- GoogleInterchangeUtilities (~> 1.2) - GoogleInterchangeUtilities (~> 1.2)
- GoogleSymbolUtilities (~> 1.1) - GoogleSymbolUtilities (~> 1.1)
@ -68,8 +68,8 @@ PODS:
- FirebaseDatabase (3.0.2): - FirebaseDatabase (3.0.2):
- FirebaseAnalytics (~> 3.2) - FirebaseAnalytics (~> 3.2)
- FirebaseInstanceID (1.0.8) - FirebaseInstanceID (1.0.8)
- FirebaseStorage (1.0.2): - FirebaseStorage (1.0.3):
- FirebaseAnalytics (~> 3.2) - FirebaseAnalytics (~> 3.3)
- GoogleNetworkingUtilities (~> 1.2) - GoogleNetworkingUtilities (~> 1.2)
- GDataXML-HTML (1.3.0) - GDataXML-HTML (1.3.0)
- GoogleInterchangeUtilities (1.2.1): - GoogleInterchangeUtilities (1.2.1):
@ -121,23 +121,23 @@ DEPENDENCIES:
- TYMActivityIndicatorView - TYMActivityIndicatorView
SPEC CHECKSUMS: SPEC CHECKSUMS:
AeroGearHttp: e958f301cc2d1c7fbfd4b61af187ea3490040a48 AeroGearHttp: 4660c8bf5b56cd00a3b75d7c5ecf94774469df5c
AeroGearOAuth2: 6f29d3fac8b78a0ff6d51b04c4ba1a02baed2e52 AeroGearOAuth2: de4218f60a6228d6cdcf1761277fe8af1115600a
AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60 AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60
Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98 Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98
Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322
BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3 BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3
BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18 BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18
FBSDKCoreKit: 6e020b5db0b5bd1e01f5fb0902131befd129a502 FBSDKCoreKit: 6680cbd33a4243d80700f182d0af36b3fa7f3118
FBSDKLoginKit: da563567a108050ef83739c8c8c001ee9e25fa13 FBSDKLoginKit: 96d9b70b5784490f02ab86119e542a1f182017a8
FBSDKShareKit: e8e5d4ccef69b41132fe33acda26db1e33143e33 FBSDKShareKit: 06ef20cb2f16828ca4b20055333313dd445de362
Firebase: 754562547af419cc2f4b15247fee419081924bc2 Firebase: 94e63112efcad75226c0356a8f3032397b8547c9
FirebaseAnalytics: 228be2991cb28efb96cdafc4d62f64680e615c69 FirebaseAnalytics: d968d4d5f6aeb795cd64144337bcd233e530efc6
FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c
FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7 FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7
FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a
FirebaseStorage: fa2a87dee81f682f553af6839daa37a750e65f6a FirebaseStorage: 3992817bf405f5c1a4f8349678d22724cd0ef509
GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898 GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898
GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de
GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f
@ -152,6 +152,6 @@ SPEC CHECKSUMS:
TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b
UIImageViewModeScaleAspect: 11a790a0b9d248a13dc63e3a78991f1463b6d84e UIImageViewModeScaleAspect: 11a790a0b9d248a13dc63e3a78991f1463b6d84e
PODFILE CHECKSUM: 3b36a7c734809ee54f4ecf0055d9910a9279d555 PODFILE CHECKSUM: d5879f9153df4c398c04aed34c686baebf1eeafb
COCOAPODS: 1.0.0 COCOAPODS: 1.0.1

View File

@ -544,7 +544,13 @@ public class Http {
if (destinationDirectory == nil) { // use 'default documents' directory if not set if (destinationDirectory == nil) { // use 'default documents' directory if not set
// use default documents directory // use default documents directory
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
finalDestination = documentsDirectory.URLByAppendingPathComponent(filename!) #if swift(>=2.3)
// this compiles on Xcode 8 / Swift 2.3 / iOS 10
finalDestination = documentsDirectory.URLByAppendingPathComponent(filename!)!
#else
// this compiles on Xcode 7 / Swift 2.2 / iOS 9
finalDestination = documentsDirectory.URLByAppendingPathComponent(filename!)
#endif
} else { } else {
// check that the directory exists // check that the directory exists
let path = destinationDirectory?.stringByAppendingPathComponent(filename!) let path = destinationDirectory?.stringByAppendingPathComponent(filename!)
@ -577,7 +583,8 @@ public class Http {
} }
// MARK: Utility methods // MARK: Utility methods
public func calculateURL(baseURL: String?, var url: String) -> NSURL? { public func calculateURL(baseURL: String?, url: String) -> NSURL? {
var url = url
if (baseURL == nil || url.hasPrefix("http")) { if (baseURL == nil || url.hasPrefix("http")) {
return NSURL(string: url)! return NSURL(string: url)!
} }

View File

@ -65,7 +65,13 @@ public class HttpRequestSerializer: RequestSerializer {
var newUrl:String var newUrl:String
if (request.URL?.absoluteString != nil && parameters != nil) { if (request.URL?.absoluteString != nil && parameters != nil) {
let queryString = self.stringFromParameters(parameters!) let queryString = self.stringFromParameters(parameters!)
newUrl = "\(request.URL!.absoluteString)\(paramSeparator)\(queryString)" #if swift(>=2.3)
// this compiles on Xcode 8 / Swift 2.3 / iOS 10
newUrl = "\(request.URL!.absoluteString!)\(paramSeparator)\(queryString)"
#else
// this compiles on Xcode 7 / Swift 2.2 / iOS 9
newUrl = "\(request.URL!.absoluteString)\(paramSeparator)\(queryString)"
#endif
request.URL = NSURL(string: newUrl)! request.URL = NSURL(string: newUrl)!
} }

View File

@ -1,6 +1,6 @@
# aerogear-ios-http [![Build Status](https://travis-ci.org/aerogear/aerogear-ios-http.png)](https://travis-ci.org/aerogear/aerogear-ios-http) # aerogear-ios-http [![Build Status](https://travis-ci.org/aerogear/aerogear-ios-http.png)](https://travis-ci.org/aerogear/aerogear-ios-http)
> This module currently build with Xcode 7.2 and supports iOS8, iOS9. > This module currently build with Xcode 7.2 / Xcode 8 and supports iOS8, iOS9, iOS10.
Thin layer to take care of your http requests working with NSURLSession. Thin layer to take care of your http requests working with NSURLSession.
Taking care of: Taking care of:
@ -11,7 +11,7 @@ Taking care of:
* Pluggable object serialization * Pluggable object serialization
* background processing support * background processing support
100% Swift 2.0. 100% Swift 2.X.
| | Project Info | | | Project Info |
| --------------- | ------------- | | --------------- | ------------- |
@ -112,7 +112,7 @@ pod install
To add the library in your project, you can either use [CocoaPods](http://cocoapods.org) or manual install in your project. See the respective sections below for instructions: To add the library in your project, you can either use [CocoaPods](http://cocoapods.org) or manual install in your project. See the respective sections below for instructions:
### Using [CocoaPods](http://cocoapods.org) ### Using [CocoaPods](http://cocoapods.org)
Support for Swift frameworks is supported from [CocoaPods-0.36 release](http://blog.cocoapods.org/CocoaPods-0.36/) upwards. In your ```Podfile``` add: We recommend you use[CocoaPods-1.1.0.beta.1 release](https://github.com/CocoaPods/CocoaPods/releases/tag/1.1.0.beta.1). In your ```Podfile``` add:
``` ```
pod 'AeroGearHttp' pod 'AeroGearHttp'

View File

@ -65,12 +65,12 @@ public class GoogleConfig: Config {
public init(clientId: String, scopes: [String], accountId: String? = nil, isOpenIDConnect: Bool = false) { public init(clientId: String, scopes: [String], accountId: String? = nil, isOpenIDConnect: Bool = false) {
let bundleString = NSBundle.mainBundle().bundleIdentifier ?? "google" let bundleString = NSBundle.mainBundle().bundleIdentifier ?? "google"
super.init(base: "https://accounts.google.com", super.init(base: "https://accounts.google.com",
authzEndpoint: "o/oauth2/auth", authzEndpoint: "o/oauth2/v2/auth",
redirectURL: "\(bundleString):/oauth2Callback", redirectURL: "\(bundleString):/oauth2Callback",
accessTokenEndpoint: "o/oauth2/token", accessTokenEndpoint: "o/oauth2/token",
clientId: clientId, clientId: clientId,
refreshTokenEndpoint: "o/oauth2/token", refreshTokenEndpoint: "o/oauth2/token",
revokeTokenEndpoint: "rest/revoke", revokeTokenEndpoint: "o/oauth2/revoke",
isOpenIDConnect: isOpenIDConnect, isOpenIDConnect: isOpenIDConnect,
userInfoEndpoint: isOpenIDConnect ? "https://www.googleapis.com/plus/v1/people/me/openIdConnect" : nil, userInfoEndpoint: isOpenIDConnect ? "https://www.googleapis.com/plus/v1/people/me/openIdConnect" : nil,
scopes: scopes, scopes: scopes,
@ -96,13 +96,13 @@ public class KeycloakConfig: Config {
let bundleString = NSBundle.mainBundle().bundleIdentifier ?? "keycloak" let bundleString = NSBundle.mainBundle().bundleIdentifier ?? "keycloak"
let defaulRealmName = String(format: "%@-realm", clientId) let defaulRealmName = String(format: "%@-realm", clientId)
let realm = realm ?? defaulRealmName let realm = realm ?? defaulRealmName
super.init(base: String(format: "%@/auth", host), super.init(base: "\(host)/auth",
authzEndpoint: String(format: "realms/%@/tokens/login", realm), authzEndpoint: "realms/\(realm)/protocol/openid-connect/auth",
redirectURL: "\(bundleString)://oauth2Callback", redirectURL: "\(bundleString)://oauth2Callback",
accessTokenEndpoint: String(format: "realms/%@/tokens/access/codes", realm), accessTokenEndpoint: "realms/\(realm)/protocol/openid-connect/token",
clientId: clientId, clientId: clientId,
refreshTokenEndpoint: String(format: "realms/%@/tokens/refresh", realm), refreshTokenEndpoint: "realms/\(realm)/protocol/openid-connect/token",
revokeTokenEndpoint: String(format: "realms/%@/tokens/logout", realm), revokeTokenEndpoint: "realms/\(realm)/protocol/openid-connect/logout",
isOpenIDConnect: isOpenIDConnect) isOpenIDConnect: isOpenIDConnect)
// Add openIdConnect scope // Add openIdConnect scope
if self.isOpenIDConnect { if self.isOpenIDConnect {
@ -117,11 +117,11 @@ An account manager used to instantiate, store and retrieve OAuth2 modules.
public class AccountManager { public class AccountManager {
/// List of OAuth2 modules available for a given app. Each module is linked to an OAuht2Session which securely store the tokens. /// List of OAuth2 modules available for a given app. Each module is linked to an OAuht2Session which securely store the tokens.
var modules: [String: OAuth2Module] var modules: [String: OAuth2Module]
init() { init() {
self.modules = [String: OAuth2Module]() self.modules = [String: OAuth2Module]()
} }
/// access a shared instance of an account manager /// access a shared instance of an account manager
public class var sharedInstance: AccountManager { public class var sharedInstance: AccountManager {
struct Singleton { struct Singleton {
@ -129,52 +129,52 @@ public class AccountManager {
} }
return Singleton.instance return Singleton.instance
} }
/** /**
Instantiate an OAuth2 Module using the configuration object passed in and adds it to the account manager. It uses the OAuth2Session account_id as the name that this module will be stored in. Instantiate an OAuth2 Module using the configuration object passed in and adds it to the account manager. It uses the OAuth2Session account_id as the name that this module will be stored in.
:param: config the configuration object to use to setup an OAuth2 module. :param: config the configuration object to use to setup an OAuth2 module.
:param: moduleClass the type of the OAuth2 module to instantiate. :param: moduleClass the type of the OAuth2 module to instantiate.
:returns: the OAuth2 module :returns: the OAuth2 module
*/ */
public class func addAccount(config: Config, moduleClass: OAuth2Module.Type) -> OAuth2Module { public class func addAccount(config: Config, moduleClass: OAuth2Module.Type) -> OAuth2Module {
var myModule:OAuth2Module var myModule: OAuth2Module
myModule = moduleClass.init(config: config) myModule = moduleClass.init(config: config)
// TODO check accountId is unique in modules list // TODO check accountId is unique in modules list
sharedInstance.modules[myModule.oauth2Session.accountId] = myModule sharedInstance.modules[myModule.oauth2Session.accountId] = myModule
return myModule return myModule
} }
/** /**
Removes an OAuth2 module Removes an OAuth2 module
:param: name the name that the OAuth2 module was bound to. :param: name the name that the OAuth2 module was bound to.
:param: config the configuration object to use to setup an OAuth2 module. :param: config the configuration object to use to setup an OAuth2 module.
:param: moduleClass the type of the OAuth2 module to instantiate. :param: moduleClass the type of the OAuth2 module to instantiate.
:returns: the OAuth2module or nil if not found :returns: the OAuth2module or nil if not found
*/ */
public class func removeAccount(name: String, config: Config, moduleClass: OAuth2Module.Type) -> OAuth2Module? { public class func removeAccount(name: String, config: Config, moduleClass: OAuth2Module.Type) -> OAuth2Module? {
return sharedInstance.modules.removeValueForKey(name) return sharedInstance.modules.removeValueForKey(name)
} }
/** /**
Retrieves an OAuth2 module by a name Retrieves an OAuth2 module by a name
:param: name the name that the OAuth2 module was bound to. :param: name the name that the OAuth2 module was bound to.
:returns: the OAuth2module or nil if not found. :returns: the OAuth2module or nil if not found.
*/ */
public class func getAccountByName(name: String) -> OAuth2Module? { public class func getAccountByName(name: String) -> OAuth2Module? {
return sharedInstance.modules[name] return sharedInstance.modules[name]
} }
/** /**
Retrieves a list of OAuth2 modules bound to specific clientId. Retrieves a list of OAuth2 modules bound to specific clientId.
:param: clientId the client it that the oauth2 module was bound to. :param: clientId the client it that the oauth2 module was bound to.
:returns: the OAuth2module or nil if not found. :returns: the OAuth2module or nil if not found.
*/ */
public class func getAccountsByClienId(clientId: String) -> [OAuth2Module] { public class func getAccountsByClienId(clientId: String) -> [OAuth2Module] {
@ -182,12 +182,12 @@ public class AccountManager {
return modules.filter {$0.config.clientId == clientId } return modules.filter {$0.config.clientId == clientId }
} }
/** /**
Retrieves an OAuth2 module by using a configuration object. Retrieves an OAuth2 module by using a configuration object.
:param: config the Config object that this oauth2 module was used to instantiate. :param: config the Config object that this oauth2 module was used to instantiate.
:returns: the OAuth2module or nil if not found. :returns: the OAuth2module or nil if not found.
*/ */
public class func getAccountByConfig(config: Config) -> OAuth2Module? { public class func getAccountByConfig(config: Config) -> OAuth2Module? {
@ -205,31 +205,31 @@ public class AccountManager {
/** /**
Convenient method to retrieve a Facebook oauth2 module. Convenient method to retrieve a Facebook oauth2 module.
:param: config a Facebook configuration object. See FacebookConfig. :param: config a Facebook configuration object. See FacebookConfig.
:returns: a Facebook OAuth2 module. :returns: a Facebook OAuth2 module.
*/ */
public class func addFacebookAccount(config: FacebookConfig) -> FacebookOAuth2Module { public class func addFacebookAccount(config: FacebookConfig) -> FacebookOAuth2Module {
return addAccount(config, moduleClass: FacebookOAuth2Module.self) as! FacebookOAuth2Module return addAccount(config, moduleClass: FacebookOAuth2Module.self) as! FacebookOAuth2Module
} }
/** /**
Convenient method to retrieve a Google oauth2 module ready to be used. Convenient method to retrieve a Google oauth2 module ready to be used.
:param: config a google configuration object. See GoogleConfig. :param: config a google configuration object. See GoogleConfig.
:returns: a google OAuth2 module. :returns: a google OAuth2 module.
*/ */
public class func addGoogleAccount(config: GoogleConfig) -> OAuth2Module { public class func addGoogleAccount(config: GoogleConfig) -> OAuth2Module {
return addAccount(config, moduleClass: OAuth2Module.self) return addAccount(config, moduleClass: OAuth2Module.self)
} }
/** /**
Convenient method to retrieve a Keycloak oauth2 module ready to be used. Convenient method to retrieve a Keycloak oauth2 module ready to be used.
:param: config a Keycloak configuration object. See KeycloakConfig. :param: config a Keycloak configuration object. See KeycloakConfig.
:returns: a Keycloak OAuth2 module. :returns: a Keycloak OAuth2 module.
*/ */
public class func addKeycloakAccount(config: KeycloakConfig) -> KeycloakOAuth2Module { public class func addKeycloakAccount(config: KeycloakConfig) -> KeycloakOAuth2Module {

View File

@ -25,7 +25,7 @@ public class Config {
Applies the baseURL to the configuration. Applies the baseURL to the configuration.
*/ */
public let baseURL: String public let baseURL: String
/** /**
Applies the "callback URL" once request token issued. Applies the "callback URL" once request token issued.
*/ */
@ -35,7 +35,7 @@ public class Config {
Applies the "authorization endpoint" to the request token. Applies the "authorization endpoint" to the request token.
*/ */
public var authzEndpoint: String public var authzEndpoint: String
/** /**
Applies the "access token endpoint" to the exchange code for access token. Applies the "access token endpoint" to the exchange code for access token.
*/ */
@ -45,27 +45,27 @@ public class Config {
Endpoint for request to invalidate both accessToken and refreshToken. Endpoint for request to invalidate both accessToken and refreshToken.
*/ */
public let revokeTokenEndpoint: String? public let revokeTokenEndpoint: String?
/** /**
Endpoint for request a refreshToken. Endpoint for request a refreshToken.
*/ */
public let refreshTokenEndpoint: String? public let refreshTokenEndpoint: String?
/** /**
Endpoint for OpenID Connect to get user information. Endpoint for OpenID Connect to get user information.
*/ */
public let userInfoEndpoint: String? public let userInfoEndpoint: String?
/** /**
Boolean to indicate whether OpenID Connect on authorization code grant flow is used. Boolean to indicate whether OpenID Connect on authorization code grant flow is used.
*/ */
public var isOpenIDConnect: Bool public var isOpenIDConnect: Bool
/** /**
Applies the various scopes of the authorization. Applies the various scopes of the authorization.
*/ */
public var scopes: [String] public var scopes: [String]
var scope: String { var scope: String {
get { get {
// Create a string to concatenate all scopes existing in the _scopes array. // Create a string to concatenate all scopes existing in the _scopes array.
@ -80,30 +80,38 @@ public class Config {
return scopeString return scopeString
} }
} }
/** /**
Applies the "client id" obtained with the client registration process. Applies the "client id" obtained with the client registration process.
*/ */
public let clientId: String public let clientId: String
/** /**
Applies the "client secret" obtained with the client registration process. Applies the "client secret" obtained with the client registration process.
*/ */
public let clientSecret: String? public let clientSecret: String?
/** /**
Account id is used with AccountManager to store tokens. AccountId is defined by the end-user Account id is used with AccountManager to store tokens. AccountId is defined by the end-user
and can be any String. If AccountManager is not used, this field is optional. and can be any String. If AccountManager is not used, this field is optional.
*/ */
public var accountId: String? public var accountId: String?
/** /**
Boolean to indicate to either used a webview (if true) or an external browser (by default, false) Boolean to indicate to either used a webview (if true) or an external browser (by default, false)
for authorization code grant flow. for authorization code grant flow.
*/ */
public var isWebView: Bool = false public var isWebView: Bool = false
public init(base: String, authzEndpoint: String, redirectURL: String, accessTokenEndpoint: String, clientId: String, refreshTokenEndpoint: String? = nil, revokeTokenEndpoint: String? = nil, isOpenIDConnect:Bool = false, userInfoEndpoint: String? = nil, scopes: [String] = [], clientSecret: String? = nil, accountId: String? = nil, isWebView: Bool = false) { /**
A handler to allow the webview to be pushed onto the navigation controller
*/
public var webViewHandler: ((OAuth2WebViewController, completionHandler: (AnyObject?, NSError?) -> Void) -> ()) = {
(webView, completionHandler) in
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(webView, animated: true, completion: nil)
}
public init(base: String, authzEndpoint: String, redirectURL: String, accessTokenEndpoint: String, clientId: String, refreshTokenEndpoint: String? = nil, revokeTokenEndpoint: String? = nil, isOpenIDConnect: Bool = false, userInfoEndpoint: String? = nil, scopes: [String] = [], clientSecret: String? = nil, accountId: String? = nil, isWebView: Bool = false) {
self.baseURL = base self.baseURL = base
self.authzEndpoint = authzEndpoint self.authzEndpoint = authzEndpoint
self.redirectURL = redirectURL self.redirectURL = redirectURL
@ -118,4 +126,4 @@ public class Config {
self.accountId = accountId self.accountId = accountId
self.isWebView = isWebView self.isWebView = isWebView
} }
} }

View File

@ -20,17 +20,16 @@ import Foundation
/** /**
Handy extensions to NSDate Handy extensions to NSDate
*/ */
extension NSDate extension NSDate {
{
/** /**
Initialize a date object using the given string. Initialize a date object using the given string.
:param: dateString the string that will be used to instantiate the date object. The string is expected to be in the format 'yyyy-MM-dd hh:mm:ss a'. :param: dateString the string that will be used to instantiate the date object. The string is expected to be in the format 'yyyy-MM-dd hh:mm:ss a'.
:returns: the NSDate object. :returns: the NSDate object.
*/ */
public convenience init(dateString:String) { public convenience init(dateString: String) {
let dateStringFormatter = NSDateFormatter() let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a" dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
let d = dateStringFormatter.dateFromString(dateString) let d = dateStringFormatter.dateFromString(dateString)
@ -40,11 +39,11 @@ extension NSDate
self.init() self.init()
} }
} }
/** /**
Returns a string of the date object using the format 'yyyy-MM-dd hh:mm:ss a'. Returns a string of the date object using the format 'yyyy-MM-dd hh:mm:ss a'.
:returns: a formatted string object. :returns: a formatted string object.
*/ */
public func toString() -> String { public func toString() -> String {
@ -52,4 +51,4 @@ extension NSDate
dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a" dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
return dateStringFormatter.stringFromDate(self) return dateStringFormatter.stringFromDate(self)
} }
} }

View File

@ -22,35 +22,35 @@ import AeroGearHttp
An OAuth2Module subclass specific to 'Facebook' authorization An OAuth2Module subclass specific to 'Facebook' authorization
*/ */
public class FacebookOAuth2Module: OAuth2Module { public class FacebookOAuth2Module: OAuth2Module {
public required init(config: Config, session: OAuth2Session?, requestSerializer: RequestSerializer, responseSerializer: ResponseSerializer) { public required init(config: Config, session: OAuth2Session?, requestSerializer: RequestSerializer, responseSerializer: ResponseSerializer) {
super.init(config: config, session: session, requestSerializer: JsonRequestSerializer(), responseSerializer: StringResponseSerializer()) super.init(config: config, session: session, requestSerializer: JsonRequestSerializer(), responseSerializer: StringResponseSerializer())
} }
/** /**
Exchange an authorization code for an access token. Exchange an authorization code for an access token.
:param: code the 'authorization' code to exchange for an access token. :param: code the 'authorization' code to exchange for an access token.
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
override public func exchangeAuthorizationCodeForAccessToken(code: String, completionHandler: (AnyObject?, NSError?) -> Void) { override public func exchangeAuthorizationCodeForAccessToken(code: String, completionHandler: (AnyObject?, NSError?) -> Void) {
var paramDict: [String: String] = ["code": code, "client_id": config.clientId, "redirect_uri": config.redirectURL, "grant_type":"authorization_code"] var paramDict: [String: String] = ["code": code, "client_id": config.clientId, "redirect_uri": config.redirectURL, "grant_type":"authorization_code"]
if let unwrapped = config.clientSecret { if let unwrapped = config.clientSecret {
paramDict["client_secret"] = unwrapped paramDict["client_secret"] = unwrapped
} }
http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: { (response, error) in http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
if let unwrappedResponse = response as? String { if let unwrappedResponse = response as? String {
var accessToken: String? = nil var accessToken: String? = nil
var expiredIn: String? = nil var expiredIn: String? = nil
let charSet: NSMutableCharacterSet = NSMutableCharacterSet() let charSet: NSMutableCharacterSet = NSMutableCharacterSet()
charSet.addCharactersInString("&=") charSet.addCharactersInString("&=")
let array = unwrappedResponse.componentsSeparatedByCharactersInSet(charSet) let array = unwrappedResponse.componentsSeparatedByCharactersInSet(charSet)
@ -69,38 +69,38 @@ public class FacebookOAuth2Module: OAuth2Module {
} }
}) })
} }
/** /**
Request to revoke access. Request to revoke access.
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
override public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) { override public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized // return if not yet initialized
if (self.oauth2Session.accessToken == nil) { if (self.oauth2Session.accessToken == nil) {
return; return
} }
let paramDict:[String:String] = ["access_token":self.oauth2Session.accessToken!] let paramDict: [String:String] = ["access_token":self.oauth2Session.accessToken!]
http.request(.DELETE, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in http.request(.DELETE, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
self.oauth2Session.clearTokens() self.oauth2Session.clearTokens()
completionHandler(response!, nil) completionHandler(response!, nil)
}) })
} }
/** /**
Gateway to request authorization access Gateway to request authorization access
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
override public func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) { override public func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) {
self.requestAccess { (response:AnyObject?, error:NSError?) -> Void in self.requestAccess { (response: AnyObject?, error: NSError?) -> Void in
if (error != nil) { if (error != nil) {
completionHandler(nil, nil, error) completionHandler(nil, nil, error)
return return
@ -110,7 +110,7 @@ public class FacebookOAuth2Module: OAuth2Module {
paramDict = ["access_token": response! as! String] paramDict = ["access_token": response! as! String]
} }
if let userInfoEndpoint = self.config.userInfoEndpoint { if let userInfoEndpoint = self.config.userInfoEndpoint {
self.http.request(.GET, path: userInfoEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in self.http.request(.GET, path: userInfoEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, nil, error) completionHandler(nil, nil, error)
@ -132,4 +132,4 @@ public class FacebookOAuth2Module: OAuth2Module {
} }
} }
} }
} }

View File

@ -21,32 +21,32 @@ import Foundation
An OAuth2Module subclass specific to 'Keycloak' authorization An OAuth2Module subclass specific to 'Keycloak' authorization
*/ */
public class KeycloakOAuth2Module: OAuth2Module { public class KeycloakOAuth2Module: OAuth2Module {
public override func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) { public override func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized // return if not yet initialized
if (self.oauth2Session.accessToken == nil) { if (self.oauth2Session.accessToken == nil) {
return; return
} }
let paramDict:[String:String] = [ "client_id": config.clientId, "refresh_token": self.oauth2Session.refreshToken!] let paramDict: [String:String] = [ "client_id": config.clientId, "refresh_token": self.oauth2Session.refreshToken!]
http.request(.POST, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in http.request(.POST, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
self.oauth2Session.clearTokens() self.oauth2Session.clearTokens()
completionHandler(response, nil) completionHandler(response, nil)
}) })
} }
/** /**
Gateway to login with OpenIDConnect Gateway to login with OpenIDConnect
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
public override func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) { public override func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) {
var openIDClaims: OpenIDClaim? var openIDClaims: OpenIDClaim?
self.requestAccess { (response: AnyObject?, error: NSError?) -> Void in self.requestAccess { (response: AnyObject?, error: NSError?) -> Void in
if (error != nil) { if (error != nil) {
completionHandler(nil, nil, error) completionHandler(nil, nil, error)
@ -62,10 +62,10 @@ public class KeycloakOAuth2Module: OAuth2Module {
completionHandler(accessToken, openIDClaims, nil) completionHandler(accessToken, openIDClaims, nil)
} }
} }
/** /**
Request to refresh an access token. Request to refresh an access token.
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
public override func refreshAccessToken(completionHandler: (AnyObject?, NSError?) -> Void) { public override func refreshAccessToken(completionHandler: (AnyObject?, NSError?) -> Void) {
@ -74,13 +74,13 @@ public class KeycloakOAuth2Module: OAuth2Module {
if (config.clientSecret != nil) { if (config.clientSecret != nil) {
paramDict["client_secret"] = config.clientSecret! paramDict["client_secret"] = config.clientSecret!
} }
http.request(.POST, path: config.refreshTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in http.request(.POST, path: config.refreshTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
if let unwrappedResponse = response as? [String: AnyObject] { if let unwrappedResponse = response as? [String: AnyObject] {
let accessToken: String = unwrappedResponse["access_token"] as! String let accessToken: String = unwrappedResponse["access_token"] as! String
let refreshToken: String = unwrappedResponse["refresh_token"] as! String let refreshToken: String = unwrappedResponse["refresh_token"] as! String
@ -88,21 +88,21 @@ public class KeycloakOAuth2Module: OAuth2Module {
let exp: String = expiration.stringValue let exp: String = expiration.stringValue
let expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber let expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber
let expRefresh = expirationRefresh?.stringValue let expRefresh = expirationRefresh?.stringValue
// in Keycloak refresh token get refreshed every time you use them // in Keycloak refresh token get refreshed every time you use them
self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh) self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh)
completionHandler(accessToken, nil); completionHandler(accessToken, nil)
} }
}) })
} }
} }
func decode(token: String) -> [String: AnyObject]? { func decode(token: String) -> [String: AnyObject]? {
let string = token.componentsSeparatedByString(".") let string = token.componentsSeparatedByString(".")
let toDecode = string[1] as String let toDecode = string[1] as String
var stringtoDecode: String = toDecode.stringByReplacingOccurrencesOfString("-", withString: "+") // 62nd char of encoding var stringtoDecode: String = toDecode.stringByReplacingOccurrencesOfString("-", withString: "+") // 62nd char of encoding
stringtoDecode = stringtoDecode.stringByReplacingOccurrencesOfString("_", withString: "/") // 63rd char of encoding stringtoDecode = stringtoDecode.stringByReplacingOccurrencesOfString("_", withString: "/") // 63rd char of encoding
switch (stringtoDecode.utf16.count % 4) { switch (stringtoDecode.utf16.count % 4) {
@ -113,7 +113,7 @@ public class KeycloakOAuth2Module: OAuth2Module {
} }
let dataToDecode = NSData(base64EncodedString: stringtoDecode, options: []) let dataToDecode = NSData(base64EncodedString: stringtoDecode, options: [])
let base64DecodedString = NSString(data: dataToDecode!, encoding: NSUTF8StringEncoding) let base64DecodedString = NSString(data: dataToDecode!, encoding: NSUTF8StringEncoding)
var values: [String: AnyObject]? var values: [String: AnyObject]?
if let string = base64DecodedString { if let string = base64DecodedString {
if let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) { if let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) {
@ -122,5 +122,5 @@ public class KeycloakOAuth2Module: OAuth2Module {
} }
return values return values
} }
} }

View File

@ -50,7 +50,8 @@ public class OAuth2Module: AuthzModule {
var applicationLaunchNotificationObserver: NSObjectProtocol? var applicationLaunchNotificationObserver: NSObjectProtocol?
var applicationDidBecomeActiveNotificationObserver: NSObjectProtocol? var applicationDidBecomeActiveNotificationObserver: NSObjectProtocol?
var state: AuthorizationState var state: AuthorizationState
var webView: OAuth2WebViewController? public var webView: OAuth2WebViewController?
/** /**
Initialize an OAuth2 module. Initialize an OAuth2 module.
@ -107,7 +108,7 @@ public class OAuth2Module: AuthzModule {
// unregister // unregister
self.stopObserving() self.stopObserving()
// ..and update state // ..and update state
self.state = .AuthorizationStateUnknown; self.state = .AuthorizationStateUnknown
} }
}) })
@ -121,11 +122,17 @@ public class OAuth2Module: AuthzModule {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
let url = NSURL(string:computedUrl.absoluteString + params) #if swift(>=2.3)
// this compiles on Xcode 8 / Swift 2.3 / iOS 10
let url = NSURL(string:computedUrl.absoluteString! + params)
#else
// this compiles on Xcode 7 / Swift 2.2 / iOS 9
let url = NSURL(string:computedUrl.absoluteString + params)
#endif
if let url = url { if let url = url {
if self.webView != nil { if self.webView != nil {
self.webView!.targetURL = url self.webView!.targetURL = url
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(self.webView!, animated: true, completion: nil) config.webViewHandler(self.webView!, completionHandler: completionHandler)
} else { } else {
UIApplication.sharedApplication().openURL(url) UIApplication.sharedApplication().openURL(url)
} }
@ -154,8 +161,12 @@ public class OAuth2Module: AuthzModule {
let accessToken: String = unwrappedResponse["access_token"] as! String let accessToken: String = unwrappedResponse["access_token"] as! String
let expiration = unwrappedResponse["expires_in"] as! NSNumber let expiration = unwrappedResponse["expires_in"] as! NSNumber
let exp: String = expiration.stringValue let exp: String = expiration.stringValue
var refreshToken = unwrappedRefreshToken
self.oauth2Session.saveAccessToken(accessToken, refreshToken: unwrappedRefreshToken, accessTokenExpiration: exp, refreshTokenExpiration: nil) if let newRefreshToken = unwrappedResponse["refresh_token"] as? String {
refreshToken = newRefreshToken
}
self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: nil)
completionHandler(unwrappedResponse["access_token"], nil); completionHandler(unwrappedResponse["access_token"], nil);
} }
@ -171,17 +182,17 @@ public class OAuth2Module: AuthzModule {
*/ */
public func exchangeAuthorizationCodeForAccessToken(code: String, completionHandler: (AnyObject?, NSError?) -> Void) { public func exchangeAuthorizationCodeForAccessToken(code: String, completionHandler: (AnyObject?, NSError?) -> Void) {
var paramDict: [String: String] = ["code": code, "client_id": config.clientId, "redirect_uri": config.redirectURL, "grant_type":"authorization_code"] var paramDict: [String: String] = ["code": code, "client_id": config.clientId, "redirect_uri": config.redirectURL, "grant_type":"authorization_code"]
if let unwrapped = config.clientSecret { if let unwrapped = config.clientSecret {
paramDict["client_secret"] = unwrapped paramDict["client_secret"] = unwrapped
} }
http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in
if (error != nil) { if (error != nil) {
completionHandler(nil, error) completionHandler(nil, error)
return return
} }
if let unwrappedResponse = responseObject as? [String: AnyObject] { if let unwrappedResponse = responseObject as? [String: AnyObject] {
let accessToken: String = unwrappedResponse["access_token"] as! String let accessToken: String = unwrappedResponse["access_token"] as! String
let refreshToken: String? = unwrappedResponse["refresh_token"] as? String let refreshToken: String? = unwrappedResponse["refresh_token"] as? String
@ -190,7 +201,7 @@ public class OAuth2Module: AuthzModule {
// expiration for refresh token is used in Keycloak // expiration for refresh token is used in Keycloak
let expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber let expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber
let expRefresh = expirationRefresh?.stringValue let expRefresh = expirationRefresh?.stringValue
self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh) self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh)
completionHandler(accessToken, nil) completionHandler(accessToken, nil)
} }
@ -205,7 +216,7 @@ public class OAuth2Module: AuthzModule {
public func requestAccess(completionHandler: (AnyObject?, NSError?) -> Void) { public func requestAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
if (self.oauth2Session.accessToken != nil && self.oauth2Session.tokenIsNotExpired()) { if (self.oauth2Session.accessToken != nil && self.oauth2Session.tokenIsNotExpired()) {
// we already have a valid access token, nothing more to be done // we already have a valid access token, nothing more to be done
completionHandler(self.oauth2Session.accessToken!, nil); completionHandler(self.oauth2Session.accessToken!, nil)
} else if (self.oauth2Session.refreshToken != nil && self.oauth2Session.refreshTokenIsNotExpired()) { } else if (self.oauth2Session.refreshToken != nil && self.oauth2Session.refreshTokenIsNotExpired()) {
// need to refresh token // need to refresh token
self.refreshAccessToken(completionHandler) self.refreshAccessToken(completionHandler)
@ -214,16 +225,16 @@ public class OAuth2Module: AuthzModule {
self.requestAuthorizationCode(completionHandler) self.requestAuthorizationCode(completionHandler)
} }
} }
/** /**
Gateway to provide authentication using the Authorization Code Flow with OpenID Connect. Gateway to provide authentication using the Authorization Code Flow with OpenID Connect.
:param: completionHandler A block object to be executed when the request operation finishes. :param: completionHandler A block object to be executed when the request operation finishes.
*/ */
public func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) { public func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) {
self.requestAccess { (response:AnyObject?, error:NSError?) -> Void in self.requestAccess { (response:AnyObject?, error:NSError?) -> Void in
if (error != nil) { if (error != nil) {
completionHandler(nil, nil, error) completionHandler(nil, nil, error)
return return
@ -249,11 +260,11 @@ public class OAuth2Module: AuthzModule {
completionHandler(nil, nil, NSError(domain: "OAuth2Module", code: 0, userInfo: ["OpenID Connect" : "No UserInfo endpoint available in config"])) completionHandler(nil, nil, NSError(domain: "OAuth2Module", code: 0, userInfo: ["OpenID Connect" : "No UserInfo endpoint available in config"]))
return return
} }
} }
} }
/** /**
Request to revoke access. Request to revoke access.
@ -262,9 +273,9 @@ public class OAuth2Module: AuthzModule {
public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) { public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized // return if not yet initialized
if (self.oauth2Session.accessToken == nil) { if (self.oauth2Session.accessToken == nil) {
return; return
} }
let paramDict:[String:String] = ["token":self.oauth2Session.accessToken!] let paramDict: [String:String] = ["token":self.oauth2Session.accessToken!]
http.request(.POST, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in http.request(.POST, path: config.revokeTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) { if (error != nil) {
@ -324,11 +335,11 @@ public class OAuth2Module: AuthzModule {
var parameters = [String: String]() var parameters = [String: String]()
if (queryString != nil) { if (queryString != nil) {
let parameterScanner: NSScanner = NSScanner(string: queryString!) let parameterScanner: NSScanner = NSScanner(string: queryString!)
var name:NSString? = nil var name: NSString? = nil
var value:NSString? = nil var value: NSString? = nil
while (parameterScanner.atEnd != true) { while (parameterScanner.atEnd != true) {
name = nil; name = nil
parameterScanner.scanUpToString("=", intoString: &name) parameterScanner.scanUpToString("=", intoString: &name)
parameterScanner.scanString("=", intoString:nil) parameterScanner.scanString("=", intoString:nil)
@ -342,7 +353,7 @@ public class OAuth2Module: AuthzModule {
} }
} }
return parameters; return parameters
} }
deinit { deinit {
@ -353,7 +364,7 @@ public class OAuth2Module: AuthzModule {
// clear all observers // clear all observers
if (applicationLaunchNotificationObserver != nil) { if (applicationLaunchNotificationObserver != nil) {
NSNotificationCenter.defaultCenter().removeObserver(applicationLaunchNotificationObserver!) NSNotificationCenter.defaultCenter().removeObserver(applicationLaunchNotificationObserver!)
self.applicationLaunchNotificationObserver = nil; self.applicationLaunchNotificationObserver = nil
} }
if (applicationDidBecomeActiveNotificationObserver != nil) { if (applicationDidBecomeActiveNotificationObserver != nil) {

View File

@ -20,52 +20,52 @@ import Foundation
The protocol that an OAuth2 Session modules must adhere to and represent storage of oauth specific metadata. See TrustedPersistantOAuth2Session and UntrustedMemoryOAuth2Session as example implementations The protocol that an OAuth2 Session modules must adhere to and represent storage of oauth specific metadata. See TrustedPersistantOAuth2Session and UntrustedMemoryOAuth2Session as example implementations
*/ */
public protocol OAuth2Session { public protocol OAuth2Session {
/** /**
The account id. The account id.
*/ */
var accountId: String {get} var accountId: String {get}
/** /**
The access token which expires. The access token which expires.
*/ */
var accessToken: String? {get set} var accessToken: String? {get set}
/** /**
The access token's expiration date. The access token's expiration date.
*/ */
var accessTokenExpirationDate: NSDate? {get set} var accessTokenExpirationDate: NSDate? {get set}
/** /**
The refresh token's expiration date. The refresh token's expiration date.
*/ */
var refreshTokenExpirationDate: NSDate? {get set} var refreshTokenExpirationDate: NSDate? {get set}
/** /**
The refresh tokens. This toke does not expire and should be used to renew access token when expired. The refresh tokens. This toke does not expire and should be used to renew access token when expired.
*/ */
var refreshToken: String? {get set} var refreshToken: String? {get set}
/** /**
Check validity of accessToken. return true if still valid, false when expired. Check validity of accessToken. return true if still valid, false when expired.
*/ */
func tokenIsNotExpired() -> Bool func tokenIsNotExpired() -> Bool
/** /**
Check validity of refreshToken. return true if still valid, false when expired. Check validity of refreshToken. return true if still valid, false when expired.
*/ */
func refreshTokenIsNotExpired() -> Bool func refreshTokenIsNotExpired() -> Bool
/** /**
Clears any tokens storage Clears any tokens storage
*/ */
func clearTokens() func clearTokens()
/** /**
Save tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting Save tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting
for grant access. for grant access.
:param: accessToken the access token. :param: accessToken the access token.
:param: refreshToken the refresh token. :param: refreshToken the refresh token.
:param: accessTokenExpiration the expiration for the access token. :param: accessTokenExpiration the expiration for the access token.

View File

@ -19,33 +19,33 @@ import Foundation
import UIKit import UIKit
/** /**
OAuth2WebViewController is a UIViewController to be used when the Oauth2 flow used an embedded view controller OAuth2WebViewController is a UIViewController to be used when the Oauth2 flow used an embedded view controller
rather than an external browser approach. rather than an external browser approach.
*/ */
class OAuth2WebViewController: UIViewController, UIWebViewDelegate { public class OAuth2WebViewController: UIViewController, UIWebViewDelegate {
/// Login URL for OAuth. /// Login URL for OAuth.
var targetURL : NSURL = NSURL() var targetURL: NSURL = NSURL()
/// WebView intance used to load login page. /// WebView intance used to load login page.
var webView : UIWebView = UIWebView() var webView: UIWebView = UIWebView()
/// Overrride of viewDidLoad to load the login page. /// Override of viewDidLoad to load the login page.
override internal func viewDidLoad() { override public func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
webView.frame = UIScreen.mainScreen().applicationFrame webView.frame = UIScreen.mainScreen().applicationFrame
webView.delegate = self webView.delegate = self
self.view.addSubview(webView) self.view.addSubview(webView)
loadAddressURL() loadAddressURL()
} }
override func viewDidLayoutSubviews() { override public func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews() super.viewDidLayoutSubviews()
self.webView.frame = self.view.bounds self.webView.frame = self.view.bounds
} }
override internal func didReceiveMemoryWarning() { override public func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning() super.didReceiveMemoryWarning()
} }
func loadAddressURL() { func loadAddressURL() {
let req = NSURLRequest(URL: targetURL) let req = NSURLRequest(URL: targetURL)
webView.loadRequest(req) webView.loadRequest(req)

View File

@ -70,9 +70,9 @@ public class OpenIDClaim: CustomStringConvertible {
"nickname: \(nickname)\npreferredUsername: \(preferredUsername)\nprofile: \(profile)\npicture: \(picture)\n" + "nickname: \(nickname)\npreferredUsername: \(preferredUsername)\nprofile: \(profile)\npicture: \(picture)\n" +
"website: \(website)\nemail: \(email)\nemailVerified: \(emailVerified)\ngender: \(gender)\nbirthdate: \(birthdate)\n" "website: \(website)\nemail: \(email)\nemailVerified: \(emailVerified)\ngender: \(gender)\nbirthdate: \(birthdate)\n"
} }
/// Initialize an OpenIDClaim from a dictionary. all information not available are optional values set to .None. /// Initialize an OpenIDClaim from a dictionary. all information not available are optional values set to .None.
public init(fromDict:[String: AnyObject]) { public init(fromDict: [String: AnyObject]) {
sub = fromDict["sub"] as? String sub = fromDict["sub"] as? String
name = fromDict["name"] as? String name = fromDict["name"] as? String
givenName = fromDict["given_name"] as? String givenName = fromDict["given_name"] as? String
@ -97,13 +97,11 @@ public class OpenIDClaim: CustomStringConvertible {
} }
/// Facebook specific claims. /// Facebook specific claims.
public class FacebookOpenIDClaim: OpenIDClaim { public class FacebookOpenIDClaim: OpenIDClaim {
override init(fromDict:[String: AnyObject]) { override init(fromDict: [String: AnyObject]) {
super.init(fromDict: fromDict) super.init(fromDict: fromDict)
givenName = fromDict["first_name"] as? String givenName = fromDict["first_name"] as? String
familyName = fromDict["last_name"] as? String familyName = fromDict["last_name"] as? String
zoneinfo = fromDict["timezone"] as? String zoneinfo = fromDict["timezone"] as? String
} }
} }

View File

@ -38,20 +38,20 @@ public enum TokenType: String {
A handy Keychain wrapper. It saves your OAuth2 tokens using WhenPasscodeSet ACL. A handy Keychain wrapper. It saves your OAuth2 tokens using WhenPasscodeSet ACL.
*/ */
public class KeychainWrap { public class KeychainWrap {
/** /**
The service id. By default set to apple bundle id. The service id. By default set to apple bundle id.
*/ */
public var serviceIdentifier: String public var serviceIdentifier: String
/** /**
The group id is Keychain access group which is used for sharing keychain content accross multiple apps issued from same developer. By default there is no access group. The group id is Keychain access group which is used for sharing keychain content accross multiple apps issued from same developer. By default there is no access group.
*/ */
public var groupId: String? public var groupId: String?
/** /**
Initialize KeychainWrapper setting default values. Initialize KeychainWrapper setting default values.
:param: serviceId unique service, defulated to bundleId :param: serviceId unique service, defulated to bundleId
:param: groupId used for SSO between app issued from same developer certificate. :param: groupId used for SSO between app issued from same developer certificate.
*/ */
@ -63,10 +63,10 @@ public class KeychainWrap {
} }
self.groupId = groupId self.groupId = groupId
} }
/** /**
Save tokens information in Keychain. Save tokens information in Keychain.
:param: key usually use accountId for oauth2 module, any unique string. :param: key usually use accountId for oauth2 module, any unique string.
:param: tokenType type of token: access, refresh. :param: tokenType type of token: access, refresh.
:param: value string value of the token. :param: value string value of the token.
@ -76,7 +76,7 @@ public class KeychainWrap {
if (dataFromString == nil) { if (dataFromString == nil) {
return false return false
} }
// Instantiate a new default keychain query // Instantiate a new default keychain query
let keychainQuery = NSMutableDictionary() let keychainQuery = NSMutableDictionary()
if let groupId = self.groupId { if let groupId = self.groupId {
@ -85,17 +85,17 @@ public class KeychainWrap {
keychainQuery[kSecClass as String] = kSecClassGenericPassword keychainQuery[kSecClass as String] = kSecClassGenericPassword
keychainQuery[kSecAttrService as String] = self.serviceIdentifier keychainQuery[kSecAttrService as String] = self.serviceIdentifier
keychainQuery[kSecAttrAccount as String] = key + "_" + tokenType.rawValue keychainQuery[kSecAttrAccount as String] = key + "_" + tokenType.rawValue
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
// Search for the keychain items // Search for the keychain items
let statusSearch: OSStatus = SecItemCopyMatching(keychainQuery, nil) let statusSearch: OSStatus = SecItemCopyMatching(keychainQuery, nil)
// if found update // if found update
if (statusSearch == errSecSuccess) { if (statusSearch == errSecSuccess) {
if (dataFromString != nil) { if (dataFromString != nil) {
let attributesToUpdate = NSMutableDictionary() let attributesToUpdate = NSMutableDictionary()
attributesToUpdate[kSecValueData as String] = dataFromString! attributesToUpdate[kSecValueData as String] = dataFromString!
let statusUpdate: OSStatus = SecItemUpdate(keychainQuery, attributesToUpdate) let statusUpdate: OSStatus = SecItemUpdate(keychainQuery, attributesToUpdate)
if (statusUpdate != errSecSuccess) { if (statusUpdate != errSecSuccess) {
print("tokens not updated") print("tokens not updated")
@ -114,13 +114,34 @@ public class KeychainWrap {
} else { // error case } else { // error case
return false return false
} }
return true return true
} }
/**
Delete a specific token in Keychain.
:param: key usually use accountId for oauth2 module, any unique string.
:param: tokenType type of token.
*/
public func delete(key: String, tokenType: TokenType) -> Bool {
let keychainQuery = NSMutableDictionary()
if let groupId = self.groupId {
keychainQuery[kSecAttrAccessGroup as String] = groupId
}
keychainQuery[kSecClass as String] = kSecClassGenericPassword
keychainQuery[kSecAttrService as String] = self.serviceIdentifier
keychainQuery[kSecAttrAccount as String] = key + "_" + tokenType.rawValue
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
let statusDelete: OSStatus = SecItemDelete(keychainQuery)
return statusDelete == noErr
}
/** /**
Read tokens information in Keychain. If the entry is not found return nil. Read tokens information in Keychain. If the entry is not found return nil.
:param: userAccount key of the keychain entry, usually accountId for oauth2 module. :param: userAccount key of the keychain entry, usually accountId for oauth2 module.
:param: tokenType type of token: access, refresh. :param: tokenType type of token: access, refresh.
*/ */
@ -133,9 +154,8 @@ public class KeychainWrap {
keychainQuery[kSecAttrService as String] = self.serviceIdentifier keychainQuery[kSecAttrService as String] = self.serviceIdentifier
keychainQuery[kSecAttrAccount as String] = userAccount + "_" + tokenType.rawValue keychainQuery[kSecAttrAccount as String] = userAccount + "_" + tokenType.rawValue
keychainQuery[kSecReturnData as String] = true keychainQuery[kSecReturnData as String] = true
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
var dataTypeRef: Unmanaged<AnyObject>? var dataTypeRef: Unmanaged<AnyObject>?
// Search for the keychain items // Search for the keychain items
let status: OSStatus = withUnsafeMutablePointer(&dataTypeRef) { SecItemCopyMatching(keychainQuery as CFDictionaryRef, UnsafeMutablePointer($0)) } let status: OSStatus = withUnsafeMutablePointer(&dataTypeRef) { SecItemCopyMatching(keychainQuery as CFDictionaryRef, UnsafeMutablePointer($0)) }
@ -147,21 +167,21 @@ public class KeychainWrap {
print("Error attempting to retrieve \(tokenType.rawValue) with error code \(status) ") print("Error attempting to retrieve \(tokenType.rawValue) with error code \(status) ")
return nil return nil
} }
let opaque = dataTypeRef?.toOpaque() let opaque = dataTypeRef?.toOpaque()
var contentsOfKeychain: String? var contentsOfKeychain: String?
if let op = opaque { if let op = opaque {
let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue() let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
// Convert the data retrieved from the keychain into a string // Convert the data retrieved from the keychain into a string
contentsOfKeychain = NSString(data: retrievedData, encoding: NSUTF8StringEncoding) as? String contentsOfKeychain = NSString(data: retrievedData, encoding: NSUTF8StringEncoding) as? String
} else { } else {
print("Nothing was retrieved from the keychain. Status code \(status)") print("Nothing was retrieved from the keychain. Status code \(status)")
} }
return contentsOfKeychain return contentsOfKeychain
} }
/** /**
Clear all keychain entries. Note that Keychain can only be cleared progemmatically. Clear all keychain entries. Note that Keychain can only be cleared progemmatically.
*/ */
@ -172,11 +192,11 @@ public class KeychainWrap {
self.deleteAllKeysForSecClass(kSecClassKey) && self.deleteAllKeysForSecClass(kSecClassKey) &&
self.deleteAllKeysForSecClass(kSecClassIdentity) self.deleteAllKeysForSecClass(kSecClassIdentity)
} }
func deleteAllKeysForSecClass(secClass: CFTypeRef) -> Bool { func deleteAllKeysForSecClass(secClass: CFTypeRef) -> Bool {
let keychainQuery = NSMutableDictionary() let keychainQuery = NSMutableDictionary()
keychainQuery[kSecClass as String] = secClass keychainQuery[kSecClass as String] = secClass
let result:OSStatus = SecItemDelete(keychainQuery) let result: OSStatus = SecItemDelete(keychainQuery)
if (result == errSecSuccess) { if (result == errSecSuccess) {
return true return true
} else { } else {
@ -189,19 +209,19 @@ public class KeychainWrap {
An OAuth2Session implementation to store OAuth2 metadata using the Keychain. An OAuth2Session implementation to store OAuth2 metadata using the Keychain.
*/ */
public class TrustedPersistantOAuth2Session: OAuth2Session { public class TrustedPersistantOAuth2Session: OAuth2Session {
/** /**
The account id. The account id.
*/ */
public var accountId: String public var accountId: String
/** /**
The access token's expiration date. The access token's expiration date.
*/ */
public var accessTokenExpirationDate: NSDate? { public var accessTokenExpirationDate: NSDate? {
get { get {
let dateAsString = self.keychain.read(self.accountId, tokenType: .ExpirationDate) let dateAsString = self.keychain.read(self.accountId, tokenType: .ExpirationDate)
if let unwrappedDate:String = dateAsString { if let unwrappedDate: String = dateAsString {
return NSDate(dateString: unwrappedDate) return NSDate(dateString: unwrappedDate)
} else { } else {
return nil return nil
@ -210,10 +230,12 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) { set(value) {
if let unwrappedValue = value { if let unwrappedValue = value {
self.keychain.save(self.accountId, tokenType: .ExpirationDate, value: unwrappedValue.toString()) self.keychain.save(self.accountId, tokenType: .ExpirationDate, value: unwrappedValue.toString())
} else {
self.keychain.delete(self.accountId, tokenType: .ExpirationDate)
} }
} }
} }
/** /**
The access token. The information is read securely from Keychain. The access token. The information is read securely from Keychain.
*/ */
@ -224,10 +246,12 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) { set(value) {
if let unwrappedValue = value { if let unwrappedValue = value {
self.keychain.save(self.accountId, tokenType: .AccessToken, value: unwrappedValue) self.keychain.save(self.accountId, tokenType: .AccessToken, value: unwrappedValue)
} else {
self.keychain.delete(self.accountId, tokenType: .AccessToken)
} }
} }
} }
/** /**
The refresh token. The information is read securely from Keychain. The refresh token. The information is read securely from Keychain.
*/ */
@ -238,17 +262,19 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) { set(value) {
if let unwrappedValue = value { if let unwrappedValue = value {
self.keychain.save(self.accountId, tokenType: .RefreshToken, value: unwrappedValue) self.keychain.save(self.accountId, tokenType: .RefreshToken, value: unwrappedValue)
} else {
self.keychain.delete(self.accountId, tokenType: .RefreshToken)
} }
} }
} }
/** /**
The refresh token's expiration date. The refresh token's expiration date.
*/ */
public var refreshTokenExpirationDate: NSDate? { public var refreshTokenExpirationDate: NSDate? {
get { get {
let dateAsString = self.keychain.read(self.accountId, tokenType: .RefreshExpirationDate) let dateAsString = self.keychain.read(self.accountId, tokenType: .RefreshExpirationDate)
if let unwrappedDate:String = dateAsString { if let unwrappedDate: String = dateAsString {
return NSDate(dateString: unwrappedDate) return NSDate(dateString: unwrappedDate)
} else { } else {
return nil return nil
@ -257,33 +283,35 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) { set(value) {
if let unwrappedValue = value { if let unwrappedValue = value {
_ = self.keychain.save(self.accountId, tokenType: .RefreshExpirationDate, value: unwrappedValue.toString()) _ = self.keychain.save(self.accountId, tokenType: .RefreshExpirationDate, value: unwrappedValue.toString())
} else {
self.keychain.delete(self.accountId, tokenType: .RefreshExpirationDate)
} }
} }
} }
private let keychain: KeychainWrap private let keychain: KeychainWrap
/** /**
Check validity of accessToken. return true if still valid, false when expired. Check validity of accessToken. return true if still valid, false when expired.
*/ */
public func tokenIsNotExpired() -> Bool { public func tokenIsNotExpired() -> Bool {
return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
} }
/** /**
Check validity of refreshToken. return true if still valid, false when expired. Check validity of refreshToken. return true if still valid, false when expired.
*/ */
public func refreshTokenIsNotExpired() -> Bool { public func refreshTokenIsNotExpired() -> Bool {
return self.refreshTokenExpirationDate != nil ? (self.refreshTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true return self.refreshTokenExpirationDate != nil ? (self.refreshTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
} }
/** /**
Save in memory tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting for grant access. Save in memory tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting for grant access.
*/ */
public func saveAccessToken(accessToken: String?, refreshToken: String?, accessTokenExpiration: String?, refreshTokenExpiration: String?) { public func saveAccessToken(accessToken: String?, refreshToken: String?, accessTokenExpiration: String?, refreshTokenExpiration: String?) {
self.accessToken = accessToken self.accessToken = accessToken
self.refreshToken = refreshToken self.refreshToken = refreshToken
let now = NSDate() let now = NSDate()
if let inter = accessTokenExpiration?.doubleValue { if let inter = accessTokenExpiration?.doubleValue {
self.accessTokenExpirationDate = now.dateByAddingTimeInterval(inter) self.accessTokenExpirationDate = now.dateByAddingTimeInterval(inter)
@ -292,7 +320,7 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(inter) self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(inter)
} }
} }
/** /**
Clear all tokens. Method used when doing logout or revoke. Clear all tokens. Method used when doing logout or revoke.
*/ */
@ -302,10 +330,10 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
self.accessTokenExpirationDate = nil self.accessTokenExpirationDate = nil
self.refreshTokenExpirationDate = nil self.refreshTokenExpirationDate = nil
} }
/** /**
Initialize TrustedPersistantOAuth2Session using account id. Account id is the service id used for keychain storage. Initialize TrustedPersistantOAuth2Session using account id. Account id is the service id used for keychain storage.
:param: accountId uniqueId to identify the oauth2module :param: accountId uniqueId to identify the oauth2module
:param: groupId used for SSO between app issued from same developer certificate. :param: groupId used for SSO between app issued from same developer certificate.
:param: accessToken optional parameter to initilaize the storage with initial values :param: accessToken optional parameter to initilaize the storage with initial values
@ -319,15 +347,27 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
accessTokenExpirationDate: NSDate? = nil, accessTokenExpirationDate: NSDate? = nil,
refreshToken: String? = nil, refreshToken: String? = nil,
refreshTokenExpirationDate: NSDate? = nil) { refreshTokenExpirationDate: NSDate? = nil) {
self.accountId = accountId self.accountId = accountId
if groupId != nil { if groupId != nil {
self.keychain = KeychainWrap(serviceId: groupId, groupId: groupId) self.keychain = KeychainWrap(serviceId: groupId, groupId: groupId)
} else { } else {
self.keychain = KeychainWrap() self.keychain = KeychainWrap()
} }
self.accessToken = accessToken
self.refreshToken = refreshToken if accessToken != nil {
self.accessTokenExpirationDate = accessTokenExpirationDate self.accessToken = accessToken
self.refreshTokenExpirationDate = refreshTokenExpirationDate }
if refreshToken != nil {
self.refreshToken = refreshToken
}
if accessTokenExpirationDate != nil {
self.accessTokenExpirationDate = accessTokenExpirationDate
}
if refreshToken != nil {
self.refreshTokenExpirationDate = refreshTokenExpirationDate
}
} }
} }

View File

@ -26,27 +26,27 @@ extension String {
An OAuth2Session implementation the stores OAuth2 metadata in-memory An OAuth2Session implementation the stores OAuth2 metadata in-memory
*/ */
public class UntrustedMemoryOAuth2Session: OAuth2Session { public class UntrustedMemoryOAuth2Session: OAuth2Session {
/** /**
The account id. The account id.
*/ */
public var accountId: String public var accountId: String
/** /**
The access token which expires. The access token which expires.
*/ */
public var accessToken: String? public var accessToken: String?
/** /**
The access token's expiration date. The access token's expiration date.
*/ */
public var accessTokenExpirationDate: NSDate? public var accessTokenExpirationDate: NSDate?
/** /**
The refresh tokens. This toke does not expire and should be used to renew access token when expired. The refresh tokens. This toke does not expire and should be used to renew access token when expired.
*/ */
public var refreshToken: String? public var refreshToken: String?
/** /**
The refresh token's expiration date. The refresh token's expiration date.
*/ */
@ -58,14 +58,14 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
public func tokenIsNotExpired() -> Bool { public func tokenIsNotExpired() -> Bool {
return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
} }
/** /**
Check validity of refreshToken. return true if still valid, false when expired. Check validity of refreshToken. return true if still valid, false when expired.
*/ */
public func refreshTokenIsNotExpired() -> Bool { public func refreshTokenIsNotExpired() -> Bool {
return self.refreshTokenExpirationDate != nil ? (self.refreshTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true return self.refreshTokenExpirationDate != nil ? (self.refreshTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
} }
/** /**
Save in memory tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting for grant access. Save in memory tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting for grant access.
*/ */
@ -80,7 +80,7 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(interRefresh) self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(interRefresh)
} }
} }
/** /**
Clear all tokens. Method used when doing logout or revoke. Clear all tokens. Method used when doing logout or revoke.
*/ */
@ -90,10 +90,10 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
self.accessTokenExpirationDate = nil self.accessTokenExpirationDate = nil
self.refreshTokenExpirationDate = nil self.refreshTokenExpirationDate = nil
} }
/** /**
Initialize session using account id. Initialize session using account id.
:param: accountId uniqueId to identify the oauth2module. :param: accountId uniqueId to identify the oauth2module.
:param: accessToken optional parameter to initilaize the storage with initial values. :param: accessToken optional parameter to initilaize the storage with initial values.
:param: accessTokenExpirationDate optional parameter to initilaize the storage with initial values. :param: accessTokenExpirationDate optional parameter to initilaize the storage with initial values.

View File

@ -1,6 +1,6 @@
# aerogear-ios-oauth2 [![Build Status](https://travis-ci.org/aerogear/aerogear-ios-oauth2.png)](https://travis-ci.org/aerogear/aerogear-ios-oauth2) # aerogear-ios-oauth2 [![Build Status](https://travis-ci.org/aerogear/aerogear-ios-oauth2.png)](https://travis-ci.org/aerogear/aerogear-ios-oauth2)
> This module currently build with Xcode 7 and supports iOS8, iOS9. > This module currently build with Xcode 7 / Xcode 8 and supports iOS8, iOS9, iOS10.
OAuth2 Client based on [aerogear-ios-http](https://github.com/aerogear/aerogear-ios-http). OAuth2 Client based on [aerogear-ios-http](https://github.com/aerogear/aerogear-ios-http).
Taking care of: Taking care of:
@ -11,7 +11,7 @@ Taking care of:
* (implicit or explicit) refresh tokens, * (implicit or explicit) refresh tokens,
* revoke tokens, * revoke tokens,
* permanent secure storage, * permanent secure storage,
* adaptable to OAuth2 specific providers. Existing extensions: Google, Facebook, [Keycloak 1.5.0.Final](http://keycloak.jboss.org/) etc... * adaptable to OAuth2 specific providers. Existing extensions: Google, Facebook, [Keycloak 1.9.3.Final](http://keycloak.jboss.org/) etc...
* openID Connect login * openID Connect login
100% Swift 2.0. 100% Swift 2.0.
@ -29,12 +29,12 @@ Taking care of:
#### OAuth2 grant for GET with a predefined config like Facebook #### OAuth2 grant for GET with a predefined config like Facebook
```swift ```swift
var Http = Http() // [1] let http = Http() // [1]
let facebookConfig = FacebookConfig( // [2] let facebookConfig = FacebookConfig( // [2]
clientId: "YYY", clientId: "YYY",
clientSecret: "XXX", clientSecret: "XXX",
scopes:["photo_upload, publish_actions"]) scopes:["photo_upload, publish_actions"])
var oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3] let oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3]
http.authzModule = oauth2Module // [4] http.authzModule = oauth2Module // [4]
http.request(.GET, path: "/get", completionHandler: {(response, error) in // [5] http.request(.GET, path: "/get", completionHandler: {(response, error) in // [5]
// handle response // handle response
@ -52,13 +52,13 @@ See full description in [aerogear.org](https://aerogear.org/docs/guides/aerogear
#### OpenID Connect with Keycloak #### OpenID Connect with Keycloak
```swift ```swift
var Http = Http() let http = Http()
let keycloakConfig = KeycloakConfig( let keycloakConfig = KeycloakConfig(
clientId: "sharedshoot-third-party", clientId: "sharedshoot-third-party",
host: "http://localhost:8080", host: "http://localhost:8080",
realm: "shoot-realm", realm: "shoot-realm",
isOpenIDConnect: true) isOpenIDConnect: true)
var oauth2Module = AccountManager.addKeycloakAccount(keycloakConfig) let oauth2Module = AccountManager.addKeycloakAccount(keycloakConfig)
http.authzModule = oauth2Module http.authzModule = oauth2Module
oauth2Module.login {(accessToken: AnyObject?, claims: OpenIDClaim?, error: NSError?) in // [1] oauth2Module.login {(accessToken: AnyObject?, claims: OpenIDClaim?, error: NSError?) in // [1]
// Do your own stuff here // Do your own stuff here
@ -127,4 +127,4 @@ Join our [user mailing list](https://lists.jboss.org/mailman/listinfo/aerogear-u
## Found a bug? ## Found a bug?
If you found a bug please create a ticket for us on [Jira](https://issues.jboss.org/browse/AGIOS) with some steps to reproduce it. If you found a bug please create a ticket for us on [Jira](https://issues.jboss.org/browse/AGIOS) with some steps to reproduce it.

View File

@ -52,7 +52,6 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
FBSDKBridgeAPIRequest *_pendingRequest; FBSDKBridgeAPIRequest *_pendingRequest;
FBSDKBridgeAPICallbackBlock _pendingRequestCompletionBlock; FBSDKBridgeAPICallbackBlock _pendingRequestCompletionBlock;
id<FBSDKURLOpening> _pendingURLOpen; id<FBSDKURLOpening> _pendingURLOpen;
FBSDKDeferredAppInviteHandler _organicDeeplinkHandler;
#endif #endif
BOOL _expectingBackground; BOOL _expectingBackground;
UIViewController *_safariViewController; UIViewController *_safariViewController;
@ -153,10 +152,12 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
queryParameters:sanitizedParams queryParameters:sanitizedParams
error:nil]; error:nil];
} }
// copy the _organicDeeplinkHandler here because it can get cleared in FBSDKOrganicDeeplinkHelper
// so that we avoid bad_exc_access in the dispatch_async below.
FBSDKDeferredAppInviteHandler appInviteHandler = [_organicDeeplinkHandler copy];
_organicDeeplinkHandler = nil;
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
// Callback handler for organic deeplinking. appInviteHandler(sanitizedUrl);
_organicDeeplinkHandler(sanitizedUrl);
_organicDeeplinkHandler = nil;
}); });
return YES; return YES;

View File

@ -44,5 +44,5 @@
#import <FBSDKCoreKit/FBSDKDeviceViewControllerBase.h> #import <FBSDKCoreKit/FBSDKDeviceViewControllerBase.h>
#endif #endif
#define FBSDK_VERSION_STRING @"4.14.0" #define FBSDK_VERSION_STRING @"4.15.0"
#define FBSDK_TARGET_PLATFORM_VERSION @"v2.7" #define FBSDK_TARGET_PLATFORM_VERSION @"v2.7"

View File

@ -31,7 +31,7 @@
#import "FBSDKInternalUtility.h" #import "FBSDKInternalUtility.h"
#import "FBSDKLogger.h" #import "FBSDKLogger.h"
#import "FBSDKSettings+Internal.h" #import "FBSDKSettings+Internal.h"
#import "FBSDKURLConnection.h" #import "FBSDKURLSessionTask.h"
NSString *const FBSDKNonJSONResponseProperty = @"FACEBOOK_NON_JSON_RESULT"; NSString *const FBSDKNonJSONResponseProperty = @"FACEBOOK_NON_JSON_RESULT";
@ -76,17 +76,18 @@ typedef NS_ENUM(NSUInteger, FBSDKGraphRequestConnectionState)
// Private properties and methods // Private properties and methods
@interface FBSDKGraphRequestConnection () < @interface FBSDKGraphRequestConnection () <
FBSDKURLConnectionDelegate NSURLSessionDataDelegate
#if !TARGET_OS_TV #if !TARGET_OS_TV
, FBSDKGraphErrorRecoveryProcessorDelegate , FBSDKGraphErrorRecoveryProcessorDelegate
#endif #endif
> >
@property (nonatomic, retain) FBSDKURLConnection *connection; @property (nonatomic, strong) NSURLSession *session;
@property (nonatomic, strong) FBSDKURLSessionTask *task;
@property (nonatomic, retain) NSMutableArray *requests; @property (nonatomic, retain) NSMutableArray *requests;
@property (nonatomic) FBSDKGraphRequestConnectionState state; @property (nonatomic, assign) FBSDKGraphRequestConnectionState state;
@property (nonatomic, retain) FBSDKLogger *logger; @property (nonatomic, strong) FBSDKLogger *logger;
@property (nonatomic) unsigned long requestStartTime; @property (nonatomic, assign) unsigned long requestStartTime;
@end @end
@ -117,8 +118,7 @@ FBSDKURLConnectionDelegate
- (void)dealloc - (void)dealloc
{ {
_connection.delegate = nil; [_session invalidateAndCancel];
[_connection cancel];
} }
#pragma mark - Public #pragma mark - Public
@ -163,8 +163,8 @@ FBSDKURLConnectionDelegate
- (void)cancel - (void)cancel
{ {
self.state = kStateCancelled; self.state = kStateCancelled;
[self.connection cancel]; [self.task cancel];
self.connection = nil; [self cleanUpSession];
} }
- (void)overrideVersionPartWith:(NSString *)version - (void)overrideVersionPartWith:(NSString *)version
@ -196,24 +196,22 @@ FBSDKURLConnectionDelegate
[self logRequest:request bodyLength:0 bodyLogger:nil attachmentLogger:nil]; [self logRequest:request bodyLength:0 bodyLogger:nil attachmentLogger:nil];
_requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds]; _requestStartTime = [FBSDKInternalUtility currentTimeInMilliseconds];
FBSDKURLConnectionHandler handler = FBSDKURLSessionTaskHandler handler = ^(NSError *error,
^(FBSDKURLConnection *connection, NSURLResponse *response,
NSError *error, NSData *responseData) {
NSURLResponse *response, [self completeFBSDKURLSessionWithResponse:response
NSData *responseData) { data:responseData
[self completeFBSDKURLConnectionWithResponse:response networkError:error];
data:responseData
networkError:error];
}; };
FBSDKURLConnection *connection = [[FBSDKURLConnection alloc] initWithRequest:request if (!self.session) {
completionHandler:handler]; self.session = [self defaultSession];
if (_delegateQueue) {
[connection setDelegateQueue:_delegateQueue];
} }
connection.delegate = self;
self.connection = connection; self.task = [[FBSDKURLSessionTask alloc] initWithRequest:request
[connection start]; fromSession:self.session
completionHandler:handler];
[self.task start];
id<FBSDKGraphRequestConnectionDelegate> delegate = self.delegate; id<FBSDKGraphRequestConnectionDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(requestConnectionWillBeginLoading:)]) { if ([delegate respondsToSelector:@selector(requestConnectionWillBeginLoading:)]) {
@ -503,9 +501,9 @@ FBSDKURLConnectionDelegate
#pragma mark - Private methods (response parsing) #pragma mark - Private methods (response parsing)
- (void)completeFBSDKURLConnectionWithResponse:(NSURLResponse *)response - (void)completeFBSDKURLSessionWithResponse:(NSURLResponse *)response
data:(NSData *)data data:(NSData *)data
networkError:(NSError *)error networkError:(NSError *)error
{ {
if (self.state != kStateCancelled) { if (self.state != kStateCancelled) {
NSAssert(self.state == kStateStarted, NSAssert(self.state == kStateStarted,
@ -526,7 +524,7 @@ FBSDKURLConnectionDelegate
if (!error && [response.MIMEType hasPrefix:@"image"]) { if (!error && [response.MIMEType hasPrefix:@"image"]) {
error = [FBSDKError errorWithCode:FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode error = [FBSDKError errorWithCode:FBSDKGraphRequestNonTextMimeTypeReturnedErrorCode
message:@"Response is a non-text MIME type; endpoints that return images and other " message:@"Response is a non-text MIME type; endpoints that return images and other "
@"binary data should be fetched using NSURLRequest and NSURLConnection"]; @"binary data should be fetched using NSURLRequest and NSURLSession"];
} else { } else {
results = [self parseJSONResponse:data results = [self parseJSONResponse:data
error:&error error:&error
@ -560,7 +558,7 @@ FBSDKURLConnectionDelegate
[self completeWithResults:results networkError:error]; [self completeWithResults:results networkError:error];
self.connection = nil; [self cleanUpSession];
} }
// //
@ -611,7 +609,7 @@ FBSDKURLConnectionDelegate
[results addObject:@{ [results addObject:@{
@"code":@(statusCode), @"code":@(statusCode),
@"body":response @"body":response
}]; }];
} else if ([response isKindOfClass:[NSArray class]]) { } else if ([response isKindOfClass:[NSArray class]]) {
// response is the array of responses, but the body element of each needs // response is the array of responses, but the body element of each needs
// to be decoded from JSON. // to be decoded from JSON.
@ -640,7 +638,7 @@ FBSDKURLConnectionDelegate
NSDictionary *result = @{ NSDictionary *result = @{
@"code":@(statusCode), @"code":@(statusCode),
@"body":response @"body":response
}; };
for (NSUInteger resultIndex = 0, resultCount = self.requests.count; resultIndex < resultCount; ++resultIndex) { for (NSUInteger resultIndex = 0, resultCount = self.requests.count; resultIndex < resultCount; ++resultIndex) {
[results addObject:result]; [results addObject:result];
@ -788,7 +786,7 @@ FBSDKURLConnectionDelegate
} }
} }
#endif #endif
// this is already on the queue since we are currently in the NSURLConnection callback. // this is already on the queue since we are currently in the NSURLSession callback.
finishAndInvokeCompletionHandler(); finishAndInvokeCompletionHandler();
} }
@ -954,27 +952,35 @@ FBSDKURLConnectionDelegate
return agent; return agent;
} }
- (void)setConnection:(FBSDKURLConnection *)connection - (NSURLSession *)defaultSession
{ {
if (_connection != connection) { NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
_connection.delegate = nil; return [NSURLSession sessionWithConfiguration:config
_connection = connection; delegate:self
} delegateQueue:_delegateQueue];
} }
#pragma mark - FBSDKURLConnectionDelegate - (void)cleanUpSession
{
[self.session invalidateAndCancel];
self.session = nil;
}
- (void)facebookURLConnection:(FBSDKURLConnection *)connection #pragma mark - NSURLSessionDataDelegate
didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten - (void)URLSession:(NSURLSession *)session
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { task:(NSURLSessionTask *)task
id<FBSDKGraphRequestConnectionDelegate> delegate = [self delegate]; didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
id<FBSDKGraphRequestConnectionDelegate> delegate = self.delegate;
if ([delegate respondsToSelector:@selector(requestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)]) { if ([delegate respondsToSelector:@selector(requestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:)]) {
[delegate requestConnection:self [delegate requestConnection:self
didSendBodyData:bytesWritten didSendBodyData:(NSUInteger)bytesSent
totalBytesWritten:totalBytesWritten totalBytesWritten:(NSUInteger)totalBytesSent
totalBytesExpectedToWrite:totalBytesExpectedToWrite]; totalBytesExpectedToWrite:(NSUInteger)totalBytesExpectedToSend];
} }
} }

View File

@ -51,13 +51,6 @@ SFSafariViewControllerDelegate
return NO; return NO;
} }
_safariWindow = [[UIWindow alloc] initWithFrame:[[[[UIApplication sharedApplication] delegate] window] bounds]];
_safariWindow.windowLevel = UIWindowLevelNormal - 1;
_safariWindow.rootViewController = [[UIViewController alloc] init];;
[_safariWindow setHidden:NO];
_safariViewController = [[SFSafariViewControllerClass alloc] initWithURL: [self constructDeeplinkRetrievalUrl]];
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
[FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = handler; [FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = handler;
[self presentSafariViewController]; [self presentSafariViewController];
@ -69,7 +62,6 @@ SFSafariViewControllerDelegate
[self cleanUpSafariViewController]; [self cleanUpSafariViewController];
[FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = nil; [FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = nil;
_handler(nil); _handler(nil);
} }
}); });
}); });
@ -79,29 +71,27 @@ SFSafariViewControllerDelegate
- (void)presentSafariViewController - (void)presentSafariViewController
{ {
Class SFSafariViewControllerClass = fbsdkdfl_SFSafariViewControllerClass();
_safariViewController = [[SFSafariViewControllerClass alloc] initWithURL: [self constructDeeplinkRetrievalUrl]];
_safariViewController.view.userInteractionEnabled = NO; _safariViewController.view.userInteractionEnabled = NO;
_safariViewController.view.alpha = 0;
[_safariWindow.rootViewController addChildViewController:_safariViewController];
[_safariWindow.rootViewController.view addSubview:_safariViewController.view];
[_safariViewController performSelector:@selector(setDelegate:) withObject:self]; [_safariViewController performSelector:@selector(setDelegate:) withObject:self];
[_safariViewController didMoveToParentViewController:_safariWindow.rootViewController];
_safariViewController.view.frame = CGRectZero; _safariWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
return; _safariWindow.windowLevel -= 1000;
_safariWindow.rootViewController = _safariViewController;
_safariWindow.hidden = NO;
[_safariWindow makeKeyAndVisible];
} }
- (void)cleanUpSafariViewController - (void)cleanUpSafariViewController
{ {
if(_safariViewController) if (_safariViewController)
{ {
[_safariViewController performSelector:@selector(setDelegate:) withObject:nil]; [_safariViewController performSelector:@selector(setDelegate:) withObject:nil];
[_safariViewController willMoveToParentViewController:nil];
[_safariViewController.view removeFromSuperview];
[_safariViewController removeFromParentViewController];
_safariViewController = nil; _safariViewController = nil;
_safariWindow.rootViewController = nil; _safariWindow.rootViewController = nil;
_safariWindow = nil; _safariWindow = nil;
} }
return;
} }
- (NSURL*)constructDeeplinkRetrievalUrl - (NSURL*)constructDeeplinkRetrievalUrl

View File

@ -92,8 +92,9 @@ typedef NS_ENUM(NSUInteger, FBSDKInternalUtilityVersionShift)
static NSBundle *bundle; static NSBundle *bundle;
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
NSString *stringsBundlePath = [[NSBundle mainBundle] pathForResource:@"FacebookSDKStrings" NSString *stringsBundlePath = [[NSBundle bundleForClass:[FBSDKApplicationDelegate class]]
ofType:@"bundle"]; pathForResource:@"FacebookSDKStrings"
ofType:@"bundle"];
bundle = [NSBundle bundleWithPath:stringsBundlePath] ?: [NSBundle mainBundle]; bundle = [NSBundle bundleWithPath:stringsBundlePath] ?: [NSBundle mainBundle];
}); });
return bundle; return bundle;

View File

@ -201,6 +201,8 @@
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title
message:nil message:nil
preferredStyle:UIAlertControllerStyleActionSheet]; preferredStyle:UIAlertControllerStyleActionSheet];
alertController.popoverPresentationController.sourceView = self;
alertController.popoverPresentationController.sourceRect = self.bounds;
UIAlertAction *cancel = [UIAlertAction actionWithTitle:cancelTitle UIAlertAction *cancel = [UIAlertAction actionWithTitle:cancelTitle
style:UIAlertActionStyleCancel style:UIAlertActionStyleCancel
handler:nil]; handler:nil];

View File

@ -741,7 +741,7 @@ static NSString *const FBSDKExpectedChallengeKey = @"expected_login_challenge";
[FBSDKInternalUtility bundleForStrings], [FBSDKInternalUtility bundleForStrings],
@"Log In", @"Log In",
@"Title of the web dialog that prompts the user to log in to Facebook."); @"Title of the web dialog that prompts the user to log in to Facebook.");
[FBSDKWebDialog showWithName:@"oauth" parameters:loginParams delegate:self]; [FBSDKWebDialog showWithName:@"oauth" parameters:parameters delegate:self];
if (handler) { if (handler) {
handler(YES, nil); handler(YES, nil);

View File

@ -23,79 +23,63 @@
@protocol FBSDKAppGroupAddDialogDelegate; @protocol FBSDKAppGroupAddDialogDelegate;
/*! /*!
@abstract A dialog for creating app groups. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/ */
__attribute__ ((deprecated))
@interface FBSDKAppGroupAddDialog : NSObject @interface FBSDKAppGroupAddDialog : NSObject
/*! /*!
@abstract Convenience method to build up an app group dialog with content and a delegate. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param content The content for the app group.
@param delegate The receiver's delegate.
*/ */
+ (instancetype)showWithContent:(FBSDKAppGroupContent *)content + (instancetype)showWithContent:(FBSDKAppGroupContent *)content
delegate:(id<FBSDKAppGroupAddDialogDelegate>)delegate; delegate:(id<FBSDKAppGroupAddDialogDelegate>)delegate __attribute__ ((deprecated));
/*! /*!
@abstract The receiver's delegate or nil if it doesn't have a delegate. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/ */
@property (nonatomic, weak) id<FBSDKAppGroupAddDialogDelegate> delegate; @property (nonatomic, weak) id<FBSDKAppGroupAddDialogDelegate> delegate __attribute__ ((deprecated));
/*! /*!
@abstract The content for app group. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/ */
@property (nonatomic, copy) FBSDKAppGroupContent *content; @property (nonatomic, copy) FBSDKAppGroupContent *content __attribute__ ((deprecated));
/*! /*!
@abstract A Boolean value that indicates whether the receiver can initiate an app group dialog. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@discussion May return NO if the appropriate Facebook app is not installed and is required or an access token is
required but not available. This method does not validate the content on the receiver, so this can be checked before
building up the content.
@see validateWithError:
@result YES if the receiver can share, otherwise NO.
*/ */
- (BOOL)canShow; - (BOOL)canShow __attribute__ ((deprecated));
/*! /*!
@abstract Begins the app group dialog from the receiver. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@result YES if the receiver was able to show the dialog, otherwise NO.
*/ */
- (BOOL)show; - (BOOL)show __attribute__ ((deprecated));
/*! /*!
@abstract Validates the content on the receiver. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param errorRef If an error occurs, upon return contains an NSError object that describes the problem.
@return YES if the content is valid, otherwise NO.
*/ */
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef; - (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated));
@end @end
/*! /*!
@abstract A delegate for FBSDKAppGroupAddDialog. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@discussion The delegate is notified with the results of the app group request as long as the application has
permissions to receive the information. For example, if the person is not signed into the containing app, the shower
may not be able to distinguish between completion of an app group request and cancellation.
*/ */
__attribute__ ((deprecated))
@protocol FBSDKAppGroupAddDialogDelegate <NSObject> @protocol FBSDKAppGroupAddDialogDelegate <NSObject>
/*! /*!
@abstract Sent to the delegate when the app group request completes without error. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
@param results The results from the dialog. This may be nil or empty.
*/ */
- (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didCompleteWithResults:(NSDictionary *)results; - (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didCompleteWithResults:(NSDictionary *)results __attribute__ ((deprecated));
/*! /*!
@abstract Sent to the delegate when the app group request encounters an error. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
@param error The error.
*/ */
- (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didFailWithError:(NSError *)error; - (void)appGroupAddDialog:(FBSDKAppGroupAddDialog *)appGroupAddDialog didFailWithError:(NSError *)error __attribute__ ((deprecated));
/*! /*!
@abstract Sent to the delegate when the app group dialog is cancelled. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
*/ */
- (void)appGroupAddDialogDidCancel:(FBSDKAppGroupAddDialog *)appGroupAddDialog; - (void)appGroupAddDialogDidCancel:(FBSDKAppGroupAddDialog *)appGroupAddDialog __attribute__ ((deprecated));
@end @end

View File

@ -21,79 +21,61 @@
@protocol FBSDKAppGroupJoinDialogDelegate; @protocol FBSDKAppGroupJoinDialogDelegate;
/*! /*!
@abstract A dialog for joining app groups. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/ */
__attribute__ ((deprecated))
@interface FBSDKAppGroupJoinDialog : NSObject @interface FBSDKAppGroupJoinDialog : NSObject
/*! /*!
@abstract Convenience method to build up an app group dialog with content and a delegate. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param groupID The ID for the group.
@param delegate The receiver's delegate.
*/ */
+ (instancetype)showWithGroupID:(NSString *)groupID + (instancetype)showWithGroupID:(NSString *)groupID
delegate:(id<FBSDKAppGroupJoinDialogDelegate>)delegate; delegate:(id<FBSDKAppGroupJoinDialogDelegate>)delegate __attribute__ ((deprecated));
/*! /*!
@abstract The receiver's delegate or nil if it doesn't have a delegate. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. */
*/ @property (nonatomic, weak) id<FBSDKAppGroupJoinDialogDelegate> delegate __attribute__ ((deprecated));
@property (nonatomic, weak) id<FBSDKAppGroupJoinDialogDelegate> delegate;
/*! /*!
@abstract The ID for group. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information. */
*/ @property (nonatomic, copy) NSString *groupID __attribute__ ((deprecated));
@property (nonatomic, copy) NSString *groupID;
/*! /*!
@abstract A Boolean value that indicates whether the receiver can initiate an app group dialog. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@discussion May return NO if the appropriate Facebook app is not installed and is required or an access token is
required but not available. This method does not validate the content on the receiver, so this can be checked before
building up the content.
@see validateWithError:
@result YES if the receiver can share, otherwise NO.
*/ */
- (BOOL)canShow; - (BOOL)canShow __attribute__ ((deprecated));
/*! /*!
@abstract Begins the app group dialog from the receiver. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@result YES if the receiver was able to show the dialog, otherwise NO.
*/ */
- (BOOL)show; - (BOOL)show __attribute__ ((deprecated));
/*! /*!
@abstract Validates the content on the receiver. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param errorRef If an error occurs, upon return contains an NSError object that describes the problem.
@return YES if the content is valid, otherwise NO.
*/ */
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef; - (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated));
@end @end
/*! /*!
@abstract A delegate for FBSDKAppGroupJoinDialog. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@discussion The delegate is notified with the results of the app group request as long as the application has
permissions to receive the information. For example, if the person is not signed into the containing app, the shower
may not be able to distinguish between completion of an app group request and cancellation.
*/ */
__attribute__ ((deprecated))
@protocol FBSDKAppGroupJoinDialogDelegate <NSObject> @protocol FBSDKAppGroupJoinDialogDelegate <NSObject>
/*! /*!
@abstract Sent to the delegate when the app group request completes without error. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
@param results The results from the dialog. This may be nil or empty.
*/ */
- (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didCompleteWithResults:(NSDictionary *)results; - (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didCompleteWithResults:(NSDictionary *)results __attribute__ ((deprecated));
/*! /*!
@abstract Sent to the delegate when the app group request encounters an error. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
@param error The error.
*/ */
- (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didFailWithError:(NSError *)error; - (void)appGroupJoinDialog:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog didFailWithError:(NSError *)error __attribute__ ((deprecated));
/*! /*!
@abstract Sent to the delegate when the app group dialog is cancelled. @deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
*/ */
- (void)appGroupJoinDialogDidCancel:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog; - (void)appGroupJoinDialogDidCancel:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog __attribute__ ((deprecated));
@end @end

View File

@ -368,6 +368,7 @@ static NSMutableArray *g_pendingFBSDKShareAPI;
if ([errors count]) { if ([errors count]) {
[_delegate sharer:self didFailWithError:errors[0]]; [_delegate sharer:self didFailWithError:errors[0]];
} else if ([results count]) { } else if ([results count]) {
NSArray *individualPhotoIDs = [results valueForKeyPath:@"id"];
// each photo upload will be merged into the same post, so grab the post_id from the first and use that // each photo upload will be merged into the same post, so grab the post_id from the first and use that
NSMutableDictionary *shareResults = [[NSMutableDictionary alloc] init]; NSMutableDictionary *shareResults = [[NSMutableDictionary alloc] init];
[FBSDKInternalUtility dictionary:shareResults setObject:FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_POST [FBSDKInternalUtility dictionary:shareResults setObject:FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_POST
@ -375,6 +376,7 @@ static NSMutableArray *g_pendingFBSDKShareAPI;
NSDictionary *firstResult = [FBSDKTypeUtility dictionaryValue:results[0]]; NSDictionary *firstResult = [FBSDKTypeUtility dictionaryValue:results[0]];
[FBSDKInternalUtility dictionary:shareResults setObject:[FBSDKTypeUtility stringValue:firstResult[@"post_id"]] [FBSDKInternalUtility dictionary:shareResults setObject:[FBSDKTypeUtility stringValue:firstResult[@"post_id"]]
forKey:FBSDK_SHARE_RESULT_POST_ID_KEY]; forKey:FBSDK_SHARE_RESULT_POST_ID_KEY];
[FBSDKInternalUtility dictionary:shareResults setObject:individualPhotoIDs forKey:FBSDK_SHARE_RESULT_PHOTO_IDS_KEY];
[_delegate sharer:self didCompleteWithResults:shareResults]; [_delegate sharer:self didCompleteWithResults:shareResults];
} }
}; };

View File

@ -188,6 +188,14 @@ FBSDK_STATIC_INLINE void FBSDKShareDialogValidateShareExtensionSchemeRegisteredF
NSInteger errorCode = [results[@"error_code"] integerValue]; NSInteger errorCode = [results[@"error_code"] integerValue];
if (errorCode == 4201) { if (errorCode == 4201) {
[self _invokeDelegateDidCancel]; [self _invokeDelegateDidCancel];
} else if (errorCode != 0) {
NSError *error = [FBSDKShareError errorWithCode:FBSDKShareUnknownErrorCode
userInfo:@{
FBSDKGraphRequestErrorGraphErrorCode : @(errorCode)
}
message:results[@"error_message"]
underlyingError:nil];
[self _handleWebResponseParameters:nil error:error];
} else { } else {
// not all web dialogs report cancellation, so assume that the share has completed with no additional information // not all web dialogs report cancellation, so assume that the share has completed with no additional information
[self _handleWebResponseParameters:results error:nil]; [self _handleWebResponseParameters:results error:nil];

View File

@ -25,6 +25,7 @@
#define FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_CANCEL @"cancel" #define FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_CANCEL @"cancel"
#define FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_POST @"post" #define FBSDK_SHARE_RESULT_COMPLETION_GESTURE_VALUE_POST @"post"
#define FBSDK_SHARE_RESULT_DID_COMPLETE_KEY @"didComplete" #define FBSDK_SHARE_RESULT_DID_COMPLETE_KEY @"didComplete"
#define FBSDK_SHARE_RESULT_PHOTO_IDS_KEY @"photo_ids"
#define FBSDK_SHARE_RESULT_POST_ID_KEY @"postId" #define FBSDK_SHARE_RESULT_POST_ID_KEY @"postId"
#define FBSDK_SHARE_VIDEO_END_OFFSET @"end_offset" #define FBSDK_SHARE_VIDEO_END_OFFSET @"end_offset"
#define FBSDK_SHARE_VIDEO_FILE_CHUNK @"video_file_chunk" #define FBSDK_SHARE_VIDEO_FILE_CHUNK @"video_file_chunk"

View File

@ -213,6 +213,7 @@
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentDescription forKey:@"description"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentDescription forKey:@"description"];
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentURL forKey:@"link"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentURL forKey:@"link"];
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.quote forKey:@"quote"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.quote forKey:@"quote"];
[FBSDKInternalUtility dictionary:parameters setObject:[self hashtagStringFromHashtag:linkContent.hashtag] forKey:@"hashtag"];
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentTitle forKey:@"name"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.contentTitle forKey:@"name"];
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.imageURL forKey:@"picture"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.imageURL forKey:@"picture"];
[FBSDKInternalUtility dictionary:parameters setObject:linkContent.ref forKey:@"ref"]; [FBSDKInternalUtility dictionary:parameters setObject:linkContent.ref forKey:@"ref"];

View File

@ -1,3 +1,6 @@
# 3.5.0
* Updates for Firebase/Analytics, Firebase/AppIndexing, Firebase/Auth, Firebase/DynamicLinks, Firebase/Invites, Firebase/Storage.
# 3.4.0 # 3.4.0
* Updates for Firebase/AdMob, Firebase/Analytics, Firebase/AppIndexing, Firebase/Auth, Firebase/Crash, Firebase/DynamicLinks, Firebase/Invites, Firebase/Messaging, Firebase/RemoteConfig. * Updates for Firebase/AdMob, Firebase/Analytics, Firebase/AppIndexing, Firebase/Auth, Firebase/Crash, Firebase/DynamicLinks, Firebase/Invites, Firebase/Messaging, Firebase/RemoteConfig.

View File

@ -1,100 +0,0 @@
// clang-format off
/** @file FIRStorage.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorageConstants.h"
@class FIRApp;
@class FIRStorageReference;
NS_ASSUME_NONNULL_BEGIN
/**
* FirebaseStorage is a service that supports uploading and downloading binary objects,
* such as images, videos, and other files to Google Cloud Storage.
*
* If you call [FIRStorage storage], the instance will initialize with the default FIRApp,
* [FIRApp defaultApp], and the storage location will come from the provided
* GoogleService-Info.plist.
*
* If you call [FIRStorage storageForApp:] and provide a custom instance of FIRApp,
* the storage location will be specified via the FIROptions#storageBucket property.
*/
@interface FIRStorage : NSObject
/**
* Creates an instance of FIRStorage, configured with the default FIRApp.
* @return the FIRStorage instance, initialized with the default FIRApp.
*/
+ (instancetype)storage NS_SWIFT_NAME(storage());
/**
* Creates an instance of FIRStorage, configured with the custom FIRApp @a app.
* @param app The custom FIRApp used for initialization.
* @return the FIRStorage instance, initialized with the custom FIRApp.
*/
+ (instancetype)storageForApp:(FIRApp *)app NS_SWIFT_NAME(storage(app:));
/**
* The Firebase App associated with this Firebase Storage instance.
*/
@property(strong, nonatomic, readonly) FIRApp *app;
/**
* Maximum time in seconds to retry an upload if a failure occurs.
* Defaults to 10 minutes (600 seconds).
*/
@property NSTimeInterval maxUploadRetryTime;
/**
* Maximum time in seconds to retry a download if a failure occurs.
* Defaults to 10 minutes (600 seconds).
*/
@property NSTimeInterval maxDownloadRetryTime;
/**
* Maximum time in seconds to retry operations other than upload and download if a failure occurs.
* Defaults to 2 minutes (120 seconds).
*/
@property NSTimeInterval maxOperationRetryTime;
/**
* Queue that all developer callbacks are fired on. Defaults to the main queue.
*/
@property(strong, nonatomic) dispatch_queue_t callbackQueue;
/**
* Creates a FIRStorageReference initialized at the root Firebase Storage location.
* @return An instance of FIRStorageReference initialized at the root.
*/
- (FIRStorageReference *)reference;
/**
* Creates a FIRStorageReference given a gs:// or https:// URL pointing to a Firebase Storage
* location. For example, you can pass in an https:// download URL retrieved from
* [FIRStorageReference getDownloadURL] or the gs:// URI from [FIRStorageReference description].
* @param string A gs:// or https:// URL to initialize the reference with.
* @return An instance of FIRStorageReference at the given child path.
* @throws Throws an exception if passed in URL is not associated with the FIRApp used to initialize
* this FIRStorage.
*/
- (FIRStorageReference *)referenceForURL:(NSString *)string;
/**
* Creates a FIRStorageReference initialized at a child Firebase Storage location.
* @param string A relative path from the root to initialize the reference with,
* for instance @"path/to/object".
* @return An instance of FIRStorageReference at the given child path.
*/
- (FIRStorageReference *)referenceWithPath:(NSString *)string;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,123 +0,0 @@
// clang-format off
/** @file FIRStorageConstants.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
@class FIRStorageDownloadTask;
@class FIRStorageMetadata;
@class FIRStorageTaskSnapshot;
@class FIRStorageUploadTask;
NS_ASSUME_NONNULL_BEGIN
/**
* NSString typedef representing a task listener handle.
*/
typedef NSString *FIRStorageHandle;
/**
* Block typedef typically used when downloading data.
* @param data The data returned by the download, or nil if no data available or download failed.
* @param error The error describing failure, if one occurred.
*/
typedef void (^FIRStorageVoidDataError)(NSData *_Nullable data, NSError *_Nullable error);
/**
* Block typedef typically used when performing "binary" async operations such as delete,
* where the operation either succeeds without an error or fails with an error.
* @param error The error describing failure, if one occurred.
*/
typedef void (^FIRStorageVoidError)(NSError *_Nullable error);
/**
* Block typedef typically used when retrieving metadata.
* @param metadata The metadata returned by the operation, if metadata exists.
*/
typedef void (^FIRStorageVoidMetadata)(FIRStorageMetadata *_Nullable metadata);
/**
* Block typedef typically used when retrieving metadata with the possibility of an error.
* @param metadata The metadata returned by the operation, if metadata exists.
* @param error The error describing failure, if one occurred.
*/
typedef void (^FIRStorageVoidMetadataError)(FIRStorageMetadata *_Nullable metadata,
NSError *_Nullable error);
/**
* Block typedef typically used when getting or updating metadata with the possibility of an error.
* @param metadata The metadata returned by the operation, if metadata exists.
* @param error The error describing failure, if one occurred.
*/
typedef void (^FIRStorageVoidSnapshot)(FIRStorageTaskSnapshot *snapshot);
/**
* Block typedef typically used when retrieving a download URL.
* @param URL The download URL associated with the operation.
* @param error The error describing failure, if one occurred.
*/
typedef void (^FIRStorageVoidURLError)(NSURL *_Nullable URL, NSError *_Nullable error);
/**
* Enum representing the upload and download task status.
*/
typedef NS_ENUM(NSInteger, FIRStorageTaskStatus) {
/**
* Unknown task status.
*/
FIRStorageTaskStatusUnknown,
/**
* Task is being resumed.
*/
FIRStorageTaskStatusResume,
/**
* Task reported a progress event.
*/
FIRStorageTaskStatusProgress,
/**
* Task is paused.
*/
FIRStorageTaskStatusPause,
/**
* Task has completed successfully.
*/
FIRStorageTaskStatusSuccess,
/**
* Task has failed and is unrecoverable.
*/
FIRStorageTaskStatusFailure
};
/**
* Firebase Storage error domain.
*/
FOUNDATION_EXPORT NSString *const FIRStorageErrorDomain;
/**
* Enum representing the errors raised by Firebase Storage.
*/
typedef NS_ENUM(NSInteger, FIRStorageErrorCode) {
FIRStorageErrorCodeUnknown = -13000,
FIRStorageErrorCodeObjectNotFound = -13010,
FIRStorageErrorCodeBucketNotFound = -13011,
FIRStorageErrorCodeProjectNotFound = -13012,
FIRStorageErrorCodeQuotaExceeded = -13013,
FIRStorageErrorCodeUnauthenticated = -13020,
FIRStorageErrorCodeUnauthorized = -13021,
FIRStorageErrorCodeRetryLimitExceeded = -13030,
FIRStorageErrorCodeNonMatchingChecksum = -13031,
FIRStorageErrorCodeDownloadSizeExceeded = -13032,
FIRStorageErrorCodeCancelled = -13040
};
NS_ASSUME_NONNULL_END

View File

@ -1,30 +0,0 @@
// clang-format off
/** @file FIRStorageDownloadTask.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorageObservableTask.h"
NS_ASSUME_NONNULL_BEGIN
/**
* FIRStorageDownloadTask implements resumable downloads from an object in Firebase Storage.
* Downloads can be returned on completion with a completion handler, and can be monitored
* by attaching observers, or controlled by calling FIRStorageTask#pause, FIRStorageTask#resume,
* or FIRStorageTask#cancel.
* Downloads can currently be returned as NSData in memory, or as an NSURL to a file on disk.
* Downloads are performed on a background queue, and callbacks are raised on the developer
* specified callbackQueue in FIRStorage, or the main queue if left unspecified.
* Currently all uploads must be initiated and managed on the main queue.
*/
@interface FIRStorageDownloadTask : FIRStorageObservableTask<FIRStorageTaskManagement>
@end
NS_ASSUME_NONNULL_END

View File

@ -1,138 +0,0 @@
// clang-format off
/** @file FIRStorageMetadata.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
@class FIRStorageReference;
NS_ASSUME_NONNULL_BEGIN
/**
* Class which represents the metadata on an object in Firebase Storage. This metadata is
* returned on successful operations, and can be used to retrieve download URLs, content types,
* and a FIRStorage reference to the object in question. Full documentation can be found at the GCS
* Objects#resource docs.
* @see https://cloud.google.com/storage/docs/json_api/v1/objects#resource
*/
@interface FIRStorageMetadata : NSObject<NSCopying>
/**
* The name of the bucket containing this object.
*/
@property(copy, nonatomic, readonly) NSString *bucket;
/**
* Cache-Control directive for the object data.
*/
@property(copy, nonatomic, nullable) NSString *cacheControl;
/**
* Content-Disposition of the object data.
*/
@property(copy, nonatomic, nullable) NSString *contentDisposition;
/**
* Content-Encoding of the object data.
*/
@property(copy, nonatomic, nullable) NSString *contentEncoding;
/**
* Content-Language of the object data.
*/
@property(copy, nonatomic, nullable) NSString *contentLanguage;
/**
* Content-Type of the object data.
*/
@property(copy, nonatomic, nullable) NSString *contentType;
/**
* The content generation of this object. Used for object versioning.
*/
@property(readonly) int64_t generation;
/**
* User-provided metadata, in key/value pairs.
*/
@property(copy, nonatomic, nullable) NSDictionary<NSString *, NSString *> *customMetadata;
/**
* The version of the metadata for this object at this generation. Used
* for preconditions and for detecting changes in metadata. A metageneration number is only
* meaningful in the context of a particular generation of a particular object.
*/
@property(readonly) int64_t metageneration;
/**
* The name of this object, in gs://bucket/path/to/object.txt, this is object.txt.
*/
@property(copy, nonatomic, readonly, nullable) NSString *name;
/**
* The full path of this object, in gs://bucket/path/to/object.txt, this is path/to/object.txt.
*/
@property(copy, nonatomic, readonly, nullable) NSString *path;
/**
* Content-Length of the data in bytes.
*/
@property(readonly) int64_t size;
/**
* The creation time of the object in RFC 3339 format.
*/
@property(copy, nonatomic, readonly, nullable) NSDate *timeCreated;
/**
* The modification time of the object metadata in RFC 3339 format.
*/
@property(copy, nonatomic, readonly, nullable) NSDate *updated;
/**
* A reference to the object in Firebase Storage.
*/
@property(strong, nonatomic, readonly, nullable) FIRStorageReference *storageReference;
/**
* An array containing all download URLs available for the object.
*/
@property(strong, nonatomic, readonly, nullable) NSArray<NSURL *> *downloadURLs;
/**
* Creates an instanece of FIRStorageMetadata from the contents of a dictionary.
* @return An instance of FIRStorageMetadata that represents the contents of a dictionary.
*/
- (nullable instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
/**
* Creates an NSDictionary from the contents of the metadata.
* @return An NSDictionary that represents the contents of the metadata.
*/
- (NSDictionary *)dictionaryRepresentation;
/**
* Determines if the current metadata represents a "file".
*/
@property(readonly, getter=isFile) BOOL file;
/**
* Determines if the current metadata represents a "folder".
*/
@property(readonly, getter=isFolder) BOOL folder;
/**
* Retrieves a download URL for the given object, or nil if none exist.
* Note that if there are many valid download tokens, this will always return the first
* valid token created.
*/
- (nullable NSURL *)downloadURL;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,54 +0,0 @@
// clang-format off
/** @file FIRStorageObservableTask.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import "FIRStorageTask.h"
NS_ASSUME_NONNULL_BEGIN
@class FIRStorageReference;
@class FIRStorageTaskSnapshot;
/**
* Extends FIRStorageTask to provide observable semantics such as adding and removing observers.
* Observers produce a FIRStorageHandle, which is used to keep track of and remove specific
* observers at a later date.
* This class is currently not thread safe and can only be called on the main thread.
*/
@interface FIRStorageObservableTask : FIRStorageTask
/**
* Observes changes in the upload status: Resume, Pause, Progress, Success, and Failure.
* @param status The FIRStorageTaskStatus change to observe.
* @param handler A callback that fires every time the status event occurs,
* returns a FIRStorageTaskSnapshot containing the state of the task.
* @return A task handle that can be used to remove the observer at a later date.
*/
- (FIRStorageHandle)observeStatus:(FIRStorageTaskStatus)status
handler:(void (^)(FIRStorageTaskSnapshot *snapshot))handler;
/**
* Removes the single observer with the provided handle.
* @param handle The handle of the task to remove.
*/
- (void)removeObserverWithHandle:(FIRStorageHandle)handle;
/**
* Removes all observers for a single status.
* @param status A FIRStorageTaskStatus to remove listeners for.
*/
- (void)removeAllObserversForStatus:(FIRStorageTaskStatus)status;
/**
* Removes all observers.
*/
- (void)removeAllObservers;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,228 +0,0 @@
// clang-format off
/** @file FIRStorageReference.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorage.h"
#import "FIRStorageConstants.h"
#import "FIRStorageDownloadTask.h"
#import "FIRStorageMetadata.h"
#import "FIRStorageTask.h"
#import "FIRStorageUploadTask.h"
NS_ASSUME_NONNULL_BEGIN
/**
* FIRStorageReference represents a reference to a Google Cloud Storage object. Developers can
* upload and download objects, as well as get/set object metadata, and delete an object at the
* path.
* @see https://cloud.google.com/storage/
*/
@interface FIRStorageReference : NSObject
/**
* The FIRStorage service object which created this reference.
*/
@property(nonatomic, readonly) FIRStorage *storage;
/**
* The name of the Google Cloud Storage bucket associated with this reference,
* in gs://bucket/path/to/object.txt, the bucket would be: 'bucket'
*/
@property(nonatomic, readonly) NSString *bucket;
/**
* The full path to this object, not including the Google Cloud Storage bucket.
* In gs://bucket/path/to/object.txt, the full path would be: 'path/to/object.txt'
*/
@property(nonatomic, readonly) NSString *fullPath;
/**
* The short name of the object associated with this reference,
* in gs://bucket/path/to/object.txt, the name of the object would be: 'object.txt'
*/
@property(nonatomic, readonly) NSString *name;
#pragma mark - Path Operations
/**
* Creates a new FIRStorageReference pointing to the root object.
* @return A new FIRStorageReference pointing to the root object.
*/
- (FIRStorageReference *)root;
/**
* Creates a new FIRStorageReference pointing to the parent of the current reference
* or nil if this instance references the root location.
* For example:
* path = foo/bar/baz parent = foo/bar
* path = foo parent = (root)
* path = (root) parent = nil
* @return A new FIRStorageReference pointing to the parent of the current reference.
*/
- (nullable FIRStorageReference *)parent;
/**
* Creates a new FIRStorageReference pointing to a child object of the current reference.
* path = foo child = bar newPath = foo/bar
* path = foo/bar child = baz newPath = foo/bar/baz
* All leading and trailing slashes will be removed, and consecutive slashes will be
* compressed to single slashes. For example:
* child = /foo/bar newPath = foo/bar
* child = foo/bar/ newPath = foo/bar
* child = foo///bar newPath = foo/bar
* @param path Path to append to the current path.
* @return A new FIRStorageReference pointing to a child location of the current reference.
*/
- (FIRStorageReference *)child:(NSString *)path;
#pragma mark - Uploads
/**
* Asynchronously uploads data to the currently specified FIRStorageReference,
* without additional metadata.
* This is not recommended for large files, and one should instead upload a file from disk.
* @param uploadData The NSData to upload.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putData:(NSData *)uploadData;
/**
* Asynchronously uploads data to the currently specified FIRStorageReference.
* This is not recommended for large files, and one should instead upload a file from disk.
* @param uploadData The NSData to upload.
* @param metadata FIRStorageMetadata containing additional information (MIME type, etc.)
* about the object being uploaded.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putData:(NSData *)uploadData
metadata:(nullable FIRStorageMetadata *)metadata;
/**
* Asynchronously uploads data to the currently specified FIRStorageReference.
* This is not recommended for large files, and one should instead upload a file from disk.
* @param uploadData The NSData to upload.
* @param metadata FIRStorageMetadata containing additional information (MIME type, etc.)
* about the object being uploaded.
* @param completion A completion block that either returns the object metadata on success,
* or an error on failure.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putData:(NSData *)uploadData
metadata:(nullable FIRStorageMetadata *)metadata
completion:(nullable void (^)(FIRStorageMetadata *_Nullable metadata,
NSError *_Nullable error))completion;
/**
* Asynchronously uploads a file to the currently specified FIRStorageReference,
* without additional metadata.
* @param fileURL A URL representing the system file path of the object to be uploaded.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putFile:(NSURL *)fileURL;
/**
* Asynchronously uploads a file to the currently specified FIRStorageReference.
* @param fileURL A URL representing the system file path of the object to be uploaded.
* @param metadata FIRStorageMetadata containing additional information (MIME type, etc.)
* about the object being uploaded.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putFile:(NSURL *)fileURL metadata:(nullable FIRStorageMetadata *)metadata;
/**
* Asynchronously uploads a file to the currently specified FIRStorageReference.
* @param fileURL A URL representing the system file path of the object to be uploaded.
* @param metadata FIRStorageMetadata containing additional information (MIME type, etc.)
* about the object being uploaded.
* @param completion A completion block that either returns the object metadata on success,
* or an error on failure.
* @return An instance of FIRStorageUploadTask, which can be used to monitor or manage the upload.
*/
- (FIRStorageUploadTask *)putFile:(NSURL *)fileURL
metadata:(nullable FIRStorageMetadata *)metadata
completion:(nullable void (^)(FIRStorageMetadata *_Nullable metadata,
NSError *_Nullable error))completion;
#pragma mark - Downloads
/**
* Asynchronously downloads the object at the FIRStorageReference to an NSData object in memory.
* An NSData of the provided max size will be allocated, so ensure that the device has enough free
* memory to complete the download. For downloading large files, writeToFile may be a better option.
* @param size The maximum size in bytes to download. If the download exceeds this size
* the task will be cancelled and an error will be returned.
* @param completion A completion block that either returns the object data on success,
* or an error on failure.
* @return An FIRStorageDownloadTask that can be used to monitor or manage the download.
*/
- (FIRStorageDownloadTask *)dataWithMaxSize:(int64_t)size
completion:(void (^)(NSData *_Nullable data,
NSError *_Nullable error))completion;
/**
* Asynchronously retrieves a long lived download URL with a revokable token.
* This can be used to share the file with others, but can be revoked by a developer
* in the Firebase Console if desired.
* @param completion A completion block that either returns the URL on success,
* or an error on failure.
*/
- (void)downloadURLWithCompletion:(void (^)(NSURL *_Nullable URL,
NSError *_Nullable error))completion;
/**
* Asynchronously downloads the object at the current path to a specified system filepath.
* @param fileURL A file system URL representing the path the object should be downloaded to.
* @return An FIRStorageDownloadTask that can be used to monitor or manage the download.
*/
- (FIRStorageDownloadTask *)writeToFile:(NSURL *)fileURL;
/**
* Asynchronously downloads the object at the current path to a specified system filepath.
* @param fileURL A file system URL representing the path the object should be downloaded to.
* @param completion A completion block that fires when the file download completes.
* Returns an NSURL pointing to the file path of the downloaded file on success,
* or an error on failure.
* @return An FIRStorageDownloadTask that can be used to monitor or manage the download.
*/
- (FIRStorageDownloadTask *)writeToFile:(NSURL *)fileURL
completion:(nullable void (^)(NSURL *_Nullable URL,
NSError *_Nullable error))completion;
#pragma mark - Metadata Operations
/**
* Retrieves metadata associated with an object at the current path.
* @param completion A completion block which returns the object metadata on success,
* or an error on failure.
*/
- (void)metadataWithCompletion:(void (^)(FIRStorageMetadata *_Nullable metadata,
NSError *_Nullable error))completion;
/**
* Updates the metadata associated with an object at the current path.
* @param metadata An FIRStorageMetadata object with the metadata to update.
* @param completion A completion block which returns the FIRStorageMetadata on success,
* or an error on failure.
*/
- (void)updateMetadata:(FIRStorageMetadata *)metadata
completion:(nullable void (^)(FIRStorageMetadata *_Nullable metadata,
NSError *_Nullable error))completion;
#pragma mark - Delete
/**
* Deletes the object at the current path.
* @param completion A completion block which returns nil on success, or an error on failure.
*/
- (void)deleteWithCompletion:(nullable void (^)(NSError *_Nullable error))completion;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,66 +0,0 @@
// clang-format off
/** @file FIRStorageTask.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorageConstants.h"
#import "FIRStorageMetadata.h"
NS_ASSUME_NONNULL_BEGIN
/**
* A superclass to all FIRStorage*Tasks, including FIRStorageUploadTask
* and FIRStorageDownloadTask, to provide state transitions, event raising, and common storage
* or metadata and errors.
* Callbacks are always fired on the developer specified callback queue.
* If no queue is specified by the developer, it defaults to the main queue.
* Currently not thread safe, so only call methods on the main thread.
*/
@interface FIRStorageTask : NSObject
/**
* An immutable view of the task and associated metadata, progress, error, etc.
*/
@property(strong, readonly, nonatomic, nonnull) FIRStorageTaskSnapshot *snapshot;
@end
/**
* Defines task operations such as pause, resume, cancel, and enqueue for all tasks.
* All tasks are required to implement enqueue, which begins the task, and may optionally
* implement pause, resume, and cancel, which operate on the task to pause, resume, and cancel
* operations.
*/
@protocol FIRStorageTaskManagement<NSObject>
@required
/**
* Prepares a task and begins execution.
*/
- (void)enqueue;
@optional
/**
* Pauses a task currently in progress.
*/
- (void)pause;
/**
* Cancels a task currently in progress.
*/
- (void)cancel;
/**
* Resumes a task that is paused.
*/
- (void)resume;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,59 +0,0 @@
// clang-format off
/** @file FIRStorageTaskSnapshot.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorageConstants.h"
NS_ASSUME_NONNULL_BEGIN
@class FIRStorageMetadata;
@class FIRStorageReference;
@class FIRStorageTask;
/**
* FIRStorageTaskSnapshot represents an immutable view of a task.
* A Snapshot contains a task, storage reference, metadata (if it exists),
* progress, and an error (if one occurred).
*/
@interface FIRStorageTaskSnapshot : NSObject
/**
* Subclass of FIRStorageTask this snapshot represents.
*/
@property(readonly, copy, nonatomic) __kindof FIRStorageTask *task;
/**
* Metadata returned by the task, or nil if no metadata returned.
*/
@property(readonly, copy, nonatomic, nullable) FIRStorageMetadata *metadata;
/**
* FIRStorageReference this task is operates on.
*/
@property(readonly, copy, nonatomic) FIRStorageReference *reference;
/**
* NSProgress object which tracks the progess of an upload or download.
*/
@property(readonly, strong, nonatomic, nullable) NSProgress *progress;
/**
* Error during task execution, or nil if no error occurred.
*/
@property(readonly, copy, nonatomic, nullable) NSError *error;
/**
* Status of the task.
*/
@property(readonly, nonatomic) FIRStorageTaskStatus status;
@end
NS_ASSUME_NONNULL_END

View File

@ -1,30 +0,0 @@
// clang-format off
/** @file FIRStorageUploadTask.h
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import <Foundation/Foundation.h>
#import "FIRStorageObservableTask.h"
NS_ASSUME_NONNULL_BEGIN
/**
* FIRStorageUploadTask implements resumable uploads to a file in Firebase Storage.
* Uploads can be returned on completion with a completion callback, and can be monitored
* by attaching observers, or controlled by calling FIRStorageTask#pause, FIRStorageTask#resume,
* or FIRStorageTask#cancel.
* Uploads can take NSData in memory, or an NSURL to a file on disk.
* Uploads are performed on a background queue, and callbacks are raised on the developer
* specified callbackQueue in FIRStorage, or the main queue if left unspecified.
* Currently all uploads must be initiated and managed on the main queue.
*/
@interface FIRStorageUploadTask : FIRStorageObservableTask<FIRStorageTaskManagement>
@end
NS_ASSUME_NONNULL_END

View File

@ -1,21 +0,0 @@
// clang-format off
/** @file FirebaseStorage.m
@brief Firebase SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
// clang-format on
#import "FIRStorage.h"
#import "FIRStorageConstants.h"
#import "FIRStorageDownloadTask.h"
#import "FIRStorageMetadata.h"
#import "FIRStorageObservableTask.h"
#import "FIRStorageReference.h"
#import "FIRStorageTask.h"
#import "FIRStorageTaskSnapshot.h"
#import "FIRStorageUploadTask.h"
//! Project version string for FirebaseStorage.
FOUNDATION_EXPORT const unsigned char *const FirebaseStorageVersionString;

View File

@ -1,18 +0,0 @@
framework module FirebaseStorage {
export *
umbrella header "FirebaseStorage.h"
header "FIRStorage.h"
header "FIRStorageConstants.h"
header "FIRStorageDownloadTask.h"
header "FIRStorageMetadata.h"
header "FIRStorageObservableTask.h"
header "FIRStorageReference.h"
header "FIRStorageTask.h"
header "FIRStorageTaskSnapshot.h"
header "FIRStorageUploadTask.h"
link framework "MobileCoreServices"
}

52
Pods/Manifest.lock generated
View File

@ -1,7 +1,7 @@
PODS: PODS:
- AeroGearHttp (0.6.0) - AeroGearHttp (0.7.0)
- AeroGearOAuth2 (0.5.1): - AeroGearOAuth2 (0.7.0):
- AeroGearHttp - AeroGearHttp (= 0.7.0)
- AFNetworking (2.6.3): - AFNetworking (2.6.3):
- AFNetworking/NSURLConnection (= 2.6.3) - AFNetworking/NSURLConnection (= 2.6.3)
- AFNetworking/NSURLSession (= 2.6.3) - AFNetworking/NSURLSession (= 2.6.3)
@ -37,25 +37,25 @@ PODS:
- BSImagePicker (2.3.0): - BSImagePicker (2.3.0):
- BSGridCollectionViewLayout (~> 1.1) - BSGridCollectionViewLayout (~> 1.1)
- UIImageViewModeScaleAspect (~> 1.3) - UIImageViewModeScaleAspect (~> 1.3)
- FBSDKCoreKit (4.14.0): - FBSDKCoreKit (4.15.0):
- Bolts (~> 1.7) - Bolts (~> 1.7)
- FBSDKLoginKit (4.14.0): - FBSDKLoginKit (4.15.0):
- FBSDKCoreKit - FBSDKCoreKit
- FBSDKShareKit (4.14.0): - FBSDKShareKit (4.15.0):
- FBSDKCoreKit - FBSDKCoreKit
- Firebase (3.4.0): - Firebase (3.5.2):
- Firebase/Core (= 3.4.0) - Firebase/Core (= 3.5.2)
- Firebase/Analytics (3.4.0): - Firebase/Analytics (3.5.2):
- FirebaseAnalytics (~> 3.3) - FirebaseAnalytics (~> 3.3)
- Firebase/Core (3.4.0): - Firebase/Core (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- Firebase/Database (3.4.0): - Firebase/Database (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- FirebaseDatabase (= 3.0.2) - FirebaseDatabase (= 3.0.2)
- Firebase/Storage (3.4.0): - Firebase/Storage (3.5.2):
- Firebase/Analytics - Firebase/Analytics
- FirebaseStorage (= 1.0.2) - FirebaseStorage (= 1.0.3)
- FirebaseAnalytics (3.3.0): - FirebaseAnalytics (3.3.1):
- FirebaseInstanceID (~> 1.0) - FirebaseInstanceID (~> 1.0)
- GoogleInterchangeUtilities (~> 1.2) - GoogleInterchangeUtilities (~> 1.2)
- GoogleSymbolUtilities (~> 1.1) - GoogleSymbolUtilities (~> 1.1)
@ -68,8 +68,8 @@ PODS:
- FirebaseDatabase (3.0.2): - FirebaseDatabase (3.0.2):
- FirebaseAnalytics (~> 3.2) - FirebaseAnalytics (~> 3.2)
- FirebaseInstanceID (1.0.8) - FirebaseInstanceID (1.0.8)
- FirebaseStorage (1.0.2): - FirebaseStorage (1.0.3):
- FirebaseAnalytics (~> 3.2) - FirebaseAnalytics (~> 3.3)
- GoogleNetworkingUtilities (~> 1.2) - GoogleNetworkingUtilities (~> 1.2)
- GDataXML-HTML (1.3.0) - GDataXML-HTML (1.3.0)
- GoogleInterchangeUtilities (1.2.1): - GoogleInterchangeUtilities (1.2.1):
@ -121,23 +121,23 @@ DEPENDENCIES:
- TYMActivityIndicatorView - TYMActivityIndicatorView
SPEC CHECKSUMS: SPEC CHECKSUMS:
AeroGearHttp: e958f301cc2d1c7fbfd4b61af187ea3490040a48 AeroGearHttp: 4660c8bf5b56cd00a3b75d7c5ecf94774469df5c
AeroGearOAuth2: 6f29d3fac8b78a0ff6d51b04c4ba1a02baed2e52 AeroGearOAuth2: de4218f60a6228d6cdcf1761277fe8af1115600a
AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60 AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60
Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98 Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98
Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322
BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3 BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3
BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18 BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18
FBSDKCoreKit: 6e020b5db0b5bd1e01f5fb0902131befd129a502 FBSDKCoreKit: 6680cbd33a4243d80700f182d0af36b3fa7f3118
FBSDKLoginKit: da563567a108050ef83739c8c8c001ee9e25fa13 FBSDKLoginKit: 96d9b70b5784490f02ab86119e542a1f182017a8
FBSDKShareKit: e8e5d4ccef69b41132fe33acda26db1e33143e33 FBSDKShareKit: 06ef20cb2f16828ca4b20055333313dd445de362
Firebase: 754562547af419cc2f4b15247fee419081924bc2 Firebase: 94e63112efcad75226c0356a8f3032397b8547c9
FirebaseAnalytics: 228be2991cb28efb96cdafc4d62f64680e615c69 FirebaseAnalytics: d968d4d5f6aeb795cd64144337bcd233e530efc6
FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c
FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7 FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7
FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a
FirebaseStorage: fa2a87dee81f682f553af6839daa37a750e65f6a FirebaseStorage: 3992817bf405f5c1a4f8349678d22724cd0ef509
GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898 GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898
GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de
GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f
@ -152,6 +152,6 @@ SPEC CHECKSUMS:
TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b
UIImageViewModeScaleAspect: 11a790a0b9d248a13dc63e3a78991f1463b6d84e UIImageViewModeScaleAspect: 11a790a0b9d248a13dc63e3a78991f1463b6d84e
PODFILE CHECKSUM: 3b36a7c734809ee54f4ecf0055d9910a9279d555 PODFILE CHECKSUM: d5879f9153df4c398c04aed34c686baebf1eeafb
COCOAPODS: 1.0.0 COCOAPODS: 1.0.1

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.6.0</string> <string>0.7.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.5.1</string> <string>0.7.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>4.14.0</string> <string>4.15.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>4.14.0</string> <string>4.15.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>FMWK</string> <string>FMWK</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>4.14.0</string> <string>4.15.0</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>

View File

@ -646,7 +646,7 @@ Copyright 2016 Google
## FirebaseStorage ## FirebaseStorage
Copyright 2016 Google Inc. Copyright 2016 Google
## GDataXML-HTML ## GDataXML-HTML

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Copyright 2016 Google Inc.</string> <string>Copyright 2016 Google</string>
<key>Title</key> <key>Title</key>
<string>FirebaseStorage</string> <string>FirebaseStorage</string>
<key>Type</key> <key>Type</key>

View File

@ -48,8 +48,8 @@ EOM
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.xib) *.xib)
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.framework) *.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -646,7 +646,7 @@ Copyright 2016 Google
## FirebaseStorage ## FirebaseStorage
Copyright 2016 Google Inc. Copyright 2016 Google
## GDataXML-HTML ## GDataXML-HTML

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Copyright 2016 Google Inc.</string> <string>Copyright 2016 Google</string>
<key>Title</key> <key>Title</key>
<string>FirebaseStorage</string> <string>FirebaseStorage</string>
<key>Type</key> <key>Type</key>

View File

@ -48,8 +48,8 @@ EOM
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.xib) *.xib)
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.framework) *.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -646,7 +646,7 @@ Copyright 2016 Google
## FirebaseStorage ## FirebaseStorage
Copyright 2016 Google Inc. Copyright 2016 Google
## GDataXML-HTML ## GDataXML-HTML

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict> </dict>
<dict> <dict>
<key>FooterText</key> <key>FooterText</key>
<string>Copyright 2016 Google Inc.</string> <string>Copyright 2016 Google</string>
<key>Title</key> <key>Title</key>
<string>FirebaseStorage</string> <string>FirebaseStorage</string>
<key>Type</key> <key>Type</key>

View File

@ -48,8 +48,8 @@ EOM
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.xib) *.xib)
echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT}" echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}"
ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
;; ;;
*.framework) *.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -1,5 +1,5 @@
EMBEDDED_CONTENT_CONTAINS_SWIFT = YES EMBEDDED_CONTENT_CONTAINS_SWIFT = YES
FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks" FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/AFNetworking" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearHttp" "$PODS_CONFIGURATION_BUILD_DIR/AeroGearOAuth2" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Alamofire-SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/BSGridCollectionViewLayout" "$PODS_CONFIGURATION_BUILD_DIR/BSImagePicker" "$PODS_CONFIGURATION_BUILD_DIR/Bolts" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKCoreKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKLoginKit" "$PODS_CONFIGURATION_BUILD_DIR/FBSDKShareKit" "$PODS_CONFIGURATION_BUILD_DIR/GDataXML-HTML" "$PODS_CONFIGURATION_BUILD_DIR/Locksmith" "$PODS_CONFIGURATION_BUILD_DIR/OAuthSwift" "$PODS_CONFIGURATION_BUILD_DIR/PicoKit" "$PODS_CONFIGURATION_BUILD_DIR/SWRevealViewController" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "$PODS_CONFIGURATION_BUILD_DIR/TYMActivityIndicatorView" "$PODS_CONFIGURATION_BUILD_DIR/UIImageViewModeScaleAspect" "${PODS_ROOT}/FirebaseAnalytics/Frameworks/frameworks" "${PODS_ROOT}/FirebaseAuth/Frameworks/frameworks" "${PODS_ROOT}/FirebaseDatabase/Frameworks" "${PODS_ROOT}/FirebaseInstanceID/Frameworks/frameworks" "${PODS_ROOT}/FirebaseStorage/Frameworks/frameworks" "${PODS_ROOT}/GoogleInterchangeUtilities/Frameworks" "${PODS_ROOT}/GoogleNetworkingUtilities/Frameworks" "${PODS_ROOT}/GoogleParsingUtilities/Frameworks" "${PODS_ROOT}/GoogleSymbolUtilities/Frameworks" "${PODS_ROOT}/GoogleUtilities/Frameworks"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities" HEADER_SEARCH_PATHS = $(inherited) ${PODS_ROOT}/Firebase/Analytics/Sources $(SDKROOT)/usr/include/libxml2 $(PODS_ROOT)/GDataXML-HTML/libxml $(SDKROOT)/usr/include/libxml2 $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_ROOT}/Headers/Public/FirebaseAnalytics" "${PODS_ROOT}/Headers/Public/FirebaseAuth" "${PODS_ROOT}/Headers/Public/FirebaseDatabase" "${PODS_ROOT}/Headers/Public/FirebaseInstanceID" "${PODS_ROOT}/Headers/Public/FirebaseStorage" "${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities" "${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities" "${PODS_ROOT}/Headers/Public/GoogleParsingUtilities" "${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities" "${PODS_ROOT}/Headers/Public/GoogleUtilities"
LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'

View File

@ -45,6 +45,7 @@
A87525ED0EE7D42D9A7708D8 /* Pods_Vendoo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23ECC3C8465826BD6AC74A02 /* Pods_Vendoo.framework */; }; A87525ED0EE7D42D9A7708D8 /* Pods_Vendoo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23ECC3C8465826BD6AC74A02 /* Pods_Vendoo.framework */; };
B6FD38131D70EB27008FB41E /* AmazonWebServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */; }; B6FD38131D70EB27008FB41E /* AmazonWebServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */; };
B6FD38151D71CF3E008FB41E /* FeedType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38141D71CF3E008FB41E /* FeedType.swift */; }; B6FD38151D71CF3E008FB41E /* FeedType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38141D71CF3E008FB41E /* FeedType.swift */; };
B6FD38171D720540008FB41E /* QuerySigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38161D720540008FB41E /* QuerySigner.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -112,6 +113,7 @@
A44ED233D6B5454EF92FEB08 /* Pods-Vendoo-VendooUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo-VendooUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests.debug.xcconfig"; sourceTree = "<group>"; }; A44ED233D6B5454EF92FEB08 /* Pods-Vendoo-VendooUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo-VendooUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests.debug.xcconfig"; sourceTree = "<group>"; };
B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AmazonWebServiceManager.swift; sourceTree = "<group>"; }; B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AmazonWebServiceManager.swift; sourceTree = "<group>"; };
B6FD38141D71CF3E008FB41E /* FeedType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedType.swift; sourceTree = "<group>"; }; B6FD38141D71CF3E008FB41E /* FeedType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedType.swift; sourceTree = "<group>"; };
B6FD38161D720540008FB41E /* QuerySigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuerySigner.swift; sourceTree = "<group>"; };
B876489113F498AF1D2FD7E9 /* Pods_Vendoo_VendooTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Vendoo_VendooTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B876489113F498AF1D2FD7E9 /* Pods_Vendoo_VendooTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Vendoo_VendooTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E16BF843456476262BD075A1 /* Pods-Vendoo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo/Pods-Vendoo.debug.xcconfig"; sourceTree = "<group>"; }; E16BF843456476262BD075A1 /* Pods-Vendoo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo/Pods-Vendoo.debug.xcconfig"; sourceTree = "<group>"; };
E25BEE3F146F38C121B72346 /* Pods-Vendoo-VendooTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo-VendooTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo-VendooTests/Pods-Vendoo-VendooTests.debug.xcconfig"; sourceTree = "<group>"; }; E25BEE3F146F38C121B72346 /* Pods-Vendoo-VendooTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Vendoo-VendooTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Vendoo-VendooTests/Pods-Vendoo-VendooTests.debug.xcconfig"; sourceTree = "<group>"; };
@ -342,6 +344,7 @@
children = ( children = (
B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */, B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */,
B6FD38141D71CF3E008FB41E /* FeedType.swift */, B6FD38141D71CF3E008FB41E /* FeedType.swift */,
B6FD38161D720540008FB41E /* QuerySigner.swift */,
); );
name = AmazonServices; name = AmazonServices;
sourceTree = "<group>"; sourceTree = "<group>";
@ -366,7 +369,7 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 3E6CC37D1CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "Vendoo" */; buildConfigurationList = 3E6CC37D1CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "Vendoo" */;
buildPhases = ( buildPhases = (
8D532FDF55F208776F1284EF /* 📦 Check Pods Manifest.lock */, 8D532FDF55F208776F1284EF /* [CP] Check Pods Manifest.lock */,
F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */, F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */,
3E6CC34F1CF2A94B00E00A70 /* Sources */, 3E6CC34F1CF2A94B00E00A70 /* Sources */,
3E6CC3501CF2A94B00E00A70 /* Frameworks */, 3E6CC3501CF2A94B00E00A70 /* Frameworks */,
@ -389,7 +392,7 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 3E6CC3801CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooTests" */; buildConfigurationList = 3E6CC3801CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooTests" */;
buildPhases = ( buildPhases = (
2A9BA63E4CE4638416B6A19E /* 📦 Check Pods Manifest.lock */, 2A9BA63E4CE4638416B6A19E /* [CP] Check Pods Manifest.lock */,
9F58E69456F56F20E6643056 /* [CP] Check Pods Manifest.lock */, 9F58E69456F56F20E6643056 /* [CP] Check Pods Manifest.lock */,
3E6CC3651CF2A94B00E00A70 /* Sources */, 3E6CC3651CF2A94B00E00A70 /* Sources */,
3E6CC3661CF2A94B00E00A70 /* Frameworks */, 3E6CC3661CF2A94B00E00A70 /* Frameworks */,
@ -413,7 +416,7 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 3E6CC3831CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooUITests" */; buildConfigurationList = 3E6CC3831CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooUITests" */;
buildPhases = ( buildPhases = (
BCA592620202EE5EBFCD3DCA /* 📦 Check Pods Manifest.lock */, BCA592620202EE5EBFCD3DCA /* [CP] Check Pods Manifest.lock */,
99EF583910BFA3B053CE8591 /* [CP] Check Pods Manifest.lock */, 99EF583910BFA3B053CE8591 /* [CP] Check Pods Manifest.lock */,
3E6CC3701CF2A94B00E00A70 /* Sources */, 3E6CC3701CF2A94B00E00A70 /* Sources */,
3E6CC3711CF2A94B00E00A70 /* Frameworks */, 3E6CC3711CF2A94B00E00A70 /* Frameworks */,
@ -535,14 +538,14 @@
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo/Pods-Vendoo-resources.sh\"\n"; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo/Pods-Vendoo-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
2A9BA63E4CE4638416B6A19E /* 📦 Check Pods Manifest.lock */ = { 2A9BA63E4CE4638416B6A19E /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputPaths = (
); );
name = "📦 Check Pods Manifest.lock"; name = "[CP] Check Pods Manifest.lock";
outputPaths = ( outputPaths = (
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -577,7 +580,7 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VendooTests/Pods-VendooTests-resources.sh\"\n"; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooTests/Pods-Vendoo-VendooTests-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
7A9D276114F95F89DAFE1AF3 /* 📦 Embed Pods Frameworks */ = { 7A9D276114F95F89DAFE1AF3 /* 📦 Embed Pods Frameworks */ = {
@ -610,14 +613,14 @@
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests-resources.sh\"\n"; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
8D532FDF55F208776F1284EF /* 📦 Check Pods Manifest.lock */ = { 8D532FDF55F208776F1284EF /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputPaths = (
); );
name = "📦 Check Pods Manifest.lock"; name = "[CP] Check Pods Manifest.lock";
outputPaths = ( outputPaths = (
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -697,17 +700,17 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VendooTests/Pods-VendooTests-frameworks.sh\"\n"; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooTests/Pods-Vendoo-VendooTests-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
BCA592620202EE5EBFCD3DCA /* 📦 Check Pods Manifest.lock */ = { BCA592620202EE5EBFCD3DCA /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputPaths = ( inputPaths = (
); );
name = "📦 Check Pods Manifest.lock"; name = "[CP] Check Pods Manifest.lock";
outputPaths = ( outputPaths = (
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -727,7 +730,7 @@
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-VendooUITests/Pods-VendooUITests-resources.sh\"\n"; shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */ = { F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */ = {
@ -758,6 +761,7 @@
3E1AA4351D0DD173005FCCBB /* SettingsViewController.swift in Sources */, 3E1AA4351D0DD173005FCCBB /* SettingsViewController.swift in Sources */,
3E0F76FC1D01B2D7004A0159 /* Listing.swift in Sources */, 3E0F76FC1D01B2D7004A0159 /* Listing.swift in Sources */,
3E6CC3571CF2A94B00E00A70 /* AppDelegate.swift in Sources */, 3E6CC3571CF2A94B00E00A70 /* AppDelegate.swift in Sources */,
B6FD38171D720540008FB41E /* QuerySigner.swift in Sources */,
3EC3251E1CF734C100626C48 /* NetworksTableViewController.swift in Sources */, 3EC3251E1CF734C100626C48 /* NetworksTableViewController.swift in Sources */,
3EC325201CF7C3AB00626C48 /* NetworkTableViewCell.swift in Sources */, 3EC325201CF7C3AB00626C48 /* NetworkTableViewCell.swift in Sources */,
3EC325261CF7E90000626C48 /* FacebookGraphAPIManager.swift in Sources */, 3EC325261CF7E90000626C48 /* FacebookGraphAPIManager.swift in Sources */,
@ -924,9 +928,27 @@
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = (
"${PODS_ROOT}/Firebase/Analytics/Sources",
"$(SDKROOT)/usr/include/libxml2",
"$(PODS_ROOT)/GDataXML-HTML/libxml",
"$(SDKROOT)/usr/include/libxml2",
"\"${PODS_ROOT}/Headers/Public/Firebase\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseAnalytics\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseAuth\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseDatabase\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseInstanceID\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseStorage\"",
"\"${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleParsingUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleUtilities\"",
);
INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "\"Vendoo/**\" \"Pods/**\""; INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "\"Vendoo/**\" \"Pods/**\"";
INFOPLIST_FILE = Vendoo/Info.plist; INFOPLIST_FILE = Vendoo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1010,7 +1032,9 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;
SWIFT_DISABLE_SAFETY_CHECKS = NO;
SWIFT_INCLUDE_PATHS = ""; SWIFT_INCLUDE_PATHS = "";
"SWIFT_INCLUDE_PATHS[arch=*]" = "";
SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h";
USER_HEADER_SEARCH_PATHS = "\"Vendoo/**\" \"Pods/**\""; USER_HEADER_SEARCH_PATHS = "\"Vendoo/**\" \"Pods/**\"";
VALID_ARCHS = "arm64 armv7 armv7s"; VALID_ARCHS = "arm64 armv7 armv7s";
@ -1023,9 +1047,27 @@
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_SYMBOLS_PRIVATE_EXTERN = YES;
HEADER_SEARCH_PATHS = (
"${PODS_ROOT}/Firebase/Analytics/Sources",
"$(SDKROOT)/usr/include/libxml2",
"$(PODS_ROOT)/GDataXML-HTML/libxml",
"$(SDKROOT)/usr/include/libxml2",
"\"${PODS_ROOT}/Headers/Public/Firebase\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseAnalytics\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseAuth\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseDatabase\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseInstanceID\"",
"\"${PODS_ROOT}/Headers/Public/FirebaseStorage\"",
"\"${PODS_ROOT}/Headers/Public/GoogleInterchangeUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleNetworkingUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleParsingUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleSymbolUtilities\"",
"\"${PODS_ROOT}/Headers/Public/GoogleUtilities\"",
);
INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "\"Vendoo/**\" \"Pods/**\""; INCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = "\"Vendoo/**\" \"Pods/**\"";
INFOPLIST_FILE = Vendoo/Info.plist; INFOPLIST_FILE = Vendoo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1109,6 +1151,7 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE = "";
SDKROOT = iphoneos; SDKROOT = iphoneos;
SWIFT_DISABLE_SAFETY_CHECKS = NO;
SWIFT_INCLUDE_PATHS = ""; SWIFT_INCLUDE_PATHS = "";
SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h";
USER_HEADER_SEARCH_PATHS = "\"Vendoo/**\" \"Pods/**\""; USER_HEADER_SEARCH_PATHS = "\"Vendoo/**\" \"Pods/**\"";

19
Vendoo/QuerySigner.swift Normal file
View File

@ -0,0 +1,19 @@
//
// QuerySigner.swift
// Vendoo
//
// Created by cole alban on 8/27/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
import Foundation
/*
This class will be used to sign the HTTP query with a HmacSHA256
string that will then be encoded in base64 for transmission.
This 'signature' is required by the Amazon MWS Api to verify
that requests are not corrupted in transit.
*/
class QuerySigner{
}

View File

@ -10,9 +10,8 @@
#define Vendoo_Bridging_Header_h #define Vendoo_Bridging_Header_h
#import <CommonCrypto/CommonHMAC.h>
//#import "EBayTradingServiceClient.h" //#import "EBayTradingServiceClient.h"
#endif /* Vendoo_Bridging_Header_h */ #endif /* Vendoo_Bridging_Header_h */