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
# 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
# Comment this line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
@ -22,8 +29,8 @@ use_frameworks!
pod 'TYMActivityIndicatorView'
pod 'BSImagePicker', '~> 2.3'
pod 'SWRevealViewController'
# pod 'CommonCrypto'
#'~> 1.1'
target 'VendooTests' do
# inherit! :search_paths
@ -35,5 +42,7 @@ use_frameworks!
# inherit! :search_paths
# Pods for testing
end
end

View File

@ -1,7 +1,7 @@
PODS:
- AeroGearHttp (0.6.0)
- AeroGearOAuth2 (0.5.1):
- AeroGearHttp
- AeroGearHttp (0.7.0)
- AeroGearOAuth2 (0.7.0):
- AeroGearHttp (= 0.7.0)
- AFNetworking (2.6.3):
- AFNetworking/NSURLConnection (= 2.6.3)
- AFNetworking/NSURLSession (= 2.6.3)
@ -37,25 +37,25 @@ PODS:
- BSImagePicker (2.3.0):
- BSGridCollectionViewLayout (~> 1.1)
- UIImageViewModeScaleAspect (~> 1.3)
- FBSDKCoreKit (4.14.0):
- FBSDKCoreKit (4.15.0):
- Bolts (~> 1.7)
- FBSDKLoginKit (4.14.0):
- FBSDKLoginKit (4.15.0):
- FBSDKCoreKit
- FBSDKShareKit (4.14.0):
- FBSDKShareKit (4.15.0):
- FBSDKCoreKit
- Firebase (3.4.0):
- Firebase/Core (= 3.4.0)
- Firebase/Analytics (3.4.0):
- Firebase (3.5.2):
- Firebase/Core (= 3.5.2)
- Firebase/Analytics (3.5.2):
- FirebaseAnalytics (~> 3.3)
- Firebase/Core (3.4.0):
- Firebase/Core (3.5.2):
- Firebase/Analytics
- Firebase/Database (3.4.0):
- Firebase/Database (3.5.2):
- Firebase/Analytics
- FirebaseDatabase (= 3.0.2)
- Firebase/Storage (3.4.0):
- Firebase/Storage (3.5.2):
- Firebase/Analytics
- FirebaseStorage (= 1.0.2)
- FirebaseAnalytics (3.3.0):
- FirebaseStorage (= 1.0.3)
- FirebaseAnalytics (3.3.1):
- FirebaseInstanceID (~> 1.0)
- GoogleInterchangeUtilities (~> 1.2)
- GoogleSymbolUtilities (~> 1.1)
@ -68,8 +68,8 @@ PODS:
- FirebaseDatabase (3.0.2):
- FirebaseAnalytics (~> 3.2)
- FirebaseInstanceID (1.0.8)
- FirebaseStorage (1.0.2):
- FirebaseAnalytics (~> 3.2)
- FirebaseStorage (1.0.3):
- FirebaseAnalytics (~> 3.3)
- GoogleNetworkingUtilities (~> 1.2)
- GDataXML-HTML (1.3.0)
- GoogleInterchangeUtilities (1.2.1):
@ -121,23 +121,23 @@ DEPENDENCIES:
- TYMActivityIndicatorView
SPEC CHECKSUMS:
AeroGearHttp: e958f301cc2d1c7fbfd4b61af187ea3490040a48
AeroGearOAuth2: 6f29d3fac8b78a0ff6d51b04c4ba1a02baed2e52
AeroGearHttp: 4660c8bf5b56cd00a3b75d7c5ecf94774469df5c
AeroGearOAuth2: de4218f60a6228d6cdcf1761277fe8af1115600a
AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60
Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98
Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322
BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3
BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18
FBSDKCoreKit: 6e020b5db0b5bd1e01f5fb0902131befd129a502
FBSDKLoginKit: da563567a108050ef83739c8c8c001ee9e25fa13
FBSDKShareKit: e8e5d4ccef69b41132fe33acda26db1e33143e33
Firebase: 754562547af419cc2f4b15247fee419081924bc2
FirebaseAnalytics: 228be2991cb28efb96cdafc4d62f64680e615c69
FBSDKCoreKit: 6680cbd33a4243d80700f182d0af36b3fa7f3118
FBSDKLoginKit: 96d9b70b5784490f02ab86119e542a1f182017a8
FBSDKShareKit: 06ef20cb2f16828ca4b20055333313dd445de362
Firebase: 94e63112efcad75226c0356a8f3032397b8547c9
FirebaseAnalytics: d968d4d5f6aeb795cd64144337bcd233e530efc6
FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c
FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7
FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a
FirebaseStorage: fa2a87dee81f682f553af6839daa37a750e65f6a
FirebaseStorage: 3992817bf405f5c1a4f8349678d22724cd0ef509
GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898
GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de
GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f
@ -152,6 +152,6 @@ SPEC CHECKSUMS:
TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b
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
// use default documents directory
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 {
// check that the directory exists
let path = destinationDirectory?.stringByAppendingPathComponent(filename!)
@ -577,7 +583,8 @@ public class Http {
}
// 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")) {
return NSURL(string: url)!
}

View File

@ -65,7 +65,13 @@ public class HttpRequestSerializer: RequestSerializer {
var newUrl:String
if (request.URL?.absoluteString != nil && parameters != nil) {
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)!
}

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)
> 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.
Taking care of:
@ -11,7 +11,7 @@ Taking care of:
* Pluggable object serialization
* background processing support
100% Swift 2.0.
100% Swift 2.X.
| | 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:
### 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'

View File

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

View File

@ -25,7 +25,7 @@ public class Config {
Applies the baseURL to the configuration.
*/
public let baseURL: String
/**
Applies the "callback URL" once request token issued.
*/
@ -35,7 +35,7 @@ public class Config {
Applies the "authorization endpoint" to the request token.
*/
public var authzEndpoint: String
/**
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.
*/
public let revokeTokenEndpoint: String?
/**
Endpoint for request a refreshToken.
*/
public let refreshTokenEndpoint: String?
/**
Endpoint for OpenID Connect to get user information.
*/
public let userInfoEndpoint: String?
/**
Boolean to indicate whether OpenID Connect on authorization code grant flow is used.
*/
public var isOpenIDConnect: Bool
/**
Applies the various scopes of the authorization.
*/
public var scopes: [String]
var scope: String {
get {
// Create a string to concatenate all scopes existing in the _scopes array.
@ -80,30 +80,38 @@ public class Config {
return scopeString
}
}
/**
Applies the "client id" obtained with the client registration process.
*/
public let clientId: String
/**
Applies the "client secret" obtained with the client registration process.
*/
public let clientSecret: String?
/**
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.
*/
public var accountId: String?
/**
Boolean to indicate to either used a webview (if true) or an external browser (by default, false)
for authorization code grant flow.
*/
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.authzEndpoint = authzEndpoint
self.redirectURL = redirectURL
@ -118,4 +126,4 @@ public class Config {
self.accountId = accountId
self.isWebView = isWebView
}
}
}

View File

@ -20,17 +20,16 @@ import Foundation
/**
Handy extensions to NSDate
*/
extension NSDate
{
extension NSDate {
/**
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'.
:returns: the NSDate object.
*/
public convenience init(dateString:String) {
public convenience init(dateString: String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
let d = dateStringFormatter.dateFromString(dateString)
@ -40,11 +39,11 @@ extension NSDate
self.init()
}
}
/**
Returns a string of the date object using the format 'yyyy-MM-dd hh:mm:ss a'.
:returns: a formatted string object.
*/
public func toString() -> String {
@ -52,4 +51,4 @@ extension NSDate
dateStringFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss a"
return dateStringFormatter.stringFromDate(self)
}
}
}

View File

@ -22,35 +22,35 @@ import AeroGearHttp
An OAuth2Module subclass specific to 'Facebook' authorization
*/
public class FacebookOAuth2Module: OAuth2Module {
public required init(config: Config, session: OAuth2Session?, requestSerializer: RequestSerializer, responseSerializer: ResponseSerializer) {
super.init(config: config, session: session, requestSerializer: JsonRequestSerializer(), responseSerializer: StringResponseSerializer())
}
/**
Exchange an authorization code 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.
*/
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"]
if let unwrapped = config.clientSecret {
paramDict["client_secret"] = unwrapped
}
http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) {
completionHandler(nil, error)
return
}
if let unwrappedResponse = response as? String {
var accessToken: String? = nil
var expiredIn: String? = nil
let charSet: NSMutableCharacterSet = NSMutableCharacterSet()
charSet.addCharactersInString("&=")
let array = unwrappedResponse.componentsSeparatedByCharactersInSet(charSet)
@ -69,38 +69,38 @@ public class FacebookOAuth2Module: OAuth2Module {
}
})
}
/**
Request to revoke access.
:param: completionHandler A block object to be executed when the request operation finishes.
*/
override public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized
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
if (error != nil) {
completionHandler(nil, error)
return
}
self.oauth2Session.clearTokens()
completionHandler(response!, nil)
})
}
/**
Gateway to request authorization access
:param: completionHandler A block object to be executed when the request operation finishes.
*/
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) {
completionHandler(nil, nil, error)
return
@ -110,7 +110,7 @@ public class FacebookOAuth2Module: OAuth2Module {
paramDict = ["access_token": response! as! String]
}
if let userInfoEndpoint = self.config.userInfoEndpoint {
self.http.request(.GET, path: userInfoEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in
if (error != nil) {
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
*/
public class KeycloakOAuth2Module: OAuth2Module {
public override func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized
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
if (error != nil) {
completionHandler(nil, error)
return
}
self.oauth2Session.clearTokens()
completionHandler(response, nil)
})
}
/**
Gateway to login with OpenIDConnect
:param: completionHandler A block object to be executed when the request operation finishes.
*/
public override func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) {
var openIDClaims: OpenIDClaim?
self.requestAccess { (response: AnyObject?, error: NSError?) -> Void in
if (error != nil) {
completionHandler(nil, nil, error)
@ -62,10 +62,10 @@ public class KeycloakOAuth2Module: OAuth2Module {
completionHandler(accessToken, openIDClaims, nil)
}
}
/**
Request to refresh an access token.
:param: completionHandler A block object to be executed when the request operation finishes.
*/
public override func refreshAccessToken(completionHandler: (AnyObject?, NSError?) -> Void) {
@ -74,13 +74,13 @@ public class KeycloakOAuth2Module: OAuth2Module {
if (config.clientSecret != nil) {
paramDict["client_secret"] = config.clientSecret!
}
http.request(.POST, path: config.refreshTokenEndpoint!, parameters: paramDict, completionHandler: { (response, error) in
if (error != nil) {
completionHandler(nil, error)
return
}
if let unwrappedResponse = response as? [String: AnyObject] {
let accessToken: String = unwrappedResponse["access_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 expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber
let expRefresh = expirationRefresh?.stringValue
// in Keycloak refresh token get refreshed every time you use them
self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh)
completionHandler(accessToken, nil);
completionHandler(accessToken, nil)
}
})
}
}
func decode(token: String) -> [String: AnyObject]? {
let string = token.componentsSeparatedByString(".")
let toDecode = string[1] as String
var stringtoDecode: String = toDecode.stringByReplacingOccurrencesOfString("-", withString: "+") // 62nd char of encoding
stringtoDecode = stringtoDecode.stringByReplacingOccurrencesOfString("_", withString: "/") // 63rd char of encoding
switch (stringtoDecode.utf16.count % 4) {
@ -113,7 +113,7 @@ public class KeycloakOAuth2Module: OAuth2Module {
}
let dataToDecode = NSData(base64EncodedString: stringtoDecode, options: [])
let base64DecodedString = NSString(data: dataToDecode!, encoding: NSUTF8StringEncoding)
var values: [String: AnyObject]?
if let string = base64DecodedString {
if let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) {
@ -122,5 +122,5 @@ public class KeycloakOAuth2Module: OAuth2Module {
}
return values
}
}
}

View File

@ -50,7 +50,8 @@ public class OAuth2Module: AuthzModule {
var applicationLaunchNotificationObserver: NSObjectProtocol?
var applicationDidBecomeActiveNotificationObserver: NSObjectProtocol?
var state: AuthorizationState
var webView: OAuth2WebViewController?
public var webView: OAuth2WebViewController?
/**
Initialize an OAuth2 module.
@ -107,7 +108,7 @@ public class OAuth2Module: AuthzModule {
// unregister
self.stopObserving()
// ..and update state
self.state = .AuthorizationStateUnknown;
self.state = .AuthorizationStateUnknown
}
})
@ -121,11 +122,17 @@ public class OAuth2Module: AuthzModule {
completionHandler(nil, error)
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 self.webView != nil {
self.webView!.targetURL = url
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(self.webView!, animated: true, completion: nil)
config.webViewHandler(self.webView!, completionHandler: completionHandler)
} else {
UIApplication.sharedApplication().openURL(url)
}
@ -154,8 +161,12 @@ public class OAuth2Module: AuthzModule {
let accessToken: String = unwrappedResponse["access_token"] as! String
let expiration = unwrappedResponse["expires_in"] as! NSNumber
let exp: String = expiration.stringValue
self.oauth2Session.saveAccessToken(accessToken, refreshToken: unwrappedRefreshToken, accessTokenExpiration: exp, refreshTokenExpiration: nil)
var refreshToken = unwrappedRefreshToken
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);
}
@ -171,17 +182,17 @@ public class OAuth2Module: AuthzModule {
*/
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"]
if let unwrapped = config.clientSecret {
paramDict["client_secret"] = unwrapped
}
http.request(.POST, path: config.accessTokenEndpoint, parameters: paramDict, completionHandler: {(responseObject, error) in
if (error != nil) {
completionHandler(nil, error)
return
}
if let unwrappedResponse = responseObject as? [String: AnyObject] {
let accessToken: String = unwrappedResponse["access_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
let expirationRefresh = unwrappedResponse["refresh_expires_in"] as? NSNumber
let expRefresh = expirationRefresh?.stringValue
self.oauth2Session.saveAccessToken(accessToken, refreshToken: refreshToken, accessTokenExpiration: exp, refreshTokenExpiration: expRefresh)
completionHandler(accessToken, nil)
}
@ -205,7 +216,7 @@ public class OAuth2Module: AuthzModule {
public func requestAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
if (self.oauth2Session.accessToken != nil && self.oauth2Session.tokenIsNotExpired()) {
// 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()) {
// need to refresh token
self.refreshAccessToken(completionHandler)
@ -214,16 +225,16 @@ public class OAuth2Module: AuthzModule {
self.requestAuthorizationCode(completionHandler)
}
}
/**
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.
*/
public func login(completionHandler: (AnyObject?, OpenIDClaim?, NSError?) -> Void) {
self.requestAccess { (response:AnyObject?, error:NSError?) -> Void in
if (error != nil) {
completionHandler(nil, nil, error)
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"]))
return
}
}
}
/**
Request to revoke access.
@ -262,9 +273,9 @@ public class OAuth2Module: AuthzModule {
public func revokeAccess(completionHandler: (AnyObject?, NSError?) -> Void) {
// return if not yet initialized
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
if (error != nil) {
@ -324,11 +335,11 @@ public class OAuth2Module: AuthzModule {
var parameters = [String: String]()
if (queryString != nil) {
let parameterScanner: NSScanner = NSScanner(string: queryString!)
var name:NSString? = nil
var value:NSString? = nil
var name: NSString? = nil
var value: NSString? = nil
while (parameterScanner.atEnd != true) {
name = nil;
name = nil
parameterScanner.scanUpToString("=", intoString: &name)
parameterScanner.scanString("=", intoString:nil)
@ -342,7 +353,7 @@ public class OAuth2Module: AuthzModule {
}
}
return parameters;
return parameters
}
deinit {
@ -353,7 +364,7 @@ public class OAuth2Module: AuthzModule {
// clear all observers
if (applicationLaunchNotificationObserver != nil) {
NSNotificationCenter.defaultCenter().removeObserver(applicationLaunchNotificationObserver!)
self.applicationLaunchNotificationObserver = nil;
self.applicationLaunchNotificationObserver = 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
*/
public protocol OAuth2Session {
/**
The account id.
*/
var accountId: String {get}
/**
The access token which expires.
*/
var accessToken: String? {get set}
/**
The access token's expiration date.
*/
var accessTokenExpirationDate: NSDate? {get set}
/**
The refresh token's expiration date.
*/
var refreshTokenExpirationDate: NSDate? {get set}
/**
The refresh tokens. This toke does not expire and should be used to renew access token when expired.
*/
var refreshToken: String? {get set}
/**
Check validity of accessToken. return true if still valid, false when expired.
*/
func tokenIsNotExpired() -> Bool
/**
Check validity of refreshToken. return true if still valid, false when expired.
*/
func refreshTokenIsNotExpired() -> Bool
/**
Clears any tokens storage
*/
func clearTokens()
/**
Save tokens information. Saving tokens allow you to refresh accesstoken transparently for the user without prompting
for grant access.
:param: accessToken the access token.
:param: refreshToken the refresh token.
:param: accessTokenExpiration the expiration for the access token.

View File

@ -19,33 +19,33 @@ import Foundation
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.
*/
class OAuth2WebViewController: UIViewController, UIWebViewDelegate {
public class OAuth2WebViewController: UIViewController, UIWebViewDelegate {
/// Login URL for OAuth.
var targetURL : NSURL = NSURL()
var targetURL: NSURL = NSURL()
/// WebView intance used to load login page.
var webView : UIWebView = UIWebView()
/// Overrride of viewDidLoad to load the login page.
override internal func viewDidLoad() {
var webView: UIWebView = UIWebView()
/// Override of viewDidLoad to load the login page.
override public func viewDidLoad() {
super.viewDidLoad()
webView.frame = UIScreen.mainScreen().applicationFrame
webView.delegate = self
self.view.addSubview(webView)
loadAddressURL()
}
override func viewDidLayoutSubviews() {
override public func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.webView.frame = self.view.bounds
}
override internal func didReceiveMemoryWarning() {
override public func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func loadAddressURL() {
let req = NSURLRequest(URL: targetURL)
webView.loadRequest(req)

View File

@ -70,9 +70,9 @@ public class OpenIDClaim: CustomStringConvertible {
"nickname: \(nickname)\npreferredUsername: \(preferredUsername)\nprofile: \(profile)\npicture: \(picture)\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.
public init(fromDict:[String: AnyObject]) {
public init(fromDict: [String: AnyObject]) {
sub = fromDict["sub"] as? String
name = fromDict["name"] as? String
givenName = fromDict["given_name"] as? String
@ -97,13 +97,11 @@ public class OpenIDClaim: CustomStringConvertible {
}
/// Facebook specific claims.
public class FacebookOpenIDClaim: OpenIDClaim {
override init(fromDict:[String: AnyObject]) {
override init(fromDict: [String: AnyObject]) {
super.init(fromDict: fromDict)
givenName = fromDict["first_name"] as? String
familyName = fromDict["last_name"] 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.
*/
public class KeychainWrap {
/**
The service id. By default set to apple bundle id.
*/
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.
*/
public var groupId: String?
/**
Initialize KeychainWrapper setting default values.
:param: serviceId unique service, defulated to bundleId
:param: groupId used for SSO between app issued from same developer certificate.
*/
@ -63,10 +63,10 @@ public class KeychainWrap {
}
self.groupId = groupId
}
/**
Save tokens information in Keychain.
:param: key usually use accountId for oauth2 module, any unique string.
:param: tokenType type of token: access, refresh.
:param: value string value of the token.
@ -76,7 +76,7 @@ public class KeychainWrap {
if (dataFromString == nil) {
return false
}
// Instantiate a new default keychain query
let keychainQuery = NSMutableDictionary()
if let groupId = self.groupId {
@ -85,17 +85,17 @@ public class KeychainWrap {
keychainQuery[kSecClass as String] = kSecClassGenericPassword
keychainQuery[kSecAttrService as String] = self.serviceIdentifier
keychainQuery[kSecAttrAccount as String] = key + "_" + tokenType.rawValue
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
// Search for the keychain items
let statusSearch: OSStatus = SecItemCopyMatching(keychainQuery, nil)
// if found update
if (statusSearch == errSecSuccess) {
if (dataFromString != nil) {
let attributesToUpdate = NSMutableDictionary()
attributesToUpdate[kSecValueData as String] = dataFromString!
let statusUpdate: OSStatus = SecItemUpdate(keychainQuery, attributesToUpdate)
if (statusUpdate != errSecSuccess) {
print("tokens not updated")
@ -114,13 +114,34 @@ public class KeychainWrap {
} else { // error case
return false
}
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.
:param: userAccount key of the keychain entry, usually accountId for oauth2 module.
:param: tokenType type of token: access, refresh.
*/
@ -133,9 +154,8 @@ public class KeychainWrap {
keychainQuery[kSecAttrService as String] = self.serviceIdentifier
keychainQuery[kSecAttrAccount as String] = userAccount + "_" + tokenType.rawValue
keychainQuery[kSecReturnData as String] = true
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
keychainQuery[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
var dataTypeRef: Unmanaged<AnyObject>?
// Search for the keychain items
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) ")
return nil
}
let opaque = dataTypeRef?.toOpaque()
var contentsOfKeychain: String?
if let op = opaque {
let retrievedData = Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue()
// Convert the data retrieved from the keychain into a string
contentsOfKeychain = NSString(data: retrievedData, encoding: NSUTF8StringEncoding) as? String
} else {
print("Nothing was retrieved from the keychain. Status code \(status)")
}
return contentsOfKeychain
}
/**
Clear all keychain entries. Note that Keychain can only be cleared progemmatically.
*/
@ -172,11 +192,11 @@ public class KeychainWrap {
self.deleteAllKeysForSecClass(kSecClassKey) &&
self.deleteAllKeysForSecClass(kSecClassIdentity)
}
func deleteAllKeysForSecClass(secClass: CFTypeRef) -> Bool {
let keychainQuery = NSMutableDictionary()
keychainQuery[kSecClass as String] = secClass
let result:OSStatus = SecItemDelete(keychainQuery)
let result: OSStatus = SecItemDelete(keychainQuery)
if (result == errSecSuccess) {
return true
} else {
@ -189,19 +209,19 @@ public class KeychainWrap {
An OAuth2Session implementation to store OAuth2 metadata using the Keychain.
*/
public class TrustedPersistantOAuth2Session: OAuth2Session {
/**
The account id.
*/
public var accountId: String
/**
The access token's expiration date.
*/
public var accessTokenExpirationDate: NSDate? {
get {
let dateAsString = self.keychain.read(self.accountId, tokenType: .ExpirationDate)
if let unwrappedDate:String = dateAsString {
if let unwrappedDate: String = dateAsString {
return NSDate(dateString: unwrappedDate)
} else {
return nil
@ -210,10 +230,12 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) {
if let unwrappedValue = value {
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.
*/
@ -224,10 +246,12 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) {
if let unwrappedValue = value {
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.
*/
@ -238,17 +262,19 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) {
if let unwrappedValue = value {
self.keychain.save(self.accountId, tokenType: .RefreshToken, value: unwrappedValue)
} else {
self.keychain.delete(self.accountId, tokenType: .RefreshToken)
}
}
}
/**
The refresh token's expiration date.
*/
public var refreshTokenExpirationDate: NSDate? {
get {
let dateAsString = self.keychain.read(self.accountId, tokenType: .RefreshExpirationDate)
if let unwrappedDate:String = dateAsString {
if let unwrappedDate: String = dateAsString {
return NSDate(dateString: unwrappedDate)
} else {
return nil
@ -257,33 +283,35 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
set(value) {
if let unwrappedValue = value {
_ = self.keychain.save(self.accountId, tokenType: .RefreshExpirationDate, value: unwrappedValue.toString())
} else {
self.keychain.delete(self.accountId, tokenType: .RefreshExpirationDate)
}
}
}
private let keychain: KeychainWrap
/**
Check validity of accessToken. return true if still valid, false when expired.
*/
public func tokenIsNotExpired() -> Bool {
return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
}
/**
Check validity of refreshToken. return true if still valid, false when expired.
*/
public func refreshTokenIsNotExpired() -> Bool {
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.
*/
public func saveAccessToken(accessToken: String?, refreshToken: String?, accessTokenExpiration: String?, refreshTokenExpiration: String?) {
self.accessToken = accessToken
self.refreshToken = refreshToken
let now = NSDate()
if let inter = accessTokenExpiration?.doubleValue {
self.accessTokenExpirationDate = now.dateByAddingTimeInterval(inter)
@ -292,7 +320,7 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(inter)
}
}
/**
Clear all tokens. Method used when doing logout or revoke.
*/
@ -302,10 +330,10 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
self.accessTokenExpirationDate = nil
self.refreshTokenExpirationDate = nil
}
/**
Initialize TrustedPersistantOAuth2Session using account id. Account id is the service id used for keychain storage.
:param: accountId uniqueId to identify the oauth2module
:param: groupId used for SSO between app issued from same developer certificate.
:param: accessToken optional parameter to initilaize the storage with initial values
@ -319,15 +347,27 @@ public class TrustedPersistantOAuth2Session: OAuth2Session {
accessTokenExpirationDate: NSDate? = nil,
refreshToken: String? = nil,
refreshTokenExpirationDate: NSDate? = nil) {
self.accountId = accountId
if groupId != nil {
self.keychain = KeychainWrap(serviceId: groupId, groupId: groupId)
} else {
self.keychain = KeychainWrap()
}
self.accessToken = accessToken
self.refreshToken = refreshToken
self.accessTokenExpirationDate = accessTokenExpirationDate
self.refreshTokenExpirationDate = refreshTokenExpirationDate
self.accountId = accountId
if groupId != nil {
self.keychain = KeychainWrap(serviceId: groupId, groupId: groupId)
} else {
self.keychain = KeychainWrap()
}
if accessToken != nil {
self.accessToken = accessToken
}
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
*/
public class UntrustedMemoryOAuth2Session: OAuth2Session {
/**
The account id.
*/
public var accountId: String
/**
The access token which expires.
*/
public var accessToken: String?
/**
The access token's expiration date.
*/
public var accessTokenExpirationDate: NSDate?
/**
The refresh tokens. This toke does not expire and should be used to renew access token when expired.
*/
public var refreshToken: String?
/**
The refresh token's expiration date.
*/
@ -58,14 +58,14 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
public func tokenIsNotExpired() -> Bool {
return self.accessTokenExpirationDate != nil ? (self.accessTokenExpirationDate!.timeIntervalSinceDate(NSDate()) > 0) : true
}
/**
Check validity of refreshToken. return true if still valid, false when expired.
*/
public func refreshTokenIsNotExpired() -> Bool {
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.
*/
@ -80,7 +80,7 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
self.refreshTokenExpirationDate = now.dateByAddingTimeInterval(interRefresh)
}
}
/**
Clear all tokens. Method used when doing logout or revoke.
*/
@ -90,10 +90,10 @@ public class UntrustedMemoryOAuth2Session: OAuth2Session {
self.accessTokenExpirationDate = nil
self.refreshTokenExpirationDate = nil
}
/**
Initialize session using account id.
Initialize session using account id.
:param: accountId uniqueId to identify the oauth2module.
:param: accessToken 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)
> 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).
Taking care of:
@ -11,7 +11,7 @@ Taking care of:
* (implicit or explicit) refresh tokens,
* revoke tokens,
* 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
100% Swift 2.0.
@ -29,12 +29,12 @@ Taking care of:
#### OAuth2 grant for GET with a predefined config like Facebook
```swift
var Http = Http() // [1]
let http = Http() // [1]
let facebookConfig = FacebookConfig( // [2]
clientId: "YYY",
clientSecret: "XXX",
scopes:["photo_upload, publish_actions"])
var oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3]
let oauth2Module = AccountManager.addFacebookAccount(facebookConfig) // [3]
http.authzModule = oauth2Module // [4]
http.request(.GET, path: "/get", completionHandler: {(response, error) in // [5]
// handle response
@ -52,13 +52,13 @@ See full description in [aerogear.org](https://aerogear.org/docs/guides/aerogear
#### OpenID Connect with Keycloak
```swift
var Http = Http()
let http = Http()
let keycloakConfig = KeycloakConfig(
clientId: "sharedshoot-third-party",
host: "http://localhost:8080",
realm: "shoot-realm",
isOpenIDConnect: true)
var oauth2Module = AccountManager.addKeycloakAccount(keycloakConfig)
let oauth2Module = AccountManager.addKeycloakAccount(keycloakConfig)
http.authzModule = oauth2Module
oauth2Module.login {(accessToken: AnyObject?, claims: OpenIDClaim?, error: NSError?) in // [1]
// 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?
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;
FBSDKBridgeAPICallbackBlock _pendingRequestCompletionBlock;
id<FBSDKURLOpening> _pendingURLOpen;
FBSDKDeferredAppInviteHandler _organicDeeplinkHandler;
#endif
BOOL _expectingBackground;
UIViewController *_safariViewController;
@ -153,10 +152,12 @@ static NSString *const FBSDKAppLinkInboundEvent = @"fb_al_inbound";
queryParameters:sanitizedParams
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(), ^{
// Callback handler for organic deeplinking.
_organicDeeplinkHandler(sanitizedUrl);
_organicDeeplinkHandler = nil;
appInviteHandler(sanitizedUrl);
});
return YES;

View File

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

View File

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

View File

@ -51,13 +51,6 @@ SFSafariViewControllerDelegate
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(), ^{
[FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = handler;
[self presentSafariViewController];
@ -69,7 +62,6 @@ SFSafariViewControllerDelegate
[self cleanUpSafariViewController];
[FBSDKApplicationDelegate sharedInstance].organicDeeplinkHandler = nil;
_handler(nil);
}
});
});
@ -79,29 +71,27 @@ SFSafariViewControllerDelegate
- (void)presentSafariViewController
{
Class SFSafariViewControllerClass = fbsdkdfl_SFSafariViewControllerClass();
_safariViewController = [[SFSafariViewControllerClass alloc] initWithURL: [self constructDeeplinkRetrievalUrl]];
_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 didMoveToParentViewController:_safariWindow.rootViewController];
_safariViewController.view.frame = CGRectZero;
return;
_safariWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
_safariWindow.windowLevel -= 1000;
_safariWindow.rootViewController = _safariViewController;
_safariWindow.hidden = NO;
[_safariWindow makeKeyAndVisible];
}
- (void)cleanUpSafariViewController
{
if(_safariViewController)
if (_safariViewController)
{
[_safariViewController performSelector:@selector(setDelegate:) withObject:nil];
[_safariViewController willMoveToParentViewController:nil];
[_safariViewController.view removeFromSuperview];
[_safariViewController removeFromParentViewController];
_safariViewController = nil;
_safariWindow.rootViewController = nil;
_safariWindow = nil;
}
return;
}
- (NSURL*)constructDeeplinkRetrievalUrl

View File

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

View File

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

View File

@ -741,7 +741,7 @@ static NSString *const FBSDKExpectedChallengeKey = @"expected_login_challenge";
[FBSDKInternalUtility bundleForStrings],
@"Log In",
@"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) {
handler(YES, nil);

View File

@ -23,79 +23,63 @@
@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
/*!
@abstract Convenience method to build up an app group dialog with content and a delegate.
@param content The content for the app group.
@param delegate The receiver's delegate.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
+ (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.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)canShow;
- (BOOL)canShow __attribute__ ((deprecated));
/*!
@abstract Begins the app group dialog from the receiver.
@result YES if the receiver was able to show the dialog, otherwise NO.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)show;
- (BOOL)show __attribute__ ((deprecated));
/*!
@abstract Validates the content on the receiver.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef;
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated));
@end
/*!
@abstract A delegate for FBSDKAppGroupAddDialog.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
__attribute__ ((deprecated))
@protocol FBSDKAppGroupAddDialogDelegate <NSObject>
/*!
@abstract Sent to the delegate when the app group request completes without error.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
@param results The results from the dialog. This may be nil or empty.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (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.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
@param error The error.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (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.
@param appGroupAddDialog The FBSDKAppGroupAddDialog that completed.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (void)appGroupAddDialogDidCancel:(FBSDKAppGroupAddDialog *)appGroupAddDialog;
- (void)appGroupAddDialogDidCancel:(FBSDKAppGroupAddDialog *)appGroupAddDialog __attribute__ ((deprecated));
@end

View File

@ -21,79 +21,61 @@
@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
/*!
@abstract Convenience method to build up an app group dialog with content and a delegate.
@param groupID The ID for the group.
@param delegate The receiver's delegate.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
+ (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.
*/
@property (nonatomic, weak) id<FBSDKAppGroupJoinDialogDelegate> 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));
/*!
@abstract The ID for group.
*/
@property (nonatomic, copy) NSString *groupID;
@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));
/*!
@abstract A Boolean value that indicates whether the receiver can initiate an app group dialog.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)canShow;
- (BOOL)canShow __attribute__ ((deprecated));
/*!
@abstract Begins the app group dialog from the receiver.
@result YES if the receiver was able to show the dialog, otherwise NO.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)show;
- (BOOL)show __attribute__ ((deprecated));
/*!
@abstract Validates the content on the receiver.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef;
- (BOOL)validateWithError:(NSError *__autoreleasing *)errorRef __attribute__ ((deprecated));
@end
/*!
@abstract A delegate for FBSDKAppGroupJoinDialog.
@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.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
__attribute__ ((deprecated))
@protocol FBSDKAppGroupJoinDialogDelegate <NSObject>
/*!
@abstract Sent to the delegate when the app group request completes without error.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
@param results The results from the dialog. This may be nil or empty.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (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.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
@param error The error.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (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.
@param appGroupJoinDialog The FBSDKAppGroupJoinDialog that completed.
@deprecated App and game groups are being deprecated. See https://developers.facebook.com/docs/games/services/game-groups for more information.
*/
- (void)appGroupJoinDialogDidCancel:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog;
- (void)appGroupJoinDialogDidCancel:(FBSDKAppGroupJoinDialog *)appGroupJoinDialog __attribute__ ((deprecated));
@end

View File

@ -368,6 +368,7 @@ static NSMutableArray *g_pendingFBSDKShareAPI;
if ([errors count]) {
[_delegate sharer:self didFailWithError:errors[0]];
} 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
NSMutableDictionary *shareResults = [[NSMutableDictionary alloc] init];
[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]];
[FBSDKInternalUtility dictionary:shareResults setObject:[FBSDKTypeUtility stringValue:firstResult[@"post_id"]]
forKey:FBSDK_SHARE_RESULT_POST_ID_KEY];
[FBSDKInternalUtility dictionary:shareResults setObject:individualPhotoIDs forKey:FBSDK_SHARE_RESULT_PHOTO_IDS_KEY];
[_delegate sharer:self didCompleteWithResults:shareResults];
}
};

View File

@ -188,6 +188,14 @@ FBSDK_STATIC_INLINE void FBSDKShareDialogValidateShareExtensionSchemeRegisteredF
NSInteger errorCode = [results[@"error_code"] integerValue];
if (errorCode == 4201) {
[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 {
// not all web dialogs report cancellation, so assume that the share has completed with no additional information
[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_POST @"post"
#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_VIDEO_END_OFFSET @"end_offset"
#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.contentURL forKey:@"link"];
[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.imageURL forKey:@"picture"];
[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
* 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:
- AeroGearHttp (0.6.0)
- AeroGearOAuth2 (0.5.1):
- AeroGearHttp
- AeroGearHttp (0.7.0)
- AeroGearOAuth2 (0.7.0):
- AeroGearHttp (= 0.7.0)
- AFNetworking (2.6.3):
- AFNetworking/NSURLConnection (= 2.6.3)
- AFNetworking/NSURLSession (= 2.6.3)
@ -37,25 +37,25 @@ PODS:
- BSImagePicker (2.3.0):
- BSGridCollectionViewLayout (~> 1.1)
- UIImageViewModeScaleAspect (~> 1.3)
- FBSDKCoreKit (4.14.0):
- FBSDKCoreKit (4.15.0):
- Bolts (~> 1.7)
- FBSDKLoginKit (4.14.0):
- FBSDKLoginKit (4.15.0):
- FBSDKCoreKit
- FBSDKShareKit (4.14.0):
- FBSDKShareKit (4.15.0):
- FBSDKCoreKit
- Firebase (3.4.0):
- Firebase/Core (= 3.4.0)
- Firebase/Analytics (3.4.0):
- Firebase (3.5.2):
- Firebase/Core (= 3.5.2)
- Firebase/Analytics (3.5.2):
- FirebaseAnalytics (~> 3.3)
- Firebase/Core (3.4.0):
- Firebase/Core (3.5.2):
- Firebase/Analytics
- Firebase/Database (3.4.0):
- Firebase/Database (3.5.2):
- Firebase/Analytics
- FirebaseDatabase (= 3.0.2)
- Firebase/Storage (3.4.0):
- Firebase/Storage (3.5.2):
- Firebase/Analytics
- FirebaseStorage (= 1.0.2)
- FirebaseAnalytics (3.3.0):
- FirebaseStorage (= 1.0.3)
- FirebaseAnalytics (3.3.1):
- FirebaseInstanceID (~> 1.0)
- GoogleInterchangeUtilities (~> 1.2)
- GoogleSymbolUtilities (~> 1.1)
@ -68,8 +68,8 @@ PODS:
- FirebaseDatabase (3.0.2):
- FirebaseAnalytics (~> 3.2)
- FirebaseInstanceID (1.0.8)
- FirebaseStorage (1.0.2):
- FirebaseAnalytics (~> 3.2)
- FirebaseStorage (1.0.3):
- FirebaseAnalytics (~> 3.3)
- GoogleNetworkingUtilities (~> 1.2)
- GDataXML-HTML (1.3.0)
- GoogleInterchangeUtilities (1.2.1):
@ -121,23 +121,23 @@ DEPENDENCIES:
- TYMActivityIndicatorView
SPEC CHECKSUMS:
AeroGearHttp: e958f301cc2d1c7fbfd4b61af187ea3490040a48
AeroGearOAuth2: 6f29d3fac8b78a0ff6d51b04c4ba1a02baed2e52
AeroGearHttp: 4660c8bf5b56cd00a3b75d7c5ecf94774469df5c
AeroGearOAuth2: de4218f60a6228d6cdcf1761277fe8af1115600a
AFNetworking: cb8d14a848e831097108418f5d49217339d4eb60
Alamofire: 01a82e2f6c0f860ade35534c8dd88be61bdef40c
Alamofire-SwiftyJSON: 5812bb37accc36897cc2f2dabb070d8ebcd7ac98
Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322
BSGridCollectionViewLayout: d7304dcb35c6b3b4420c527e9f9b77ff322250f3
BSImagePicker: 591b28ce4994c44cbc4ac896717c1db9f9fadd18
FBSDKCoreKit: 6e020b5db0b5bd1e01f5fb0902131befd129a502
FBSDKLoginKit: da563567a108050ef83739c8c8c001ee9e25fa13
FBSDKShareKit: e8e5d4ccef69b41132fe33acda26db1e33143e33
Firebase: 754562547af419cc2f4b15247fee419081924bc2
FirebaseAnalytics: 228be2991cb28efb96cdafc4d62f64680e615c69
FBSDKCoreKit: 6680cbd33a4243d80700f182d0af36b3fa7f3118
FBSDKLoginKit: 96d9b70b5784490f02ab86119e542a1f182017a8
FBSDKShareKit: 06ef20cb2f16828ca4b20055333313dd445de362
Firebase: 94e63112efcad75226c0356a8f3032397b8547c9
FirebaseAnalytics: d968d4d5f6aeb795cd64144337bcd233e530efc6
FirebaseAuth: 26fd291c3b552fc9658420b867520d5ae080421c
FirebaseDatabase: 59bea2e7dfd81b3b8b2f8e396caf1a52c2ced6f7
FirebaseInstanceID: ba1e640935235e5fac39dfa816fe7660e72e1a8a
FirebaseStorage: fa2a87dee81f682f553af6839daa37a750e65f6a
FirebaseStorage: 3992817bf405f5c1a4f8349678d22724cd0ef509
GDataXML-HTML: 7adc03668cab35c288f1dbb8929a179f0fece898
GoogleInterchangeUtilities: def8415a862effc67d549d5b5b0b9c7a2f97d4de
GoogleNetworkingUtilities: 3e83269048cfb498dc7ec83ab36813360965c74f
@ -152,6 +152,6 @@ SPEC CHECKSUMS:
TYMActivityIndicatorView: ad816387ebd5952c376af129218722733044148b
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>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.6.0</string>
<string>0.7.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2016 Google Inc.</string>
<string>Copyright 2016 Google</string>
<key>Title</key>
<string>FirebaseStorage</string>
<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}
;;
*.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}"
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}" ${TARGET_DEVICE_ARGS}
;;
*.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
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
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'

View File

@ -1,5 +1,5 @@
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
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'

View File

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

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2016 Google Inc.</string>
<string>Copyright 2016 Google</string>
<key>Title</key>
<string>FirebaseStorage</string>
<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}
;;
*.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}"
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}" ${TARGET_DEVICE_ARGS}
;;
*.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
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
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'

View File

@ -1,5 +1,5 @@
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
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'

View File

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

View File

@ -721,7 +721,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
</dict>
<dict>
<key>FooterText</key>
<string>Copyright 2016 Google Inc.</string>
<string>Copyright 2016 Google</string>
<key>Title</key>
<string>FirebaseStorage</string>
<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}
;;
*.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}"
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}" ${TARGET_DEVICE_ARGS}
;;
*.framework)
echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"

View File

@ -1,5 +1,5 @@
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
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'

View File

@ -1,5 +1,5 @@
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
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'

View File

@ -45,6 +45,7 @@
A87525ED0EE7D42D9A7708D8 /* Pods_Vendoo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23ECC3C8465826BD6AC74A02 /* Pods_Vendoo.framework */; };
B6FD38131D70EB27008FB41E /* AmazonWebServiceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.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 */
/* 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>"; };
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>"; };
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; };
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>"; };
@ -342,6 +344,7 @@
children = (
B6FD38121D70EB27008FB41E /* AmazonWebServiceManager.swift */,
B6FD38141D71CF3E008FB41E /* FeedType.swift */,
B6FD38161D720540008FB41E /* QuerySigner.swift */,
);
name = AmazonServices;
sourceTree = "<group>";
@ -366,7 +369,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 3E6CC37D1CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "Vendoo" */;
buildPhases = (
8D532FDF55F208776F1284EF /* 📦 Check Pods Manifest.lock */,
8D532FDF55F208776F1284EF /* [CP] Check Pods Manifest.lock */,
F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */,
3E6CC34F1CF2A94B00E00A70 /* Sources */,
3E6CC3501CF2A94B00E00A70 /* Frameworks */,
@ -389,7 +392,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 3E6CC3801CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooTests" */;
buildPhases = (
2A9BA63E4CE4638416B6A19E /* 📦 Check Pods Manifest.lock */,
2A9BA63E4CE4638416B6A19E /* [CP] Check Pods Manifest.lock */,
9F58E69456F56F20E6643056 /* [CP] Check Pods Manifest.lock */,
3E6CC3651CF2A94B00E00A70 /* Sources */,
3E6CC3661CF2A94B00E00A70 /* Frameworks */,
@ -413,7 +416,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 3E6CC3831CF2A94B00E00A70 /* Build configuration list for PBXNativeTarget "VendooUITests" */;
buildPhases = (
BCA592620202EE5EBFCD3DCA /* 📦 Check Pods Manifest.lock */,
BCA592620202EE5EBFCD3DCA /* [CP] Check Pods Manifest.lock */,
99EF583910BFA3B053CE8591 /* [CP] Check Pods Manifest.lock */,
3E6CC3701CF2A94B00E00A70 /* Sources */,
3E6CC3711CF2A94B00E00A70 /* Frameworks */,
@ -535,14 +538,14 @@
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo/Pods-Vendoo-resources.sh\"\n";
showEnvVarsInLog = 0;
};
2A9BA63E4CE4638416B6A19E /* 📦 Check Pods Manifest.lock */ = {
2A9BA63E4CE4638416B6A19E /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "📦 Check Pods Manifest.lock";
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
@ -577,7 +580,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
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;
};
7A9D276114F95F89DAFE1AF3 /* 📦 Embed Pods Frameworks */ = {
@ -610,14 +613,14 @@
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Vendoo-VendooUITests/Pods-Vendoo-VendooUITests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
8D532FDF55F208776F1284EF /* 📦 Check Pods Manifest.lock */ = {
8D532FDF55F208776F1284EF /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "📦 Check Pods Manifest.lock";
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
@ -697,17 +700,17 @@
);
runOnlyForDeploymentPostprocessing = 0;
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;
};
BCA592620202EE5EBFCD3DCA /* 📦 Check Pods Manifest.lock */ = {
BCA592620202EE5EBFCD3DCA /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "📦 Check Pods Manifest.lock";
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
@ -727,7 +730,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
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;
};
F467CC8AF77423C2B3AAB223 /* [CP] Check Pods Manifest.lock */ = {
@ -758,6 +761,7 @@
3E1AA4351D0DD173005FCCBB /* SettingsViewController.swift in Sources */,
3E0F76FC1D01B2D7004A0159 /* Listing.swift in Sources */,
3E6CC3571CF2A94B00E00A70 /* AppDelegate.swift in Sources */,
B6FD38171D720540008FB41E /* QuerySigner.swift in Sources */,
3EC3251E1CF734C100626C48 /* NetworksTableViewController.swift in Sources */,
3EC325201CF7C3AB00626C48 /* NetworkTableViewCell.swift in Sources */,
3EC325261CF7E90000626C48 /* FacebookGraphAPIManager.swift in Sources */,
@ -924,9 +928,27 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
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/**\"";
INFOPLIST_FILE = Vendoo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1010,7 +1032,9 @@
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SDKROOT = iphoneos;
SWIFT_DISABLE_SAFETY_CHECKS = NO;
SWIFT_INCLUDE_PATHS = "";
"SWIFT_INCLUDE_PATHS[arch=*]" = "";
SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h";
USER_HEADER_SEARCH_PATHS = "\"Vendoo/**\" \"Pods/**\"";
VALID_ARCHS = "arm64 armv7 armv7s";
@ -1023,9 +1047,27 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
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/**\"";
INFOPLIST_FILE = Vendoo/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1109,6 +1151,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SDKROOT = iphoneos;
SWIFT_DISABLE_SAFETY_CHECKS = NO;
SWIFT_INCLUDE_PATHS = "";
SWIFT_OBJC_BRIDGING_HEADER = "Vendoo/Vendoo-Bridging-Header.h";
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
#import <CommonCrypto/CommonHMAC.h>
//#import "EBayTradingServiceClient.h"
#endif /* Vendoo_Bridging_Header_h */